diff --git a/CocoaTouch/include/BTstack/BTDevice.h b/CocoaTouch/include/BTstack/BTDevice.h index 5856ea0f0..5659ce31a 100644 --- a/CocoaTouch/include/BTstack/BTDevice.h +++ b/CocoaTouch/include/BTstack/BTDevice.h @@ -74,11 +74,12 @@ typedef enum { } - (void) setAddress:(bd_addr_t*)addr; +- (BOOL) setAddressFromString:(NSString *) addressString; - (bd_addr_t*) address; - (NSString *) toString; - (NSString *) addressString; + (NSString *) stringForAddress:(bd_addr_t*) address; - ++ (BOOL) address:(bd_addr_t *) address fromString:(NSString *) addressString; @property (readonly) BluetoothDeviceType deviceType; @property (readonly) NSString * nameOrAddress; @property (nonatomic, copy) NSString * name; diff --git a/CocoaTouch/src/BTDevice.m b/CocoaTouch/src/BTDevice.m index a469fc80e..017059129 100644 --- a/CocoaTouch/src/BTDevice.m +++ b/CocoaTouch/src/BTDevice.m @@ -58,6 +58,10 @@ BD_ADDR_COPY( &_address, newAddr); } +- (BOOL) setAddressFromString:(NSString *) addressString{ + return [BTDevice address:&_address fromString:addressString]; +} + - (bd_addr_t*) address{ return &_address; } @@ -68,6 +72,32 @@ addr[3], addr[4], addr[5]]; } ++ (BOOL) address:(bd_addr_t *)address fromString:(NSString *) addressString{ + // support both : and - or NOTHING as separator + addressString = [addressString stringByReplacingOccurrencesOfString:@":" withString:@""]; + addressString = [addressString stringByReplacingOccurrencesOfString:@"-" withString:@""]; + if ([addressString length] != 12) return NO; + + unsigned int bd_addr_buffer[BD_ADDR_LEN]; //for sscanf, integer needed + // reset result buffer + int i; + for (i = 0; i < BD_ADDR_LEN; i++) { + bd_addr_buffer[i] = 0; + } + + // parse + int result = sscanf([addressString UTF8String], "%2x%2x%2x%2x%2x%2x", &bd_addr_buffer[0], &bd_addr_buffer[1], &bd_addr_buffer[2], + &bd_addr_buffer[3], &bd_addr_buffer[4], &bd_addr_buffer[5]); + // store + if (result == 6){ + for (i = 0; i < BD_ADDR_LEN; i++) { + (*address)[i] = (uint8_t) bd_addr_buffer[i]; + } + return YES; + } + return NO; +} + - (NSString *) nameOrAddress{ if (name) return name; return [self addressString];