phidgets 0.1.3 → 1.0.0

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.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +3 -0
  3. data/README.rdoc +32 -43
  4. data/Rakefile +4 -2
  5. data/bin/phidget +18 -72
  6. data/ext/phidgets/extconf.rb +5 -8
  7. data/ext/phidgets/phidgets.c +708 -173
  8. data/ext/phidgets/phidgets.h +54 -35
  9. data/ext/phidgets/phidgets_accelerometer.c +193 -109
  10. data/ext/phidgets/phidgets_bldc_motor.c +529 -0
  11. data/ext/phidgets/phidgets_capacitive_touch.c +302 -0
  12. data/ext/phidgets/phidgets_common.c +570 -315
  13. data/ext/phidgets/phidgets_current_input.c +229 -0
  14. data/ext/phidgets/phidgets_dc_motor.c +562 -0
  15. data/ext/phidgets/phidgets_dictionary.c +154 -213
  16. data/ext/phidgets/phidgets_digital_input.c +127 -0
  17. data/ext/phidgets/phidgets_digital_output.c +288 -0
  18. data/ext/phidgets/phidgets_distance_sensor.c +295 -0
  19. data/ext/phidgets/phidgets_encoder.c +211 -192
  20. data/ext/phidgets/phidgets_frequency_counter.c +310 -177
  21. data/ext/phidgets/phidgets_gps.c +226 -164
  22. data/ext/phidgets/phidgets_gyroscope.c +195 -0
  23. data/ext/phidgets/phidgets_hub.c +39 -0
  24. data/ext/phidgets/phidgets_humidity_sensor.c +200 -0
  25. data/ext/phidgets/phidgets_ir.c +211 -171
  26. data/ext/phidgets/phidgets_lcd.c +512 -0
  27. data/ext/phidgets/phidgets_light_sensor.c +200 -0
  28. data/ext/phidgets/phidgets_log.c +263 -0
  29. data/ext/phidgets/phidgets_magnetometer.c +279 -0
  30. data/ext/phidgets/phidgets_manager.c +86 -297
  31. data/ext/phidgets/phidgets_motor_position_controller.c +787 -0
  32. data/ext/phidgets/phidgets_phsensor.c +200 -152
  33. data/ext/phidgets/phidgets_power_guard.c +144 -0
  34. data/ext/phidgets/phidgets_pressure_sensor.c +200 -0
  35. data/ext/phidgets/phidgets_rc_servo.c +672 -0
  36. data/ext/phidgets/phidgets_resistance_input.c +227 -0
  37. data/ext/phidgets/phidgets_rfid.c +107 -221
  38. data/ext/phidgets/phidgets_sound_sensor.c +284 -0
  39. data/ext/phidgets/phidgets_spatial.c +124 -318
  40. data/ext/phidgets/phidgets_stepper.c +457 -430
  41. data/ext/phidgets/phidgets_temp_sensor.c +223 -228
  42. data/ext/phidgets/phidgets_voltage_input.c +428 -0
  43. data/ext/phidgets/phidgets_voltage_output.c +167 -0
  44. data/ext/phidgets/phidgets_voltage_ratio_input.c +435 -0
  45. data/lib/phidgets.rb +21 -14
  46. data/lib/phidgets/accelerometer.rb +11 -15
  47. data/lib/phidgets/bldc_motor.rb +45 -0
  48. data/lib/phidgets/capacitive_touch.rb +33 -0
  49. data/lib/phidgets/common.rb +40 -69
  50. data/lib/phidgets/current_input.rb +21 -0
  51. data/lib/phidgets/dc_motor.rb +45 -0
  52. data/lib/phidgets/dictionary.rb +30 -39
  53. data/lib/phidgets/digital_input.rb +21 -0
  54. data/lib/phidgets/digital_output.rb +56 -0
  55. data/lib/phidgets/distance_sensor.rb +33 -0
  56. data/lib/phidgets/encoder.rb +1 -29
  57. data/lib/phidgets/frequency_counter.rb +23 -14
  58. data/lib/phidgets/gps.rb +34 -26
  59. data/lib/phidgets/gyroscope.rb +21 -0
  60. data/lib/phidgets/humidity_sensor.rb +21 -0
  61. data/lib/phidgets/ir.rb +34 -39
  62. data/lib/phidgets/light_sensor.rb +21 -0
  63. data/lib/phidgets/magnetometer.rb +21 -0
  64. data/lib/phidgets/manager.rb +18 -66
  65. data/lib/phidgets/motor_position_controller.rb +45 -0
  66. data/lib/phidgets/ph_sensor.rb +2 -6
  67. data/lib/phidgets/pressure_sensor.rb +21 -0
  68. data/lib/phidgets/rc_servo.rb +58 -0
  69. data/lib/phidgets/resistance_input.rb +21 -0
  70. data/lib/phidgets/rfid.rb +22 -38
  71. data/lib/phidgets/sound_sensor.rb +21 -0
  72. data/lib/phidgets/spatial.rb +11 -15
  73. data/lib/phidgets/stepper.rb +48 -50
  74. data/lib/phidgets/temperature_sensor.rb +11 -15
  75. data/lib/phidgets/version.rb +5 -0
  76. data/lib/phidgets/voltage_input.rb +34 -0
  77. data/lib/phidgets/voltage_output.rb +23 -0
  78. data/lib/phidgets/voltage_ratio_input.rb +34 -0
  79. data/phidgets.gemspec +3 -22
  80. data/test/test_accelerometer.rb +42 -23
  81. data/test/test_bldc_motor.rb +134 -0
  82. data/test/test_capacitive_touch.rb +82 -0
  83. data/test/test_common.rb +125 -108
  84. data/test/test_current_input.rb +62 -0
  85. data/test/test_dc_motor.rb +146 -0
  86. data/test/test_dictionary.rb +22 -54
  87. data/test/test_digital_input.rb +30 -0
  88. data/test/test_digital_output.rb +70 -0
  89. data/test/test_distance_sensor.rb +76 -0
  90. data/test/test_encoder.rb +45 -38
  91. data/test/test_frequency_counter.rb +71 -36
  92. data/test/test_gps.rb +29 -38
  93. data/test/test_gyroscope.rb +54 -0
  94. data/test/test_helper.rb +0 -1
  95. data/test/test_hub.rb +14 -0
  96. data/test/test_humidity_sensor.rb +58 -0
  97. data/test/test_ir.rb +34 -34
  98. data/test/test_lcd.rb +146 -0
  99. data/test/test_light_sensor.rb +58 -0
  100. data/test/test_magnetometer.rb +78 -0
  101. data/test/test_manager.rb +10 -79
  102. data/test/test_motor_control.rb +146 -108
  103. data/test/test_phidgets.rb +2 -14
  104. data/test/test_phsensor.rb +46 -34
  105. data/test/test_power_guard.rb +42 -0
  106. data/test/test_pressure_sensor.rb +58 -0
  107. data/test/test_rc_servo.rb +174 -0
  108. data/test/test_resistance_input.rb +66 -0
  109. data/test/test_rfid.rb +15 -54
  110. data/test/test_sound_sensor.rb +78 -0
  111. data/test/test_spatial.rb +19 -85
  112. data/test/test_stepper.rb +89 -98
  113. data/test/test_temp_sensor.rb +42 -47
  114. data/test/test_voltage_input.rb +102 -0
  115. data/test/test_voltage_output.rb +46 -0
  116. data/test/test_voltage_ratio_input.rb +102 -0
  117. metadata +72 -89
  118. data/ext/phidgets/phidgets_advanced_servo.c +0 -567
  119. data/ext/phidgets/phidgets_analog.c +0 -139
  120. data/ext/phidgets/phidgets_bridge.c +0 -263
  121. data/ext/phidgets/phidgets_interface_kit.c +0 -340
  122. data/ext/phidgets/phidgets_led.c +0 -178
  123. data/ext/phidgets/phidgets_motor_control.c +0 -642
  124. data/ext/phidgets/phidgets_servo.c +0 -276
  125. data/ext/phidgets/phidgets_text_lcd.c +0 -381
  126. data/ext/phidgets/phidgets_text_led.c +0 -107
  127. data/ext/phidgets/phidgets_weight_sensor.c +0 -113
  128. data/lib/phidgets/advanced_servo.rb +0 -49
  129. data/lib/phidgets/analog.rb +0 -8
  130. data/lib/phidgets/bridge.rb +0 -25
  131. data/lib/phidgets/interfacekit.rb +0 -49
  132. data/lib/phidgets/led.rb +0 -8
  133. data/lib/phidgets/motor_control.rb +0 -110
  134. data/lib/phidgets/servo.rb +0 -23
  135. data/lib/phidgets/text_lcd.rb +0 -8
  136. data/lib/phidgets/text_led.rb +0 -8
  137. data/lib/phidgets/weight_sensor.rb +0 -25
  138. data/test/test_advanced_servo.rb +0 -152
  139. data/test/test_analog.rb +0 -45
  140. data/test/test_bridge.rb +0 -77
  141. data/test/test_interfacekit.rb +0 -97
  142. data/test/test_led.rb +0 -55
  143. data/test/test_servo.rb +0 -67
  144. data/test/test_text_lcd.rb +0 -115
  145. data/test/test_text_led.rb +0 -35
  146. data/test/test_weight_sensor.rb +0 -32
@@ -0,0 +1,200 @@
1
+
2
+ #include "phidgets.h"
3
+
4
+ #define LIGHT_SENSOR_ILLUMINANCE_CHANGE_CALLBACK 0
5
+
6
+
7
+ VALUE ph_light_init(VALUE self) {
8
+ ph_data_t *ph = get_ph_data(self);
9
+ ph_raise(PhidgetLightSensor_create((PhidgetLightSensorHandle *)(&(ph->handle))));
10
+ return self;
11
+ }
12
+
13
+ VALUE ph_light_get_data_interval(VALUE self) {
14
+ return ph_get_uint(get_ph_handle(self), (phidget_get_uint_func)PhidgetLightSensor_getDataInterval);
15
+ }
16
+
17
+ VALUE ph_light_set_data_interval(VALUE self, VALUE interval) {
18
+ ph_raise(PhidgetLightSensor_setDataInterval((PhidgetLightSensorHandle)get_ph_handle(self), NUM2UINT(interval)));
19
+ return Qnil;
20
+ }
21
+
22
+ VALUE ph_light_get_min_data_interval(VALUE self) {
23
+ return ph_get_uint(get_ph_handle(self), (phidget_get_uint_func)PhidgetLightSensor_getMinDataInterval);
24
+ }
25
+
26
+ VALUE ph_light_get_max_data_interval(VALUE self) {
27
+ return ph_get_uint(get_ph_handle(self), (phidget_get_uint_func)PhidgetLightSensor_getMaxDataInterval);
28
+ }
29
+
30
+ VALUE ph_light_get_illuminance(VALUE self) {
31
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getIlluminance);
32
+ }
33
+
34
+ VALUE ph_light_get_min_illuminance(VALUE self) {
35
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getMinIlluminance);
36
+ }
37
+
38
+ VALUE ph_light_get_max_illuminance(VALUE self) {
39
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getMaxIlluminance);
40
+ }
41
+
42
+ VALUE ph_light_get_illuminance_change_trigger(VALUE self) {
43
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getIlluminanceChangeTrigger);
44
+ }
45
+
46
+ VALUE ph_light_set_illuminance_change_trigger(VALUE self, VALUE change_trigger) {
47
+ ph_raise(PhidgetLightSensor_setIlluminanceChangeTrigger((PhidgetLightSensorHandle)get_ph_handle(self), NUM2DBL(change_trigger)));
48
+ return Qnil;
49
+ }
50
+
51
+ VALUE ph_light_get_min_illuminance_change_trigger(VALUE self) {
52
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getMinIlluminanceChangeTrigger);
53
+ }
54
+
55
+ VALUE ph_light_get_max_illuminance_change_trigger(VALUE self) {
56
+ return ph_get_double(get_ph_handle(self), (phidget_get_double_func)PhidgetLightSensor_getMaxIlluminanceChangeTrigger);
57
+ }
58
+
59
+
60
+ void CCONV ph_light_on_illuminance_change(PhidgetLightSensorHandle phid, void *userPtr, double illuminance) {
61
+ ph_callback_data_t *callback_data = ((ph_callback_data_t *)userPtr);
62
+ while(sem_wait(&callback_data->handler_ready)!=0) {};
63
+ callback_data->arg1 = DBL2NUM(illuminance);
64
+ callback_data->arg2 = Qnil;
65
+ callback_data->arg3 = Qnil;
66
+ callback_data->arg4 = Qnil;
67
+ sem_post(&callback_data->callback_called);
68
+ }
69
+
70
+
71
+ VALUE ph_light_set_on_illuminance_change_handler(VALUE self, VALUE handler) {
72
+ ph_data_t *ph = get_ph_data(self);
73
+ ph_callback_data_t *callback_data = &ph->dev_callbacks[LIGHT_SENSOR_ILLUMINANCE_CHANGE_CALLBACK];
74
+ if( TYPE(handler) == T_NIL ) {
75
+ callback_data->callback = T_NIL;
76
+ callback_data->exit = true;
77
+ ph_raise(PhidgetLightSensor_setOnIlluminanceChangeHandler((PhidgetLightSensorHandle)ph->handle, NULL, (void *)NULL));
78
+ sem_post(&callback_data->callback_called);
79
+ } else {
80
+ callback_data->exit = false;
81
+ callback_data->phidget = self;
82
+ callback_data->callback = handler;
83
+ ph_raise(PhidgetLightSensor_setOnIlluminanceChangeHandler((PhidgetLightSensorHandle)ph->handle, ph_light_on_illuminance_change, (void *)callback_data));
84
+ ph_callback_thread(callback_data);
85
+ }
86
+ return Qnil;
87
+ }
88
+
89
+
90
+ void Init_light() {
91
+ VALUE ph_module = rb_const_get(rb_cObject, rb_intern("Phidgets"));
92
+ VALUE ph_common = rb_const_get(ph_module, rb_intern("Common"));
93
+ VALUE ph_light = rb_define_class_under(ph_module, "LightSensor", ph_common);
94
+
95
+ /* Document-method: new
96
+ * call-seq: new
97
+ *
98
+ * Creates a Phidget LightSensor object.
99
+ */
100
+ rb_define_method(ph_light, "initialize", ph_light_init, 0);
101
+
102
+ /* Document-method: getDataInterval
103
+ * call-seq: getDataInterval -> interval
104
+ *
105
+ * The DataInterval is the time that must elapse before the channel will fire another IlluminanceChange event.
106
+ * The data interval is bounded by MinDataInterval and MaxDataInterval.
107
+ * The timing between IlluminanceChange events can also affected by the IlluminanceChangeTrigger.
108
+ */
109
+ rb_define_method(ph_light, "getDataInterval", ph_light_get_data_interval, 0);
110
+ rb_define_alias(ph_light, "data_interval", "getDataInterval");
111
+
112
+ /* Document-method: setDataInterval
113
+ * call-seq: setDataInterval(interval)
114
+ *
115
+ * The DataInterval is the time that must elapse before the channel will fire another IlluminanceChange event.
116
+ * The data interval is bounded by MinDataInterval and MaxDataInterval.
117
+ * The timing between IlluminanceChange events can also affected by the IlluminanceChangeTrigger.
118
+ */
119
+ rb_define_method(ph_light, "setDataInterval", ph_light_set_data_interval, 1);
120
+ rb_define_alias(ph_light, "data_interval=", "setDataInterval");
121
+
122
+ /* Document-method: getMinDataInterval
123
+ * call-seq: getMinDataInterval -> interval
124
+ *
125
+ * The minimum value that DataInterval can be set to.
126
+ */
127
+ rb_define_method(ph_light, "getMinDataInterval", ph_light_get_min_data_interval, 0);
128
+ rb_define_alias(ph_light, "min_data_interval", "getMinDataInterval");
129
+
130
+ /* Document-method: getMaxDataInterval
131
+ * call-seq: getMaxDataInterval -> interval
132
+ *
133
+ * The maximum value that DataInterval can be set to.
134
+ */
135
+ rb_define_method(ph_light, "getMaxDataInterval", ph_light_get_max_data_interval, 0);
136
+ rb_define_alias(ph_light, "max_data_interval", "getMaxDataInterval");
137
+
138
+ /* Document-method: getIlluminance
139
+ * call-seq: getIlluminance -> illuminance
140
+ *
141
+ * The most recent illuminance value that the channel has reported.
142
+ * This value will always be between MinIlluminance and MaxIlluminance.
143
+ */
144
+ rb_define_method(ph_light, "getIlluminance", ph_light_get_illuminance, 0);
145
+ rb_define_alias(ph_light, "illuminance", "getIlluminance");
146
+
147
+ /* Document-method: getMinIlluminance
148
+ * call-seq: getMinIlluminance -> illuminance
149
+ *
150
+ * The minimum value that the IlluminanceChange event will report.
151
+ */
152
+ rb_define_method(ph_light, "getMinIlluminance", ph_light_get_min_illuminance, 0);
153
+ rb_define_alias(ph_light, "min_illuminance", "getMinIlluminance");
154
+
155
+ /* Document-method: getMaxIlluminance
156
+ * call-seq: getMaxIlluminance -> illuminance
157
+ *
158
+ * The maximum value that the IlluminanceChange event will report.
159
+ */
160
+ rb_define_method(ph_light, "getMaxIlluminance", ph_light_get_max_illuminance, 0);
161
+ rb_define_alias(ph_light, "max_illuminance", "getMaxIlluminance");
162
+
163
+ /* Document-method: getIlluminanceChangeTrigger
164
+ * call-seq: getIlluminanceChangeTrigger -> change_trigger
165
+ *
166
+ * The channel will not issue a IlluminanceChange event until the illuminance value has changed by the amount specified by the IlluminanceChangeTrigger.
167
+ * Setting the IlluminanceChangeTrigger to 0 will result in the channel firing events every DataInterval. This is useful for applications that implement their own data filtering.
168
+ */
169
+ rb_define_method(ph_light, "getIlluminanceChangeTrigger", ph_light_get_illuminance_change_trigger, 0);
170
+ rb_define_alias(ph_light, "illuminance_change_trigger", "getIlluminanceChangeTrigger");
171
+
172
+ /* Document-method: setIlluminanceChangeTrigger
173
+ * call-seq: setIlluminanceChangeTrigger(change_trigger)
174
+ *
175
+ * The channel will not issue a IlluminanceChange event until the illuminance value has changed by the amount specified by the IlluminanceChangeTrigger.
176
+ * Setting the IlluminanceChangeTrigger to 0 will result in the channel firing events every DataInterval. This is useful for applications that implement their own data filtering.
177
+ */
178
+ rb_define_method(ph_light, "setIlluminanceChangeTrigger", ph_light_set_illuminance_change_trigger, 1);
179
+ rb_define_alias(ph_light, "illuminance_change_trigger=", "setIlluminanceChangeTrigger");
180
+
181
+ /* Document-method: getMinIlluminanceChangeTrigger
182
+ * call-seq: getMinIlluminanceChangeTrigger -> change_trigger
183
+ *
184
+ * The minimum value that IlluminanceChangeTrigger can be set to.
185
+ */
186
+ rb_define_method(ph_light, "getMinIlluminanceChangeTrigger", ph_light_get_min_illuminance_change_trigger, 0);
187
+ rb_define_alias(ph_light, "min_illuminance_change_trigger", "getMinIlluminanceChangeTrigger");
188
+
189
+ /* Document-method: getMaxIlluminanceChangeTrigger
190
+ * call-seq: getMaxIlluminanceChangeTrigger -> change_trigger
191
+ *
192
+ * The maximum value that IlluminanceChangeTrigger can be set to.
193
+ */
194
+ rb_define_method(ph_light, "getMaxIlluminanceChangeTrigger", ph_light_get_max_illuminance_change_trigger, 0);
195
+ rb_define_alias(ph_light, "max_illuminance_change_trigger", "getMaxIlluminanceChangeTrigger");
196
+
197
+
198
+ rb_define_private_method(ph_light, "ext_setOnIlluminanceChangeHandler", ph_light_set_on_illuminance_change_handler, 1);
199
+ }
200
+
@@ -0,0 +1,263 @@
1
+
2
+ #include "phidgets.h"
3
+
4
+
5
+ VALUE ph_log_enable(VALUE self, VALUE level, VALUE output_file);
6
+ VALUE ph_log_disable(VALUE self);
7
+ VALUE ph_log_get_level(VALUE self);
8
+ VALUE ph_log_set_level(VALUE self, VALUE level);
9
+ VALUE ph_log_log(VALUE self, VALUE level, VALUE message);
10
+ VALUE ph_log_loge(VALUE self, VALUE file, VALUE line, VALUE function, VALUE source, VALUE level, VALUE message);
11
+ VALUE ph_log_rotate(VALUE self);
12
+ VALUE ph_log_is_rotating(VALUE self);
13
+ VALUE ph_log_get_rotating(VALUE self);
14
+ VALUE ph_log_set_rotating(VALUE self, VALUE size, VALUE keep_count);
15
+ VALUE ph_log_enable_rotating(VALUE self);
16
+ VALUE ph_log_disable_rotating(VALUE self);
17
+ VALUE ph_log_add_source(VALUE self, VALUE source, VALUE level);
18
+ VALUE ph_log_get_source_level(VALUE self, VALUE source);
19
+ VALUE ph_log_set_source_level(VALUE self, VALUE source, VALUE level);
20
+ VALUE ph_log_get_sources(VALUE self);
21
+
22
+
23
+ void Init_logging() {
24
+ VALUE ph_module = rb_const_get(rb_cObject, rb_intern("Phidgets"));
25
+ VALUE ph_log = rb_define_class_under(ph_module, "Log", rb_cObject);
26
+
27
+ rb_define_const(ph_log, "CRITICAL", INT2FIX(PHIDGET_LOG_CRITICAL));
28
+ rb_define_const(ph_log, "ERROR", INT2FIX(PHIDGET_LOG_ERROR));
29
+ rb_define_const(ph_log, "WARNING", INT2FIX(PHIDGET_LOG_WARNING));
30
+ rb_define_const(ph_log, "DEBUG", INT2FIX(PHIDGET_LOG_DEBUG));
31
+ rb_define_const(ph_log, "INFO", INT2FIX(PHIDGET_LOG_INFO));
32
+ rb_define_const(ph_log, "VERBOSE", INT2FIX(PHIDGET_LOG_VERBOSE));
33
+
34
+ /*
35
+ * Document-method: enable
36
+ * call-seq: enable(log_level, output_file)
37
+ *
38
+ * Enables logging.
39
+ */
40
+ rb_define_singleton_method(ph_log, "enable", ph_log_enable, 2);
41
+
42
+ /*
43
+ * Document-method: disable
44
+ * call-seq: disable
45
+ *
46
+ * Disables logging.
47
+ */
48
+ rb_define_singleton_method(ph_log, "disable", ph_log_disable, 0);
49
+
50
+ /*
51
+ * Document-method: getLevel
52
+ * call-seq: getLevel
53
+ *
54
+ * Gets the log level for the phidget22 source.
55
+ */
56
+ rb_define_singleton_method(ph_log, "getLevel", ph_log_get_level, 0);
57
+
58
+ /*
59
+ * Document-method: setLevel
60
+ * call-seq: setLevel
61
+ *
62
+ * Sets the log level for all sources not prefaced with _phidget22.
63
+ */
64
+ rb_define_singleton_method(ph_log, "setLevel", ph_log_set_level, 1);
65
+
66
+ /*
67
+ * Document-method: log
68
+ * call-seq: log(log_level, msg)
69
+ *
70
+ * Appends a message to the log.
71
+ */
72
+ rb_define_singleton_method(ph_log, "log", ph_log_log, 2);
73
+
74
+ /*
75
+ * Document-method: loge
76
+ * call-seq: loge(file, line, function, source, log_level, msg)
77
+ *
78
+ * Writes a message to the Phidget library log from a specified source.
79
+ */
80
+ rb_define_singleton_method(ph_log, "loge", ph_log_loge, 6);
81
+
82
+ /*
83
+ * Document-method: rotate
84
+ * call-seq: rotate
85
+ *
86
+ * Manually rotate the log file. This will only have an effect if automatic rotation is disabled and the log file is larger than the specified maximum file size.
87
+ */
88
+ rb_define_singleton_method(ph_log, "rotate", ph_log_rotate, 0);
89
+
90
+ /*
91
+ * Document-method: isRotating
92
+ * call-seq: isRotating
93
+ *
94
+ * Determines if the library is automatically rotating the log file.
95
+ */
96
+ rb_define_singleton_method(ph_log, "isRotating", ph_log_is_rotating, 0);
97
+
98
+ /*
99
+ * Document-method: getRotating
100
+ * call-seq: getRotating
101
+ *
102
+ * Gets the current log rotation parameters.
103
+ */
104
+ rb_define_singleton_method(ph_log, "getRotating", ph_log_get_rotating, 0);
105
+
106
+ /*
107
+ * Document-method: setRotating
108
+ * call-seq: setRotating(size, keep_count)
109
+ *
110
+ * Sets log rotation parameters.
111
+ */
112
+ rb_define_singleton_method(ph_log, "setRotating", ph_log_set_rotating, 2);
113
+
114
+ /*
115
+ * Document-method: enableRotating
116
+ * call-seq: enableRotating
117
+ *
118
+ * Enables automatic rotation of the log file (the default).
119
+ */
120
+ rb_define_singleton_method(ph_log, "enableRotating", ph_log_enable_rotating, 0);
121
+
122
+ /*
123
+ * Document-method: disableRotating
124
+ * call-seq: disableRotating
125
+ *
126
+ * Disables automatic rotation of the log file.
127
+ */
128
+ rb_define_singleton_method(ph_log, "disableRotating", ph_log_disable_rotating, 0);
129
+
130
+ /*
131
+ * Document-method: addSource
132
+ * call-seq: addSource(source, level)
133
+ *
134
+ * Adds a source to the Phidget logging system. This is useful for declaring a source and setting its log level before sending any messages.
135
+ */
136
+ rb_define_singleton_method(ph_log, "addSource", ph_log_add_source, 2);
137
+
138
+ /*
139
+ * Document-method: getSourceLevel
140
+ * call-seq: getSourceLevel(source)
141
+ *
142
+ * Gets the log level of the specified log source.
143
+ */
144
+ rb_define_singleton_method(ph_log, "getSourceLevel", ph_log_get_source_level, 1);
145
+
146
+ /*
147
+ * Document-method: setSourceLevel
148
+ * call-seq: setSourceLevel(source, level)
149
+ *
150
+ * Sets the log level of the specified log source.
151
+ */
152
+ rb_define_singleton_method(ph_log, "setSourceLevel", ph_log_set_source_level, 2);
153
+
154
+ /*
155
+ * Document-method: getSources
156
+ * call-seq: getSources
157
+ *
158
+ * Gets an array of log sources in the system.
159
+ */
160
+ rb_define_singleton_method(ph_log, "getSources", ph_log_get_sources, 0);
161
+ }
162
+
163
+
164
+ VALUE ph_log_enable(VALUE self, VALUE level, VALUE output_file) {
165
+ ph_raise(PhidgetLog_enable(NUM2INT(level), StringValueCStr(output_file)));
166
+ return Qnil;
167
+ }
168
+
169
+ VALUE ph_log_disable(VALUE self) {
170
+ ph_raise(PhidgetLog_disable());
171
+ return Qnil;
172
+ }
173
+
174
+ VALUE ph_log_get_level(VALUE self) {
175
+ Phidget_LogLevel level;
176
+ ph_raise(PhidgetLog_getLevel(&level));
177
+ return INT2NUM(level);
178
+ }
179
+
180
+ VALUE ph_log_set_level(VALUE self, VALUE level) {
181
+ ph_raise(PhidgetLog_setLevel(NUM2INT(level)));
182
+ return Qnil;
183
+ }
184
+
185
+ VALUE ph_log_log(VALUE self, VALUE level, VALUE message) {
186
+ ph_raise(PhidgetLog_log(NUM2INT(level), StringValueCStr(message)));
187
+ return Qnil;
188
+ }
189
+
190
+ VALUE ph_log_loge(VALUE self, VALUE file, VALUE line, VALUE function, VALUE source, VALUE level, VALUE message) {
191
+ ph_raise(PhidgetLog_loge( StringValueCStr(file), NUM2INT(line), StringValueCStr(function), StringValueCStr(source), NUM2INT(level), StringValueCStr(message)));
192
+ return Qnil;
193
+ }
194
+
195
+ VALUE ph_log_rotate(VALUE self) {
196
+ ph_raise(PhidgetLog_rotate());
197
+ return Qnil;
198
+ }
199
+
200
+ VALUE ph_log_is_rotating(VALUE self) {
201
+ int rotating;
202
+ ph_raise(PhidgetLog_isRotating(&rotating));
203
+ return rotating == PTRUE ? Qtrue : Qfalse;
204
+ }
205
+
206
+ VALUE ph_log_get_rotating(VALUE self) {
207
+ uint64_t size;
208
+ int count;
209
+ ph_raise(PhidgetLog_getRotating(&size, &count));
210
+ return rb_ary_new3(2, ULL2NUM(size), INT2NUM(count));
211
+ }
212
+
213
+ VALUE ph_log_set_rotating(VALUE self, VALUE size, VALUE keep_count) {
214
+ ph_raise(PhidgetLog_setRotating(NUM2ULL(size), NUM2INT(keep_count)));
215
+ return Qnil;
216
+ }
217
+
218
+ VALUE ph_log_enable_rotating(VALUE self) {
219
+ ph_raise(PhidgetLog_enableRotating());
220
+ return Qnil;
221
+ }
222
+
223
+ VALUE ph_log_disable_rotating(VALUE self) {
224
+ ph_raise(PhidgetLog_disableRotating());
225
+ return Qnil;
226
+ }
227
+
228
+ VALUE ph_log_add_source(VALUE self, VALUE source, VALUE level) {
229
+ ph_raise(PhidgetLog_addSource(StringValueCStr(source), NUM2INT(level)));
230
+ return Qnil;
231
+ }
232
+
233
+ VALUE ph_log_get_source_level(VALUE self, VALUE source) {
234
+ Phidget_LogLevel level;
235
+ ph_raise(PhidgetLog_getSourceLevel(StringValueCStr(source), &level));
236
+ return INT2NUM(level);
237
+ }
238
+
239
+ VALUE ph_log_set_source_level(VALUE self, VALUE source, VALUE level) {
240
+ ph_raise(PhidgetLog_setSourceLevel(StringValueCStr(source), NUM2INT(level)));
241
+ return Qnil;
242
+ }
243
+
244
+ VALUE ph_log_get_sources(VALUE self) {
245
+ PhidgetReturnCode rc;
246
+ const char **sources;
247
+ uint32_t count;
248
+ VALUE ary = rb_ary_new();
249
+
250
+ ph_raise(PhidgetLog_getSources(NULL, &count));
251
+ sources = malloc(sizeof(const char *) * count);
252
+
253
+ rc = PhidgetLog_getSources(sources, &count);
254
+ if( rc != EPHIDGET_OK ) {
255
+ free(sources);
256
+ ph_raise(rc);
257
+ }
258
+
259
+ for(uint32_t i=0; i<count; i++) rb_ary_push(ary, rb_str_new2(sources[i]));
260
+ free(sources);
261
+ return ary;
262
+ }
263
+