apiotics_factory 1.0.12 → 1.0.13
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c59e4c2af33710657bcf828cac7f8fad3a31020d
|
4
|
+
data.tar.gz: b35cff21244a958ca0a4de7c03aa720eb53ac6a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20530e3885b7bab8fb53a069745f0be79ec34d59d39ce0805011100548d09e10d60acfab728130ef91852907639af4f001eea66f6fb925409e6748fc1c277d31
|
7
|
+
data.tar.gz: 409a7a0181e5a6d84bac9910ae51ace88a5c9511e2f3c491106bd56c83e2c7ed43d90946001b7e3297d7c8cfe70a523d7fd6d2a91578ea4c424d82123adfa70f
|
@@ -13,18 +13,24 @@ class <%= @driver_name %> < ApioticsDriver
|
|
13
13
|
<% @interfaces["all"].each do |k, v|%>
|
14
14
|
<% unless k == "port" || k == "delay" %>
|
15
15
|
<% if v["accessor"] == "write only" || v["accessor"] == "read/write" %>
|
16
|
-
def <%= "write_#{k}(#{v["type"]})"%>
|
16
|
+
def <%= "write_#{k}(#{v["type"]})"%>
|
17
|
+
# IF YOU ARE USING GROVE PI PERIPHERALS, UNCOMMENT THE GrovePi.get_lock AND GrovePi.release_lock LINES BELOW.
|
18
|
+
# GrovePi.get_lock
|
17
19
|
|
18
20
|
# Your hardware specific logic to set the state of your <%= k %> hardware goes here based on the value of the <%= v['type'] %> variable.
|
19
21
|
|
22
|
+
# GrovePi.release_lock
|
20
23
|
self.send_msg(<%= v["type"]%>) # This line sends a confirmation message back to the web application noting that the operation is complete.
|
21
24
|
end
|
22
25
|
<% end %>
|
23
26
|
<% if v["accessor"] == "read only" || v["accessor"] == "read/write" %>
|
24
27
|
def <%= "read_#{k}"%>
|
28
|
+
# IF YOU ARE USING GROVE PI PERIPHERALS, UNCOMMENT THE GrovePi.get_lock AND GrovePi.release_lock LINES BELOW.
|
29
|
+
# GrovePi.get_lock
|
25
30
|
|
26
31
|
# Your hardware specific logic here should read a value from your <%= k %> hardware, and set the <%= v["type"] %> variable appropriately.
|
27
32
|
|
33
|
+
# GrovePi.release_lock
|
28
34
|
self.send_msg(<%= v["type"]%>) # This line sends the value in the <%= v["type"] %> variable to the web application.
|
29
35
|
end
|
30
36
|
<% end %>
|
@@ -1,9 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
module GrovePi
|
4
|
+
require 'json'
|
4
5
|
require_relative 'i2c'
|
5
6
|
require_relative 'i2c/driver/i2c-dev'
|
6
7
|
|
8
|
+
at_exit do
|
9
|
+
release_lock
|
10
|
+
end
|
11
|
+
|
7
12
|
# Commands.
|
8
13
|
CMD_READ_DIGITAL = 1
|
9
14
|
CMD_WRITE_DIGITAL = 2
|
@@ -54,10 +59,18 @@ module GrovePi
|
|
54
59
|
# LCD RGB display - I2C addresses
|
55
60
|
DISPLAY_TEXT_ADDRESS = 0x3e #0x3e
|
56
61
|
DISPLAY_RGB_ADDRESS = 0x62 #0x62
|
57
|
-
|
62
|
+
|
63
|
+
|
64
|
+
# Initialize the lock file path.
|
65
|
+
LOCK_FILE_PATH = "/tmp/grove"
|
58
66
|
|
59
67
|
# The initialized I2C object.
|
60
68
|
@_i2c_grove_pi = nil
|
69
|
+
|
70
|
+
# Initialize i2c file path
|
71
|
+
@_i2c_device_file = nil
|
72
|
+
|
73
|
+
|
61
74
|
|
62
75
|
# Storage for I2C slave addresses present on ports I2C-1, I2C-2 or I2C-3.
|
63
76
|
@_i2c_slave_addresses = Hash.new
|
@@ -114,13 +127,33 @@ module GrovePi
|
|
114
127
|
|
115
128
|
return false, nil
|
116
129
|
end
|
130
|
+
|
131
|
+
def self.get_lock
|
132
|
+
cycle = true
|
133
|
+
while cycle == true
|
134
|
+
begin
|
135
|
+
@_i2c_device_file = File.open(LOCK_FILE_PATH, File::WRONLY|File::CREAT|File::EXCL)
|
136
|
+
cycle = false
|
137
|
+
rescue
|
138
|
+
sleep 0.1
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def self.release_lock
|
144
|
+
if @_i2c_device_file.is_a(File)
|
145
|
+
@_i2c_device_file.close
|
146
|
+
File.delete(LOCK_FILE_PATH)
|
147
|
+
@_i2c_device_file = nil
|
148
|
+
end
|
149
|
+
end
|
117
150
|
|
118
151
|
def self._grove_pi_init()
|
119
|
-
status,
|
152
|
+
status, @_i2c_device_file = self._grove_pi_discover
|
120
153
|
|
121
|
-
if status &&
|
154
|
+
if status && @_i2c_device_file != nil
|
122
155
|
return I2CDevice.new address: GROVE_PI_I2C_SLAVE_ADDRESS,
|
123
|
-
driver: I2CDevice::Driver::I2CDev.new(i2c_device_file)
|
156
|
+
driver: I2CDevice::Driver::I2CDev.new(_@i2c_device_file)
|
124
157
|
else
|
125
158
|
return nil
|
126
159
|
end
|
@@ -133,6 +166,9 @@ module GrovePi
|
|
133
166
|
if @_i2c_grove_pi == nil
|
134
167
|
raise 'No GrovePi found.'
|
135
168
|
end
|
169
|
+
unless @_i2c_device_file.is_a(File)
|
170
|
+
raise "Unable to secure lock on #{LOCK_FILE_PATH}."
|
171
|
+
end
|
136
172
|
end
|
137
173
|
end
|
138
174
|
|
@@ -40,16 +40,13 @@ class I2CDevice::Driver::I2CDev < I2CDevice::Driver::Base
|
|
40
40
|
def i2cget(address, param, length)
|
41
41
|
i2c = File.open(@path, "r+")
|
42
42
|
begin
|
43
|
-
i2c.flock(File::LOCK_EX)
|
44
43
|
i2c.ioctl(@slave_command, address)
|
45
44
|
i2c.syswrite(param.chr) unless param.nil?
|
46
45
|
ret = i2c.sysread(length)
|
47
|
-
i2c.flock(File::LOCK_UN)
|
48
46
|
i2c.close
|
49
47
|
ret
|
50
48
|
rescue => e
|
51
49
|
puts e.message
|
52
|
-
i2c.flock(File::LOCK_UN)
|
53
50
|
end
|
54
51
|
rescue Errno::EIO => e
|
55
52
|
raise I2CDevice::I2CIOError, e.message
|
@@ -59,14 +56,11 @@ class I2CDevice::Driver::I2CDev < I2CDevice::Driver::Base
|
|
59
56
|
def i2cset(address, *data)
|
60
57
|
i2c = File.open(@path, "r+")
|
61
58
|
begin
|
62
|
-
i2c.flock(File::LOCK_EX)
|
63
59
|
i2c.ioctl(@slave_command, address)
|
64
60
|
i2c.syswrite(data.pack("C*"))
|
65
|
-
i2c.flock(File::LOCK_UN)
|
66
61
|
i2c.close
|
67
62
|
rescue => e
|
68
63
|
puts e.message
|
69
|
-
i2c.flock(File::LOCK_UN)
|
70
64
|
end
|
71
65
|
rescue Errno::EIO => e
|
72
66
|
raise I2CDevice::I2CIOError, e.message
|