nRF24-ruby 0.0.2 → 0.0.3

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.
@@ -19,11 +19,12 @@ if http
19
19
  puts "\n"
20
20
  end
21
21
 
22
+ bmac="B2:B2:B3"
23
+ NRF24::set_bmac bmac
24
+ r0=NRF24.new id: :eka, ce: 22,cs: 27, irq: 17, chan:3, ack: false, mac: "00:A7:A7"
25
+ r1=NRF24.new id: :toka, ce: 24,cs: 23, irq: 22, chan: 3, ack: false, mac: "00:A5:A5"
22
26
 
23
- r0=NRF24.new id: :eka, ce: 22,cs: 27, irq: 17, chan:3, ack: true
24
- r1=NRF24.new id: :toka, ce: 24,cs: 23, irq: 22, chan: 3, ack: true
25
-
26
- puts "Main Loop Starts:"
27
+ puts "Main Loop Starts: bmac: #{NRF24::get_bmac}"
27
28
 
28
29
  loopc=0;
29
30
  sc=0;
@@ -36,10 +37,19 @@ loop do
36
37
  str.each_byte do |b|
37
38
  msg<<b
38
39
  end
39
- if sc&1==0
40
- r0.send_q << msg
41
- else
42
- r1.send_q << msg
40
+ if sc&2==0
41
+ if sc&1==0
42
+ r0.send_q << {msg: msg, tx_mac: bmac}
43
+ else
44
+ r1.send_q << {msg: msg, tx_mac: bmac}
45
+ end
46
+ else
47
+ if sc&1==0
48
+ #r0.send_q << {msg: msg, tx_mac: r1.mac,ack:true}
49
+ r0.send_q << {msg: msg, tx_mac: "FF:A5:A5",ack:true}
50
+ else
51
+ r1.send_q << {msg: msg, tx_mac: r0.mac,ack:true}
52
+ end
43
53
  end
44
54
  NRF24::note "sent '#{str}' to #{sc&1}"
45
55
  end
@@ -39,11 +39,12 @@ update_status = (data) ->
39
39
  @build_regs = (regs) ->
40
40
  ret="<table>"
41
41
  for k,v of regs
42
- ret+="<tr>"
43
- ret+="<td >#{v.name}<td>"
44
- ret+="<td id='d0r#{k}'>d0r#{k}<td>"
45
- ret+="<td id='d1r#{k}'>d1r#{k}<td>"
46
- ret+="</tr>"
42
+ if not v.hide
43
+ ret+="<tr>"
44
+ ret+="<td >#{v.name}<td>"
45
+ ret+="<td id='d0r#{k}'>d0r#{k}<td>"
46
+ ret+="<td id='d1r#{k}'>d1r#{k}<td>"
47
+ ret+="</tr>"
47
48
  ret+="</table>"
48
49
  $(".regs").html(ret)
49
50
  ret="<table>"
data/lib/nRF24-ruby.rb CHANGED
@@ -13,26 +13,30 @@ class NRF24
13
13
 
14
14
  @@regs={
15
15
  CONFIG: {address: 0x00,len:7},
16
- EN_AA: {address: 0x01,len:5},
17
- EN_RXADDR: {address: 0x02,len:5},
18
- SETUP_AW: {address: 0x03},
16
+ EN_AA: {address: 0x01,len:6},
17
+ EN_RXADDR: {address: 0x02,len:6},
18
+ SETUP_AW: {address: 0x03,len:2},
19
19
  SETUP_RETR: {address: 0x04},
20
20
  RF_CH: {address: 0x05,format: :dec},
21
21
  RF_SETUP: {address: 0x06,len:4},
22
22
  STATUS: {address: 0x07, poll: 1,len: 7},
23
23
  OBSERVE_TX: {address: 0x08, poll: 1},
24
24
  CD: {address: 0x09, poll: 1, len: 1},
25
- RX_ADDR_P0: {address: 0x0A, bytes: 5, format: :hex },
26
- RX_ADDR_P1: {address: 0x0B, bytes: 5, format: :hex },
27
- RX_ADDR_P2: {address: 0x0C, format: :hex},
28
- RX_ADDR_P3: {address: 0x0D, format: :hex},
29
- RX_ADDR_P4: {address: 0x0E, format: :hex},
30
- RX_ADDR_P5: {address: 0x0F, format: :hex},
31
- TX_ADDR: {address: 0x10, bytes: 5 , format: :hex},
32
- RX_PW_P0: {address: 0x11, format: :dec},
33
- RX_PW_P1: {address: 0x12, format: :dec},
25
+ RX_ADDR_P0: {address: 0x0A, bytes: 3, format: :hex },
26
+ RX_ADDR_P1: {address: 0x0B, bytes: 3, format: :hex },
27
+ RX_ADDR_P2: {address: 0x0C, format: :hex,hide: true},
28
+ RX_ADDR_P3: {address: 0x0D, format: :hex,hide: true},
29
+ RX_ADDR_P4: {address: 0x0E, format: :hex,hide: true},
30
+ RX_ADDR_P5: {address: 0x0F, format: :hex,hide: true},
31
+ TX_ADDR: {address: 0x10, bytes: 3 , format: :hex},
32
+ RX_PW_P0: {address: 0x11, format: :dec,hide: true},
33
+ RX_PW_P1: {address: 0x12, format: :dec,hide: true},
34
+ RX_PW_P2: {address: 0x13, format: :dec,hide: true},
35
+ RX_PW_P3: {address: 0x14, format: :dec,hide: true},
36
+ RX_PW_P4: {address: 0x15, format: :dec,hide: true},
37
+ RX_PW_P5: {address: 0x16, format: :dec,hide: true},
34
38
  FIFO_STATUS: {address: 0x17, poll: 1, len:7},
35
- DYNPD: {address: 0x1C,len:5},
39
+ DYNPD: {address: 0x1C,len:6},
36
40
  FEATURE: {address: 0x1D,len:3},
37
41
  }
38
42
 
@@ -51,6 +55,12 @@ class NRF24
51
55
 
52
56
  @@sem=Mutex.new
53
57
  @@log=[]
58
+ @@bmac="45:45:45:45:45"
59
+
60
+ def self.set_bmac mac
61
+ @@bmac=mac
62
+ puts "set bmac to #{mac}"
63
+ end
54
64
 
55
65
  def self.note str,*args
56
66
  begin
@@ -147,20 +157,22 @@ class NRF24
147
157
  [@s[:status]]
148
158
  end
149
159
 
150
- def send packet
160
+ def send packet,hash={}
151
161
  pac=Array.new(@@PAYLOAD_SIZE, 0)
152
162
  packet.each_with_index do |byte,i|
153
163
  pac[i]=packet[i] if i<@@PAYLOAD_SIZE
154
164
  end
155
165
  @ce.off
156
166
  wreg :CONFIG,0x0a
157
- if @s[:params]
167
+ if hash[:ack] and @s[:params][:ack]
158
168
  cmd :W_TX_PAYLOAD,pac
169
+ #puts "with ack"
159
170
  else
160
171
  cmd :W_TX_PAYLOAD_NOACK,pac
172
+ #puts "with NOack"
161
173
  end
162
174
  @ce.on
163
- sleep 0.0005
175
+ sleep 0.001
164
176
  @ce.off
165
177
  wreg :CONFIG,0x0b
166
178
  @ce.on
@@ -202,7 +214,9 @@ class NRF24
202
214
  @s[:sfail]+=1
203
215
  end
204
216
  if (d&0x01)==0x00
205
- ret=cmd :R_RX_PAYLOAD,Array.new(@@PAYLOAD_SIZE, 0xff)
217
+ pipe=(s>>1)&0x05
218
+ NRF24::note "pipe: #{pipe}"
219
+ ret=cmd :R_RX_PAYLOAD,Array.new(@@PAYLOAD_SIZE, 0xff)
206
220
  @recv_q<<ret
207
221
  @s[:rcnt]+=1
208
222
  donesome=true
@@ -226,8 +240,10 @@ class NRF24
226
240
  @s[:sarc]+=d&0x0f
227
241
  end
228
242
 
229
- msg=@send_q.pop
230
- send msg
243
+ msg=@send_q.pop
244
+ wreg :TX_ADDR,NRF24::mac2a(msg[:tx_mac])
245
+ #puts "send mac: #{msg[:tx_mac]}"
246
+ send msg[:msg], ack:msg[:ack]
231
247
  @s[:scnt]+=1
232
248
  end
233
249
  end
@@ -257,12 +273,16 @@ class NRF24
257
273
  end
258
274
 
259
275
  attr_accessor :rcnt,:scnt,:rfull
260
- attr_accessor :send_q,:recv_q,:log
276
+ attr_accessor :send_q,:recv_q,:log,:mac
261
277
 
262
278
  def self.all_devices
263
279
  @@all
264
280
  end
265
281
 
282
+ def self.get_bmac
283
+ @@bmac
284
+ end
285
+
266
286
  def self.json
267
287
  devs=[]
268
288
  NRF24::all_devices.each do |data|
@@ -287,6 +307,14 @@ class NRF24
287
307
  @@log
288
308
  end
289
309
 
310
+ def self.mac2a mac
311
+ a=[]
312
+ mac.split(":").each do |b|
313
+ a<<b.hex
314
+ end
315
+ a
316
+ end
317
+
290
318
  def hw_init hash
291
319
  @s={
292
320
  stamp: 0,
@@ -308,28 +336,47 @@ class NRF24
308
336
  wreg :RF_CH,hash[:chan]||2
309
337
  if hash[:ack]
310
338
  wreg :SETUP_RETR,0x8f
311
- wreg :EN_AA,0x7f
312
- wreg :DYNPD,0x03
313
- wreg :FEATURE,0x00
339
+ wreg :EN_AA,0x3e # no acks on broadcast
314
340
  else
315
341
  wreg :SETUP_RETR,0x00
316
342
  wreg :EN_AA,0x00
317
- wreg :DYNPD,0x00
318
- wreg :FEATURE,0x01
319
343
  end
320
- wreg :SETUP_AW,0x03
344
+ wreg :FEATURE,0x01
345
+ wreg :SETUP_AW,0x01
346
+ wreg :DYNPD,0x00
321
347
  wreg :STATUS,0x70
348
+ wreg :EN_RXADDR,0x3f
322
349
  wreg :RX_PW_P0,@@PAYLOAD_SIZE
323
350
  wreg :RX_PW_P1,@@PAYLOAD_SIZE
324
- wreg :TX_ADDR,[0x12,0x34,0x56,0x78,0x9a]
325
- wreg :RX_ADDR_P0,[0x12,0x34,0x56,0x78,0x9a]
326
-
327
- if hash[:ack]
328
- cmd :ACTIVATE,[ 0]
351
+ wreg :RX_PW_P2,@@PAYLOAD_SIZE
352
+ wreg :RX_PW_P3,@@PAYLOAD_SIZE
353
+ wreg :RX_PW_P4,@@PAYLOAD_SIZE
354
+ wreg :RX_PW_P5,@@PAYLOAD_SIZE
355
+ wreg :TX_ADDR,NRF24::mac2a(@@bmac)
356
+ wreg :RX_ADDR_P0,NRF24::mac2a(@@bmac)
357
+ wreg :RX_ADDR_P2,0xfc
358
+ wreg :RX_ADDR_P3,0xfd
359
+ wreg :RX_ADDR_P4,0xfe
360
+ wreg :RX_ADDR_P5,0xff
361
+ if hash[:mac] #keep old if not defined
362
+ wreg :RX_ADDR_P1,NRF24::mac2a(hash[:mac])
363
+ @mac=hash[:mac]
329
364
  else
330
- cmd :ACTIVATE,[ get_ccode(:ACTIVATE2)]
365
+ s,d,bytes,code =rreg :RX_ADDR_P1
366
+ mac=""
367
+ d.each do |b|
368
+ mac+=":" if mac!=""
369
+ mac+=sprintf "%02X",b
370
+ end
371
+ @mac=mac
331
372
  end
332
373
 
374
+ # if hash[:ack]
375
+ # cmd :ACTIVATE,[ 0]
376
+ # else
377
+ cmd :ACTIVATE,[ get_ccode(:ACTIVATE2)]
378
+ # end
379
+
333
380
  cmd :FLUSH_TX
334
381
  cmd :FLUSH_RX
335
382
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nRF24-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: