LazGem 0.0.8 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|