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 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