Не удается найти периферийное устройство при сканировании CBUUID определенной службы

Когда я использую:

CBUUID * uuid = [CBUUID UUIDWithString:@"1800"]; // GAP
DEBUG_LOG(@"CBUUID: %@",uuid); // CBUUID: Generic Access Profile
_centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralMan scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid]
                                    options:nil];

Я не могу найти свое периферийное устройство, но когда я использую:

_centralMan = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralMan scanForPeripheralsWithServices:nil
                                    options:nil];

… это проявляется сразу.

Когда я подключаюсь, я могу обнаруживать/читать/записывать все службы, которые я ожидаю. Насколько я понимаю, GAP делает это возможным. Я также пробовал CBUUID для других служб, которые, как я знаю, работают (в частности, «1804», служба питания TX), но безрезультатно; сканирование никогда ничего не обнаруживает.

Несмотря на то, что службы работают (я могу общаться с ними при подключении), когда я сканирую, передавая массив UUID службы как nil, и этот метод делегата вызывается...

-(void) centralManager:(CBCentralManager *)central 
 didDiscoverPeripheral:(CBPeripheral *)peripheral 
     advertisementData:(NSDictionary *)advertisementData 
                  RSSI:(NSNumber *)RSSI {
    DEBUG_LOG(@"Found peripheral w/ UUID: %@ RSSI: %@ \n AdvData: %@",peripheral.UUID,RSSI,advertisementData);
    DEBUG_LOG(@"Services found: %d",peripheral.services.count);
    for (CBService * service in peripheral.services) {
        DEBUG_LOG(@"Found service: %@ w/ UUID %@",service, service.UUID);
    }
}

… он всегда сообщает «Найдены сервисы: 0». Должен ли я ожидать, что массив services будет заполнен службами, найденными во время сканирования? (Я предполагаю, что это хотя бы частично возможно, основываясь на scanForPeripheralsWithServices:[NSArray arrayWithObject:uuid] options:nil.)

Может ли это быть проблемой с рекламой услуг моего периферийного устройства? Я неправильно использую API? Любое руководство очень ценится! :-)

PS: я довольно зеленый с Bluetooth.

PPS: Я контролирую источник на периферию (это CC2540DK). Так что я бы с такой же вероятностью поверил, что проблема там, как и здесь.


person Ben Mosher    schedule 26.06.2012    source источник


Ответы (1)


Оказывается, код нашего периферийного устройства не рекламировал UUID в духе этой спецификации Bluetooth.

Как только мы бросили их в рекламный пакет, iOS их подобрала без проблем.

person Ben Mosher    schedule 09.07.2012
comment
Можете ли вы показать свой код cc2540, который заставил это работать? У меня такая же проблема, и я думаю, что моя реклама должна быть неправильной. - person Darren; 28.01.2013
comment
да, у меня такая же проблема, можешь выложить свой код? - person mohkhan; 17.07.2014
comment
Кода давно нет; мы перешли к оборудованию и языку сценариев Bluegiga, которые были намного проще в использовании. IIRC, тем не менее, код CC2540 представлял собой жестко закодированный массив байтов, закодированных в соответствии со спецификацией и предоставленный некоторой функции C, которая инициировала бы рекламу. - person Ben Mosher; 17.07.2014