lgpio 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -1
- data/examples/gpio_bench_in.rb +1 -1
- data/examples/gpio_bench_out.rb +1 -1
- data/examples/gpio_blink.rb +1 -1
- data/examples/gpio_group_in.rb +2 -2
- data/examples/gpio_group_out.rb +1 -1
- data/examples/gpio_momentary.rb +2 -2
- data/examples/gpio_reports.rb +2 -2
- data/examples/gpio_rotary_encoder.rb +6 -6
- data/examples/gpio_rotary_encoder_led.rb +5 -5
- data/examples/gpio_wave.rb +1 -1
- data/examples/pwm_sw.rb +1 -1
- data/examples/spi_bb_ssd1306_bench.rb +3 -3
- data/ext/lgpio/lgpio.c +5 -5
- data/lib/lgpio/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 968e706762503c9d172b41ff4df8a9c17021af5b4a4cb4372eeaaa166c30f5ff
|
4
|
+
data.tar.gz: 82d8221f8e28293f542c4bd1913f85addb567c217d071fdbb1e47451c3be1da1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8749280110629032e20ac94c203c512a699e90b58266f78f7c26a9305b8e22ef0f97822247744403c2723b7417838b5972c2618a65ebcb0ee2ae483cd0d12e41
|
7
|
+
data.tar.gz: a9bbac8e2f8c80de6adf86249bf559b10c590234597a15d3bf6dce37bc3b60ce27856f2343bdc1fe885a1a78105401419e221eb0ae5a10fa404ec7fc9c90a4fd
|
data/README.md
CHANGED
@@ -43,16 +43,21 @@ These use the sysfs PWM interface, not lgpio C, but are a good fit for this gem.
|
|
43
43
|
## Installation
|
44
44
|
On Debian-based Linuxes (RaspberryPi OS, Armbian, DietPi etc.):
|
45
45
|
```bash
|
46
|
-
|
46
|
+
# Requirements to install lgpio C
|
47
|
+
sudo apt install swig python3-dev python3-setuptools gcc make
|
47
48
|
|
48
49
|
# Temporary fork of: wget https://github.com/joan2937/lg/archive/master.zip
|
49
50
|
wget https://github.com/vickash/lg/archive/refs/heads/master.zip
|
50
51
|
|
52
|
+
# Install lgpio C
|
51
53
|
unzip master.zip
|
52
54
|
cd lg-master
|
53
55
|
make
|
54
56
|
sudo make install
|
55
57
|
|
58
|
+
# The latest Ruby 3 + YJIT is recommended, but you can use the system Ruby from apt too.
|
59
|
+
# sudo apt install ruby ruby-dev
|
60
|
+
|
56
61
|
gem install lgpio
|
57
62
|
```
|
58
63
|
|
@@ -76,4 +81,10 @@ Even when these are enabled, you may not have permission to access them. To run
|
|
76
81
|
- Method names have the leading `lg` removed, since inside the `LGPIO` class.
|
77
82
|
- Constants have leading `LG_` removed, as above.
|
78
83
|
- "count" or "length" arguments associated with array args are not needed.
|
84
|
+
- Arg order for `_claim_` methods varies from lgpio C, so that gpio number always follows handle. The general pattern is `handle, gpio, flags, state`. This affects:
|
85
|
+
- `gpio_claim_input`
|
86
|
+
- `gpio_claim_output`
|
87
|
+
- `gpio_claim_alert`
|
88
|
+
- `group_claim_input`
|
89
|
+
- `group_claim_output`
|
79
90
|
- Check the return values of your method calls. On failure, they return negative values, matching the `LG_` error codes at the bottom of the C API doc page.
|
data/examples/gpio_bench_in.rb
CHANGED
data/examples/gpio_bench_out.rb
CHANGED
data/examples/gpio_blink.rb
CHANGED
@@ -5,7 +5,7 @@ LED = 272
|
|
5
5
|
INTERVAL = 0.25
|
6
6
|
|
7
7
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
8
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
8
|
+
LGPIO.gpio_claim_output(chip_handle, LED, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
9
9
|
|
10
10
|
loop do
|
11
11
|
LGPIO.gpio_write(chip_handle, LED, 1)
|
data/examples/gpio_group_in.rb
CHANGED
@@ -7,8 +7,8 @@ LEDS = [272, 258]
|
|
7
7
|
INIT_STATE = [0, 0]
|
8
8
|
|
9
9
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
10
|
-
LGPIO.group_claim_input(chip_handle, LGPIO::SET_PULL_UP
|
11
|
-
LGPIO.group_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
10
|
+
LGPIO.group_claim_input(chip_handle, BUTTONS, LGPIO::SET_PULL_UP)
|
11
|
+
LGPIO.group_claim_output(chip_handle, LEDS, LGPIO::SET_PULL_NONE, INIT_STATE)
|
12
12
|
|
13
13
|
# The inverted (active-low) state of each button controls the corresponding LED.
|
14
14
|
loop do
|
data/examples/gpio_group_out.rb
CHANGED
@@ -7,7 +7,7 @@ INTERVAL = 250_000 # 250ms
|
|
7
7
|
TIMES = 10
|
8
8
|
|
9
9
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
10
|
-
LGPIO.group_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
10
|
+
LGPIO.group_claim_output(chip_handle, LEDS, LGPIO::SET_PULL_NONE, INIT_STATE)
|
11
11
|
|
12
12
|
# Convert us interval to seconds.
|
13
13
|
interval = INTERVAL.to_f / 1_000_000
|
data/examples/gpio_momentary.rb
CHANGED
@@ -5,8 +5,8 @@ BUTTON = 259
|
|
5
5
|
LED = 272
|
6
6
|
|
7
7
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
8
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_UP
|
9
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
8
|
+
LGPIO.gpio_claim_input(chip_handle, BUTTON, LGPIO::SET_PULL_UP)
|
9
|
+
LGPIO.gpio_claim_output(chip_handle, LED, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
10
10
|
|
11
11
|
loop do
|
12
12
|
if LGPIO.gpio_read(chip_handle, BUTTON) == 0
|
data/examples/gpio_reports.rb
CHANGED
@@ -5,9 +5,9 @@ PIN = 259
|
|
5
5
|
|
6
6
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
7
7
|
|
8
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_NONE
|
8
|
+
LGPIO.gpio_claim_input(chip_handle, PIN, LGPIO::SET_PULL_NONE)
|
9
9
|
LGPIO.gpio_set_debounce(chip_handle, PIN, 1)
|
10
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::BOTH_EDGES
|
10
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN, 0, LGPIO::BOTH_EDGES)
|
11
11
|
LGPIO.gpio_start_reporting
|
12
12
|
|
13
13
|
loop do
|
@@ -17,17 +17,17 @@ state_b = 0
|
|
17
17
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
18
18
|
|
19
19
|
# Encoder pin setup
|
20
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_NONE
|
20
|
+
LGPIO.gpio_claim_input(chip_handle, PIN_A, LGPIO::SET_PULL_NONE)
|
21
21
|
LGPIO.gpio_set_debounce(chip_handle, PIN_A, 1)
|
22
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::BOTH_EDGES
|
23
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_NONE
|
22
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN_A, 0, LGPIO::BOTH_EDGES)
|
23
|
+
LGPIO.gpio_claim_input(chip_handle, PIN_B, LGPIO::SET_PULL_NONE)
|
24
24
|
LGPIO.gpio_set_debounce(chip_handle, PIN_B, 1)
|
25
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::BOTH_EDGES
|
25
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN_B, 0, LGPIO::BOTH_EDGES)
|
26
26
|
|
27
27
|
# Switch pin setup
|
28
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_UP
|
28
|
+
LGPIO.gpio_claim_input(chip_handle, PIN_SW, LGPIO::SET_PULL_UP)
|
29
29
|
LGPIO.gpio_set_debounce(chip_handle, PIN_SW, 1)
|
30
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::FALLING_EDGE
|
30
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN_SW, 0, LGPIO::FALLING_EDGE)
|
31
31
|
|
32
32
|
# Start generating reports for GPIO level changes.
|
33
33
|
LGPIO.gpio_start_reporting
|
@@ -21,15 +21,15 @@ led_duty = 0
|
|
21
21
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
22
22
|
|
23
23
|
# LED pin setup
|
24
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
24
|
+
LGPIO.gpio_claim_output(chip_handle, PIN_LED, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
25
25
|
|
26
26
|
# Encoder pin setup
|
27
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_NONE
|
27
|
+
LGPIO.gpio_claim_input(chip_handle, PIN_A, LGPIO::SET_PULL_NONE)
|
28
28
|
LGPIO.gpio_set_debounce(chip_handle, PIN_A, 1)
|
29
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::BOTH_EDGES
|
30
|
-
LGPIO.gpio_claim_input(chip_handle, LGPIO::SET_PULL_NONE
|
29
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN_A, 0, LGPIO::BOTH_EDGES)
|
30
|
+
LGPIO.gpio_claim_input(chip_handle, PIN_B, LGPIO::SET_PULL_NONE)
|
31
31
|
LGPIO.gpio_set_debounce(chip_handle, PIN_B, 1)
|
32
|
-
LGPIO.gpio_claim_alert(chip_handle, 0, LGPIO::BOTH_EDGES
|
32
|
+
LGPIO.gpio_claim_alert(chip_handle, PIN_B, 0, LGPIO::BOTH_EDGES)
|
33
33
|
|
34
34
|
# Start generating reports for GPIO level changes.
|
35
35
|
LGPIO.gpio_start_reporting
|
data/examples/gpio_wave.rb
CHANGED
@@ -7,7 +7,7 @@ INTERVAL = 250_000 # 250ms
|
|
7
7
|
TIMES = 10
|
8
8
|
|
9
9
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
10
|
-
LGPIO.group_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
10
|
+
LGPIO.group_claim_output(chip_handle, LEDS, LGPIO::SET_PULL_NONE, INIT_STATE)
|
11
11
|
|
12
12
|
# Generic pulse that updates both LED states (first element) each INTERVAL.
|
13
13
|
generic_pulse = [ nil, 0b11, INTERVAL ]
|
data/examples/pwm_sw.rb
CHANGED
@@ -7,7 +7,7 @@ PWM_OFFSET = 0
|
|
7
7
|
PWM_CYCLES = 0 # 0 = infinite
|
8
8
|
|
9
9
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
10
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
10
|
+
LGPIO.gpio_claim_output(chip_handle, LED, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
11
11
|
|
12
12
|
# Seamless loop from 0-100 and back.
|
13
13
|
duty_cycles = (0..100).to_a + (1..99).to_a.reverse
|
@@ -15,9 +15,9 @@ DC_PIN = 6
|
|
15
15
|
# Initialize
|
16
16
|
chip_handle = LGPIO.chip_open(GPIO_CHIP)
|
17
17
|
spi_bb = LGPIO::SPIBitBang.new(handle: chip_handle, clock: CLOCK_PIN, output: OUTPUT_PIN)
|
18
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
19
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
20
|
-
LGPIO.gpio_claim_output(chip_handle, LGPIO::SET_PULL_NONE,
|
18
|
+
LGPIO.gpio_claim_output(chip_handle, SELECT_PIN, LGPIO::SET_PULL_NONE, LGPIO::HIGH)
|
19
|
+
LGPIO.gpio_claim_output(chip_handle, RESET_PIN, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
20
|
+
LGPIO.gpio_claim_output(chip_handle, DC_PIN, LGPIO::SET_PULL_NONE, LGPIO::LOW)
|
21
21
|
|
22
22
|
# OLED STARTUP
|
23
23
|
LGPIO.gpio_write(chip_handle, RESET_PIN, 1)
|
data/ext/lgpio/lgpio.c
CHANGED
@@ -60,12 +60,12 @@ static VALUE gpio_get_mode(VALUE self, VALUE handle, VALUE gpio) {
|
|
60
60
|
return INT2NUM(result);
|
61
61
|
}
|
62
62
|
|
63
|
-
static VALUE gpio_claim_output(VALUE self, VALUE handle, VALUE
|
63
|
+
static VALUE gpio_claim_output(VALUE self, VALUE handle, VALUE gpio, VALUE flags, VALUE level) {
|
64
64
|
int result = lgGpioClaimOutput(NUM2INT(handle), NUM2INT(flags), NUM2INT(gpio), NUM2INT(level));
|
65
65
|
return INT2NUM(result);
|
66
66
|
}
|
67
67
|
|
68
|
-
static VALUE gpio_claim_input(VALUE self, VALUE handle, VALUE
|
68
|
+
static VALUE gpio_claim_input(VALUE self, VALUE handle, VALUE gpio, VALUE flags) {
|
69
69
|
int result = lgGpioClaimInput(NUM2INT(handle), NUM2INT(flags), NUM2INT(gpio));
|
70
70
|
return INT2NUM(result);
|
71
71
|
}
|
@@ -85,7 +85,7 @@ static VALUE gpio_write(VALUE self, VALUE handle, VALUE gpio, VALUE level) {
|
|
85
85
|
return INT2NUM(result);
|
86
86
|
}
|
87
87
|
|
88
|
-
static VALUE group_claim_input(VALUE self, VALUE handle, VALUE
|
88
|
+
static VALUE group_claim_input(VALUE self, VALUE handle, VALUE gpios, VALUE flags) {
|
89
89
|
int count = rb_array_len(gpios);
|
90
90
|
int lgGpios[count];
|
91
91
|
int i;
|
@@ -96,7 +96,7 @@ static VALUE group_claim_input(VALUE self, VALUE handle, VALUE flags, VALUE gpio
|
|
96
96
|
return INT2NUM(result);
|
97
97
|
}
|
98
98
|
|
99
|
-
static VALUE group_claim_output(VALUE self, VALUE handle, VALUE
|
99
|
+
static VALUE group_claim_output(VALUE self, VALUE handle, VALUE gpios, VALUE flags, VALUE levels) {
|
100
100
|
int count = rb_array_len(gpios);
|
101
101
|
int lgGpios[count];
|
102
102
|
int lgLevels[count];
|
@@ -130,7 +130,7 @@ static VALUE gpio_set_debounce(VALUE self, VALUE handle, VALUE gpio, VALUE debou
|
|
130
130
|
return INT2NUM(result);
|
131
131
|
}
|
132
132
|
|
133
|
-
static VALUE gpio_claim_alert(VALUE self, VALUE handle, VALUE
|
133
|
+
static VALUE gpio_claim_alert(VALUE self, VALUE handle, VALUE gpio, VALUE flags, VALUE eFlags) {
|
134
134
|
int result = lgGpioClaimAlert(NUM2INT(handle), NUM2INT(flags), NUM2INT(eFlags), NUM2INT(gpio), -1);
|
135
135
|
return INT2NUM(result);
|
136
136
|
}
|
data/lib/lgpio/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lgpio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vickash
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
11
|
+
date: 2024-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Use Linux GPIO, I2C, SPI and PWM in Ruby
|
14
14
|
email: mail@vickash.com
|
@@ -82,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
requirements: []
|
85
|
-
rubygems_version: 3.5.
|
85
|
+
rubygems_version: 3.5.20
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: Use Linux GPIO, I2C, SPI and PWM in Ruby
|