cache remote names in plist

This commit is contained in:
matthias.ringwald 2010-02-21 16:06:16 +00:00
parent fb6dae1e84
commit b2c95ae948
4 changed files with 27 additions and 6 deletions

View File

@ -35,6 +35,10 @@
#import <stdint.h>
#import <btstack/btstack.h>
#define PREFS_REMOTE_NAME @"RemoteName"
#define PREFS_LINK_KEY @"LinkKey"
#define BTstackManagerID @"ch.ringwald.btstack"
@class BTDevice;
/*
@ -99,6 +103,9 @@ typedef enum {
// TODO add l2cap and rfcomm incoming commands
// store remote names and link keys
-(void)storeDeviceInfo;
@property (nonatomic, assign) id<BTstackManagerDelegate> delegate;
@end

View File

@ -35,7 +35,6 @@
#import <btstack/BTDevice.h>
#import "../../RFCOMM/rfcomm.h"
#define BTstackManagerID @"ch.ringwald.btstack"
#define INQUIRY_INTERVAL 3
static BTstackManager * btstackManager = nil;
@ -305,6 +304,11 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
device.classOfDevice = READ_BT_24(packet, 3 + numResponses*(6+1+1+1) + i*3);
device.clockOffset = READ_BT_16(packet, 3 + numResponses*(6+1+1+1+3) + i*2) & 0x7fff;
device.rssi = 0;
// get name from deviceInfo
NSMutableDictionary * deviceDict = [deviceInfo objectForKey:[device addressString]];
if (deviceDict){
device.name = [deviceDict objectForKey:PREFS_REMOTE_NAME];
}
[discoveredDevices addObject:device];
[_delegate deviceInfo:device];
@ -324,6 +328,11 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
device.classOfDevice = READ_BT_24(packet, 3 + numResponses*(6+1+1) + i*3);
device.clockOffset = READ_BT_16(packet, 3 + numResponses*(6+1+1+3) + i*2) & 0x7fff;
device.rssi = packet [3 + numResponses*(6+1+1+3+2) + i*1];
// get name from deviceInfo
NSMutableDictionary * deviceDict = [deviceInfo objectForKey:[device addressString]];
if (deviceDict){
device.name = [deviceDict objectForKey:PREFS_REMOTE_NAME];
}
[discoveredDevices addObject:device];
[_delegate deviceInfo:device];
@ -349,7 +358,15 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
// get lenght: first null byte or max 248 chars
int nameLen = 0;
while (nameLen < 248 && packet[9+nameLen]) nameLen++;
device.name = [[NSString alloc] initWithBytes:&packet[9] length:nameLen encoding:NSUTF8StringEncoding];
NSString *name = [[NSString alloc] initWithBytes:&packet[9] length:nameLen encoding:NSUTF8StringEncoding];
device.name = name;
// set in device info
NSMutableDictionary *deviceDict = [deviceInfo objectForKey:[device addressString]];
if (!deviceDict){
deviceDict = [NSMutableDictionary dictionaryWithCapacity:3];
[deviceInfo setObject:deviceDict forKey:[device addressString]];
}
[deviceDict setObject:name forKey:PREFS_REMOTE_NAME];
}
[_delegate deviceInfo:device];
discoveryDeviceIndex++;

View File

@ -27,6 +27,7 @@
-(void) discoveryInquiry{
NSLog(@"discoveryInquiry!");
[bt storeDeviceInfo];
}
-(void) discoveryQueryRemoteName:(int)deviceIndex{
NSLog(@"discoveryQueryRemoteName %u/%u!", deviceIndex+1, [bt numberOfDevicesFound]);

View File

@ -6,14 +6,10 @@
NEXT:
- Provide BTstackManager Objective-C class
- set remote names in deviceInfo
- store deviceInfo on dealloc
- add discard discovered devices
- create new device discovery view: BTDiscoveryViewController
- implement l2cap code
- implement rfcomm code
- figure out how to receive iPhone System Power IONotifications (in BTdaemon) to detect, when phone gets locked
- some trick
- use Cocoa run loop for background app?