added methods to parse BD ADDR

This commit is contained in:
matthias.ringwald 2010-08-22 21:47:30 +00:00
parent 855942a4c2
commit da5c17bf8b
2 changed files with 32 additions and 1 deletions

View File

@ -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;

View File

@ -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];