LazGem 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 985405454252520def5e31a7afae9187704aa1c4
4
+ data.tar.gz: 03699e93b777b3b52de11603b2fa40df4bce8c12
5
+ SHA512:
6
+ metadata.gz: feae049a0705ecdac98751f784c75ef733b49d49b5ae3f2e2c180863ed028681b28711b9aa353411e2965bdf34a84f931c59e02b4328f2e23690b3a40b561445
7
+ data.tar.gz: 7fff6cd541ccb21472487dd82dd9c90db8c97469da5fd0e901b9fc2620e41b283a8321da52e178ed7df06b47198aedf3c9c0c40a072b3d6b33d9e7f30603c3fb
data/README.md CHANGED
@@ -22,13 +22,17 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- please try to execute sample program
25
+ ###please try to execute sample program
26
26
  tx: sample\sample_tx.rb
27
+
27
28
  rx: sample\sample_rx.rb
28
29
 
29
- document(Japanese only):
30
+
31
+ ###document(Japanese only):
32
+
30
33
  http://www.lapis-semi.com/lazurite-jp/contents/gateway/ruby/LazGem.html
31
34
 
35
+
32
36
  ## Development
33
37
 
34
38
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/LazGem/device.rb CHANGED
@@ -3,8 +3,12 @@
3
3
  # Function:
4
4
  # Lazurite Pi Gateway SubGHz library
5
5
 
6
-
7
- class LAZURITE_ERROR < StandardError; end
6
+ #################################################################
7
+ ######
8
+ ###### Do not forget to change path of libraries
9
+ ###### require and insmod
10
+ ######
11
+ ################################################################
8
12
  class LazGem::Device
9
13
  ##
10
14
  # func : Read the data from the receiving pipe
@@ -15,44 +19,20 @@ class LazGem::Device
15
19
  @@device_rd=nil
16
20
  @@device_wr=nil
17
21
 
18
- # LAZURITE.open(ch=36,panid=0xabcd,pwr=20,rate=100),mode=2)
19
- # function
20
- # open device deriver
21
- # parameter
22
- # ch: frequency 24-61. 36 is in default
23
- # panid: pan id
24
- # pwr: tx power
25
- # rate: bit rate 50 or 100
26
- # pwr: tx power 1 or 20
27
- # mode: must be 2
28
- # return
29
- # none
30
- def device_open(ch=36, panid=0xabcd, pwr=20, rate=100, mode=2)
31
- if(ch < 24) || (ch > 61) then
32
- puts "ch is invalid. it must be 24-61"
33
- raise LAZURITE_ERROR
34
- return
35
- end
36
- if(pwr != 1) && (pwr != 20) then
37
- puts "pwr is invalid. it must be 1 or 20"
38
- raise LAZURITE_ERROR
39
- return
40
- end
41
- if(rate != 50) && (rate != 100) then
42
- puts "rate is invalid. it must be 50 or 100"
43
- raise LAZURITE_ERROR
44
- return
45
- end
46
- cmd = "sudo insmod /home/pi/driver/LazDriver/DRV_802154.ko ch=" +ch.to_s+" panid=0x"+panid.to_s(16)+ " pwr="+pwr.to_s+" rate="+rate.to_s + " mode="+mode.to_s(16)
22
+ def init()
23
+ cmd = "sudo insmod /home/pi/driver/LazDriver/lazdriver.ko"
24
+ p cmd
47
25
  result = system(cmd)
48
- bp3596_dev = "/dev/bp3596"
26
+ lzgw_dev = "/dev/lzgw"
49
27
  sleep(0.1)
50
- result = system("sudo chmod 777 "+bp3596_dev)
28
+ result = system("sudo chmod 777 "+lzgw_dev)
51
29
  # p result
52
30
  sleep(0.1)
53
- @@device_rd = open(bp3596_dev,"rb")
54
- @@device_wr = open(bp3596_dev,"wb")
55
- result = system("tail -n -2 /var/log/messages")
31
+ @@device_rd = open(lzgw_dev,"rb")
32
+ @@device_wr = open(lzgw_dev,"wb")
33
+ @@device_wr.sync = true
34
+ @@device_rd.sync = true
35
+ result = system("tail -n -4 /var/log/messages")
56
36
  print("\n")
57
37
  # p result
58
38
  print("Success to load SubGHz module\n")
@@ -65,180 +45,147 @@ class LazGem::Device
65
45
  # none
66
46
  # return
67
47
  # none
68
- def device_close()
69
- @@device_rd.close
48
+ def remove()
49
+ begin
50
+ @@device_rd.close
51
+ rescue Exception => e
52
+ p e
53
+ end
54
+ begin
70
55
  @@device_wr.close
56
+ rescue Exception => e
57
+ p e
58
+ end
71
59
  @@devie_rd = nil
72
60
  @@device_wr = nil
73
- cmd = "sudo rmmod DRV_802154"
61
+ cmd = "sudo rmmod lazdriver"
74
62
  system(cmd)
75
63
  p cmd
76
64
  end
77
65
 
78
-
79
- # LAZURITE.read()
80
- # function
81
- # try to read data from SubGHz module
82
- # parameter
83
- # none
84
- # return
85
- # -1: no data
86
- # Hash[]: receiving data
87
- # key
88
- # "command" => command it should be fixed to 0x03
89
- # "Time" => Time class of receiving time
90
- # "usec" => integer type data of usec for receiving time
91
- # "rxPanid" => unsigned long type data of panid for receiving
92
- # if packet does not include panid, data is -1.
93
- # "rxAddrType" => unsigned char type deta of address type
94
- # 0 = packet no rxAddr
95
- # 1 = rxAddr = 8 bit integer type
96
- # 2 = rxAddr = 16bit include rxAddr
97
- # 3 = rxAddr = 64bit rxAddr String type
98
- # "rxAddr" => rx address. data type is determined by rxAddrType
99
- # "txPanid" => long type data of panid for sending
100
- # if packet does not include panid, data is -1.
101
- # "txAddrType" => unsigned char type deta of address type
102
- # same meaning of data as rxAddrType
103
- # "txAddr" => tx Address. data type is determind by txAddrType
104
- # "rssi" => RF power, when receiving
105
- # "payload" => binary stream type of data. need to unpack for using as strings
106
-
107
66
  def read()
108
- # Data reception wait (timeout = 100ms)
109
- ret = select([@@device_rd], nil, nil, 0.1)
110
- # Reads the size of the received data
111
- len = @@device_rd.read(2)
112
- if ((len == "") || (len == nil)) then # read result is empty
113
- return -1
114
- end
115
- size = len.unpack("S*")[0]
116
- # The received data is read
117
- recv_buf = @@device_rd.read(size)
118
- if ((recv_buf == "") || (recv_buf == nil)) then # read result is empty
119
- return -1
67
+ size = 2
68
+ len = @@device_rd.read(size)
69
+ if ((len == "") || (len == nil)) then # read result is empty
70
+ return -1
71
+ end
72
+ size = len.unpack("S*")[0]
73
+
74
+ # The received data is read
75
+ raw = @@device_rd.read(size)
76
+ if ((raw == "") || (raw == nil)) then # read result is empty
77
+ return -1
120
78
  end
121
- return recv_dec(recv_buf,size)
122
- end
123
-
124
- def recv_dec(raw,size)
125
- # PANID
126
- command = raw[0..1].unpack("S*")[0]
127
- tv_sec = raw[2..5].unpack("L*")[0]
128
- tv_usec = raw[6..9].unpack("L*")[0]/1000
129
- t = Time.at(tv_sec,tv_usec)
130
- area = raw[10..11].unpack("a2")[0]
131
- ch = raw[12..13].unpack("S*")[0]
132
- rate = raw[14..15].unpack("S*")[0]
133
- pwr = raw[16..17].unpack("S*")[0]
134
- header = raw[18..21].unpack("L*")[0]
135
- rxPanid = raw[22..25].unpack("L*")[0]
136
- rxAddrType = raw[26].unpack("C*")[0]
137
- if rxAddrType == 0 then
138
- rxAddr = -1
139
- elsif rxAddrType == 1 then
140
- rxAddr = raw[34].unpack("n*")[0]
141
- elsif rxAddrType == 2 then
142
- rxAddr = raw[33..34].unpack("n*")[0]
143
- elsif rxAddrType == 3 then
144
- rxAddr = raw[27..34].unpack("a8*")[0]
145
- end
146
- txPanid = raw[35..38].unpack("L*")[0]
147
- txAddrType = raw[39].unpack("C*")[0]
148
-
149
- if txAddrType == 0 then
150
- txAddr = -1
151
- elsif txAddrType == 1 then
152
- txAddr = raw[47].unpack("n*")[0]
153
- elsif txAddrType == 2 then
154
- txAddr = raw[46..47].unpack("n*")[0]
155
- elsif txAddrType == 3 then
156
- txAddr = raw[40..47].unpack("a8*")[0]
157
- end
158
-
159
- rssi = raw[48].unpack("C*")[0]
160
- payload = raw[49..size-1]
161
79
 
162
- out = Hash["Command" => command,
163
- "Time" => t,
164
- "usec" => tv_usec,
165
- "Area" => area,
166
- "ch" => ch,
167
- "rate" => rate,
168
- "pwr" => pwr,
169
- "header" => header,
170
- "rxPanid" => rxPanid,
171
- "rxAddrType" => rxAddrType,
172
- "rxAddr" => rxAddr,
173
- "txPanid" => txPanid,
174
- "txAddrType" => txAddrType,
175
- "txAddr" => txAddr,
176
- "rssi" => rssi,
177
- "payload" => payload,
178
- ]
179
- end
180
-
181
- # LAZURITE.write()
182
- # function
183
- # sending data by SubGHz
184
- # currently only one format is supported.
185
- # parameter
186
- # HASH[]
187
- # currently two parameter should be included.
188
- # "rxAddr" => Integer type of rxAddress
189
- # "payload" => binary array of sending data
190
- # <option>
191
- # "rxPanid" => rxPanid. If it is not included, rxPanid = 0xABCD
192
- # return
193
- # none
194
- # Exception
195
- # KeyError : if hash data does not include rxAddr, this error is raisen.
196
- # PAYLOAD_SIZE_OVER : payload length is over
197
- def write(packet)
198
- begin
199
- rxAddrType =packet.fetch("header")
200
- rescue KeyError
201
- header =0xa821
80
+ len = raw.length
81
+ header = raw.unpack("S*")[0]
82
+
83
+ rx_addr_type = (header>>14) & 0x03
84
+ frame_ver = (header >> 12) & 0x03
85
+ tx_addr_type = (header >> 10) & 0x03
86
+ ielist = (header >> 9) & 0x01
87
+ seq_comp = (header >> 8) & 0x01
88
+ panid_comp = (header >> 6) & 0x01
89
+ ack_req = (header >> 5) & 0x01
90
+ pending = (header >> 4) & 0x01
91
+ sec_enb = (header >> 3) & 0x01
92
+ frame_type = (header >> 0) & 0x07
93
+
94
+ offset = 2
95
+
96
+ if seq_comp == 0 then
97
+ seq = raw[offset..offset+1].unpack("C")[0]
98
+ offset = offset + 1
202
99
  end
203
- seq = 0
204
100
 
205
- # panid
206
- begin
207
- rxPanid =packet.fetch("rxPanid")
208
- rescue KeyError
209
- rxPanid = 0xABCD
101
+ if rx_addr_type == 0 && tx_addr_type == 0 && panid_comp == 0 then
102
+ addr_type = 0
103
+ rx_panid = nil
104
+ tx_panid = nil
105
+ elsif rx_addr_type == 0 && tx_addr_type == 0 && panid_comp != 0 then
106
+ addr_type = 1
107
+ rx_panid = raw[offset..offset+2].unpack("S*")[0]
108
+ offset = offset + 2
109
+ tx_panid = nil
110
+ elsif rx_addr_type == 0 && tx_addr_type != 0 && panid_comp == 0 then
111
+ addr_type = 2
112
+ rx_panid = nil
113
+ tx_panid = raw[offset..offset+2].unpack("S*")[0]
114
+ offset = offset + 2
115
+ elsif rx_addr_type == 0 && tx_addr_type != 0 && panid_comp != 0 then
116
+ addr_type = 3
117
+ rx_panid = nil
118
+ tx_panid = nil
119
+ elsif rx_addr_type != 0 && tx_addr_type == 0 && panid_comp == 0 then
120
+ addr_type = 4
121
+ rx_panid = raw[offset..offset+2].unpack("S*")[0]
122
+ offset = offset + 2
123
+ tx_panid = nil
124
+ elsif rx_addr_type != 0 && tx_addr_type == 0 && panid_comp != 0 then
125
+ addr_type = 5
126
+ rx_panid = nil
127
+ tx_panid = nil
128
+ elsif rx_addr_type != 0 && tx_addr_type != 0 && panid_comp == 0 then
129
+ addr_type = 6
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 = 7
135
+ rx_panid = nil
136
+ tx_panid = nil
210
137
  end
211
138
 
212
- # rxAddr
213
- rxAddr =packet.fetch("rxAddr")
214
-
215
- # txAddr
216
- txAddr = 0
217
-
218
- #payload
219
- payload =packet["payload"]
220
- if payload.length > 235 then
221
- puts "Payload size over. maximum length is less than 235"
222
- raise LAZURITE_ERROR
223
- return
139
+ if rx_addr_type == 1 then
140
+ rx_addr = raw[offset..offset+1].unpack("C")[0]
141
+ offset = offset+1
142
+ elsif rx_addr_type == 2 then
143
+ rx_addr = raw[offset..offset+2].unpack("S*")[0]
144
+ offset = offset+2
145
+ else
146
+ rx_addr = raw[offset..offset+8].unpack("H*")[0]
147
+ offset = offset+8
224
148
  end
225
149
 
226
- raw = [header,seq,rxPanid,rxAddr,txAddr,payload].pack("scsssa*")
227
-
228
- ret = select(nil, [@@device_wr], nil, 0.1)
229
- begin
230
- len = @@device_wr.write(raw)
231
- rescue
232
- puts "Doesn't receive ACK"
233
- raise LAZURITE_ERROR
150
+ if tx_addr_type == 1 then
151
+ tx_addr = raw[offset..offset+1].unpack("C")[0]
152
+ offset = offset+1
153
+ elsif tx_addr_type == 2 then
154
+ tx_addr = raw[offset..offset+2].unpack("S")[0]
155
+ offset = offset+2
156
+ else
157
+ tx_addr = raw[offset..offset+8].unpack("H*")[0]
158
+ offset = offset+8
234
159
  end
235
- return len
160
+
161
+ payload = raw[offset..len-1].unpack("Z*")[0]
162
+
163
+ rcv = Hash.new()
164
+
165
+ rcv["header"] = header
166
+ rcv["rx_addr_type"] = rx_addr_type
167
+ rcv["frame_ver"] = frame_ver
168
+ rcv["tx_addr_type"] = tx_addr_type
169
+ rcv["ielist"] = ielist
170
+ rcv["seq_comp"] = seq_comp
171
+ rcv["panid_comp"] = panid_comp
172
+ rcv["ack_req"] = ack_req
173
+ rcv["pending"] = pending
174
+ rcv["sec_enb"] = sec_enb
175
+ rcv["frame_type"] = frame_type
176
+ rcv["addr_type"] = addr_type
177
+ rcv["rx_panid"] = rx_panid
178
+ rcv["tx_panid"] = tx_panid
179
+ rcv["rx_addr"] = rx_addr
180
+ rcv["tx_addr"] = tx_addr
181
+ rcv["payload"] = payload
182
+
183
+ return rcv
236
184
  end
237
- def print_bin(data)
238
- out = ""
239
- for i in 0..data.length-1 do
240
- print(data[i].unpack("H*")[0]," ")
241
- end
242
- print("\n")
185
+ def send(panid,addr,payload)
186
+ set_tx_panid(panid)
187
+ set_tx_addr0(addr)
188
+ @@device_wr.write(payload)
189
+ sleep 0.001
243
190
  end
244
191
  end
@@ -0,0 +1,385 @@
1
+
2
+ # -*- coding: utf-8; mode: ruby -*-
3
+ #
4
+ # Function:
5
+ # Lazurite Pi Gateway SubGHz library
6
+
7
+ class LazGem::Device
8
+ IOCTL_CMD= 0x0000
9
+ IOCTL_SET_BEGIN= IOCTL_CMD+0x11
10
+ IOCTL_SET_RXON= IOCTL_CMD+0x13
11
+ IOCTL_SET_RXOFF= IOCTL_CMD+0x15
12
+ IOCTL_SET_CLOSE= IOCTL_CMD+0x17
13
+ IOCTL_GET_SEND_MODE= IOCTL_CMD+0x18
14
+ IOCTL_SET_SEND_MODE= IOCTL_CMD+0x19
15
+ IOCTL_PARAM= 0x1000
16
+ IOCTL_GET_CH= IOCTL_PARAM+0x02
17
+ IOCTL_SET_CH= IOCTL_PARAM+0x03
18
+ IOCTL_GET_PWR= IOCTL_PARAM+0x04
19
+ IOCTL_SET_PWR= IOCTL_PARAM+0x05
20
+ IOCTL_GET_BPS= IOCTL_PARAM+0x06
21
+ IOCTL_SET_BPS= IOCTL_PARAM+0x07
22
+ IOCTL_GET_MY_PANID= IOCTL_PARAM+0x08
23
+ IOCTL_SET_MY_PANID= IOCTL_PARAM+0x09
24
+ IOCTL_GET_TX_PANID= IOCTL_PARAM+0x0a
25
+ IOCTL_SET_TX_PANID= IOCTL_PARAM+0x0b
26
+ 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
42
+ IOCTL_GET_ADDR_TYPE= IOCTL_PARAM+0x1c
43
+ IOCTL_SET_ADDR_TYPE= IOCTL_PARAM+0x1d
44
+ IOCTL_GET_ADDR_SIZE= IOCTL_PARAM+0x1e
45
+ IOCTL_SET_ADDR_SIZE= IOCTL_PARAM+0x1f
46
+ IOCTL_GET_DRV_MODE= IOCTL_PARAM+0x20
47
+ IOCTL_SET_DRV_MODE= IOCTL_PARAM+0x21
48
+ IOCTL_GET_SENSE_TIME= IOCTL_PARAM+0x22
49
+ IOCTL_SET_SENSE_TIME= IOCTL_PARAM+0x23
50
+ IOCTL_GET_TX_RETRY= IOCTL_PARAM+0x24
51
+ IOCTL_SET_TX_RETRY= IOCTL_PARAM+0x25
52
+ IOCTL_GET_TX_INTERVAL= IOCTL_PARAM+0x26
53
+ IOCTL_SET_TX_INTERVAL= IOCTL_PARAM+0x27
54
+ IOCTL_GET_CCA_WAIT= IOCTL_PARAM+0x28
55
+ IOCTL_SET_CCA_WAIT= IOCTL_PARAM+0x29
56
+ IOCTL_GET_RX_SEC0= IOCTL_PARAM+0x2A
57
+ IOCTL_GET_RX_SEC1= IOCTL_PARAM+0x2C
58
+ IOCTL_GET_RX_NSEC0= IOCTL_PARAM+0x2E
59
+ IOCTL_GET_RX_NSEC1= IOCTL_PARAM+0x30
60
+ IOCTL_GET_RX_RSSI= IOCTL_PARAM+0x32
61
+ IOCTL_GET_TX_RSSI= IOCTL_PARAM+0x34
62
+ IOCTL_RF= 0x2000
63
+ IOCTL_RF_READ= IOCTL_RF+0x0000
64
+ IOCTL_RF_WRITE= IOCTL_RF+0x8000
65
+ IOCTL_EEPROM= 0x3000
66
+ IOCTL_RX_LED= 0x4000
67
+ IOCTL_TX_LED= 0x4000
68
+
69
+ ### API
70
+ def begin(ch,panid,bps,pwr)
71
+ set_ch(ch)
72
+ set_my_panid(panid)
73
+ set_bps(bps)
74
+ set_pwr(pwr)
75
+ return set_begin()
76
+ end
77
+ def getMyAddress()
78
+ return get_my_addr0()
79
+ end
80
+ def rxDisable()
81
+ rxon = 0;
82
+ ret = @@device_wr.ioctl(IOCTL_SET_RXOFF,rxon)
83
+ return ret
84
+ end
85
+ def rxEnable()
86
+ rxon = 1
87
+ ret = @@device_wr.ioctl(IOCTL_SET_RXON,rxon)
88
+ return ret
89
+ end
90
+ def close()
91
+ data = 0
92
+ ret = @@device_wr.ioctl(IOCTL_SET_CLOSE,data)
93
+ return ret
94
+ end
95
+ def getSendMode()
96
+ data = 0
97
+ ret = @@device_wr.ioctl(IOCTL_GET_SEND_MODE,data)
98
+ param = Hash.new()
99
+ param["addr_type"] = get_addr_type()
100
+ param["sense_time"] = get_sense_time()
101
+ param["tx_retry"] = get_tx_retry()
102
+ param["tx_interval"] = get_tx_interval()
103
+ param["cca_wait"] = get_cca_wait()
104
+ param["my_address"] = get_my_addr0()
105
+ return param
106
+ end
107
+ def setSendMode(param)
108
+ ret = @@device_wr.ioctl(IOCTL_GET_SEND_MODE,data)
109
+ begin
110
+ data = param.fetch("addr_type")
111
+ ret = @@device_wr.ioctl(IOCTL_SET_ADDR_TYPE,data)
112
+ rescue Exception
113
+ end
114
+ begin
115
+ data = param.fetch("sense_time")
116
+ ret = @@device_wr.ioctl(IOCTL_SET_SENSE_TIME,data)
117
+ rescue Exception
118
+ end
119
+ begin
120
+ data = param.fetch("tx_retry")
121
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_RETRY,data)
122
+ rescue Exception
123
+ end
124
+ begin
125
+ data = param.fetch("tx_interval")
126
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_INTERVAL,data)
127
+ rescue Exception
128
+ end
129
+ begin
130
+ data = param.fetch("cca_wait")
131
+ ret = @@device_wr.ioctl(IOCTL_SET_CCA_WAIT,data)
132
+ rescue Exception
133
+ end
134
+ begin
135
+ data = param.fetch("my_address")
136
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDRESS,data)
137
+ rescue Exception
138
+ end
139
+ ret = @@device_wr.ioctl(IOCTL_SET_SEND_MODE,data)
140
+ return ret
141
+ end
142
+
143
+ ### Libraries
144
+ def set_begin()
145
+ data = 0;
146
+ ret = @@device_wr.ioctl(IOCTL_SET_BEGIN,data)
147
+ return ret
148
+ end
149
+ def get_ch()
150
+ ch = 0;
151
+ ret = @@device_wr.ioctl(IOCTL_GET_CH,ch)
152
+ return ret
153
+ end
154
+ def set_ch(ch)
155
+ ret = @@device_wr.ioctl(IOCTL_SET_CH,ch)
156
+ end
157
+ def get_pwr()
158
+ pwr = 0;
159
+ ret = @@device_wr.ioctl(IOCTL_GET_PWR,pwr)
160
+ return ret
161
+ end
162
+ def set_pwr(pwr)
163
+ ret = @@device_wr.ioctl(IOCTL_SET_PWR,pwr)
164
+ return ret
165
+ end
166
+ def get_bps()
167
+ bps = 0;
168
+ ret = @@device_wr.ioctl(IOCTL_GET_BPS,bps)
169
+ return ret
170
+ end
171
+ def set_bps(bps)
172
+ ret = @@device_wr.ioctl(IOCTL_SET_BPS,bps)
173
+ return ret
174
+ end
175
+ def get_my_panid()
176
+ panid = 0;
177
+ ret = @@device_wr.ioctl(IOCTL_GET_MY_PANID,panid)
178
+ return ret
179
+ end
180
+ def set_my_panid(panid)
181
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_PANID,panid)
182
+ return ret
183
+ end
184
+ def get_tx_panid()
185
+ panid = 0;
186
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_PANID,panid)
187
+ return ret
188
+ end
189
+ def set_tx_panid(panid)
190
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_PANID,panid)
191
+ return ret
192
+ end
193
+ def get_my_addr0()
194
+ addr = 0;
195
+ ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR0,addr)
196
+ return ret
197
+ end
198
+ def set_my_addr0(addr)
199
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR0,addr)
200
+ return ret
201
+ end
202
+ def get_my_addr1()
203
+ addr = 0;
204
+ ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR1,addr)
205
+ return ret
206
+ end
207
+ def set_my_addr1(addr)
208
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR1,addr)
209
+ return ret
210
+ end
211
+ def get_my_addr2()
212
+ addr = 0;
213
+ ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR2,addr)
214
+ return ret
215
+ end
216
+ def set_my_addr2(addr)
217
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR2,addr)
218
+ return ret
219
+ end
220
+ def get_my_addr3()
221
+ addr = 0;
222
+ ret = @@device_wr.ioctl(IOCTL_GET_MY_ADDR3,addr)
223
+ return ret
224
+ end
225
+ def set_my_addr3(addr)
226
+ ret = @@device_wr.ioctl(IOCTL_SET_MY_ADDR3,addr)
227
+ return ret
228
+ end
229
+ def get_tx_addr0()
230
+ addr = 0;
231
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR0,addr)
232
+ return ret
233
+ end
234
+ def set_tx_addr0(addr)
235
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR0,addr)
236
+ return ret
237
+ end
238
+ def get_tx_addr1()
239
+ addr = 0;
240
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR1,addr)
241
+ return ret
242
+ end
243
+ def set_tx_addr1(addr)
244
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR1,addr)
245
+ return ret
246
+ end
247
+ def get_tx_addr2()
248
+ addr = 0;
249
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR2,addr)
250
+ return ret
251
+ end
252
+ def set_tx_addr2(addr)
253
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR2,addr)
254
+ return ret
255
+ end
256
+ def get_tx_addr3()
257
+ addr = 0;
258
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_ADDR3,addr)
259
+ return ret
260
+ end
261
+ def set_tx_addr3(addr)
262
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_ADDR3,addr)
263
+ return ret
264
+ end
265
+ def get_addr_type()
266
+ type = 0
267
+ ret = @@device_wr.ioctl(IOCTL_GET_ADDR_TYPE,type)
268
+ return ret
269
+ end
270
+ def set_addr_type(type)
271
+ ret = @@device_wr.ioctl(IOCTL_SET_ADDR_TYPE,type)
272
+ return ret
273
+ end
274
+ def get_addr_size()
275
+ size = 0;
276
+ ret = @@device_wr.ioctl(IOCTL_GET_ADDR_SIZE,size)
277
+ return ret
278
+ end
279
+ def set_addr_size(size)
280
+ ret = @@device_wr.ioctl(IOCTL_SET_ADDR_SIZE,size)
281
+ return ret
282
+ end
283
+ def get_drv_mode()
284
+ mode = 0;
285
+ ret = @@device_wr.ioctl(IOCTL_GET_DRV_MODE,mode)
286
+ return ret
287
+ end
288
+ def set_drv_mode(mode)
289
+ ret = @@device_wr.ioctl(IOCTL_SET_DRV_MODE,mode)
290
+ return ret
291
+ end
292
+ def get_sense_time()
293
+ sense_time = 0;
294
+ ret = @@device_wr.ioctl(IOCTL_GET_SENSE_TIME,sense_time)
295
+ return ret
296
+ end
297
+ def set_sense_time(sense_time)
298
+ ret = @@device_wr.ioctl(IOCTL_SET_SENSE_TIME,sense_time)
299
+ return ret
300
+ end
301
+ def get_tx_retry()
302
+ tx_retry = 0;
303
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_RETRY,tx_retry)
304
+ return ret
305
+ end
306
+ def set_tx_retry(tx_retry)
307
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_RETRY,tx_retry)
308
+ return ret
309
+ end
310
+ def get_tx_interval()
311
+ tx_interval = 0;
312
+ ret = @@device_wr.ioctl(IOCTL_GET_TX_INTERVAL,tx_interval)
313
+ return ret
314
+ end
315
+ def set_tx_interval(tx_interval)
316
+ ret = @@device_wr.ioctl(IOCTL_SET_TX_INTERVAL,tx_interval)
317
+ return ret
318
+ end
319
+ def get_cca_wait()
320
+ cca_wait = 0;
321
+ ret = @@device_wr.ioctl(IOCTL_GET_CCA_WAIT,cca_wait)
322
+ return ret
323
+ end
324
+ def set_cca_wait(cca_wait)
325
+ ret = @@device_wr.ioctl(IOCTL_SET_CCA_WAIT,cca_wait)
326
+ return ret
327
+ end
328
+ def get_rx_time()
329
+ tmp = 0;
330
+ rx_sec = @@device_wr.ioctl(IOCTL_GET_RX_SEC1,tmp)
331
+ rx_sec = rx_sec * 65536 + @@device_wr.ioctl(IOCTL_GET_RX_SEC0,tmp)
332
+ rx_nsec = @@device_wr.ioctl(IOCTL_GET_RX_NSEC1,tmp)
333
+ rx_nsec = rx_nsec *65536 + @@device_wr.ioctl(IOCTL_GET_RX_NSEC0,tmp)
334
+ rx_time = Hash.new()
335
+ rx_time["sec"] = rx_sec
336
+ rx_time["nsec"] = rx_nsec
337
+ return rx_time
338
+ end
339
+ def get_rx_rssi()
340
+ tmp = 0;
341
+ rssi = @@device_wr.ioctl(IOCTL_GET_RX_RSSI,tmp)
342
+ return rssi
343
+ end
344
+ def get_tx_rssi()
345
+ tmp = 0;
346
+ rssi = @@device_wr.ioctl(IOCTL_GET_TX_RSSI,tmp)
347
+ return rssi
348
+ end
349
+
350
+ def rf_reg_read(addr)
351
+ data = 0;
352
+ if addr >= 0 || addr <= 0xff then
353
+ ret = @@device_wr.ioctl(IOCTL_RF_READ + addr,data)
354
+ return ret
355
+ end
356
+ end
357
+ def rf_reg_write(addr,data)
358
+ if addr >= 0 || ch <= 0xff || data >= 0 || data <= 0xff then
359
+ ret = @@device_wr.ioctl(IOCTL_RF_WRITE+addr ,data)
360
+ return ret
361
+ end
362
+ end
363
+
364
+ def eeprom_read(addr)
365
+ data = 0;
366
+ if addr >= 0 || addr <= 0x0fff then
367
+ ret = @@device_wr.ioctl(IOCTL_EEPROM + addr,data)
368
+ return ret
369
+ end
370
+ end
371
+
372
+ def rx_led(time)
373
+ if time >= 0 || time <= 0xffff then
374
+ ret = @@device_wr.ioctl(IOCTL_RX_LED,time)
375
+ return ret
376
+ end
377
+ end
378
+
379
+ def tx_led(time)
380
+ if time >= 0 || time <= 0xffff then
381
+ ret = @@device_wr.ioctl(IOCTL_TX_LED,time)
382
+ return ret
383
+ end
384
+ end
385
+ end
@@ -1,3 +1,3 @@
1
1
  module LazGem
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/LazGem.rb CHANGED
@@ -2,4 +2,5 @@ module LazGem; end
2
2
 
3
3
  require_relative "LazGem/version"
4
4
  require_relative "LazGem/device"
5
+ require_relative "LazGem/ioctl"
5
6
 
data/sample/sample_rx.rb CHANGED
@@ -22,7 +22,10 @@ Signal.trap(:INT){
22
22
  # rate: bit rate 50 or 100
23
23
  # pwr: tx power 1 or 20
24
24
  # mode: must be 2
25
- laz.device_open()
25
+ laz.init()
26
+ laz.begin(36,0xABCD,100,20)
27
+ print(sprintf("myAddress=0x%04x\n",laz.getMyAddress()))
28
+ laz.rxEnable()
26
29
 
27
30
  # printing header of receiving log
28
31
  print(sprintf("time\t\t\t\trxPanid\trxAddr\ttxAddr\trssi\tpayload\n"))
@@ -35,17 +38,13 @@ while finish_flag == 0 do
35
38
  next
36
39
  end
37
40
  # printing data
38
- print(sprintf("%s.%06d\t0x%04X\t0x%04X\t0x%04X\t%03d\t%s",
39
- rcv["Time"].strftime("%Y-%m-%d %H:%M:%S"),
40
- rcv["usec"],
41
- rcv["rxPanid"],
42
- rcv["rxAddr"],
43
- rcv["txAddr"],
44
- rcv["rssi"],
45
- rcv["payload"].unpack("a*")[0]))
41
+ p rcv
42
+ rx_time = laz.get_rx_time()
43
+ rssi = laz.get_rx_rssi()
44
+ print(sprintf("rx_time= %s\trx_nsec=%d\trssi=%d\n",Time.at(rx_time["sec"]),rx_time["nsec"],rssi));
46
45
  end
47
46
 
48
47
  # finishing process
49
- laz.device_close()
48
+ laz.remove()
50
49
 
51
50
 
data/sample/sample_tx.rb CHANGED
@@ -7,22 +7,48 @@ require 'LazGem'
7
7
 
8
8
  laz = LazGem::Device.new
9
9
 
10
+ # Halt process when CTRL+C is pushed.
10
11
  finish_flag=0
11
12
  Signal.trap(:INT){
12
13
  finish_flag=1
13
14
  }
14
-
15
- laz.device_open()
16
-
15
+ # 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
+ laz.init()
26
+ print(sprintf("myAddress=0x%04x\n",laz.getMyAddress()))
27
+ i = 0
28
+ # main routine
17
29
  while finish_flag == 0 do
18
- tx = Hash["rxAddr" => 0x902b]
19
- tx["payload"] = "Welcome SubGHz\n"
20
30
  begin
21
- laz.write(tx)
22
- rescue LAZURITE_ERROR
31
+ laz.begin(36,0xABCD,100,20)
32
+ rescue Exception => e
33
+ p "file io error!! reset driver"
34
+ laz.remove()
35
+ laz.init()
36
+ end
37
+ 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()
43
+ rescue Exception => e
44
+ p e
45
+ sleep 1
23
46
  end
47
+ sleep 1.000
48
+ i = i + 1
24
49
  end
25
50
 
26
- laz.device_close()
51
+ # finishing process
52
+ laz.remove()
27
53
 
28
54
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: LazGem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - NaotakaSaito
@@ -10,57 +9,51 @@ authors:
10
9
  autorequire:
11
10
  bindir: exe
12
11
  cert_chain: []
13
- date: 2016-03-17 00:00:00.000000000 Z
12
+ date: 2016-09-01 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: bundler
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ~>
18
+ - - "~>"
21
19
  - !ruby/object:Gem::Version
22
20
  version: '1.11'
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ~>
25
+ - - "~>"
29
26
  - !ruby/object:Gem::Version
30
27
  version: '1.11'
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rake
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ~>
32
+ - - "~>"
37
33
  - !ruby/object:Gem::Version
38
34
  version: '10.0'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ~>
39
+ - - "~>"
45
40
  - !ruby/object:Gem::Version
46
41
  version: '10.0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: minitest
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ~>
46
+ - - "~>"
53
47
  - !ruby/object:Gem::Version
54
48
  version: '5.0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ~>
53
+ - - "~>"
61
54
  - !ruby/object:Gem::Version
62
55
  version: '5.0'
63
- description: ! 'low power IoT device '
56
+ description: 'low power IoT device '
64
57
  email:
65
58
  - saitou088@dsn.lapis-semi.com
66
59
  - saito253@dsn.lapis-semi.com
@@ -68,8 +61,8 @@ executables: []
68
61
  extensions: []
69
62
  extra_rdoc_files: []
70
63
  files:
71
- - .gitignore
72
- - .travis.yml
64
+ - ".gitignore"
65
+ - ".travis.yml"
73
66
  - CODE_OF_CONDUCT.md
74
67
  - Gemfile
75
68
  - LICENSE.txt
@@ -80,6 +73,7 @@ files:
80
73
  - bin/setup
81
74
  - lib/LazGem.rb
82
75
  - lib/LazGem/device.rb
76
+ - lib/LazGem/ioctl.rb
83
77
  - lib/LazGem/version.rb
84
78
  - release.log
85
79
  - sample/sample_rx.rb
@@ -87,26 +81,25 @@ files:
87
81
  homepage: https://github.com/LAPIS-Lazurite/LazGem
88
82
  licenses:
89
83
  - MIT
84
+ metadata: {}
90
85
  post_install_message:
91
86
  rdoc_options: []
92
87
  require_paths:
93
88
  - lib
94
89
  required_ruby_version: !ruby/object:Gem::Requirement
95
- none: false
96
90
  requirements:
97
- - - ! '>='
91
+ - - ">="
98
92
  - !ruby/object:Gem::Version
99
93
  version: '0'
100
94
  required_rubygems_version: !ruby/object:Gem::Requirement
101
- none: false
102
95
  requirements:
103
- - - ! '>='
96
+ - - ">="
104
97
  - !ruby/object:Gem::Version
105
98
  version: '0'
106
99
  requirements: []
107
100
  rubyforge_project:
108
- rubygems_version: 1.8.23
101
+ rubygems_version: 2.2.2
109
102
  signing_key:
110
- specification_version: 3
103
+ specification_version: 4
111
104
  summary: Lazurite ruby gem
112
105
  test_files: []