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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c3656381c62a56251075c9f8a2100fa659d9f9df
4
- data.tar.gz: b166421e3ca0a2f91d03873e18958bf13331ba1e
2
+ SHA256:
3
+ metadata.gz: 76dd58cb44646e65529a4b39b7d1df1c683e706012f8246bc019da1785f91546
4
+ data.tar.gz: eaeef35b2ba4e6d51c43df459b7f63d5bc1a7d4c04e6fc2fee75da2f0c156eec
5
5
  SHA512:
6
- metadata.gz: b3b0402b79744b9c2a1636aed88739311c1f07fb0c7c7a3d6b0e6b9f9e02ed255209c893aa4d396653015eff0259496bc75796c4355101f6ad1131ef080f662e
7
- data.tar.gz: 1e2a2ed8fd02d8eb2b6ac7ee0be18ae95bfa3f8569168dc8ecaa471a7aaa2637032090892434c6ec1554a0c1fbb5c50f872f698e347efdae7b1be0f62e01f2e3
6
+ metadata.gz: 3b6f8f43d5aaea14bf5a40c4e1864d09a26f8af0db87f5a7d5d6cd2d0cfd300e5f1da94b36e108b466bcf728cf7cdd838c53274e0c328abad85129ab3492d8b3
7
+ data.tar.gz: bdb3cad3dd35987602654dfa32d85fcf29979e406b0f3e39e7c64a1c7601f3a91c169b28979d262dd0e008ca6486fa22b3ff6dd2d31b908350a0e9a3dc0d8d33
data/.gitignore CHANGED
@@ -7,3 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ tags
11
+ tags.lock
12
+ sample/log
@@ -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
- @@device_wr.close
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
- if ((len == "") || (len == nil)) then # read result is empty
70
- return 0
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
- if ((len == "") || (len == nil)) then # read result is empty
79
- return 0
80
- end
81
- size = len.unpack("S*")[0]
81
+ if ((len == "") || (len == nil)) then # read result is empty
82
+ return 0
83
+ end
84
+ size = len.unpack("S*")[0]
82
85
 
83
- # The received data is read
84
- raw = @@device_rd.read(size)
85
- if ((raw == "") || (raw == nil)) then # read result is empty
86
- return -1
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
- rx_addr_type = (header>>14) & 0x03
95
+ src_addr_type = (header>>14) & 0x03
93
96
  frame_ver = (header >> 12) & 0x03
94
- tx_addr_type = (header >> 10) & 0x03
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..offset+1].unpack("C")[0]
107
- offset = offset + 1
109
+ seq_num = raw[offset].unpack("C")[0]
110
+ offset += 1
108
111
  end
109
-
110
- if rx_addr_type == 0 && tx_addr_type == 0 && panid_comp == 0 then
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
- rx_panid = raw[offset..offset+2].unpack("S*")[0]
131
- offset = offset + 2
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
- if rx_addr_type == 1 then
149
- rx_addr = raw[offset..offset+1].unpack("C")[0]
150
- offset = offset+1
151
- elsif rx_addr_type == 2 then
152
- rx_addr = raw[offset..offset+2].unpack("S*")[0]
153
- offset = offset+2
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
- rx_addr = raw[offset..offset+8].unpack("H*")[0]
156
- offset = offset+8
130
+ dst_panid = nil
157
131
  end
158
-
159
- if tx_addr_type == 1 then
160
- tx_addr = raw[offset..offset+1].unpack("C")[0]
161
- offset = offset+1
162
- elsif tx_addr_type == 2 then
163
- tx_addr = raw[offset..offset+2].unpack("S")[0]
164
- offset = offset+2
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].unpack("Z*")[0]
181
+ payload = raw[offset..len-1]
171
182
 
172
183
  rcv = Hash.new()
173
184
 
174
185
  rcv["header"] = header
175
- rcv["rx_addr_type"] = rx_addr_type
186
+ rcv["src_addr_type"] = src_addr_type
176
187
  rcv["frame_ver"] = frame_ver
177
- rcv["tx_addr_type"] = tx_addr_type
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["rx_panid"] = rx_panid
187
- rcv["tx_panid"] = tx_panid
188
- rcv["rx_addr"] = rx_addr
189
- rcv["tx_addr"] = tx_addr
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 send(panid,addr,payload)
200
- set_tx_panid(panid)
201
- set_tx_addr0(addr)
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
@@ -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
- IOCTL_GET_TX_PANID= IOCTL_PARAM+0x0a
25
- IOCTL_SET_TX_PANID= IOCTL_PARAM+0x0b
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
- IOCTL_SET_MY_ADDR0= IOCTL_PARAM+0x0d
28
- IOCTL_GET_MY_ADDR1= IOCTL_PARAM+0x0e
29
- IOCTL_SET_MY_ADDR1= IOCTL_PARAM+0x0f
30
- IOCTL_GET_MY_ADDR2= IOCTL_PARAM+0x10
31
- IOCTL_SET_MY_ADDR2= IOCTL_PARAM+0x11
32
- IOCTL_GET_MY_ADDR3= IOCTL_PARAM+0x12
33
- IOCTL_SET_MY_ADDR3= IOCTL_PARAM+0x13
34
- IOCTL_GET_TX_ADDR0= IOCTL_PARAM+0x14
35
- IOCTL_SET_TX_ADDR0= IOCTL_PARAM+0x15
36
- IOCTL_GET_TX_ADDR1= IOCTL_PARAM+0x16
37
- IOCTL_SET_TX_ADDR1= IOCTL_PARAM+0x17
38
- IOCTL_GET_TX_ADDR2= IOCTL_PARAM+0x18
39
- IOCTL_SET_TX_ADDR2= IOCTL_PARAM+0x19
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+0x0000
64
- IOCTL_RF_WRITE= IOCTL_RF+0x8000
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
- return get_my_addr0()
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 get_tx_panid()
270
+ def get_dst_panid()
207
271
  panid = 0;
208
- ret = @@device_wr.ioctl(IOCTL_GET_TX_PANID,panid)
272
+ ret = @@device_wr.ioctl(IOCTL_GET_DST_PANID,panid)
209
273
  return ret
210
274
  end
211
- def set_tx_panid(panid)
212
- ret = @@device_wr.ioctl(IOCTL_SET_TX_PANID,panid)
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 set_my_addr3(addr)
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(IOCTL_GET_TX_ADDR0,addr)
307
+ ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR0,addr)
254
308
  return ret
255
309
  end
256
- def set_tx_addr0(addr)
257
- ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR0,addr)
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 get_tx_addr1()
320
+ def get_dst_addr1()
261
321
  addr = 0;
262
- ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR1,addr)
322
+ ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR1,addr)
263
323
  return ret
264
324
  end
265
- def set_tx_addr1(addr)
266
- ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR1,addr)
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 get_tx_addr2()
329
+ def get_dst_addr2()
270
330
  addr = 0;
271
- ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR2,addr)
331
+ ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR2,addr)
272
332
  return ret
273
333
  end
274
- def set_tx_addr2(addr)
275
- ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR2,addr)
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 get_tx_addr3()
338
+ def get_dst_addr3()
279
339
  addr = 0;
280
- ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR3,addr)
340
+ ret = @@device_wr.ioctl(IOCTL_GET_DST_ADDR3,addr)
281
341
  return ret
282
342
  end
283
- def set_tx_addr3(addr)
284
- ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR3,addr)
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 || ch <= 0xff || data >= 0 || data <= 0xff then
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
@@ -1,3 +1,3 @@
1
1
  module LazGem
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -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
+
@@ -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
- # 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
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
- laz.begin(36,0xABCD,100,20)
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
- #p rcv
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
@@ -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
- print(sprintf("myAddress=0x%04x\n",laz.getMyAddress()))
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(36,0xABCD,100,20)
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
- payload =sprintf("hello pi gateway %d\n",i)
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
- p e
45
- sleep 1
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.0.8
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: 2016-09-17 00:00:00.000000000 Z
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.2.2
103
+ rubygems_version: 2.7.6.2
102
104
  signing_key:
103
105
  specification_version: 4
104
106
  summary: Lazurite ruby gem