2013-06-13 3 views
0

원하는 주변 장치에 연결 한 후 서비스를 검색하려고하지만 UUID에 따라 존재하지 않는 서비스 만 찾을 수 있습니다. 그것이 의미하는 바는; 확인 수단으로 "라이트 블루 (Light Blue)"앱 스토어 앱도 사용하고 있습니다. 라이트 블루는 모든 주변 장치, 서비스 및 특성을 식별하는 BLE 탐색기입니다. Light Blue를 사용하여 원하는 서비스와 특성을 볼 수 있으므로 Light Blue가 식별하는 서비스와 특성이 올바른지 확인할 수 있습니다. 여기 IOS CoreBluetooth. 올바른 서비스를 찾을 수 없습니다.

내 코드와 나는이 서비스 포함 서비스, 모든 특성을 식별하는 방법 :

- (void)printAllChar:(CBPeripheral*)p { 
    printf("**************************************\n"); 
    printf("Listing all services and characteristics\n"); 

    CBService * s, * inc; 
    CBCharacteristic * c; 

    //Discover all services on peripheral 
    [p discoverServices:nil]; 

    printf("%d services discovered\n", p.services.count); 
    for(int i = 0; i < p.services.count; i++){ 

     //Traverse all services 
     s = [p.services objectAtIndex:i]; 
     printf("Service %d: %s\n", i+1, s.UUID); 

     [p discoverIncludedServices:nil forService:s]; 

     printf(" Included Services Discovered: %d\n", s.includedServices.count); 

     //Traverse all included services of each service 
     for(int k = 0; k < s.includedServices.count; k++){ 
      inc = [s.includedServices objectAtIndex:k]; 
      printf(" %d: %s\n", k+1, inc.UUID]);    
     } 

     [p discoverCharacteristics:nil forService:s]; 

     printf("%d Characteristics discovered\n", s.characteristics.count); 

     //Traverse all characteristic of each service 
     for(int j = 0; j < s.characteristics.count; j++){ 
      c = [s.characteristics objectAtIndex:j]; 
      printf("Characteristic %d: %s\n", j+1, c.UUID); 
     } 
    } 
} 

을 ^^^ 사실 s.UUID부터 실행 실 거예요 인쇄 기능은 문자열 변수 아니라는 것을 알고 , 더 읽기 쉽도록 모든 전환 코드를 제거했습니다.

콜백 함수 didDiscoverServices가 호출되지 않는다고 언급 할 가치가 있다고 생각합니다. 여기

는 위의 코드의 샘플 출력 : 서비스의

************************************** 
Listing all services and characteristics 
3 services discovered 
Service 1: 02000000-0200-0000-60D0-E03B02000000 
    Included Services Discovered: 0 
    0 Characteristics discovered 
Service 2: 02000000-0200-0000-18C0-F03B00005444 
    Included Services Discovered: 0 
    0 Characteristics discovered 
Service 3: 00000000-1000-0000-B4CC-E03B82130001 
    Included Services Discovered: 0 
    0 Characteristics discovered 

없음은 내가 기대하는 사람 없습니다. 정확한 주변 장치를 연결했지만 이러한 서비스는 완전히 알려지지 않았습니다. 내가 찾아야한다

서비스 ID는 다음과 같습니다 :

//Service UUID 
#define BLE_DEVICE_SERVICE_UUID    "713D0000-503E-4C75-BA94-3148F18D941E" 

//Characteristic UUID 
#define BLE_DEVICE_VENDOR_NAME_UUID   "713D0001-503E-4C75-BA94-3148F18D941E" 

#define BLE_DEVICE_RX_UUID     "713D0002-503E-4C75-BA94-3148F18D941E" 

#define BLE_DEVICE_TX_UUID     "713D0003-503E-4C75-BA94-3148F18D941E" 

#define BLE_DEVICE_RESET_RX_UUID   "713D0004-503E-4C75-BA94-3148F18D941E" 

#define BLE_DEVICE_LIB_VERSION_UUID   "713D0005-503E-4C75-BA94-3148F18D941E" 

사람이 무슨 일이 일어나고 있는지 어떤 생각을 가지고 있습니까?

관련성이있는 경우 RedBearLabs BLEMini를 사용하고 있습니다.

+0

서비스 UUID 당신은 무엇을 찾아야한다 것을? 왜 Objective-C를 NSLog와 같이 C보다 더 많이 사용하지 않습니까? – Larme

+0

추가 정보가있는 내 게시물을 편집했습니다. 나는 C에 익숙하다. 이것은 IOS 개발에 대한 나의 첫 경험이다. 더 이상 NSLog를 사용하여 유용한 정보가 있습니까? – mgeno

+1

글쎄, NSLog는 로그에 TimeStamp를 추가하는 것과 같이 "자동으로 마지막에 \ n"을 추가하고 마법 같은'% @'(예'NSLog (@ "서비스 % d Apple의 온도 센서 샘플을 보았습니까? – Larme

답변

0

정말 콜백 메소드에서이 작업을 시도해야합니다. 당신은 그들이 불려 가지 않는다고 말했다 - 당신은 당신의 수업을 CBPeripheralDelegate으로 설정했고 주변기기의 대표단을 self으로 설정 했습니까?

(또한, 같은 여담 : 오브젝티브 C 수동 카운터와 for 루프 설정보다 더 편리한 foreach 루프가) :

for(CBService *s in peripheral.services){ 
    NSLog(@"%@",s.uuid); //print the service uuid to console 
} 
관련 문제