LazGem 0.0.8 → 0.1.4
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 +5 -5
- data/.gitignore +3 -0
- data/lib/LazGem/device.rb +106 -84
- data/lib/LazGem/ioctl.rb +134 -61
- data/lib/LazGem/version.rb +1 -1
- data/sample/sample_promiscuous.rb +71 -0
- data/sample/sample_rx.rb +39 -13
- data/sample/sample_tx.rb +41 -19
- data/sample/sample_tx64.rb +76 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 76dd58cb44646e65529a4b39b7d1df1c683e706012f8246bc019da1785f91546
|
4
|
+
data.tar.gz: eaeef35b2ba4e6d51c43df459b7f63d5bc1a7d4c04e6fc2fee75da2f0c156eec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b6f8f43d5aaea14bf5a40c4e1864d09a26f8af0db87f5a7d5d6cd2d0cfd300e5f1da94b36e108b466bcf728cf7cdd838c53274e0c328abad85129ab3492d8b3
|
7
|
+
data.tar.gz: bdb3cad3dd35987602654dfa32d85fcf29979e406b0f3e39e7c64a1c7601f3a91c169b28979d262dd0e008ca6486fa22b3ff6dd2d31b908350a0e9a3dc0d8d33
|
data/.gitignore
CHANGED
data/lib/LazGem/device.rb
CHANGED
@@ -19,8 +19,9 @@ class LazGem::Device
|
|
19
19
|
@@device_rd=nil
|
20
20
|
@@device_wr=nil
|
21
21
|
|
22
|
-
def init()
|
23
|
-
cmd = "sudo insmod /home/pi/driver/LazDriver/lazdriver.ko"
|
22
|
+
def init(module_test=0x0000)
|
23
|
+
cmd = "sudo insmod /home/pi/driver/LazDriver/lazdriver.ko module_test="+module_test.to_s
|
24
|
+
# cmd = "sudo modprobe lazdriver module_test="+module_test.to_s
|
24
25
|
p cmd
|
25
26
|
result = system(cmd)
|
26
27
|
lzgw_dev = "/dev/lzgw"
|
@@ -52,13 +53,14 @@ class LazGem::Device
|
|
52
53
|
p e
|
53
54
|
end
|
54
55
|
begin
|
55
|
-
|
56
|
+
@@device_wr.close
|
56
57
|
rescue Exception => e
|
57
58
|
p e
|
58
59
|
end
|
59
60
|
@@devie_rd = nil
|
60
61
|
@@device_wr = nil
|
61
62
|
cmd = "sudo rmmod lazdriver"
|
63
|
+
# cmd = "sudo modprobe -r lazdriver"
|
62
64
|
system(cmd)
|
63
65
|
p cmd
|
64
66
|
end
|
@@ -66,32 +68,33 @@ class LazGem::Device
|
|
66
68
|
def available()
|
67
69
|
size = 2
|
68
70
|
len = @@device_rd.read(size)
|
69
|
-
|
70
|
-
|
71
|
+
if ((len == "") || (len == nil)) then # read result is empty
|
72
|
+
return 0
|
71
73
|
end
|
74
|
+
size = len.unpack("S*")[0]
|
72
75
|
return size
|
73
76
|
end
|
74
77
|
|
75
78
|
def read()
|
76
79
|
size = 2
|
77
80
|
len = @@device_rd.read(size)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
81
|
+
if ((len == "") || (len == nil)) then # read result is empty
|
82
|
+
return 0
|
83
|
+
end
|
84
|
+
size = len.unpack("S*")[0]
|
82
85
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
86
|
+
# The received data is read
|
87
|
+
raw = @@device_rd.read(size)
|
88
|
+
if ((raw == "") || (raw == nil)) then # read result is empty
|
89
|
+
return -1
|
87
90
|
end
|
88
|
-
|
91
|
+
|
89
92
|
len = raw.length
|
90
93
|
header = raw.unpack("S*")[0]
|
91
94
|
|
92
|
-
|
95
|
+
src_addr_type = (header>>14) & 0x03
|
93
96
|
frame_ver = (header >> 12) & 0x03
|
94
|
-
|
97
|
+
dst_addr_type = (header >> 10) & 0x03
|
95
98
|
ielist = (header >> 9) & 0x01
|
96
99
|
seq_comp = (header >> 8) & 0x01
|
97
100
|
panid_comp = (header >> 6) & 0x01
|
@@ -103,78 +106,86 @@ class LazGem::Device
|
|
103
106
|
offset = 2
|
104
107
|
|
105
108
|
if seq_comp == 0 then
|
106
|
-
seq_num = raw[offset
|
107
|
-
offset
|
109
|
+
seq_num = raw[offset].unpack("C")[0]
|
110
|
+
offset += 1
|
108
111
|
end
|
109
|
-
|
110
|
-
if
|
111
|
-
addr_type = 0
|
112
|
-
rx_panid = nil
|
113
|
-
tx_panid = nil
|
114
|
-
elsif rx_addr_type == 0 && tx_addr_type == 0 && panid_comp != 0 then
|
115
|
-
addr_type = 1
|
116
|
-
rx_panid = raw[offset..offset+2].unpack("S*")[0]
|
117
|
-
offset = offset + 2
|
118
|
-
tx_panid = nil
|
119
|
-
elsif rx_addr_type == 0 && tx_addr_type != 0 && panid_comp == 0 then
|
120
|
-
addr_type = 2
|
121
|
-
rx_panid = nil
|
122
|
-
tx_panid = raw[offset..offset+2].unpack("S*")[0]
|
123
|
-
offset = offset + 2
|
124
|
-
elsif rx_addr_type == 0 && tx_addr_type != 0 && panid_comp != 0 then
|
125
|
-
addr_type = 3
|
126
|
-
rx_panid = nil
|
127
|
-
tx_panid = nil
|
128
|
-
elsif rx_addr_type != 0 && tx_addr_type == 0 && panid_comp == 0 then
|
112
|
+
# addr_type
|
113
|
+
if dst_addr_type != 0 then
|
129
114
|
addr_type = 4
|
130
|
-
|
131
|
-
|
132
|
-
tx_panid = nil
|
133
|
-
elsif rx_addr_type != 0 && tx_addr_type == 0 && panid_comp != 0 then
|
134
|
-
addr_type = 5
|
135
|
-
rx_panid = nil
|
136
|
-
tx_panid = nil
|
137
|
-
elsif rx_addr_type != 0 && tx_addr_type != 0 && panid_comp == 0 then
|
138
|
-
addr_type = 6
|
139
|
-
rx_panid = raw[offset..offset+2].unpack("S*")[0]
|
140
|
-
offset = offset + 2
|
141
|
-
tx_panid = nil
|
142
|
-
elsif rx_addr_type != 0 && tx_addr_type != 0 && panid_comp != 0 then
|
143
|
-
addr_type = 7
|
144
|
-
rx_panid = nil
|
145
|
-
tx_panid = nil
|
115
|
+
else
|
116
|
+
addr_type = 0
|
146
117
|
end
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
118
|
+
if src_addr_type != 0 then
|
119
|
+
addr_type += 2
|
120
|
+
end
|
121
|
+
if panid_comp != 0 then
|
122
|
+
addr_type += 1
|
123
|
+
end
|
124
|
+
# dst_panid
|
125
|
+
case addr_type
|
126
|
+
when 1, 4, 6 then
|
127
|
+
dst_panid = raw[offset..offset+1].unpack("S*")[0]
|
128
|
+
offset += 2
|
154
129
|
else
|
155
|
-
|
156
|
-
offset = offset+8
|
130
|
+
dst_panid = nil
|
157
131
|
end
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
132
|
+
# dst_addr
|
133
|
+
case dst_addr_type
|
134
|
+
when 1 then
|
135
|
+
dst_addr = raw[offset].unpack("C")[0]
|
136
|
+
offset += 1
|
137
|
+
when 2 then
|
138
|
+
dst_addr = raw[offset..offset+1].unpack("S*")[0]
|
139
|
+
offset += 2
|
140
|
+
when 3 then
|
141
|
+
dst_addr = raw[offset+7].unpack("H2")[0] +
|
142
|
+
raw[offset+6].unpack("H2")[0] +
|
143
|
+
raw[offset+5].unpack("H2")[0] +
|
144
|
+
raw[offset+4].unpack("H2")[0] +
|
145
|
+
raw[offset+3].unpack("H2")[0] +
|
146
|
+
raw[offset+2].unpack("H2")[0] +
|
147
|
+
raw[offset+1].unpack("H2")[0] +
|
148
|
+
raw[offset+0].unpack("H2")[0]
|
149
|
+
offset += 8
|
150
|
+
else
|
151
|
+
end
|
152
|
+
# src_panid
|
153
|
+
case addr_type
|
154
|
+
when 2 then
|
155
|
+
src_panid = raw[offset..offset+1].unpack("S*")[0]
|
156
|
+
offset += 2
|
157
|
+
else
|
158
|
+
src_panid = nil
|
159
|
+
end
|
160
|
+
# src_addr
|
161
|
+
case src_addr_type
|
162
|
+
when 1 then
|
163
|
+
src_addr = raw[offset].unpack("C")[0]
|
164
|
+
offset += 1
|
165
|
+
when 2 then
|
166
|
+
src_addr = raw[offset..offset+1].unpack("S*")[0]
|
167
|
+
offset += 2
|
168
|
+
when 3 then
|
169
|
+
src_addr = raw[offset+7].unpack("H2")[0] +
|
170
|
+
raw[offset+6].unpack("H2")[0] +
|
171
|
+
raw[offset+5].unpack("H2")[0] +
|
172
|
+
raw[offset+4].unpack("H2")[0] +
|
173
|
+
raw[offset+3].unpack("H2")[0] +
|
174
|
+
raw[offset+2].unpack("H2")[0] +
|
175
|
+
raw[offset+1].unpack("H2")[0] +
|
176
|
+
raw[offset+0].unpack("H2")[0]
|
177
|
+
offset += 8
|
165
178
|
else
|
166
|
-
tx_addr = raw[offset..offset+8].unpack("H*")[0]
|
167
|
-
offset = offset+8
|
168
179
|
end
|
169
180
|
|
170
|
-
payload = raw[offset..len-1]
|
181
|
+
payload = raw[offset..len-1]
|
171
182
|
|
172
183
|
rcv = Hash.new()
|
173
184
|
|
174
185
|
rcv["header"] = header
|
175
|
-
rcv["
|
186
|
+
rcv["src_addr_type"] = src_addr_type
|
176
187
|
rcv["frame_ver"] = frame_ver
|
177
|
-
rcv["
|
188
|
+
rcv["dst_addr_type"] = dst_addr_type
|
178
189
|
rcv["ielist"] = ielist
|
179
190
|
rcv["seq_comp"] = seq_comp
|
180
191
|
rcv["panid_comp"] = panid_comp
|
@@ -183,23 +194,34 @@ class LazGem::Device
|
|
183
194
|
rcv["sec_enb"] = sec_enb
|
184
195
|
rcv["frame_type"] = frame_type
|
185
196
|
rcv["addr_type"] = addr_type
|
186
|
-
rcv["
|
187
|
-
rcv["
|
188
|
-
rcv["
|
189
|
-
rcv["
|
197
|
+
rcv["dst_panid"] = dst_panid
|
198
|
+
rcv["src_panid"] = src_panid
|
199
|
+
rcv["dst_addr"] = dst_addr
|
200
|
+
rcv["src_addr"] = src_addr
|
190
201
|
rcv["seq_num"] = seq_num
|
191
202
|
rcv["payload"] = payload
|
192
203
|
sec,nsec = get_rx_time()
|
193
204
|
rcv["sec"]=sec
|
194
205
|
rcv["nsec"]=nsec
|
195
206
|
rcv["rssi"]=get_rx_rssi()
|
196
|
-
|
197
|
-
return rcv
|
207
|
+
return rcv
|
198
208
|
end
|
199
|
-
def
|
200
|
-
|
201
|
-
|
209
|
+
def send64(addr,payload)
|
210
|
+
set_dst_addr0((addr >> 0)&0x000000000000ffff)
|
211
|
+
set_dst_addr1((addr >> 16)&0x000000000000ffff)
|
212
|
+
set_dst_addr2((addr >> 32)&0x000000000000ffff)
|
213
|
+
set_dst_addr3((addr >> 48)&0x000000000000ffff)
|
202
214
|
@@device_wr.write(payload)
|
203
215
|
sleep 0.001
|
204
216
|
end
|
217
|
+
def send(panid,addr,payload)
|
218
|
+
set_dst_panid(panid)
|
219
|
+
set_dst_addr0(addr)
|
220
|
+
begin
|
221
|
+
@@device_wr.write(payload)
|
222
|
+
rescue Exception => e
|
223
|
+
p e
|
224
|
+
end
|
225
|
+
sleep 0.001
|
226
|
+
end
|
205
227
|
end
|
data/lib/LazGem/ioctl.rb
CHANGED
@@ -12,6 +12,7 @@ class LazGem::Device
|
|
12
12
|
IOCTL_SET_CLOSE= IOCTL_CMD+0x17
|
13
13
|
IOCTL_GET_SEND_MODE= IOCTL_CMD+0x18
|
14
14
|
IOCTL_SET_SEND_MODE= IOCTL_CMD+0x19
|
15
|
+
IOCTL_SET_AES= IOCTL_CMD+0x1a
|
15
16
|
IOCTL_PARAM= 0x1000
|
16
17
|
IOCTL_GET_CH= IOCTL_PARAM+0x02
|
17
18
|
IOCTL_SET_CH= IOCTL_PARAM+0x03
|
@@ -21,24 +22,22 @@ class LazGem::Device
|
|
21
22
|
IOCTL_SET_BPS= IOCTL_PARAM+0x07
|
22
23
|
IOCTL_GET_MY_PANID= IOCTL_PARAM+0x08
|
23
24
|
IOCTL_SET_MY_PANID= IOCTL_PARAM+0x09
|
24
|
-
|
25
|
-
|
25
|
+
IOCTL_GET_DST_PANID= IOCTL_PARAM+0x0a
|
26
|
+
IOCTL_SET_DST_PANID= IOCTL_PARAM+0x0b
|
26
27
|
IOCTL_GET_MY_ADDR0= IOCTL_PARAM+0x0c
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
IOCTL_GET_TX_ADDR3= IOCTL_PARAM+0x1a
|
41
|
-
IOCTL_SET_TX_ADDR3= IOCTL_PARAM+0x1b
|
28
|
+
IOCTL_GET_MY_ADDR1= IOCTL_PARAM+0x0d
|
29
|
+
IOCTL_GET_MY_ADDR2= IOCTL_PARAM+0x0e
|
30
|
+
IOCTL_GET_MY_ADDR3= IOCTL_PARAM+0x0f
|
31
|
+
IOCTL_SET_MY_SHORT_ADDR=IOCTL_PARAM+0x10
|
32
|
+
IOCTL_GET_MY_SHORT_ADDR=IOCTL_PARAM+0x11
|
33
|
+
IOCTL_GET_DST_ADDR0= IOCTL_PARAM+0x14
|
34
|
+
IOCTL_SET_DST_ADDR0= IOCTL_PARAM+0x15
|
35
|
+
IOCTL_GET_DST_ADDR1= IOCTL_PARAM+0x16
|
36
|
+
IOCTL_SET_DST_ADDR1= IOCTL_PARAM+0x17
|
37
|
+
IOCTL_GET_DST_ADDR2= IOCTL_PARAM+0x18
|
38
|
+
IOCTL_SET_DST_ADDR2= IOCTL_PARAM+0x19
|
39
|
+
IOCTL_GET_DST_ADDR3= IOCTL_PARAM+0x1a
|
40
|
+
IOCTL_SET_DST_ADDR3= IOCTL_PARAM+0x1b
|
42
41
|
IOCTL_GET_ADDR_TYPE= IOCTL_PARAM+0x1c
|
43
42
|
IOCTL_SET_ADDR_TYPE= IOCTL_PARAM+0x1d
|
44
43
|
IOCTL_GET_ADDR_SIZE= IOCTL_PARAM+0x1e
|
@@ -59,9 +58,22 @@ class LazGem::Device
|
|
59
58
|
IOCTL_GET_RX_NSEC1= IOCTL_PARAM+0x30
|
60
59
|
IOCTL_GET_RX_RSSI= IOCTL_PARAM+0x32
|
61
60
|
IOCTL_GET_TX_RSSI= IOCTL_PARAM+0x34
|
61
|
+
IOCTL_SET_PROMISCUOUS= IOCTL_PARAM+0x35
|
62
|
+
IOCTL_SET_ACK_REQ= IOCTL_PARAM+0x37
|
63
|
+
IOCTL_SET_BROADCAST= IOCTL_PARAM+0x39
|
64
|
+
IOCTL_SET_EACK_DATA= IOCTL_PARAM+0x3B
|
65
|
+
IOCTL_SET_EACK_LEN= IOCTL_PARAM+0x3D
|
66
|
+
IOCTL_SET_EACK_ENB= IOCTL_PARAM+0x3F
|
67
|
+
IOCTL_GET_EACK= IOCTL_PARAM+0x40
|
68
|
+
IOCTL_SET_ACK_INTERVAL= IOCTL_PARAM+0x43
|
69
|
+
IOCTL_GET_ED_VALUE= IOCTL_PARAM+0x44
|
70
|
+
IOCTL_SET_ANT_SWITCH= IOCTL_PARAM+0x45
|
71
|
+
IOCTL_SET_DSSS_MODE= IOCTL_PARAM+0x80
|
72
|
+
IOCTL_SET_DSSS_SF= IOCTL_PARAM+0x81
|
73
|
+
IOCTL_SET_DSSS_SIZE= IOCTL_PARAM+0x82
|
62
74
|
IOCTL_RF= 0x2000
|
63
|
-
IOCTL_RF_READ= IOCTL_RF
|
64
|
-
IOCTL_RF_WRITE= IOCTL_RF
|
75
|
+
IOCTL_RF_READ= IOCTL_RF
|
76
|
+
IOCTL_RF_WRITE= IOCTL_RF
|
65
77
|
IOCTL_EEPROM= 0x3000
|
66
78
|
IOCTL_RX_LED= 0x4000
|
67
79
|
IOCTL_TX_LED= 0x4000
|
@@ -74,8 +86,25 @@ class LazGem::Device
|
|
74
86
|
set_pwr(pwr)
|
75
87
|
return set_begin()
|
76
88
|
end
|
89
|
+
def setMyAddress(addr)
|
90
|
+
ret = @@device_wr.ioctl(IOCTL_SET_MY_SHORT_ADDR,addr)
|
91
|
+
return ret
|
92
|
+
end
|
77
93
|
def getMyAddress()
|
78
|
-
|
94
|
+
addr = 0;
|
95
|
+
ret = @@device_wr.ioctl(IOCTL_GET_MY_SHORT_ADDR,addr)
|
96
|
+
return ret
|
97
|
+
end
|
98
|
+
def getMyAddr64()
|
99
|
+
data = get_my_addr0();
|
100
|
+
addr = data << 48;
|
101
|
+
data = get_my_addr1();
|
102
|
+
addr = addr | (data << 32);
|
103
|
+
data = get_my_addr2();
|
104
|
+
addr = addr | (data << 16);
|
105
|
+
data = get_my_addr3();
|
106
|
+
addr = addr | (data << 0);
|
107
|
+
return addr;
|
79
108
|
end
|
80
109
|
def rxDisable()
|
81
110
|
rxon = 0;
|
@@ -87,6 +116,37 @@ class LazGem::Device
|
|
87
116
|
ret = @@device_wr.ioctl(IOCTL_SET_RXON,rxon)
|
88
117
|
return ret
|
89
118
|
end
|
119
|
+
def setPromiscuous(on)
|
120
|
+
ret = @@device_wr.ioctl(IOCTL_SET_PROMISCUOUS,on)
|
121
|
+
end
|
122
|
+
def setAckReq(on)
|
123
|
+
ret = @@device_wr.ioctl(IOCTL_SET_ACK_REQ,on)
|
124
|
+
end
|
125
|
+
def setBroadcastEnb(on)
|
126
|
+
ret = @@device_wr.ioctl(IOCTL_SET_BROADCAST,on)
|
127
|
+
end
|
128
|
+
def setEnhanceAck(data)
|
129
|
+
ret = @@device_wr.ioctl(IOCTL_SET_EACK_ENB,0)
|
130
|
+
ret = @@device_wr.ioctl(IOCTL_SET_EACK_LEN,data.length)
|
131
|
+
bindata = data.pack("C*")
|
132
|
+
ret = @@device_wr.ioctl(IOCTL_SET_EACK_DATA,bindata)
|
133
|
+
ret = @@device_wr.ioctl(IOCTL_SET_EACK_ENB,1)
|
134
|
+
end
|
135
|
+
def getEnhanceAck()
|
136
|
+
data = Array.new(32,0)
|
137
|
+
bindata = data.pack("C*")
|
138
|
+
size = @@device_wr.ioctl(IOCTL_GET_EACK,bindata)
|
139
|
+
ret = bindata.unpack("C"+size.to_s)
|
140
|
+
end
|
141
|
+
def setAckTxInterval(interval)
|
142
|
+
size = @@device_wr.ioctl(IOCTL_SET_ACK_INTERVAL,interval)
|
143
|
+
end
|
144
|
+
def getEdValue()
|
145
|
+
ret = @@device_wr.ioctl(IOCTL_GET_ED_VALUE,0)
|
146
|
+
end
|
147
|
+
def setAntSw(antsw)
|
148
|
+
ret = @@device_wr.ioctl(IOCTL_SET_ANT_SWITCH,andsw)
|
149
|
+
end
|
90
150
|
def close()
|
91
151
|
data = 0
|
92
152
|
ret = @@device_wr.ioctl(IOCTL_SET_CLOSE,data)
|
@@ -139,6 +199,10 @@ class LazGem::Device
|
|
139
199
|
ret = @@device_wr.ioctl(IOCTL_SET_SEND_MODE,data)
|
140
200
|
return ret
|
141
201
|
end
|
202
|
+
def setKey(key)
|
203
|
+
ret = @@device_wr.ioctl(IOCTL_SET_AES,key)
|
204
|
+
return ret
|
205
|
+
end
|
142
206
|
|
143
207
|
def getAddrType()
|
144
208
|
ret = @@device_wr.ioctl(IOCTL_GET_SEND_MODE,0)
|
@@ -203,85 +267,81 @@ class LazGem::Device
|
|
203
267
|
ret = @@device_wr.ioctl(IOCTL_SET_MY_PANID,panid)
|
204
268
|
return ret
|
205
269
|
end
|
206
|
-
def
|
270
|
+
def get_dst_panid()
|
207
271
|
panid = 0;
|
208
|
-
ret = @@device_wr.ioctl(
|
272
|
+
ret = @@device_wr.ioctl(IOCTL_GET_DST_PANID,panid)
|
209
273
|
return ret
|
210
274
|
end
|
211
|
-
def
|
212
|
-
ret = @@device_wr.ioctl(
|
213
|
-
return ret
|
275
|
+
def set_dst_panid(panid)
|
276
|
+
# ret = @@device_wr.ioctl(IOCTL_SET_DST_PANID,panid)
|
277
|
+
# return ret
|
278
|
+
begin
|
279
|
+
@@device_wr.ioctl(IOCTL_SET_DST_PANID,panid)
|
280
|
+
rescue Exception => e
|
281
|
+
p e
|
282
|
+
end
|
283
|
+
return 0
|
214
284
|
end
|
215
285
|
def get_my_addr0()
|
216
286
|
addr = 0;
|
217
287
|
ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR0,addr)
|
218
288
|
return ret
|
219
289
|
end
|
220
|
-
def set_my_addr0(addr)
|
221
|
-
ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR0,addr)
|
222
|
-
return ret
|
223
|
-
end
|
224
290
|
def get_my_addr1()
|
225
291
|
addr = 0;
|
226
292
|
ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR1,addr)
|
227
293
|
return ret
|
228
294
|
end
|
229
|
-
def set_my_addr1(addr)
|
230
|
-
ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR1,addr)
|
231
|
-
return ret
|
232
|
-
end
|
233
295
|
def get_my_addr2()
|
234
296
|
addr = 0;
|
235
297
|
ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR2,addr)
|
236
298
|
return ret
|
237
299
|
end
|
238
|
-
def set_my_addr2(addr)
|
239
|
-
ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR2,addr)
|
240
|
-
return ret
|
241
|
-
end
|
242
300
|
def get_my_addr3()
|
243
301
|
addr = 0;
|
244
302
|
ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR3,addr)
|
245
303
|
return ret
|
246
304
|
end
|
247
|
-
def
|
248
|
-
ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR3,addr)
|
249
|
-
return ret
|
250
|
-
end
|
251
|
-
def get_tx_addr0()
|
305
|
+
def get_dst_addr0()
|
252
306
|
addr = 0;
|
253
|
-
ret = @@device_wr.ioctl(
|
307
|
+
ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR0,addr)
|
254
308
|
return ret
|
255
309
|
end
|
256
|
-
def
|
257
|
-
ret = @@device_wr.ioctl(
|
258
|
-
return ret
|
310
|
+
def set_dst_addr0(addr)
|
311
|
+
# ret = @@device_wr.ioctl(IOCTL_SET_DST_ADDR0,addr)
|
312
|
+
# return ret
|
313
|
+
begin
|
314
|
+
@@device_wr.ioctl(IOCTL_SET_DST_ADDR0,addr)
|
315
|
+
rescue Exception => e
|
316
|
+
p e
|
317
|
+
end
|
318
|
+
return 0
|
259
319
|
end
|
260
|
-
def
|
320
|
+
def get_dst_addr1()
|
261
321
|
addr = 0;
|
262
|
-
ret = @@device_wr.ioctl(
|
322
|
+
ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR1,addr)
|
263
323
|
return ret
|
264
324
|
end
|
265
|
-
def
|
266
|
-
ret = @@device_wr.ioctl(
|
325
|
+
def set_dst_addr1(addr)
|
326
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DST_ADDR1,addr)
|
267
327
|
return ret
|
268
328
|
end
|
269
|
-
def
|
329
|
+
def get_dst_addr2()
|
270
330
|
addr = 0;
|
271
|
-
ret = @@device_wr.ioctl(
|
331
|
+
ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR2,addr)
|
272
332
|
return ret
|
273
333
|
end
|
274
|
-
def
|
275
|
-
ret = @@device_wr.ioctl(
|
334
|
+
def set_dst_addr2(addr)
|
335
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DST_ADDR2,addr)
|
276
336
|
return ret
|
277
337
|
end
|
278
|
-
def
|
338
|
+
def get_dst_addr3()
|
279
339
|
addr = 0;
|
280
|
-
ret = @@device_wr.ioctl(
|
340
|
+
ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR3,addr)
|
281
341
|
return ret
|
282
342
|
end
|
283
|
-
def
|
284
|
-
ret = @@device_wr.ioctl(
|
343
|
+
def set_dst_addr3(addr)
|
344
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DST_ADDR3,addr)
|
285
345
|
return ret
|
286
346
|
end
|
287
347
|
def get_addr_type()
|
@@ -366,6 +426,19 @@ class LazGem::Device
|
|
366
426
|
return rssi
|
367
427
|
end
|
368
428
|
|
429
|
+
|
430
|
+
def setModulation(mode)
|
431
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DSSS_MODE,mode)
|
432
|
+
end
|
433
|
+
def setDsssSpreadFactor(sf)
|
434
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DSSS_SF,sf)
|
435
|
+
end
|
436
|
+
def setDsssSize(size,addrmode)
|
437
|
+
size_mode = (size << 8 | addrmode)
|
438
|
+
ret = @@device_wr.ioctl(IOCTL_SET_DSSS_SIZE,size_mode)
|
439
|
+
end
|
440
|
+
|
441
|
+
|
369
442
|
def rf_reg_read(addr)
|
370
443
|
data = 0;
|
371
444
|
if addr >= 0 || addr <= 0xff then
|
@@ -374,8 +447,8 @@ class LazGem::Device
|
|
374
447
|
end
|
375
448
|
end
|
376
449
|
def rf_reg_write(addr,data)
|
377
|
-
if addr >= 0 ||
|
378
|
-
ret = @@device_wr.ioctl(IOCTL_RF_WRITE+addr ,data)
|
450
|
+
if addr >= 0 || addr <= 0xff || data >= 0 || data <= 0xff then
|
451
|
+
ret = @@device_wr.ioctl(IOCTL_RF_WRITE + addr + 0x80, data)
|
379
452
|
return ret
|
380
453
|
end
|
381
454
|
end
|
@@ -390,7 +463,7 @@ class LazGem::Device
|
|
390
463
|
|
391
464
|
def rx_led(time)
|
392
465
|
if time >= 0 || time <= 0xffff then
|
393
|
-
ret = @@device_wr.ioctl(IOCTL_RX_LED,time)
|
466
|
+
ret = @@device_wr.ioctl(IOCTL_RX_LED + 0x0800,time)
|
394
467
|
return ret
|
395
468
|
end
|
396
469
|
end
|
data/lib/LazGem/version.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
# -*- coding: utf-8; mode: ruby -*-
|
3
|
+
# Function:
|
4
|
+
# Lazurite Sub-GHz/Lazurite Pi Gateway Sample program
|
5
|
+
# SerialMonitor.rb
|
6
|
+
require 'LazGem'
|
7
|
+
|
8
|
+
laz = LazGem::Device.new
|
9
|
+
|
10
|
+
# Halt process when CTRL+C is pushed.
|
11
|
+
finish_flag=0
|
12
|
+
Signal.trap(:INT){
|
13
|
+
finish_flag=1
|
14
|
+
}
|
15
|
+
|
16
|
+
if ARGV.size == 0
|
17
|
+
printf("please input argument of ch at least\n")
|
18
|
+
printf("command format is shown below...\n")
|
19
|
+
printf("./sample_rx.rb ch panid baud pwr\n")
|
20
|
+
exit 0
|
21
|
+
end
|
22
|
+
|
23
|
+
# open device deriver
|
24
|
+
laz.init()
|
25
|
+
|
26
|
+
dst_addr = 0xffff
|
27
|
+
ch = 36
|
28
|
+
panid = 0xabcd
|
29
|
+
baud = 100
|
30
|
+
pwr = 20
|
31
|
+
|
32
|
+
if ARGV.size > 0
|
33
|
+
ch=Integer(ARGV[0])
|
34
|
+
end
|
35
|
+
if ARGV.size > 1
|
36
|
+
panid = Integer(ARGV[1])
|
37
|
+
end
|
38
|
+
if ARGV.size > 2
|
39
|
+
baud = Integer(ARGV[2])
|
40
|
+
end
|
41
|
+
if ARGV.size > 3
|
42
|
+
pwr = Integer(ARGV[3])
|
43
|
+
end
|
44
|
+
|
45
|
+
print(sprintf("myAddress=0x%016x\n",laz.getMyAddr64()))
|
46
|
+
print(sprintf("myAddress=0x%04x\n",laz.getMyAddress()))
|
47
|
+
print(sprintf("ch=%d, panid = %04x, baud= %d, pwr=%d\n",ch,panid,baud,pwr))
|
48
|
+
laz.begin(ch,panid,baud,pwr)
|
49
|
+
laz.setPromiscuous(true)
|
50
|
+
laz.rxEnable()
|
51
|
+
|
52
|
+
# printing header of receiving log
|
53
|
+
print(sprintf("time\t\t\t\t\t[ns]\trxPanid\trxAddr\ttxAddr\trssi\tpayload\n"))
|
54
|
+
print(sprintf("------------------------------------------------------------------------------------------\n"))
|
55
|
+
|
56
|
+
# main routine
|
57
|
+
while finish_flag == 0 do
|
58
|
+
if laz.available() <= 0
|
59
|
+
next
|
60
|
+
end
|
61
|
+
rcv = laz.read()
|
62
|
+
# printing data
|
63
|
+
p rcv
|
64
|
+
end
|
65
|
+
laz.rxDisable()
|
66
|
+
laz.setPromiscuous(false)
|
67
|
+
|
68
|
+
# finishing process
|
69
|
+
laz.remove()
|
70
|
+
|
71
|
+
|
data/sample/sample_rx.rb
CHANGED
@@ -12,34 +12,60 @@ finish_flag=0
|
|
12
12
|
Signal.trap(:INT){
|
13
13
|
finish_flag=1
|
14
14
|
}
|
15
|
+
|
16
|
+
if ARGV.size == 0
|
17
|
+
printf("please input argument of ch at least\n")
|
18
|
+
printf("command format is shown below...\n")
|
19
|
+
printf("./sample_rx.rb ch panid baud pwr\n")
|
20
|
+
printf(" ch: 24-61\n")
|
21
|
+
printf(" panid: 0-0xffff\n")
|
22
|
+
printf(" baud: 50 or 100\n")
|
23
|
+
printf(" pwr: 1 or 20\n")
|
24
|
+
exit 0
|
25
|
+
end
|
26
|
+
|
15
27
|
# open device deriver
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
28
|
+
|
29
|
+
dst_addr = 0xffff
|
30
|
+
ch = 36
|
31
|
+
panid = 0xabcd
|
32
|
+
baud = 100
|
33
|
+
pwr = 20
|
34
|
+
|
35
|
+
if ARGV.size > 0
|
36
|
+
ch=Integer(ARGV[0])
|
37
|
+
end
|
38
|
+
if ARGV.size > 1
|
39
|
+
panid = Integer(ARGV[1])
|
40
|
+
end
|
41
|
+
if ARGV.size > 2
|
42
|
+
baud = Integer(ARGV[2])
|
43
|
+
end
|
44
|
+
if ARGV.size > 3
|
45
|
+
pwr = Integer(ARGV[3])
|
46
|
+
end
|
47
|
+
|
25
48
|
laz.init()
|
26
|
-
|
49
|
+
|
50
|
+
print(sprintf("myAddress=0x%016x\n",laz.getMyAddr64()))
|
27
51
|
print(sprintf("myAddress=0x%04x\n",laz.getMyAddress()))
|
52
|
+
|
53
|
+
laz.begin(ch,panid,baud,pwr)
|
28
54
|
laz.rxEnable()
|
29
55
|
|
30
56
|
# printing header of receiving log
|
31
|
-
print(sprintf("time\t\t\t\trxPanid\trxAddr\ttxAddr\trssi\tpayload\n"))
|
57
|
+
print(sprintf("time\t\t\t\t\t[ns]\trxPanid\trxAddr\ttxAddr\trssi\tpayload\n"))
|
32
58
|
print(sprintf("------------------------------------------------------------------------------------------\n"))
|
33
59
|
|
34
60
|
# main routine
|
35
61
|
while finish_flag == 0 do
|
36
62
|
if laz.available() <= 0
|
63
|
+
sleep 0.01
|
37
64
|
next
|
38
65
|
end
|
39
66
|
rcv = laz.read()
|
40
67
|
# printing data
|
41
|
-
|
42
|
-
print(sprintf("rx_time= %s\trx_nsec=%d\trssi=%d %s\n",Time.at(rcv["sec"]),rcv["nsec"],rcv["rssi"],rcv["payload"]));
|
68
|
+
p rcv
|
43
69
|
end
|
44
70
|
|
45
71
|
# finishing process
|
data/sample/sample_tx.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# Function:
|
4
4
|
# Lazurite Sub-GHz/Lazurite Pi Gateway Sample program
|
5
5
|
# SerialMonitor.rb
|
6
|
+
#require 'LazGem'
|
6
7
|
require 'LazGem'
|
7
8
|
|
8
9
|
laz = LazGem::Device.new
|
@@ -12,40 +13,61 @@ finish_flag=0
|
|
12
13
|
Signal.trap(:INT){
|
13
14
|
finish_flag=1
|
14
15
|
}
|
16
|
+
if ARGV.size == 0
|
17
|
+
printf("please input argument of ch at least\n")
|
18
|
+
printf("command format is shown below...\n")
|
19
|
+
printf("./sample_tx.rb ch panid dst_short_addr baud pwr\n")
|
20
|
+
printf(" ch: 24-61\n")
|
21
|
+
printf(" panid: 0-0xffff\n")
|
22
|
+
printf(" dst..: distination address\n")
|
23
|
+
printf(" baud: 50 or 100\n")
|
24
|
+
printf(" pwr: 1 or 20\n")
|
25
|
+
exit 0
|
26
|
+
end
|
27
|
+
|
15
28
|
# open device deriver
|
16
|
-
#
|
17
|
-
# LAZURITE.open(ch=36,panid=0xabcd,pwr=20,rate=100),mode=2)
|
18
|
-
# parameter
|
19
|
-
# ch: frequency 24-61. 36 is in default
|
20
|
-
# panid: pan id
|
21
|
-
# pwr: tx power
|
22
|
-
# rate: bit rate 50 or 100
|
23
|
-
# pwr: tx power 1 or 20
|
24
|
-
# mode: must be 2
|
25
29
|
laz.init()
|
26
|
-
|
30
|
+
|
31
|
+
dst_short_addr = 0x444a
|
32
|
+
ch = 36
|
33
|
+
panid = 0xabcd
|
34
|
+
baud = 100
|
35
|
+
pwr = 20
|
36
|
+
|
37
|
+
if ARGV.size > 0
|
38
|
+
ch=Integer(ARGV[0])
|
39
|
+
end
|
40
|
+
if ARGV.size > 1
|
41
|
+
panid = Integer(ARGV[1])
|
42
|
+
end
|
43
|
+
if ARGV.size > 2
|
44
|
+
dst_short_addr = Integer(ARGV[2])
|
45
|
+
end
|
46
|
+
if ARGV.size > 3
|
47
|
+
baud = Integer(ARGV[3])
|
48
|
+
end
|
49
|
+
if ARGV.size > 4
|
50
|
+
pwr = Integer(ARGV[4])
|
51
|
+
end
|
52
|
+
|
27
53
|
i = 0
|
28
54
|
# main routine
|
29
55
|
while finish_flag == 0 do
|
30
56
|
begin
|
31
|
-
laz.begin(
|
57
|
+
laz.begin(ch,panid,baud,pwr)
|
32
58
|
rescue Exception => e
|
33
59
|
p "file io error!! reset driver"
|
34
60
|
laz.remove()
|
35
61
|
laz.init()
|
36
62
|
end
|
37
63
|
begin
|
38
|
-
|
39
|
-
p payload
|
40
|
-
laz.send(0xabcd,0x5fba,payload)
|
41
|
-
p laz.get_tx_rssi()
|
42
|
-
laz.close()
|
64
|
+
laz.send(panid,dst_short_addr,"LAPIS Lazurite RF system")
|
43
65
|
rescue Exception => e
|
44
|
-
|
45
|
-
|
66
|
+
p e
|
67
|
+
sleep 1
|
46
68
|
end
|
69
|
+
laz.close()
|
47
70
|
sleep 1.000
|
48
|
-
i = i + 1
|
49
71
|
end
|
50
72
|
|
51
73
|
# finishing process
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
# -*- coding: utf-8; mode: ruby -*-
|
3
|
+
# Function:
|
4
|
+
# Lazurite Sub-GHz/Lazurite Pi Gateway Sample program
|
5
|
+
# SerialMonitor.rb
|
6
|
+
#require 'LazGem'
|
7
|
+
require 'LazGem'
|
8
|
+
|
9
|
+
laz = LazGem::Device.new
|
10
|
+
|
11
|
+
# Halt process when CTRL+C is pushed.
|
12
|
+
finish_flag=0
|
13
|
+
Signal.trap(:INT){
|
14
|
+
finish_flag=1
|
15
|
+
}
|
16
|
+
if ARGV.size < 1
|
17
|
+
printf("please input argument of ch at least 1\n")
|
18
|
+
printf("command format is shown below...\n")
|
19
|
+
printf("./sample_tx.rb ch panid ieee_addr baud pwr\n")
|
20
|
+
printf(" ch: 24-61\n")
|
21
|
+
printf(" panid: 0-0xffff\n")
|
22
|
+
printf(" ieee..:0x001d....\n")
|
23
|
+
printf(" baud: 50 or 100\n")
|
24
|
+
printf(" pwr: 1 or 20\n")
|
25
|
+
exit 0
|
26
|
+
end
|
27
|
+
|
28
|
+
# open device deriver
|
29
|
+
laz.init()
|
30
|
+
|
31
|
+
ieee_addr = 0x001D129000045F6B
|
32
|
+
ch = 36
|
33
|
+
panid = 0xabcd
|
34
|
+
baud = 100
|
35
|
+
pwr = 20
|
36
|
+
|
37
|
+
if ARGV.size > 0
|
38
|
+
ch=Integer(ARGV[0])
|
39
|
+
end
|
40
|
+
if ARGV.size > 1
|
41
|
+
panid = Integer(ARGV[1])
|
42
|
+
end
|
43
|
+
if ARGV.size > 2
|
44
|
+
ieee_addr = Integer(ARGV[2])
|
45
|
+
end
|
46
|
+
if ARGV.size > 3
|
47
|
+
baud = Integer(ARGV[3])
|
48
|
+
end
|
49
|
+
if ARGV.size > 4
|
50
|
+
pwr = Integer(ARGV[4])
|
51
|
+
end
|
52
|
+
|
53
|
+
i = 0
|
54
|
+
# main routine
|
55
|
+
while finish_flag == 0 do
|
56
|
+
begin
|
57
|
+
laz.begin(ch,panid,baud,pwr)
|
58
|
+
rescue Exception => e
|
59
|
+
p "file io error!! reset driver"
|
60
|
+
laz.remove()
|
61
|
+
laz.init()
|
62
|
+
end
|
63
|
+
begin
|
64
|
+
laz.send64(ieee_addr,"LAPIS Lazurite RF system")
|
65
|
+
rescue Exception => e
|
66
|
+
p e
|
67
|
+
sleep 1
|
68
|
+
end
|
69
|
+
laz.close()
|
70
|
+
sleep 1.000
|
71
|
+
end
|
72
|
+
|
73
|
+
# finishing process
|
74
|
+
laz.remove()
|
75
|
+
|
76
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: LazGem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NaotakaSaito
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -76,8 +76,10 @@ files:
|
|
76
76
|
- lib/LazGem/ioctl.rb
|
77
77
|
- lib/LazGem/version.rb
|
78
78
|
- release.log
|
79
|
+
- sample/sample_promiscuous.rb
|
79
80
|
- sample/sample_rx.rb
|
80
81
|
- sample/sample_tx.rb
|
82
|
+
- sample/sample_tx64.rb
|
81
83
|
homepage: https://github.com/LAPIS-Lazurite/LazGem
|
82
84
|
licenses:
|
83
85
|
- MIT
|
@@ -98,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
100
|
version: '0'
|
99
101
|
requirements: []
|
100
102
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.7.6.2
|
102
104
|
signing_key:
|
103
105
|
specification_version: 4
|
104
106
|
summary: Lazurite ruby gem
|