mini_gpio 0.1.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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +3 -0
  3. data/lib/mini_gpio.rb +99 -0
  4. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fa0fb9630fe2bd0541dc3c475b68b26e8ee2fd35ef23a2e3b0b891819d821b7f
4
+ data.tar.gz: 1104d20b03d9bce3815d5cfdd3ae18ac1020baa9203c7dc703366c78a08f2b83
5
+ SHA512:
6
+ metadata.gz: f421e15bf431a95eaef9949fe75682353d3bc637f68e85b146591d9e7c5388f34a6317ac94cb1ac2a97558c12bb750126e3b29cd75f431017ccd73d4ea2202aa
7
+ data.tar.gz: 823db4751fcc798fb6fb28c94cd0575f44740e2c87fa72eb42d2d714386a34b340c34b0d3a6aee1b87652d9d6ba25f690101256f6ff26d92deca6eb1fb85be5c
@@ -0,0 +1,3 @@
1
+ # MiniGPIO
2
+
3
+ This is a library for using GPIO on RaspberryPI.
@@ -0,0 +1,99 @@
1
+ require "fiddle"
2
+ require "fiddle/import"
3
+
4
+ class MiniGPIO
5
+ module Mmap
6
+ PROT_READ = 0x01
7
+ PROT_WRITE = 0x02
8
+ MAP_SHARED = 0x001
9
+
10
+ extend Fiddle::Importer
11
+
12
+ dlload Fiddle::Handle::DEFAULT
13
+
14
+ extern "uint32_t * mmap(void *addr, size_t length, int prot, int flags, int fd, int offset)"
15
+ extern "int munmap(void *addr, size_t length)"
16
+ end
17
+
18
+ GPSET0 = 7
19
+ GPSET1 = 8
20
+ GPCLR0 = 10
21
+ GPCLR1 = 11
22
+ GPLEV0 = 13
23
+
24
+ # GPIO modes
25
+ module Modes
26
+ INPUT = 0
27
+ OUTPUT = 1
28
+ ALT0 = 4
29
+ ALT1 = 5
30
+ ALT2 = 6
31
+ ALT3 = 7
32
+ ALT4 = 3
33
+ ALT5 = 2
34
+ end
35
+
36
+ attr_reader :ptr
37
+
38
+ def initialize
39
+ @ptr = File.open("/dev/gpiomem", File::Constants::RDWR | File::Constants::SYNC) do |f|
40
+ Mmap.mmap(nil, 4*1024, Mmap::PROT_READ|Mmap::PROT_WRITE, Mmap::MAP_SHARED, f.to_i, 0)
41
+ end
42
+ end
43
+
44
+ # Get the pin mode
45
+ def mode pin
46
+ reg = pin / 10
47
+ shift = (pin % 10) * 3
48
+ (get_int_at(reg) >> shift) & 7
49
+ end
50
+
51
+ # Set the pin mode
52
+ def set_mode pin, mode
53
+ reg = pin / 10
54
+ shift = (pin % 10) * 3
55
+ new_value = (get_int_at(reg) & ~(7 << shift)) | (mode << shift)
56
+ set_int_at(reg, new_value)
57
+ end
58
+
59
+ # Read the pin
60
+ def read pin
61
+ 0 != get_int_at(GPLEV0 + PI_BANK(pin)) & PI_BIT(pin) ? 1 : 0
62
+ end
63
+
64
+ # Write to the pin
65
+ def write pin, value
66
+ if value == 0
67
+ set_int_at(GPCLR0 + PI_BANK(pin), PI_BIT(pin))
68
+ else
69
+ set_int_at(GPSET0 + PI_BANK(pin), PI_BIT(pin))
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ def PI_BANK gpio ; gpio >> 5; end
76
+ def PI_BIT gpio ; (1 << (gpio&0x1F)); end
77
+
78
+ def get_int_at offset
79
+ @ptr[offset * Fiddle::SIZEOF_INT, Fiddle::SIZEOF_INT].unpack1("L")
80
+ end
81
+
82
+ def set_int_at offset, value
83
+ @ptr[offset * Fiddle::SIZEOF_INT, Fiddle::SIZEOF_INT] = [value].pack("L")
84
+ end
85
+ end
86
+
87
+ if __FILE__ == $0
88
+ gpio = MiniGPIO.new
89
+
90
+ 54.times do |i|
91
+ puts "gpio=#{i} mode=%d level=%d" % [gpio.mode(i), gpio.read(i)]
92
+ end
93
+
94
+ gpio.set_mode 0, MiniGPIO::Modes::OUTPUT
95
+ gpio.write 0, 1
96
+ p gpio.read 0
97
+ gpio.write 0, 0
98
+ p gpio.read 0
99
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini_gpio
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Patterson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Provides GPIO access on the Raspberry Pi in Ruby (using Fiddle)
14
+ email:
15
+ - aaron@tenderlovemaking.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - lib/mini_gpio.rb
22
+ homepage: https://github.com/tenderlove/mini_gpio
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 2.3.0
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.1.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: GPIO on the Raspberry Pi
45
+ test_files: []