微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > IOS 怎么获取外设的广播数据AdvData

IOS 怎么获取外设的广播数据AdvData

时间:10-02 整理:3721RD 点击:

(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{ ……}

这个方法中的advertisementData只能抓取到下面的键值

{

    kCBAdvDataIsConnectable = 1;

    kCBAdvDataLocalName = SimpleBLEPeripheral;

    kCBAdvDataServiceUUIDs =     (        FFF0    );

    kCBAdvDataTxPowerLevel = 0;

}

simpleBLEPeripheral.c的 avertData数组的内容,也就是下图报文中的AdvData

Enjoy it ^_^ :

NSArray *keys = [advertisementData allKeys];
    NSData *dataAmb, *dataObj;
    for (int i = 0; i < [keys count]; ++i) {
        id key = [keys objectAtIndex: i];
        NSString *keyName = (NSString *) key;
        NSObject *value = [advertisementData objectForKey: key];
        if ([value isKindOfClass: [NSArray class]]) {
            printf("   key: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding]);
            NSArray *values = (NSArray *) value;
            for (int j = 0; j < [values count]; ++j) {
                if ([[values objectAtIndex: j] isKindOfClass: [CBUUID class]]) {
                    CBUUID *uuid = [values objectAtIndex: j];
                    NSData *data = uuid.data;
                    if (j == 0) {
                        dataObj = uuid.data;
                    } else {
                        dataAmb = uuid.data;
                    }
                    printf("      uuid(%d):", j);
                    for (int j = 0; j < data.length; ++j)
                        printf(" %02X", ((UInt8 *) data.bytes)[j]);
                    printf("\n");
                } else {
                    const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
                    printf("      value(%d): %s\n", j, valueString);
                }
            }
        } else {
            const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
            printf("   key: %s, value: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding], valueString);
        }
    }

谢谢,可是得出来得结果是

   key: kCBAdvDataIsConnectable, value: 1

   key: kCBAdvDataLocalName, value: SimpleBLEPeripheral

   key: kCBAdvDataServiceUUIDs

      uuid(0): FF F0

   key: kCBAdvDataTxPowerLevel, value: 0

我想获取得广播数据还是读取不到。。。。

对于iOS设备,我是通过kCBAdvDataServiceUUIDs得到广播数据的。

Li Zongwu:

我也感觉广播数据应该是在advertisementData中的,可以里面就是没有kCBAdvDataServiceUUIDs这个键值。纠结。。。。不知道是不是CC2540那里面的程序不对,你的

-(void)centralManagerDidUpdateState:(CBCentralManager *)central

{....}这里面怎么定义的啊。。。

用我之前提供的代码,就可以得到kCBAdvDataServiceUUIDs这个key值,这个key值对应的就是广播里地所谓的数据了。

楼主你好,我现在也遇到了同样的问题,请问,后来这个问题你解决了么?哪里可以找到advdata啊?

楼上的兄弟,问题解决了吗?我也正在整这个问题。能否共同探讨一下?QQ952580941

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top