scan_beacon 0.5.10 → 0.6.0

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: 838d6c716e2a552286f23328ddbf3df125d42b91
4
- data.tar.gz: 03f63cc6ced4d549618d7d93cdef6bd2bbee6779
3
+ metadata.gz: 9643cd20260fece814e2595cc27be91924bef9f3
4
+ data.tar.gz: f6348fcd26d8a6aeb6eedcb2ea7f7313c3aa6cba
5
5
  SHA512:
6
- metadata.gz: ca02db0c9420967326b7977e7bc130e2447549c369d29a688dbf898f47298081124c443cfe1a624e553972e2dd05d4717e3b764c99b9ae91c86e5ad0ced780d2
7
- data.tar.gz: ee3eb6dd03090eca7fe8ac1f48ca699b65a8f76ed716eeeb62a9bdc89a94ec4050c8d8d974dd0810be462258057d8739872fa3afecd21d2fda746b565eccb27f
6
+ metadata.gz: c6b8044679facdfdfb80de910fa26e0719f4fed52c38979c62f846604c1e2830a3f297281414ede5fc7d5e8fc84a53c299114a44ff2081dac5ce68a978309271
7
+ data.tar.gz: 3224871074669b94635c9e1395a3510ebdc68fa9c0245aa73a11992cb1554ddb47fc7363d4f72c1097166d555e1f6650e787a2b04a2310b3cbc38314bab6df3b
@@ -1,28 +1,9 @@
1
1
  module ScanBeacon
2
- class BLE112Advertiser
3
-
4
- attr_accessor :beacon, :parser, :ad
2
+ class BLE112Advertiser < GenericIndividualAdvertiser
5
3
 
6
4
  def initialize(opts = {})
7
5
  @device = BLE112Device.new opts[:port]
8
- self.beacon = opts[:beacon]
9
- self.parser = opts[:parser]
10
- self.parser ||= BeaconParser.default_parsers.find {|parser| parser.beacon_type == beacon.beacon_types.first}
11
- @advertising = false
12
- end
13
-
14
- def beacon=(value)
15
- @beacon = value
16
- update_ad
17
- end
18
-
19
- def parser=(value)
20
- @parser = value
21
- update_ad
22
- end
23
-
24
- def ad=(value)
25
- @ad = value
6
+ super()
26
7
  end
27
8
 
28
9
  def start(with_rotation = false)
@@ -43,11 +24,6 @@ module ScanBeacon
43
24
  "<BLE112Advertiser ad=#{@ad.inspect}>"
44
25
  end
45
26
 
46
- def update_ad
47
- self.ad = @parser.generate_ad(@beacon) if @parser && @beacon
48
- self.start if @advertising
49
- end
50
-
51
27
  def rotate_addr
52
28
  @device.open do
53
29
  @device.rotate_addr
@@ -1,54 +1,40 @@
1
1
  module ScanBeacon
2
- class BlueZAdvertiser
2
+ class BlueZAdvertiser < GenericIndividualAdvertiser
3
3
 
4
- attr_accessor :beacon, :parser, :ad, :addr
4
+ attr_reader :addr
5
5
 
6
6
  def initialize(opts = {})
7
7
  @device_id = opts[:device_id] || BlueZ.devices.map {|d| d[:device_id]}[0]
8
8
  raise "No available devices" if @device_id.nil?
9
9
  BlueZ.device_up @device_id
10
- @addr = @initial_addr = BlueZ.devices.find {|d| d[:device_id] == @device_id}[:addr]
11
- self.beacon = opts[:beacon]
12
- self.parser = opts[:parser]
13
- self.parser ||= BeaconParser.default_parsers.find {|parser| parser.beacon_type == beacon.beacon_types.first}
10
+ addr = @initial_addr = BlueZ.devices.find {|d| d[:device_id] == @device_id}[:addr]
11
+ super(opts)
14
12
  end
15
13
 
16
- def beacon=(value)
17
- @beacon = value
18
- update_ad
19
- end
20
-
21
- def parser=(value)
22
- @parser = value
23
- update_ad
24
- end
25
-
26
- def ad=(value)
27
- @ad = value
14
+ def start(with_rotation = false)
28
15
  BlueZ.set_advertisement_bytes @device_id, @ad
29
- end
30
-
31
- def start
32
- BlueZ.start_advertising @device_id, nil
33
- end
34
-
35
- def start_with_random_addr
36
- addr = random_addr
37
- BlueZ.start_advertising @device_id, addr
16
+ # You must call start advertising any time you change the advertisement bytes
17
+ # otherwise they won't take
18
+ if with_rotation
19
+ @addr = random_addr
20
+ BlueZ.start_advertising @device_id, addr
21
+ else
22
+ # have to pass nil for addr if we don't want to override it and use the internal
23
+ BlueZ.start_advertising @device_id, nil
24
+ end
25
+
26
+ @advertising=true
38
27
  end
39
28
 
40
29
  def stop
41
30
  BlueZ.stop_advertising @device_id
31
+ @advertising=false
42
32
  end
43
33
 
44
34
  def inspect
45
35
  "<BlueZAdvertiser ad=#{@ad.inspect}>"
46
36
  end
47
37
 
48
- def update_ad
49
- self.ad = @parser.generate_ad(@beacon) if @parser && @beacon
50
- end
51
-
52
38
  def rotate_addr_and_update_ad
53
39
  self.update_ad
54
40
  self.stop
@@ -0,0 +1,27 @@
1
+ module ScanBeacon
2
+ class GenericAdvertiser
3
+ attr_accessor :beacon, :parser, :ad
4
+ attr_reader :advertising
5
+
6
+ def initialize(opts = {})
7
+ self.beacon = opts[:beacon]
8
+ self.parser = opts[:parser]
9
+ if beacon
10
+ self.parser ||= BeaconParser.default_parsers.find {|parser| parser.beacon_type == beacon.beacon_types.first}
11
+ end
12
+ @advertising = false
13
+ end
14
+
15
+ def start(with_rotation = false)
16
+ raise NotImplementedError
17
+ end
18
+
19
+ def stop
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def inspect
24
+ raise NotImplementedError
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module ScanBeacon
2
+ class GenericIndividualAdvertiser < GenericAdvertiser
3
+ def initialize(opts={})
4
+ @parser = nil
5
+ super(opts)
6
+ end
7
+
8
+ def beacon=(value)
9
+ @beacon = value
10
+ update_ad
11
+ end
12
+
13
+ def parser=(value)
14
+ @parser = value
15
+ update_ad
16
+ end
17
+
18
+ def update_ad
19
+ self.ad = @parser.generate_ad(@beacon) if @parser && @beacon
20
+ end
21
+
22
+ def ad=(value)
23
+ @ad = value
24
+ self.start if advertising
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module ScanBeacon
2
- VERSION = "0.5.10"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/scan_beacon.rb CHANGED
@@ -5,6 +5,8 @@ require "scan_beacon/beacon_parser"
5
5
  require "scan_beacon/generic_scanner"
6
6
  require "scan_beacon/ble112_device"
7
7
  require "scan_beacon/ble112_scanner"
8
+ require "scan_beacon/generic_advertiser"
9
+ require "scan_beacon/generic_individual_advertiser"
8
10
  require "scan_beacon/ble112_advertiser"
9
11
  case RUBY_PLATFORM
10
12
  when /darwin/
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.5.10
4
+ version: 0.6.0
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-06 00:00:00.000000000 Z
11
+ date: 2015-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,8 @@ files:
100
100
  - lib/scan_beacon/bluez_advertiser.rb
101
101
  - lib/scan_beacon/bluez_scanner.rb
102
102
  - lib/scan_beacon/core_bluetooth_scanner.rb
103
+ - lib/scan_beacon/generic_advertiser.rb
104
+ - lib/scan_beacon/generic_individual_advertiser.rb
103
105
  - lib/scan_beacon/generic_scanner.rb
104
106
  - lib/scan_beacon/version.rb
105
107
  - scan_beacon.gemspec
@@ -123,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
125
  version: '0'
124
126
  requirements: []
125
127
  rubyforge_project:
126
- rubygems_version: 2.2.2
128
+ rubygems_version: 2.4.6
127
129
  signing_key:
128
130
  specification_version: 4
129
131
  summary: Provides Beacon scanning functionality