lmsensors 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6e1c703203fcebc6433c02baeb8e27d25cdc94acd25937c1a22291fec0b7031
4
- data.tar.gz: 8cb6984cff4359a059566c16f4c7674cf170a9a4564ccc848922da6825b64692
3
+ metadata.gz: 858f04b62fbb7681a9c3359a9a896b2000ef7ed46ccfd1c2c8ecb18ed80fe3e8
4
+ data.tar.gz: b1ece2b715f45c8b0a31a750d618bf8d98fcee82981e36238054797296436e19
5
5
  SHA512:
6
- metadata.gz: c90e178a106a429a89f887c960568424af6860a834b441dc3292ca5225fa775a42d25d78a8cf7c5f9b4bbe18fe02af35843bfaa636d4326a22631660bd77eb84
7
- data.tar.gz: 63a5335b4c7c4814162591921771935b6c17f4bdb5dbb699375f693cff88a622734b5f71084380432d0c95db1fd563878b3513fa56c921e7d8582638295c2b14
6
+ metadata.gz: bd44fd770fddaad0dbb16c386b60ad0834151c93660d41b58fc0859c1f9cbba127633558d3801e4c29adddf0639e0735a61a8b27b05b203a00063d1614e30069
7
+ data.tar.gz: f494c372bba145664b5cad4e8f04ab98586ae6104c5e0534409b5afd8f5813d2822a5d03c5e5797e94152ad034b9ba8e87ed7cb4e8ff8584a88be4362d64addb
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
1
  ### CHANGELOG -- (Ruby LmSensors) ###
2
- 1) 0.1.0, unreleased: 2021-May-26 -- Several major changes to the API access functionality. Massive levels of abstraction, per use cases noted from the Ruby programming server. [t. Edelweiss]
2
+ 1) 0.1.0, unreleased: 2021-May-26 -- Several major changes to the API access functionality. Massive levels of abstraction, per use cases noted from the Ruby programming server. [t. Edelweiss]
3
+ 1) 0.1.1, [CRITICAL PATCH] immediate pre-release: 2021-Jul-22 -- **CRITICAL PATCH (but does not change interface) -- please read** ``changes/0.1.1-critical.md`` **for information.** [t. Edelweiss]
4
+ 1) 0.1.1, immediate pre-release: 2021-Jul-22 -- The default formatting has been fixed, because some sensors do not report the values requested. As such, they will not output a formatted value, if one does not exist -- this came to me on testing with my NAS, where the iGPU on my Ryzen APU does not report voltage, but as "N/A", so it shows as ``nil`` to Ruby. [t. Edelweiss]
5
+ 1) 0.1.1, immediate pre-release: 2021-Jul-22 -- Fixed the README, as there was a typo. Also added the necessary above-mentioned critical change file. [t. Edelweiss]
data/README.md CHANGED
@@ -52,7 +52,7 @@ s.reset_fmap # Reset it back to the default
52
52
  # Sensor object to sobj.
53
53
  sobj = items[:idx]
54
54
  sobj.name # Name of Sensor
55
- sobj.adapater # Adapter of Sensor
55
+ sobj.adapter # Adapter of Sensor
56
56
  sobj.path # Path of Sensor
57
57
  sobj.info # Return the name, adapter, and path of a Sensor
58
58
  sobj.read # Raw data from the :stat part of the Sensor
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # Rakefile
2
+ require "rake/extensiontask"
3
+
4
+ # Build the LmSensors extension
5
+ Rake::ExtensionTask.new "lmsensors_base" do |ext|
6
+ ext.lib_dir = "ext/lmsensors_base"
7
+ ext.source_pattern = "*.{c,h}"
8
+ end # End build on LmSensors
@@ -6,4 +6,4 @@ $LFLAGS = '-lsensors'
6
6
  $FLAGS = 'clean'
7
7
  have_library("sensors")
8
8
  have_header("sensors/sensors.h")
9
- create_makefile("lmsensors_base/lmsensors_base")
9
+ create_makefile("lmsensors_base")
@@ -0,0 +1,315 @@
1
+ // ext/lmsensors_base/lmsensors_base.c
2
+ /* Last backed-up version: < 2021-May-21 @ 22:18:35 */
3
+ #include "lmsensors_base.h"
4
+
5
+ #define LMSLOADER sensors_obj* sensor; TypedData_Get_Struct(self, sensors_obj, &sensors_type, sensor);
6
+
7
+ #define LMSVALIDATE if (!LMS_OPEN) {\
8
+ return rb_str_new2(\
9
+ "ERROR: Sensors were not configured! Run `LmSensors.init [filename|nil]`"); }
10
+
11
+ // ---------------------------
12
+ // LMSENSORS MODULE METHODS BELOW
13
+ // ---------------------------
14
+
15
+ /*
16
+ * sensors_init works ACROSS different sensor objects and
17
+ * should, therefore, be handled by the module.
18
+ */
19
+ VALUE lmsensors_init(VALUE self, VALUE filename) {
20
+ // First, check if the sensors were already initialized
21
+ if (LMS_OPEN) {
22
+ return LMS_OPEN;
23
+ } // End init check
24
+
25
+ // Inheriting class should override this with either NULL of value
26
+ FILE *input = NULL;
27
+ // If no file is chosen, just pass NULL -- usually is NULL
28
+ if (RB_TYPE_P(filename, T_STRING)) {
29
+ FILE *input = fopen(StringValueCStr(filename), "r");
30
+ } // Otherwise, don't try to open, leave NULL
31
+
32
+ int err = 0; // Errors are stored here
33
+ err = sensors_init(input);
34
+ if (err) { return LMS_OPEN; } // There was an error -- return Qfalse
35
+ else {
36
+ LMS_OPEN = Qtrue;
37
+ return LMS_OPEN;
38
+ } // No error -- initialized
39
+ } // End module init
40
+
41
+ /*
42
+ * Document-method: pro_cleanup
43
+ *
44
+ * (LmSensors::SensorsBase lmsensors_cleanup)
45
+ *
46
+ * Cleans up the resources used by the LmSensors module
47
+ */
48
+ // Cleanup sensors
49
+ VALUE lmsensors_cleanup() {
50
+ LMS_OPEN = Qfalse;
51
+ sensors_cleanup();
52
+ return LMS_OPEN;
53
+ } // End module cleanup
54
+
55
+ // ---------------------------
56
+ // SENSORS METHODS BELOW
57
+ // ---------------------------
58
+
59
+ /*
60
+ * The sensors_obj struct stores
61
+ * iterable constant fields to be used
62
+ * when accessing available chips, as well
63
+ * as their features and subfeatures.
64
+ *
65
+ * Despite being const, they are actually altered by
66
+ * pointer to their internal structure, as per the
67
+ * lmsensors API.
68
+ *
69
+ * The previous chip_name_str was abstracted to the Ruby side.
70
+ */
71
+ typedef struct {
72
+ const sensors_chip_name *chip_ptr;
73
+ const sensors_feature *feat_ptr;
74
+ const sensors_subfeature *subfeat_ptr;
75
+ } sensors_obj; // End sensors object struct
76
+
77
+ // Free the data in the sensors object
78
+ void sensors_free(void* data) {
79
+ free(data);
80
+ } // End sensors free
81
+
82
+ // Get the size of the sensors object
83
+ size_t sensors_size(const void* data) {
84
+ return sizeof(data);
85
+ } // End size getter
86
+
87
+ // Encapsulate the sensors object for use with
88
+ // Ruby's side of the code
89
+ static const rb_data_type_t sensors_type = {
90
+ .wrap_struct_name = "sensors_obj",
91
+ .function = {
92
+ .dmark = NULL,
93
+ .dfree = sensors_free,
94
+ .dsize = sensors_size,
95
+ },
96
+ .data = NULL,
97
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
98
+ }; // End encapsulation
99
+
100
+ // Allocate space for the object
101
+ VALUE sensors_obj_alloc(VALUE self) {
102
+ // Allocate memory for object
103
+ sensors_obj* sensor = malloc(sizeof(sensors_obj));
104
+ // Wrap it within a sensors type struct
105
+ return TypedData_Wrap_Struct(self, &sensors_type, sensor);
106
+ } // End memory allocation
107
+
108
+ // Constructor
109
+ VALUE method_sensors_initialize(VALUE self) {
110
+ // Create the pointers
111
+ sensors_chip_name *chip;
112
+ sensors_feature *feat;
113
+ sensors_subfeature *subfeat;
114
+
115
+ // Attach them to struct
116
+ sensors_obj s = {
117
+ .chip_ptr = chip,
118
+ .feat_ptr = feat,
119
+ .subfeat_ptr = subfeat,
120
+ };
121
+
122
+ LMSLOADER; // Shorthand load sensor
123
+ *sensor = s; // Bind the struct
124
+ return self;
125
+ } // End constructor
126
+
127
+ /*
128
+ * Get the subfeature data for each chip's features.
129
+ */
130
+ VALUE method_sensors_get_subfeatures(VALUE self) {
131
+ LMSLOADER; // Shorthand load sensor
132
+ LMSVALIDATE; // Shorthand early return, if not loaded
133
+ int snr = 0;
134
+ int err = 0;
135
+ double value;
136
+ VALUE subfeatures = rb_hash_new();
137
+ // On Ruby side, will determine feature unit type
138
+ // from the type.
139
+ rb_hash_aset(subfeatures, rb_id2sym(rb_intern("type")),
140
+ INT2NUM(sensor->feat_ptr->type));
141
+
142
+ // Loop through all the features
143
+ while ((sensor->subfeat_ptr = sensors_get_all_subfeatures(
144
+ sensor->chip_ptr, sensor->feat_ptr, &snr))) {
145
+ // Set the core values for the card, such as ID
146
+ VALUE sf = rb_hash_new();
147
+
148
+ VALUE sf_name = rb_str_new2(sensor->subfeat_ptr->name);
149
+
150
+ // Set the main keys
151
+ // Name of the subfeature
152
+ rb_hash_aset(sf, rb_id2sym(rb_intern("name")), sf_name);
153
+ // This is included, because it will usually be put in
154
+ // the subfeature, anyway, and it's faster to do in C
155
+ rb_hash_aset(sf, rb_id2sym(rb_intern("type")),
156
+ INT2NUM(sensor->feat_ptr->type));
157
+ // This is the subfeature type
158
+ rb_hash_aset(sf, rb_id2sym(rb_intern("subtype")),
159
+ INT2NUM(sensor->subfeat_ptr->type));
160
+ // Number of the subfeature
161
+ rb_hash_aset(sf, rb_id2sym(rb_intern("number")),
162
+ INT2NUM(sensor->subfeat_ptr->number));
163
+ // Number of the feature the subfeature is mapped to
164
+ rb_hash_aset(sf, rb_id2sym(rb_intern("mapping")),
165
+ INT2NUM(sensor->subfeat_ptr->mapping));
166
+ // RWX flags
167
+ rb_hash_aset(sf, rb_id2sym(rb_intern("flags")),
168
+ INT2NUM(sensor->subfeat_ptr->flags));
169
+
170
+ // Set the value, if it can be found
171
+ err = sensors_get_value(sensor->chip_ptr, (snr - 1), &value);
172
+ if (!err) {
173
+ rb_hash_aset(sf, rb_id2sym(rb_intern("value")),
174
+ DBL2NUM(value));
175
+ } // End value setter
176
+
177
+ // Attach the individual subfeature
178
+ rb_hash_aset(subfeatures, rb_id2sym(rb_intern(StringValueCStr(sf_name))), sf);
179
+ } // End feature loop
180
+ return subfeatures;
181
+ } // End subfeatures getter
182
+
183
+ /*
184
+ * Get a list of features for a chip.
185
+ */
186
+ VALUE method_sensors_get_features(VALUE self) {
187
+ LMSLOADER; // Shorthand load sensor
188
+ LMSVALIDATE; // Shorthand early return, if not loaded
189
+ int nr = 0;
190
+ VALUE features = rb_hash_new();
191
+
192
+ // Loop through all the features
193
+ while ((sensor->feat_ptr = sensors_get_features(sensor->chip_ptr, &nr))) {
194
+ char *label = sensors_get_label(sensor->chip_ptr, sensor->feat_ptr);
195
+ rb_hash_aset(features, rb_id2sym(rb_intern(label)),
196
+ method_sensors_get_subfeatures(self));
197
+ free(label);
198
+ } // End feature loop
199
+
200
+ return features;
201
+ } // End features getter
202
+
203
+ /*
204
+ * Enumerate all the chips that can be read from.
205
+ *
206
+ * If a chip name is set, only read chips of that type.
207
+ *
208
+ * If show_data is true, stat each chip of that type.
209
+ *
210
+ * The different way to call this should be abstracted
211
+ * into the Ruby side wrapping this.
212
+ */
213
+ VALUE method_sensors_enumerate_chips(VALUE self, VALUE show_data, VALUE name) {
214
+ LMSLOADER; // Shorthand load sensor
215
+ int chip_nr = 0;
216
+ int cnt = 0;
217
+ int err = 0;
218
+ int success = 0;
219
+
220
+ // Create temporary buffer for data
221
+ char buffer[BUFSIZE];
222
+ size_t size = BUFSIZE;
223
+
224
+ LMSVALIDATE; // Shorthand early return, if not loaded
225
+
226
+ // Intermediary chip item
227
+ sensors_chip_name chip_raw;
228
+ const sensors_chip_name *chip = NULL;
229
+
230
+ if (RB_TYPE_P(name, T_STRING)) {
231
+ err = sensors_parse_chip_name(StringValueCStr(name), &chip_raw);
232
+ if (err) { return rb_str_new2("Failed to load requested chip"); }
233
+ else { chip = &chip_raw; }
234
+ } else { chip = sensor->chip_ptr; }
235
+
236
+ // If not early return, sensors are valid
237
+ VALUE data = rb_hash_new();
238
+ while ((sensor->chip_ptr = sensors_get_detected_chips(chip, &chip_nr))) {
239
+ // Make sure the chip data can be collected
240
+ err = sensors_do_chip_sets(sensor->chip_ptr);
241
+ if (err) { // If anything but 0, it can't load
242
+ rb_hash_aset(data, rb_id2sym(rb_intern("fatal_err")), rb_str_new2(
243
+ "Cannot load chip sets. Have you already done 'sensors-detect?'"));
244
+ break;
245
+ } else {
246
+ VALUE idx = rb_sprintf("item%d", cnt);
247
+ const char *adapter = sensors_get_adapter_name(&sensor->chip_ptr->bus);
248
+ success = sensors_snprintf_chip_name(buffer, size, sensor->chip_ptr);
249
+ if (success > 0) {
250
+ // Create a new chip entry
251
+ VALUE curr_chip = rb_hash_new();
252
+ rb_hash_aset(curr_chip, rb_id2sym(rb_intern("adapter")),
253
+ rb_str_new2(adapter)); // Attach the adapter
254
+ // Attach the name of the chip
255
+ rb_hash_aset(curr_chip, rb_id2sym(rb_intern("name")), rb_str_new2(buffer));
256
+ // Get the chip path
257
+ VALUE path = rb_str_new2(sensor->chip_ptr->path);
258
+ rb_hash_aset(curr_chip, rb_id2sym(rb_intern("path")), path);
259
+
260
+ /*
261
+ * Stat the features for the card, if set
262
+ * Had to double-check against NIL, b/c doesn't
263
+ * fail the same way as in Ruby.
264
+ */
265
+ if (show_data && !NIL_P(show_data)) {
266
+ rb_hash_aset(curr_chip, rb_id2sym(rb_intern("stat")),
267
+ method_sensors_get_features(self)); }
268
+
269
+ // Add the chip entry to the list
270
+ rb_hash_aset(data, path, curr_chip);
271
+ } else {
272
+ rb_hash_aset(data, rb_id2sym(rb_intern("chip_error")), idx);
273
+ break;
274
+ }
275
+ }
276
+ cnt++; // Update the count of available chips
277
+ }
278
+ chip = NULL; // Disconnect the chip placeholder
279
+ return data;
280
+ } // End enumerate method
281
+
282
+ /*
283
+ * Initialize the LmSensors wrapper
284
+ */
285
+ void Init_lmsensors_base() {
286
+ LmSensors = rb_define_module("LmSensors"); // Module
287
+
288
+ /*
289
+ * Document-class: LmSensors::SensorsBase
290
+ *
291
+ * This is an abstract representation of a sensor chip struct used
292
+ * by the lm-sensors library (https://github.com/lm-sensors/lm-sensors).
293
+ *
294
+ * This class directly interacts with the C-side of the code, and it should
295
+ * not be instantiated on its own. It is abstracted in LmSensors::AbsSensor
296
+ * and its subclasses. If you wish to used this, you should inherit from
297
+ * the AbsSensor class.
298
+ */
299
+ Sensors = rb_define_class_under(LmSensors, "SensorsBase", rb_cData); // Main class
300
+
301
+ // Define the globals
302
+ VALUE dec = declare_globals(LmSensors);
303
+ rb_global_variable(&LMS_OPEN);
304
+
305
+ // Module methods
306
+ rb_define_module_function(LmSensors, "pro_init", lmsensors_init, 1);
307
+ rb_define_module_function(LmSensors, "pro_cleanup", lmsensors_cleanup, 0);
308
+
309
+ // Sensors methods
310
+ rb_define_alloc_func(Sensors, sensors_obj_alloc);
311
+ rb_define_protected_method(Sensors, "pro_initialize", method_sensors_initialize, 0);
312
+ rb_define_protected_method(Sensors, "pro_enum", method_sensors_enumerate_chips, 2);
313
+ rb_define_protected_method(Sensors, "pro_features", method_sensors_get_features, 0);
314
+ rb_define_protected_method(Sensors, "pro_subfeatures", method_sensors_get_subfeatures, 0);
315
+ } // End module and class initialization
@@ -0,0 +1,271 @@
1
+ // ext/lmsensors_base/lmsensors_base.h
2
+ #include <ruby.h>
3
+ #include <stdbool.h>
4
+ #include <string.h>
5
+ #include <sensors/sensors.h>
6
+
7
+ #define BUFSIZE 1024
8
+
9
+ VALUE LmSensors = Qnil;
10
+ VALUE Sensors = Qnil;
11
+ VALUE LMS_OPEN = Qfalse;
12
+
13
+ /*
14
+ * Declare all the global mapping constants
15
+ */
16
+ VALUE declare_globals(VALUE mod) {
17
+ // Map-exporting constants
18
+ /* Voltage input */
19
+ rb_define_const(mod, "SF_IN", INT2NUM(SENSORS_FEATURE_IN));
20
+ /* Fan speeds in RPM */
21
+ rb_define_const(mod, "SF_FAN", INT2NUM(SENSORS_FEATURE_FAN));
22
+ /* Temperature in degrees Celsius */
23
+ rb_define_const(mod, "SF_TEMP", INT2NUM(SENSORS_FEATURE_TEMP));
24
+ /* Power (Watts) */
25
+ rb_define_const(mod, "SF_POWER", INT2NUM(SENSORS_FEATURE_POWER));
26
+ /* Energy (Joules) */
27
+ rb_define_const(mod, "SF_ENERGY", INT2NUM(SENSORS_FEATURE_ENERGY));
28
+ /* Current (Amps) */
29
+ rb_define_const(mod, "SF_CURR", INT2NUM(SENSORS_FEATURE_CURR));
30
+ /* Relative humidity (% RH) */
31
+ rb_define_const(mod, "SF_HUMIDITY", INT2NUM(SENSORS_FEATURE_HUMIDITY));
32
+ /* Video type (also measured in Volts) */
33
+ rb_define_const(mod, "SF_VID", INT2NUM(SENSORS_FEATURE_VID));
34
+ /* Intrusion alarm for the case */
35
+ rb_define_const(mod, "SF_INTRUSION", INT2NUM(SENSORS_FEATURE_INTRUSION));
36
+ /* Whether case beeper / pcspkr is enabled */
37
+ rb_define_const(mod, "SF_BEEP_ENABLE", INT2NUM(SENSORS_FEATURE_BEEP_ENABLE));
38
+ /* Unknown feature placeholder */
39
+ rb_define_const(mod, "SF_UNKNOWN", INT2NUM(SENSORS_FEATURE_UNKNOWN));
40
+
41
+ // Unclear features
42
+ /* SENSORS_FEATURE_MAX_MAIN */
43
+ rb_define_const(mod, "SF_MAX_MAIN", INT2NUM(SENSORS_FEATURE_MAX_MAIN));
44
+ /* SENSORS_FEATURE_MAX_OTHER */
45
+ rb_define_const(mod, "SF_MAX_OTHER", INT2NUM(SENSORS_FEATURE_MAX_OTHER));
46
+ /* SENSORS_FEATURE_MAX */
47
+ rb_define_const(mod, "SF_MAX", INT2NUM(SENSORS_FEATURE_MAX));
48
+
49
+ // Map-exporting limit types, for analysis
50
+ // ex.: critical, critical low, input, max, min
51
+ // Voltage
52
+ /* Present voltage */
53
+ rb_define_const(mod, "SSF_IN_INPUT", INT2NUM(SENSORS_SUBFEATURE_IN_INPUT));
54
+ /* Minimum allowed voltage */
55
+ rb_define_const(mod, "SSF_IN_MIN", INT2NUM(SENSORS_SUBFEATURE_IN_MIN));
56
+ /* Maximum allowed voltage */
57
+ rb_define_const(mod, "SSF_IN_MAX", INT2NUM(SENSORS_SUBFEATURE_IN_MAX));
58
+ /* Critical low voltage */
59
+ rb_define_const(mod, "SSF_IN_LCRIT", INT2NUM(SENSORS_SUBFEATURE_IN_LCRIT));
60
+ /* Critical high voltage */
61
+ rb_define_const(mod, "SSF_IN_CRIT", INT2NUM(SENSORS_SUBFEATURE_IN_CRIT));
62
+ /* Average voltage */
63
+ rb_define_const(mod, "SSF_IN_AVG", INT2NUM(SENSORS_SUBFEATURE_IN_AVERAGE));
64
+ /* Lowest detected voltage input */
65
+ rb_define_const(mod, "SSF_IN_LOW", INT2NUM(SENSORS_SUBFEATURE_IN_LOWEST));
66
+ /* Highest detected voltage input */
67
+ rb_define_const(mod, "SSF_IN_HIGH", INT2NUM(SENSORS_SUBFEATURE_IN_HIGHEST));
68
+
69
+ // Voltage alarms
70
+ /* Voltage alarm */
71
+ rb_define_const(mod, "SSF_IN_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_ALARM));
72
+ /* Voltage alarm for minimum voltage */
73
+ rb_define_const(mod, "SSF_IN_MIN_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_MIN_ALARM));
74
+ /* Voltage alarm for max voltage */
75
+ rb_define_const(mod, "SSF_IN_MAX_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_MAX_ALARM));
76
+ /* Beep for voltage alarms */
77
+ rb_define_const(mod, "SSF_IN_BEEP", INT2NUM(SENSORS_SUBFEATURE_IN_BEEP));
78
+ /* Critical low voltage alarm */
79
+ rb_define_const(mod, "SSF_IN_LCRIT_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_LCRIT_ALARM));
80
+ /* Critical high voltage alarm */
81
+ rb_define_const(mod, "SSF_IN_CRIT_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_CRIT_ALARM));
82
+
83
+ // Current
84
+ /* Present current input */
85
+ rb_define_const(mod, "SSF_CURR_INPUT", INT2NUM(SENSORS_SUBFEATURE_CURR_INPUT));
86
+ /* Minimum allowed current */
87
+ rb_define_const(mod, "SSF_CURR_MIN", INT2NUM(SENSORS_SUBFEATURE_CURR_MIN));
88
+ /* Maximum allowed current */
89
+ rb_define_const(mod, "SSF_CURR_MAX", INT2NUM(SENSORS_SUBFEATURE_CURR_MAX));
90
+ /* Critical low current */
91
+ rb_define_const(mod, "SSF_CURR_LCRIT", INT2NUM(SENSORS_SUBFEATURE_CURR_LCRIT));
92
+ /* Critical high current */
93
+ rb_define_const(mod, "SSF_CURR_CRIT", INT2NUM(SENSORS_SUBFEATURE_CURR_CRIT));
94
+ /* Average current */
95
+ rb_define_const(mod, "SSF_CURR_AVG",INT2NUM(SENSORS_SUBFEATURE_CURR_AVERAGE));
96
+ /* Lowest current detected */
97
+ rb_define_const(mod, "SSF_CURR_LOW", INT2NUM(SENSORS_SUBFEATURE_CURR_LOWEST));
98
+ /* Highest current detected */
99
+ rb_define_const(mod, "SSF_CURR_HIGH", INT2NUM(SENSORS_SUBFEATURE_CURR_HIGHEST));
100
+
101
+ // Current alarms
102
+ /* Current alarm */
103
+ rb_define_const(mod, "SSF_CURR_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_ALARM));
104
+ /* Current alarm for minimum current */
105
+ rb_define_const(mod, "SSF_CURR_MIN_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_MIN_ALARM));
106
+ /* Current alarm for max current */
107
+ rb_define_const(mod, "SSF_CURR_MAX_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_MAX_ALARM));
108
+ /* Beep for current alarms */
109
+ rb_define_const(mod, "SSF_CURR_BEEP", INT2NUM(SENSORS_SUBFEATURE_IN_BEEP));
110
+ /* Critical low current alarm */
111
+ rb_define_const(mod, "SSF_CURR_LCRIT_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_LCRIT_ALARM));
112
+ /* Critical high current alarm */
113
+ rb_define_const(mod, "SSF_CURR_CRIT_ALARM", INT2NUM(SENSORS_SUBFEATURE_IN_CRIT_ALARM));
114
+
115
+ // Power
116
+ /* Average power */
117
+ rb_define_const(mod, "SSF_POWER_AVG", INT2NUM(SENSORS_SUBFEATURE_POWER_AVERAGE));
118
+ rb_define_const(mod, "SSF_POWER_AVG_HIGH",
119
+ INT2NUM(SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST));
120
+ rb_define_const(mod, "SSF_POWER_AVG_LOW",
121
+ INT2NUM(SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST));
122
+ /*
123
+ * Present power input, but this seems to be usually handled by
124
+ * SSF_POWER_AVG, at least for my devices.
125
+ */
126
+ rb_define_const(mod, "SSF_POWER_INPUT", INT2NUM(SENSORS_SUBFEATURE_POWER_INPUT));
127
+ /* Highest detected power input */
128
+ rb_define_const(mod, "SSF_POWER_INPUT_HIGH",
129
+ INT2NUM(SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST));
130
+ /* Lowest detected power input */
131
+ rb_define_const(mod, "SSF_POWER_INPUT_LOW",
132
+ INT2NUM(SENSORS_SUBFEATURE_POWER_INPUT_LOWEST));
133
+ /* User- or system- defined limit on power consumption */
134
+ rb_define_const(mod, "SSF_POWER_CAP", INT2NUM(SENSORS_SUBFEATURE_POWER_CAP));
135
+ rb_define_const(mod, "SSF_POWER_CAP_HYST",
136
+ INT2NUM(SENSORS_SUBFEATURE_POWER_CAP_HYST));
137
+ /* Power maximum usage level */
138
+ rb_define_const(mod, "SSF_POWER_MAX", INT2NUM(SENSORS_SUBFEATURE_POWER_MAX));
139
+ /* Power critical usage level */
140
+ rb_define_const(mod, "SSF_POWER_CRIT", INT2NUM(SENSORS_SUBFEATURE_POWER_CRIT));
141
+ /* Power minimum usage level */
142
+ rb_define_const(mod, "SSF_POWER_MIN", INT2NUM(SENSORS_SUBFEATURE_POWER_MIN));
143
+ /* Power critical low level */
144
+ rb_define_const(mod, "SSF_POWER_LCRIT", INT2NUM(SENSORS_SUBFEATURE_POWER_LCRIT));
145
+ /* Interval used by this power sensor to generate averages */
146
+ rb_define_const(mod, "SSF_POWER_AVG_INTERVAL",
147
+ INT2NUM(SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL));
148
+
149
+ // Power alarms
150
+ /* Alarm for power */
151
+ rb_define_const(mod, "SSF_POWER_ALARM",
152
+ INT2NUM(SENSORS_SUBFEATURE_POWER_ALARM));
153
+ /* Alarm if power is approaching the defined cap */
154
+ rb_define_const(mod, "SSF_POWER_CAP_ALARM",
155
+ INT2NUM(SENSORS_SUBFEATURE_POWER_CAP_ALARM));
156
+ /* Alarm if power usage is nearing max */
157
+ rb_define_const(mod, "SSF_POWER_MAX_ALARM",
158
+ INT2NUM(SENSORS_SUBFEATURE_POWER_MAX_ALARM));
159
+ /* Alarm if power usage is critical */
160
+ rb_define_const(mod, "SSF_POWER_CRIT_ALARM",
161
+ INT2NUM(SENSORS_SUBFEATURE_POWER_CRIT_ALARM));
162
+ /* Alarm if power usage is too low */
163
+ rb_define_const(mod, "SSF_POWER_MIN_ALARM",
164
+ INT2NUM(SENSORS_SUBFEATURE_POWER_MIN_ALARM));
165
+ /* Alarm if power usage is nearing critical low */
166
+ rb_define_const(mod, "SSF_POWER_LCRIT_ALARM",
167
+ INT2NUM(SENSORS_SUBFEATURE_POWER_LCRIT_ALARM));
168
+
169
+ // Temps
170
+ /* Present temperature input */
171
+ rb_define_const(mod, "SSF_TEMP_INPUT", INT2NUM(SENSORS_SUBFEATURE_TEMP_INPUT));
172
+ /* Maximum temperature allowed */
173
+ rb_define_const(mod, "SSF_TEMP_MAX", INT2NUM(SENSORS_SUBFEATURE_TEMP_MAX));
174
+ rb_define_const(mod, "SSF_TEMP_MAX_HYST", INT2NUM(SENSORS_SUBFEATURE_TEMP_MAX_HYST));
175
+ /* Minimum temperature allowed */
176
+ rb_define_const(mod, "SSF_TEMP_MIN", INT2NUM(SENSORS_SUBFEATURE_TEMP_MIN));
177
+ /* Critical high temperature */
178
+ rb_define_const(mod, "SSF_TEMP_CRIT", INT2NUM(SENSORS_SUBFEATURE_TEMP_CRIT));
179
+ rb_define_const(mod, "SSF_TEMP_CRIT_HYST", INT2NUM(SENSORS_SUBFEATURE_TEMP_CRIT_HYST));
180
+ /* Critical low temperature */
181
+ rb_define_const(mod, "SSF_TEMP_LCRIT", INT2NUM(SENSORS_SUBFEATURE_TEMP_LCRIT));
182
+ /* Emergency-level high temperature */
183
+ rb_define_const(mod, "SSF_TEMP_EMERG", INT2NUM(SENSORS_SUBFEATURE_TEMP_EMERGENCY));
184
+ rb_define_const(mod, "SSF_TEMP_EMERG_HYST",
185
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST));
186
+ /* Lowest detected temperature */
187
+ rb_define_const(mod, "SSF_TEMP_LOW", INT2NUM(SENSORS_SUBFEATURE_TEMP_LOWEST));
188
+ /* Highest detected temperature */
189
+ rb_define_const(mod, "SSF_TEMP_HIGH", INT2NUM(SENSORS_SUBFEATURE_TEMP_HIGHEST));
190
+ rb_define_const(mod, "SSF_TEMP_MIN_HYST", INT2NUM(SENSORS_SUBFEATURE_TEMP_MIN_HYST));
191
+ rb_define_const(mod, "SSF_TEMP_LCRIT_HYST",
192
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_LCRIT_HYST));
193
+
194
+ // Other temp subfeatures
195
+ /* Type of the temperature feature */
196
+ rb_define_const(mod, "SSF_TEMP_TYPE", INT2NUM(SENSORS_SUBFEATURE_TEMP_TYPE));
197
+ /* Temperature feature reading offset */
198
+ rb_define_const(mod, "SSF_TEMP_OFFSET", INT2NUM(SENSORS_SUBFEATURE_TEMP_OFFSET));
199
+
200
+ // Temperature alarm and error subfeatures
201
+ /* Temperature alarm */
202
+ rb_define_const(mod, "SSF_TEMP_ALARM", INT2NUM(SENSORS_SUBFEATURE_TEMP_ALARM));
203
+ /* Alarm when temperature is nearing max */
204
+ rb_define_const(mod, "SSF_TEMP_MAX_ALARM",
205
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_MAX_ALARM));
206
+ /* Alarm when temperature is nearing min */
207
+ rb_define_const(mod, "SSF_TEMP_MIN_ALARM",
208
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_MIN_ALARM));
209
+ /* Alarm when temperature is critical */
210
+ rb_define_const(mod, "SSF_TEMP_CRIT_ALARM",
211
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_CRIT_ALARM));
212
+ /* Beep for temperature alarms */
213
+ rb_define_const(mod, "SSF_TEMP_BEEP", INT2NUM(SENSORS_SUBFEATURE_TEMP_BEEP));
214
+ /* If the temperature sensors has faulted or detected fault */
215
+ rb_define_const(mod, "SSF_TEMP_FAULT", INT2NUM(SENSORS_SUBFEATURE_TEMP_FAULT));
216
+ /* Alarm for when temperature is at emergency-level */
217
+ rb_define_const(mod, "SSF_TEMP_EMERGENCY_ALARM",
218
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_EMERGENCY_ALARM));
219
+ /* Alarm for when temperature approaches critical low */
220
+ rb_define_const(mod, "SSF_TEMP_LCRIT_ALARM",
221
+ INT2NUM(SENSORS_SUBFEATURE_TEMP_LCRIT_ALARM));
222
+
223
+ // Fans
224
+ /* Present fan input speed */
225
+ rb_define_const(mod, "SSF_FAN_INPUT", INT2NUM(SENSORS_SUBFEATURE_FAN_INPUT));
226
+ /* Minimum fan speed */
227
+ rb_define_const(mod, "SSF_FAN_MIN", INT2NUM(SENSORS_SUBFEATURE_FAN_MIN));
228
+ /* Maximum fan speed */
229
+ rb_define_const(mod, "SSF_FAN_MAX", INT2NUM(SENSORS_SUBFEATURE_FAN_MAX));
230
+
231
+ // Additional fan feature exports
232
+ /* Alarm for fan */
233
+ rb_define_const(mod, "SSF_FAN_ALARM", INT2NUM(SENSORS_SUBFEATURE_FAN_ALARM));
234
+ /* Whether fan sensor has detected fault */
235
+ rb_define_const(mod, "SSF_FAN_FAULT", INT2NUM(SENSORS_SUBFEATURE_FAN_FAULT));
236
+ rb_define_const(mod, "SSF_FAN_DIV", INT2NUM(SENSORS_SUBFEATURE_FAN_DIV));
237
+ /* Beep for fan alarms */
238
+ rb_define_const(mod, "SSF_FAN_BEEP", INT2NUM(SENSORS_SUBFEATURE_FAN_BEEP));
239
+ /* PWM / pulse settings for fan */
240
+ rb_define_const(mod, "SSF_FAN_PULSES", INT2NUM(SENSORS_SUBFEATURE_FAN_PULSES));
241
+ /* Alarm if fans approach minimum-allowed speed */
242
+ rb_define_const(mod, "SSF_FAN_MIN_ALARM", INT2NUM(SENSORS_SUBFEATURE_FAN_MIN_ALARM));
243
+ /* Alarm if fans approach maximum-allowed speed */
244
+ rb_define_const(mod, "SSF_FAN_MAX_ALARM", INT2NUM(SENSORS_SUBFEATURE_FAN_MAX_ALARM));
245
+
246
+ // Alarms
247
+ /* Intrusion alarm subtype */
248
+ rb_define_const(mod, "SSF_INTRUDE_ALARM",
249
+ INT2NUM(SENSORS_SUBFEATURE_INTRUSION_ALARM));
250
+ /* Intrusion beep subtype */
251
+ rb_define_const(mod, "SSF_INTRUDE_BEEP",
252
+ INT2NUM(SENSORS_SUBFEATURE_INTRUSION_BEEP));
253
+
254
+ // Other exports, which only have 1 subtype, exported for convenience ONLY
255
+ /* Energy input subtype */
256
+ rb_define_const(mod, "SSF_ENERGY_INPUT",
257
+ INT2NUM(SENSORS_SUBFEATURE_ENERGY_INPUT));
258
+ /* Beep enable subtype */
259
+ rb_define_const(mod, "SSF_BEEP_ENABLE",
260
+ INT2NUM(SENSORS_SUBFEATURE_BEEP_ENABLE));
261
+ /* Video input subfeature */
262
+ rb_define_const(mod, "SSF_VID", INT2NUM(SENSORS_SUBFEATURE_VID));
263
+ /* Humidity input subfeature */
264
+ rb_define_const(mod, "SSF_HUMIDITY_INPUT",
265
+ INT2NUM(SENSORS_SUBFEATURE_HUMIDITY_INPUT));
266
+ /* Currently-unknown subfeature */
267
+ rb_define_const(mod, "SSF_UNKNOWN", INT2NUM(SENSORS_SUBFEATURE_UNKNOWN));
268
+
269
+ // Return complete
270
+ return Qtrue;
271
+ }
@@ -22,7 +22,7 @@ module LmSensors
22
22
  # Only check is alarm is enabled.
23
23
  # The other option SSF_INTRUDE_BEEP
24
24
  # is not formatted in the normal sensor program
25
- if v[:subtype] == SSF_INTRUDE_ALARM then
25
+ if v[:value] and (v[:subtype] == SSF_INTRUDE_ALARM) then
26
26
  out[k] = unit.call(v[:value]) end
27
27
  end # End value mapper for alarm
28
28
  out
@@ -18,7 +18,7 @@ module LmSensors
18
18
 
19
19
  # Format the outputs
20
20
  feature.subfs.map do |k, v|
21
- out[k] = unit.call(v[:value])
21
+ if v[:value] then out[k] = unit.call(v[:value]) end
22
22
  end # End value mapper for beep
23
23
  out
24
24
  end # End default beep formatter
@@ -19,22 +19,24 @@ module LmSensors
19
19
  # Format the outputs
20
20
  # Strip each, in case the unit is empty
21
21
  feature.subfs.values.map do |v|
22
- case v[:subtype]
23
- when SSF_CURR_INPUT
24
- tmp[:input] = v[:value]
25
- out[:input] = "#{v[:value].round(2)} #{unit}".strip
26
- when SSF_CURR_MAX
27
- if v[:value] != 0 then
28
- tmp[:max] = v[:value]
29
- out[:max] = "#{v[:value].round(2)} #{unit}".strip
22
+ if v[:value] then
23
+ case v[:subtype]
24
+ when SSF_CURR_INPUT
25
+ tmp[:input] = v[:value]
26
+ out[:input] = "#{v[:value].round(2)} #{unit}".strip
27
+ when SSF_CURR_MAX
28
+ if v[:value] != 0 then
29
+ tmp[:max] = v[:value]
30
+ out[:max] = "#{v[:value].round(2)} #{unit}".strip
31
+ end
32
+ when SSF_CURR_CRIT
33
+ if v[:value] != 0 then
34
+ tmp[:crit] = v[:value]
35
+ out[:crit] = "#{v[:value].round(2)} #{unit}".strip
36
+ end
37
+ when SSF_CURR_MIN
38
+ if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
30
39
  end
31
- when SSF_CURR_CRIT
32
- if v[:value] != 0 then
33
- tmp[:crit] = v[:value]
34
- out[:crit] = "#{v[:value].round(2)} #{unit}".strip
35
- end
36
- when SSF_CURR_MIN
37
- if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
38
40
  end
39
41
  end # End value mapper for fan
40
42
 
@@ -20,15 +20,17 @@ module LmSensors
20
20
  # Format the outputs
21
21
  # Strip each, in case the unit is empty
22
22
  feature.subfs.values.map do |v|
23
- case v[:subtype]
24
- when SSF_FAN_INPUT
25
- tmp[:input] = v[:value]
26
- out[:input] = "#{v[:value]} #{unit}".strip
27
- when SSF_FAN_MAX
28
- tmp[:max] = v[:value]
29
- out[:max] = "#{v[:value]} #{unit}".strip
30
- when SSF_FAN_MIN
31
- out[:min] = "#{v[:value]} #{unit}".strip
23
+ if v[:value] then
24
+ case v[:subtype]
25
+ when SSF_FAN_INPUT
26
+ tmp[:input] = v[:value]
27
+ out[:input] = "#{v[:value]} #{unit}".strip
28
+ when SSF_FAN_MAX
29
+ tmp[:max] = v[:value]
30
+ out[:max] = "#{v[:value]} #{unit}".strip
31
+ when SSF_FAN_MIN
32
+ out[:min] = "#{v[:value]} #{unit}".strip
33
+ end
32
34
  end
33
35
  end # End value mapper for fan
34
36
 
@@ -20,7 +20,7 @@ module LmSensors
20
20
 
21
21
  # Format the outputs
22
22
  feature.subfs.map do |k, v|
23
- out[k] = "#{v[:value].round(2)}#{unit}"
23
+ if v[:value] then out[k] = "#{v[:value].round(2)}#{unit}" end
24
24
  end # End value mapper for humidity
25
25
  out
26
26
  end # End humidity proc
@@ -19,23 +19,25 @@ module LmSensors
19
19
  # Format the outputs
20
20
  # Strip each, in case the unit is empty
21
21
  feature.subfs.values.map do |v|
22
- case v[:subtype]
23
- when SSF_POWER_INPUT
24
- out[:input] = "#{v[:value].round(2)} #{unit}".strip
25
- when SSF_POWER_AVG
26
- tmp[:average] = v[:value]
27
- out[:average] = "#{v[:value].round(2)} #{unit}".strip
28
- when SSF_POWER_MAX
29
- tmp[:max] = v[:value]
30
- out[:max] = "#{v[:value].round(2)} #{unit}".strip
31
- when SSF_POWER_CRIT
32
- tmp[:crit] = v[:value]
33
- out[:crit] = "#{v[:value].round(2)} #{unit}".strip
34
- when SSF_POWER_CAP
35
- tmp[:cap] = v[:value]
36
- out[:cap] = "#{v[:value].round(2)} #{unit}".strip
37
- when SSF_POWER_MIN
38
- out[:min] = "#{v[:value].round(2)} #{unit}".strip
22
+ if v[:value] then
23
+ case v[:subtype]
24
+ when SSF_POWER_INPUT
25
+ out[:input] = "#{v[:value].round(2)} #{unit}".strip
26
+ when SSF_POWER_AVG
27
+ tmp[:average] = v[:value]
28
+ out[:average] = "#{v[:value].round(2)} #{unit}".strip
29
+ when SSF_POWER_MAX
30
+ tmp[:max] = v[:value]
31
+ out[:max] = "#{v[:value].round(2)} #{unit}".strip
32
+ when SSF_POWER_CRIT
33
+ tmp[:crit] = v[:value]
34
+ out[:crit] = "#{v[:value].round(2)} #{unit}".strip
35
+ when SSF_POWER_CAP
36
+ tmp[:cap] = v[:value]
37
+ out[:cap] = "#{v[:value].round(2)} #{unit}".strip
38
+ when SSF_POWER_MIN
39
+ out[:min] = "#{v[:value].round(2)} #{unit}".strip
40
+ end
39
41
  end
40
42
  end # End value mapper for fan
41
43
 
@@ -19,22 +19,24 @@ module LmSensors
19
19
  # Format the outputs
20
20
  # Strip each, in case the unit is empty
21
21
  feature.subfs.values.map do |v|
22
- case v[:subtype]
23
- when SSF_TEMP_INPUT
24
- tmp[:input] = v[:value]
25
- out[:input] = "#{v[:value].round(2)} #{unit}".strip
26
- when SSF_TEMP_MAX
27
- if v[:value] != 0 then
28
- tmp[:max] = v[:value]
29
- out[:max] = "#{v[:value].round(2)} #{unit}".strip
22
+ if v[:value] then
23
+ case v[:subtype]
24
+ when SSF_TEMP_INPUT
25
+ tmp[:input] = v[:value]
26
+ out[:input] = "#{v[:value].round(2)} #{unit}".strip
27
+ when SSF_TEMP_MAX
28
+ if v[:value] != 0 then
29
+ tmp[:max] = v[:value]
30
+ out[:max] = "#{v[:value].round(2)} #{unit}".strip
31
+ end
32
+ when SSF_TEMP_CRIT
33
+ if v[:value] != 0 then
34
+ tmp[:crit] = v[:value]
35
+ out[:crit] = "#{v[:value].round(2)} #{unit}".strip
36
+ end
37
+ when SSF_TEMP_MIN
38
+ if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
30
39
  end
31
- when SSF_TEMP_CRIT
32
- if v[:value] != 0 then
33
- tmp[:crit] = v[:value]
34
- out[:crit] = "#{v[:value].round(2)} #{unit}".strip
35
- end
36
- when SSF_TEMP_MIN
37
- if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
38
40
  end
39
41
  end # End value mapper for fan
40
42
 
@@ -19,22 +19,24 @@ module LmSensors
19
19
  # Format the outputs
20
20
  # Strip each, in case the unit is empty
21
21
  feature.subfs.values.map do |v|
22
- case v[:subtype]
23
- when SSF_IN_INPUT
24
- tmp[:input] = v[:value]
25
- out[:input] = "#{v[:value].round(2)} #{unit}".strip
26
- when SSF_IN_MAX
27
- if v[:value] != 0 then
28
- tmp[:max] = v[:value]
29
- out[:max] = "#{v[:value].round(2)} #{unit}".strip
22
+ if v[:value] then
23
+ case v[:subtype]
24
+ when SSF_IN_INPUT
25
+ tmp[:input] = v[:value]
26
+ out[:input] = "#{v[:value].round(2)} #{unit}".strip
27
+ when SSF_IN_MAX
28
+ if v[:value] != 0 then
29
+ tmp[:max] = v[:value]
30
+ out[:max] = "#{v[:value].round(2)} #{unit}".strip
31
+ end
32
+ when SSF_IN_CRIT
33
+ if v[:value] != 0 then
34
+ tmp[:crit] = v[:value]
35
+ out[:crit] = "#{v[:value].round(2)} #{unit}".strip
36
+ end
37
+ when SSF_IN_MIN
38
+ if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
30
39
  end
31
- when SSF_IN_CRIT
32
- if v[:value] != 0 then
33
- tmp[:crit] = v[:value]
34
- out[:crit] = "#{v[:value].round(2)} #{unit}".strip
35
- end
36
- when SSF_IN_MIN
37
- if v[:value] != 0 then out[:min] = "#{v[:value].round(2)} #{unit}".strip end
38
40
  end
39
41
  end # End value mapper for fan
40
42
 
@@ -1,7 +1,7 @@
1
1
  # lib/lmsensors/lm_constants.rb
2
2
 
3
3
  # Require the base implementation
4
- require_relative "../lmsensors_base/lmsensors_base"
4
+ require "lmsensors_base.so"
5
5
 
6
6
  # :nodoc: Constants for the LmSensors module
7
7
  module LmSensors
@@ -1,7 +1,7 @@
1
1
  # lib/lmsensors/lmsensors.rb
2
2
 
3
3
  # Base requires
4
- require_relative "../lmsensors_base/lmsensors_base"
4
+ require "lmsensors_base.so"
5
5
  require_relative "./lm_constants"
6
6
 
7
7
  require_relative "./sensors/sensorspawner"
@@ -1,7 +1,7 @@
1
1
  # lib/lmsensors/sensors/abssensors.rb
2
2
 
3
3
  # Requires
4
- require_relative "../../lmsensors_base/lmsensors_base"
4
+ require "lmsensors_base.so"
5
5
  require_relative "../lm_constants"
6
6
  require_relative "../feature"
7
7
 
@@ -4,5 +4,5 @@
4
4
  module LmSensors
5
5
  ##
6
6
  # The current version
7
- VERSION = "0.1.0"
7
+ VERSION = "0.1.1"
8
8
  end # End appending of version data
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lmsensors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edelweiss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-01 00:00:00.000000000 Z
11
+ date: 2021-07-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "Wrapper for the ``lm-sensors`` library, which provides the programs,
14
14
  \n``sensors`` and ``sensors-detect``, for Linux systems. This library \nand its
@@ -30,7 +30,10 @@ files:
30
30
  - FMAPPER.md
31
31
  - LICENSE.txt
32
32
  - README.md
33
+ - Rakefile
33
34
  - ext/lmsensors_base/extconf.rb
35
+ - ext/lmsensors_base/lmsensors_base.c
36
+ - ext/lmsensors_base/lmsensors_base.h
34
37
  - lib/lmsensors.rb
35
38
  - lib/lmsensors/feature.rb
36
39
  - lib/lmsensors/features/abs_feature.rb
@@ -48,7 +51,6 @@ files:
48
51
  - lib/lmsensors/sensors/sensor.rb
49
52
  - lib/lmsensors/sensors/sensorspawner.rb
50
53
  - lib/lmsensors/version.rb
51
- - lib/lmsensors_base/lmsensors_base.so
52
54
  homepage: https://github.com/KleineEdelweiss/lmsensors_rb
53
55
  licenses:
54
56
  - LGPL-3.0
Binary file