lgpio 0.1.8 → 0.1.9
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 +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
|