scan_beacon 0.6.0 → 0.6.1

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