iOS Core蓝牙从设备获取所有功能描述

时间:2016-08-02 11:11:25

标签: ios bluetooth core-bluetooth

如何使用Core Bluetooth从我的设备获取所有可用功能。

我认为在获取任何信息之前,我们需要通过低能量蓝牙观察所有设备。

因此,第一步是通过CBCentralManager扫描所有外围设备- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 。在委托回调中:

 <!doctype html>
<html ng-app="app">
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-animate.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.4.js"></script>
    <script src="example.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>

<div ng-controller="DateCtrl" style="padding:40px">
  <label>Begin Date</label>
<div class='input-group date'>
          <input ng-model="dt" class="form-control" onkeydown="return false" datepicker-popup="MM/dd/yyyy" show-weeks="false" is-open="BeginDateOpen" ng-focus="BeginDateOpen=true" ng-click="BeginDateOpen=true" min-date="Main.MinDate" required/>
          <span class="input-group-addon">
               <span class="glyphicon glyphicon-calendar"></span>
          </span>
 </div>

</div>
  </body>
</html>

我们可以保存外设标识符并保存外设以便将来处理它,如更改某些特性,关闭/打开等等。

但我的问题是如何获得这个功能的描述,例如我有一些特点,但我不知道如何使用。哪里可以找到有关这个未来的信息。

让我来描述一下情况。例如,我有声音播放器,有一些选项,我可以通过蓝牙处理音量。

所以我需要首先获取外围设备,然后检测服务,然后发现特性以找到音量“属性”,但我怎样才能找到它,我应该如何理解哪个是最小/最大音量在哪里可以找到这些信息。例如,我们可以将0作为最小音量,将1作为最大值。但它也可能在0到1000或任何其他范围内。如何检测这些信息?

2 个答案:

答案 0 :(得分:1)

您无法确定找到&#34;文档&#34;对于每个特征,例如可能的值等等 如果服务&amp;特征遵循蓝牙的文档,并且本身&#34;记录&#34;,它只是遵循文档,它的here。从理论上讲,这些着名的知识&#34;服务和字符应该有一个UUID,如&#34; 0x0000&#34;。
示例:Battery service为0x180F,Battery Level为0x2A19,可能的值具有已定义的协议。

对于其他定制服务/特征,它更难。每个人都有自己的文档,UUID更长(如果它是根据规则开发的)。 如果设置,您可以阅读CBDescriptor以获取更多信息。

在所有情况下,您必须参考蓝牙低能耗文档,或者是否为制造商定制。无论哪种方式,它都是关于逆向的。

答案 1 :(得分:0)

您可以参考此演示项目here

使用以下代码段,您可以获得与任何iOS支持的外围设备相关联的所有特征和服务。

BabyBluetooth *objBluetooth = [BabyBluetooth shareBabyBluetooth];
objBluetooth.scanForPeripherals().begin();

您可以这种方式设置代表回拨。

-(void)babyDelegate{

    //If any peripheral discovered
    [objBluetooth setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) {
        NSLog(@"搜索到了设备:%@",peripheral.name);
    }];


    //Set the filtration criteria for the bluetooth peripherals
    [objBluetooth setFilterOnDiscoverPeripherals:^BOOL(NSString *peripheralName, NSDictionary *advertisementData, NSNumber *RSSI) {

        //if ([peripheralName hasPrefix:@"Pxxxx"] ) {
        //    return YES;
        //}
        //return NO;
        if (peripheralName.length >1) {
            return YES;
        }
        return NO;
    }];

    //and so on.
}

外围设备过滤后,您可以从阵列中获取它,然后使用它:

objBluetooth.having(peripheralFromArray).then.connectToPeripherals().discoverServices().discoverCharacteristics().begin();

[_channelForaD40 setBlockOnDiscoverCharacteristics:^(CBPeripheral *peripheral, CBService *service, NSError *error) {

//在这里获取您的特征描述 }];

[_channelForaD40 setBlockOnReadValueForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristics, NSError *error) {

//在此处阅读您的特征值 }];

然后,您最终可以将您的特征与Bluetooth standards.

进行比较