rpi_gpio 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -1
- data/ext/rpi_gpio/rb_gpio.c +33 -13
- metadata +2 -2
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# rpi_gpio v0.3.
|
1
|
+
# rpi_gpio v0.3.1
|
2
2
|
|
3
3
|
Ruby conversion of [RPi.GPIO Python module](https://pypi.python.org/pypi/RPi.GPIO)
|
4
4
|
|
@@ -70,6 +70,13 @@ RPi::GPIO.set_low PIN_NUM
|
|
70
70
|
```
|
71
71
|
to set the pin either high or low.
|
72
72
|
|
73
|
+
You can use the additional hash argument `:initialize` to set the pin's initial state like so:
|
74
|
+
```ruby
|
75
|
+
RPi::GPIO.setup PIN_NUM, :as => :output, :initialize => :high
|
76
|
+
# or
|
77
|
+
RPi::GPIO.setup PIN_NUM, :as => :output, :initialize => :low
|
78
|
+
```
|
79
|
+
|
73
80
|
#### PWM (pulse-width modulation)
|
74
81
|
|
75
82
|
Pulse-width modulation is a useful tool for controlling things like LED brightness or motor speed. To utilize PWM, first create a PWM object for an [output pin](#output).
|
data/ext/rpi_gpio/rb_gpio.c
CHANGED
@@ -97,7 +97,7 @@ int is_gpio_input(unsigned int gpio)
|
|
97
97
|
{
|
98
98
|
if (gpio_direction[gpio] != INPUT) {
|
99
99
|
if (gpio_direction[gpio] != OUTPUT) {
|
100
|
-
rb_raise(rb_eRuntimeError,
|
100
|
+
rb_raise(rb_eRuntimeError,
|
101
101
|
"you must setup the GPIO channel first with "
|
102
102
|
"RPi::GPIO.setup CHANNEL, :as => :input or "
|
103
103
|
"RPi::GPIO.setup CHANNEL, :as => :output");
|
@@ -232,16 +232,16 @@ VALUE GPIO_setup(VALUE self, VALUE channel, VALUE hash)
|
|
232
232
|
func = gpio_function(gpio);
|
233
233
|
if (gpio_warnings &&
|
234
234
|
((func != 0 && func != 1) ||
|
235
|
-
(gpio_direction[gpio] == -1 && func == 1)))
|
236
|
-
|
237
|
-
|
235
|
+
(gpio_direction[gpio] == -1 && func == 1)))
|
236
|
+
{
|
237
|
+
rb_warn("this channel is already in use... continuing anyway. use RPi::GPIO.set_warnings(false) to disable warnings");
|
238
238
|
}
|
239
239
|
|
240
240
|
if (gpio_warnings) {
|
241
241
|
if (rpiinfo.p1_revision == 0) { // compute module - do nothing
|
242
|
-
} else if ((rpiinfo.p1_revision == 1 &&
|
243
|
-
|
244
|
-
|
242
|
+
} else if ((rpiinfo.p1_revision == 1 &&
|
243
|
+
(gpio == 0 || gpio == 1)) ||
|
244
|
+
(gpio == 2 || gpio == 3)) {
|
245
245
|
if (pud == PUD_UP || pud == PUD_DOWN) {
|
246
246
|
rb_warn("a physical pull up resistor is fitted on "
|
247
247
|
"this channel");
|
@@ -260,15 +260,14 @@ VALUE GPIO_setup(VALUE self, VALUE channel, VALUE hash)
|
|
260
260
|
chan = NUM2INT(channel);
|
261
261
|
|
262
262
|
// pin direction
|
263
|
-
direction_str = rb_id2name(rb_to_id(rb_hash_aref(hash,
|
264
|
-
ID2SYM(rb_intern("as")))));
|
263
|
+
direction_str = rb_id2name(rb_to_id(rb_hash_aref(hash, ID2SYM(rb_intern("as")))));
|
265
264
|
if (strcmp("input", direction_str) == 0) {
|
266
265
|
direction = INPUT;
|
267
266
|
} else if (strcmp("output", direction_str) == 0) {
|
268
267
|
direction = OUTPUT;
|
269
268
|
} else {
|
270
|
-
rb_raise(rb_eArgError,
|
271
|
-
"invalid pin direction; must be :input or :output");
|
269
|
+
rb_raise(rb_eArgError,
|
270
|
+
"invalid pin direction; must be :input or :output");
|
272
271
|
}
|
273
272
|
|
274
273
|
// pull up, down, or off
|
@@ -294,6 +293,27 @@ VALUE GPIO_setup(VALUE self, VALUE channel, VALUE hash)
|
|
294
293
|
} else {
|
295
294
|
pud = PUD_OFF;
|
296
295
|
}
|
296
|
+
// initialize high or low
|
297
|
+
initialize_val = rb_hash_aref(hash, ID2SYM(rb_intern("initialize")));
|
298
|
+
if (initialize_val != Qnil) {
|
299
|
+
if (direction == INPUT) {
|
300
|
+
rb_raise(rb_eArgError, "input pins cannot use initial argument");
|
301
|
+
return Qnil;
|
302
|
+
}
|
303
|
+
|
304
|
+
initialize_str = rb_id2name(rb_to_id(initialize_val));
|
305
|
+
if (strcmp("high", initialize_str) == 0) {
|
306
|
+
initialize = HIGH;
|
307
|
+
} else if (strcmp("low", initialize_str) == 0) {
|
308
|
+
initialize = LOW;
|
309
|
+
} else {
|
310
|
+
rb_raise(rb_eArgError,
|
311
|
+
"invalid pin initialize state; must be :high or :low");
|
312
|
+
return Qnil;
|
313
|
+
}
|
314
|
+
} else {
|
315
|
+
initialize = HIGH;
|
316
|
+
}
|
297
317
|
|
298
318
|
if (!is_rpi() || mmap_gpio_mem()) {
|
299
319
|
return Qnil;
|
@@ -332,7 +352,7 @@ VALUE GPIO_set_numbering(VALUE self, VALUE mode)
|
|
332
352
|
} else if (strcmp(mode_str, "bcm") == 0) {
|
333
353
|
new_mode = BCM;
|
334
354
|
} else {
|
335
|
-
rb_raise(rb_eArgError,
|
355
|
+
rb_raise(rb_eArgError,
|
336
356
|
"invalid numbering mode; must be :board or :bcm");
|
337
357
|
}
|
338
358
|
|
@@ -351,7 +371,7 @@ VALUE GPIO_set_numbering(VALUE self, VALUE mode)
|
|
351
371
|
return Qnil;
|
352
372
|
}
|
353
373
|
|
354
|
-
|
374
|
+
gpio_mode = new_mode;
|
355
375
|
return self;
|
356
376
|
}
|
357
377
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rpi_gpio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-10-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|