scan_beacon 0.6.0 → 0.6.1

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
2
  SHA1:
3
- metadata.gz: 9643cd20260fece814e2595cc27be91924bef9f3
4
- data.tar.gz: f6348fcd26d8a6aeb6eedcb2ea7f7313c3aa6cba
3
+ metadata.gz: 62a197cb71f842cb63b20f4971cc3bcd18a954d0
4
+ data.tar.gz: baa10f94b8b9e79fdd5e7e02963f6804a9a38285
5
5
  SHA512:
6
- metadata.gz: c6b8044679facdfdfb80de910fa26e0719f4fed52c38979c62f846604c1e2830a3f297281414ede5fc7d5e8fc84a53c299114a44ff2081dac5ce68a978309271
7
- data.tar.gz: 3224871074669b94635c9e1395a3510ebdc68fa9c0245aa73a11992cb1554ddb47fc7363d4f72c1097166d555e1f6650e787a2b04a2310b3cbc38314bab6df3b
6
+ metadata.gz: 75a02758bf83671e5897e5e46053898d992dbc3eb47d19f47d64021623ec1c700792939e30c381b181f0e9020a9d7ac1f395c4be26cd63adb70dda9ca546b1d0
7
+ data.tar.gz: 5c1a5792324e66b1e9ae33bcd8169c1f0f32f8d10d833e737ed10c63c21ee5a039e66019ac0b57f17fcd00416ef1431133bf8b0028bf98a19278e0e3a3dfea67
@@ -57,7 +57,9 @@ module ScanBeacon
57
57
  end
58
58
 
59
59
  def get_addr
60
- response = bg_command(@file, BG_MSG_CLASS_SYSTEM, BG_GET_ADDRESS)
60
+ # use a timeout here because we're using this to detect BLE112s and if it
61
+ # isn't one, it may not respond right away
62
+ response = bg_command(@file, BG_MSG_CLASS_SYSTEM, BG_GET_ADDRESS,nil,nil,0.2)
61
63
  response[4..-1].reverse.unpack("H2:H2:H2:H2:H2:H2").join(":") if response.length == 10
62
64
  end
63
65
 
@@ -112,7 +114,9 @@ module ScanBeacon
112
114
  end
113
115
 
114
116
  def read
115
- BLE112Response.new( bg_read(@file) )
117
+ data = bg_read(@file, 0.2)
118
+ return nil if data.nil?
119
+ BLE112Response.new( data )
116
120
  end
117
121
 
118
122
  def reset
@@ -126,6 +130,7 @@ module ScanBeacon
126
130
 
127
131
  class BLE112Response
128
132
  def initialize(data)
133
+ data ||= ""
129
134
  @data = data.force_encoding("ASCII-8BIT")
130
135
  end
131
136
 
@@ -172,7 +177,7 @@ module ScanBeacon
172
177
 
173
178
  private
174
179
 
175
- def bg_command(port, msg_class, msg, data=nil, data_format=nil)
180
+ def bg_command(port, msg_class, msg, data=nil, data_format=nil, timeout=nil)
176
181
  data = [data].compact unless data.is_a? Array
177
182
  if data_format.nil?
178
183
  data = data.pack('C*')
@@ -181,10 +186,13 @@ module ScanBeacon
181
186
  end
182
187
  cmd = [0, data.size, msg_class, msg].flatten.pack('C*') + data
183
188
  port.write(cmd)
184
- bg_read(port)
189
+ bg_read(port, timeout)
185
190
  end
186
191
 
187
- def bg_read(port)
192
+ def bg_read(port, timeout = nil)
193
+ if !timeout.nil?
194
+ return nil if IO.select([port],nil,nil, timeout).nil?
195
+ end
188
196
  response = port.read(1) while response.nil? || ![0x00, 0x80].include?(response.unpack('C')[0])
189
197
  response << port.read(3)
190
198
  payload_length = response[1].unpack('C')[0]
@@ -16,16 +16,23 @@ module ScanBeacon
16
16
  keep_scanning = true
17
17
  while keep_scanning do
18
18
  response = device.read
19
- if response.advertisement?
19
+ if response && response.advertisement?
20
20
  if response.manufacturer_ad?
21
21
  keep_scanning = false if yield(response.advertisement_data, response.mac, response.rssi) == false
22
22
  else
23
23
  keep_scanning = false if yield(response.advertisement_data[4..-1], response.mac, response.rssi, 0x03) == false
24
24
  end
25
+ else
26
+ keep_scanning = false if yield(nil, nil, nil) == false
25
27
  end
26
28
  end
27
29
  ensure
28
- device.stop_scan
30
+ begin
31
+ device.stop_scan
32
+ rescue StandardError
33
+ # don't crash trying to stop scan - it may be that the device was
34
+ # unplugged
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -1,3 +1,3 @@
1
1
  module ScanBeacon
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scan_beacon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Radius Networks
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-08 00:00:00.000000000 Z
11
+ date: 2015-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubyforge_project:
128
- rubygems_version: 2.4.6
128
+ rubygems_version: 2.2.2
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: Provides Beacon scanning functionality