scan_beacon 0.7.1 → 0.7.2
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea62479acf5f65e19dddfb63fd45bbe502d0df36
|
4
|
+
data.tar.gz: d338df688e255c8361688191ed63129a2f5aefdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51a2a247e35d654722086b2c70e4ada9249edba07da87b6def8e8f03f7d7af92d7725fa0a400fb6e2208d902689612fe4251371c4a60b181ef1f99e1eb9044d2
|
7
|
+
data.tar.gz: 6b2724b5e74aeb2207017099b130ccd6a21b79a62a0437018e2ee958da438574cf9582418ec62fe0001ad5d02a12190f0e61da7d500f77ab24c52f2ce3c51656
|
@@ -15,6 +15,8 @@ VALUE method_scan();
|
|
15
15
|
VALUE method_new_adverts();
|
16
16
|
VALUE new_scan_hash(NSString* device, NSData *data, NSNumber *rssi, NSData *service_uuid);
|
17
17
|
|
18
|
+
VALUE method_get_addr();
|
19
|
+
VALUE method_set_random_addr();
|
18
20
|
VALUE method_set_advertisement_data(VALUE klass, VALUE data);
|
19
21
|
VALUE method_start_advertising();
|
20
22
|
VALUE method_stop_advertising();
|
@@ -26,6 +28,8 @@ VALUE method_stop_advertising();
|
|
26
28
|
- (int)BluetoothHCILESetAdvertisingParameters:(unsigned short)arg1 advertisingIntervalMax:(unsigned short)arg2 advertisingType:(unsigned char)arg3 ownAddressType:(unsigned char)arg4 directAddressType:(unsigned char)arg5 directAddress:(struct BluetoothDeviceAddress { unsigned char x1[6]; }*)arg6 advertisingChannelMap:(unsigned char)arg7 advertisingFilterPolicy:(unsigned char)arg8;
|
27
29
|
- (int)BluetoothHCILESetScanParameters:(unsigned char)arg1 LEScanInterval:(unsigned short)arg2 LEScanWindow:(unsigned short)arg3 ownAddressType:(unsigned char)arg4 scanningFilterPolicy:(unsigned char)arg5;
|
28
30
|
- (int)BluetoothHCILESetScanEnable:(unsigned char)arg1 filterDuplicates:(unsigned char)arg2;
|
31
|
+
- (int)getAddress:(struct BluetoothDeviceAddress { unsigned char x1[6]; }*)arg1;
|
32
|
+
- (int)BluetoothHCILESetRandomAddress:(const char*)arg1;
|
29
33
|
@end
|
30
34
|
|
31
35
|
@interface BLEDelegate : NSObject <CBCentralManagerDelegate> {
|
@@ -113,8 +117,10 @@ void Init_core_bluetooth()
|
|
113
117
|
rb_define_singleton_method(cb_module, "scan", method_scan, 0);
|
114
118
|
rb_define_singleton_method(cb_module, "new_adverts", method_new_adverts, 0);
|
115
119
|
|
120
|
+
rb_define_singleton_method(cb_module, "get_addr", method_get_addr, 0);
|
121
|
+
rb_define_singleton_method(cb_module, "set_random_addr", method_set_random_addr, 0);
|
116
122
|
rb_define_singleton_method(cb_module, "set_advertisement_data", method_set_advertisement_data, 1);
|
117
|
-
rb_define_singleton_method(cb_module, "start_advertising", method_start_advertising,
|
123
|
+
rb_define_singleton_method(cb_module, "start_advertising", method_start_advertising, 1);
|
118
124
|
rb_define_singleton_method(cb_module, "stop_advertising", method_stop_advertising, 0);
|
119
125
|
|
120
126
|
sym_device = ID2SYM(rb_intern("device"));
|
@@ -155,8 +161,6 @@ VALUE method_new_adverts()
|
|
155
161
|
|
156
162
|
VALUE method_scan()
|
157
163
|
{
|
158
|
-
VALUE scans = rb_ary_new();
|
159
|
-
|
160
164
|
@autoreleasepool {
|
161
165
|
@try {
|
162
166
|
bleDelegate = [[BLEDelegate alloc] init];
|
@@ -176,6 +180,32 @@ VALUE method_scan()
|
|
176
180
|
return Qnil;
|
177
181
|
}
|
178
182
|
|
183
|
+
VALUE addr_to_rbstr(uint8_t* addr)
|
184
|
+
{
|
185
|
+
char c_str[20];
|
186
|
+
sprintf(c_str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
|
187
|
+
addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
|
188
|
+
return rb_str_new2(c_str);
|
189
|
+
}
|
190
|
+
|
191
|
+
VALUE method_get_addr()
|
192
|
+
{
|
193
|
+
IOBluetoothHostController *device = [IOBluetoothHostController defaultController];
|
194
|
+
uint8_t addr[6];
|
195
|
+
[device getAddress: (void*)addr];
|
196
|
+
return addr_to_rbstr(addr);
|
197
|
+
}
|
198
|
+
|
199
|
+
VALUE method_set_random_addr()
|
200
|
+
{
|
201
|
+
uint8_t addr[6];
|
202
|
+
SecRandomCopyBytes(kSecRandomDefault, 6, addr);
|
203
|
+
addr[0] = addr[0] & 0x7F;
|
204
|
+
IOBluetoothHostController *device = [IOBluetoothHostController defaultController];
|
205
|
+
[device BluetoothHCILESetRandomAddress: (void*)addr];
|
206
|
+
return addr_to_rbstr(addr);
|
207
|
+
}
|
208
|
+
|
179
209
|
VALUE method_set_advertisement_data(VALUE klass, VALUE data)
|
180
210
|
{
|
181
211
|
IOBluetoothHostController *device = [IOBluetoothHostController defaultController];
|
@@ -187,17 +217,24 @@ VALUE method_set_advertisement_data(VALUE klass, VALUE data)
|
|
187
217
|
return Qnil;
|
188
218
|
}
|
189
219
|
|
190
|
-
VALUE method_start_advertising()
|
220
|
+
VALUE method_start_advertising(VALUE klass, VALUE random)
|
191
221
|
{
|
222
|
+
unsigned char ownAddrType = 0x00;
|
223
|
+
if (random == Qtrue) {
|
224
|
+
ownAddrType = 0x01;
|
225
|
+
}
|
192
226
|
IOBluetoothHostController *device = [IOBluetoothHostController defaultController];
|
193
227
|
[device BluetoothHCILESetAdvertisingParameters: 0x00A0
|
194
228
|
advertisingIntervalMax: 0x00A0 // 100ms
|
195
229
|
advertisingType: 0x03
|
196
|
-
ownAddressType:
|
230
|
+
ownAddressType: ownAddrType
|
197
231
|
directAddressType: 0x00
|
198
232
|
directAddress: (void*)"\x00\x00\x00\x00\x00\x00"
|
199
233
|
advertisingChannelMap: 0x07 // all 3 channels
|
200
234
|
advertisingFilterPolicy: 0x00];
|
235
|
+
if (random == Qtrue) {
|
236
|
+
method_set_random_addr();
|
237
|
+
}
|
201
238
|
[device BluetoothHCILESetAdvertiseEnable: 1];
|
202
239
|
return Qnil;
|
203
240
|
}
|
@@ -22,7 +22,6 @@ module ScanBeacon
|
|
22
22
|
# have to pass nil for addr if we don't want to override it and use the internal
|
23
23
|
BlueZ.start_advertising @device_id, nil
|
24
24
|
end
|
25
|
-
|
26
25
|
@advertising=true
|
27
26
|
end
|
28
27
|
|
@@ -38,7 +37,7 @@ module ScanBeacon
|
|
38
37
|
def rotate_addr_and_update_ad
|
39
38
|
self.update_ad
|
40
39
|
self.stop
|
41
|
-
self.
|
40
|
+
self.start(true)
|
42
41
|
end
|
43
42
|
|
44
43
|
def random_addr
|
@@ -10,14 +10,20 @@ module ScanBeacon
|
|
10
10
|
CoreBluetooth.set_advertisement_data @ad
|
11
11
|
end
|
12
12
|
|
13
|
-
def start
|
14
|
-
CoreBluetooth.start_advertising
|
13
|
+
def start(with_rotation = false)
|
14
|
+
CoreBluetooth.start_advertising(with_rotation)
|
15
15
|
end
|
16
16
|
|
17
17
|
def stop
|
18
18
|
CoreBluetooth.stop_advertising
|
19
19
|
end
|
20
20
|
|
21
|
+
def rotate_addr_and_update_ad
|
22
|
+
self.update_ad
|
23
|
+
self.stop
|
24
|
+
self.start(true)
|
25
|
+
end
|
26
|
+
|
21
27
|
def inspect
|
22
28
|
"<CoreBluetoothAdvertiser ad=#{@ad.inspect}>"
|
23
29
|
end
|
@@ -15,13 +15,13 @@ module ScanBeacon
|
|
15
15
|
update_ad
|
16
16
|
end
|
17
17
|
|
18
|
-
def update_ad
|
18
|
+
def update_ad
|
19
19
|
self.ad = @parser.generate_ad(@beacon) if @parser && @beacon
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def ad=(value)
|
23
23
|
@ad = value
|
24
24
|
self.start if advertising
|
25
25
|
end
|
26
26
|
end
|
27
|
-
end
|
27
|
+
end
|
data/lib/scan_beacon/version.rb
CHANGED
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.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Radius Networks
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
127
|
version: '0'
|
128
128
|
requirements: []
|
129
129
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.4.6
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: Provides Beacon scanning functionality
|