mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-23 19:20:51 +00:00
BTstackManager support device discovery - names are not cached yet
This commit is contained in:
parent
5f637968bf
commit
fb6dae1e84
@ -59,7 +59,7 @@ typedef enum {
|
||||
|
||||
@interface BTDevice : NSObject {
|
||||
|
||||
bd_addr_t address; // potential key
|
||||
bd_addr_t _address;
|
||||
|
||||
NSString * name;
|
||||
uint32_t classOfDevice;
|
||||
@ -67,14 +67,17 @@ typedef enum {
|
||||
uint8_t pageScanRepetitionMode;
|
||||
uint16_t clockOffset;
|
||||
|
||||
uint8_t rssi;
|
||||
|
||||
// deprecated
|
||||
BluetoothConnectionState connectionState;
|
||||
}
|
||||
|
||||
- (void) setAddress:(bd_addr_t *)addr;
|
||||
- (bd_addr_t *) address;
|
||||
- (void) setAddress:(bd_addr_t*)addr;
|
||||
- (bd_addr_t*) address;
|
||||
- (NSString *) toString;
|
||||
- (NSString *) addressString;
|
||||
+ (NSString *) stringForAddress:(bd_addr_t *) address;
|
||||
+ (NSString *) stringForAddress:(bd_addr_t*) address;
|
||||
|
||||
@property (readonly) BluetoothDeviceType deviceType;
|
||||
@property (readonly) NSString * nameOrAddress;
|
||||
@ -82,6 +85,7 @@ typedef enum {
|
||||
@property (nonatomic, assign) uint32_t classOfDevice;
|
||||
@property (nonatomic, assign) uint16_t clockOffset;
|
||||
@property (nonatomic, assign) uint8_t pageScanRepetitionMode;
|
||||
@property (nonatomic, assign) uint8_t rssi;
|
||||
@property (nonatomic, assign) BluetoothConnectionState connectionState;
|
||||
|
||||
@end
|
||||
|
@ -55,14 +55,24 @@ typedef enum {
|
||||
kW4Deactivated
|
||||
} ManagerState;
|
||||
|
||||
typedef enum {
|
||||
kInactive = 1,
|
||||
kW4InquiryMode,
|
||||
kInquiry,
|
||||
kRemoteName,
|
||||
} DiscoveryState;
|
||||
|
||||
@protocol BTstackManagerDelegate;
|
||||
|
||||
@interface BTstackManager : NSObject {
|
||||
@private
|
||||
id<BTstackManagerDelegate> _delegate;
|
||||
NSMutableDictionary *deviceInfo;
|
||||
NSMutableArray *discoveredDevices;
|
||||
BOOL connectedToDaemon;
|
||||
ManagerState state;
|
||||
DiscoveryState discoveryState;
|
||||
int discoveryDeviceIndex;
|
||||
}
|
||||
|
||||
// shared instance
|
||||
|
@ -44,25 +44,26 @@
|
||||
@synthesize connectionState;
|
||||
@synthesize pageScanRepetitionMode;
|
||||
@synthesize clockOffset;
|
||||
@synthesize rssi;
|
||||
|
||||
- (BTDevice *)init {
|
||||
name = NULL;
|
||||
bzero(&address, 6);
|
||||
bzero(&_address, 6);
|
||||
classOfDevice = kCODInvalid;
|
||||
connectionState = kBluetoothConnectionNotConnected;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) setAddress:(bd_addr_t *)newAddr{
|
||||
BD_ADDR_COPY( &address, newAddr);
|
||||
- (void) setAddress:(bd_addr_t*)newAddr{
|
||||
BD_ADDR_COPY( &_address, newAddr);
|
||||
}
|
||||
|
||||
- (bd_addr_t *) address{
|
||||
return &address;
|
||||
- (bd_addr_t*) address{
|
||||
return &_address;
|
||||
}
|
||||
|
||||
+ (NSString *) stringForAddress:(bd_addr_t *) address {
|
||||
uint8_t * addr = (uint8_t*) address;
|
||||
+ (NSString *) stringForAddress:(bd_addr_t*) address {
|
||||
uint8_t *addr = (uint8_t*) *address;
|
||||
return [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2],
|
||||
addr[3], addr[4], addr[5]];
|
||||
}
|
||||
@ -73,7 +74,7 @@
|
||||
}
|
||||
|
||||
- (NSString *) addressString{
|
||||
return [BTDevice stringForAddress:&address];
|
||||
return [BTDevice stringForAddress:&_address];
|
||||
}
|
||||
|
||||
- (BluetoothDeviceType) deviceType{
|
||||
@ -87,7 +88,7 @@
|
||||
}
|
||||
}
|
||||
- (NSString *) toString{
|
||||
return [NSString stringWithFormat:@"Device addr %@ name %@ COD %x", [BTDevice stringForAddress:&address], name, classOfDevice];
|
||||
return [NSString stringWithFormat:@"Device addr %@ name %@ COD %x", [BTDevice stringForAddress:&_address], name, classOfDevice];
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
|
@ -32,11 +32,11 @@
|
||||
#import <BTstack/BTstackManager.h>
|
||||
|
||||
#import <btstack/btstack.h>
|
||||
#import <btstack/BTDevice.h>
|
||||
#import "../../RFCOMM/rfcomm.h"
|
||||
|
||||
|
||||
#define BTstackManagerID @"ch.ringwald.btstack"
|
||||
|
||||
#define INQUIRY_INTERVAL 3
|
||||
|
||||
static BTstackManager * btstackManager = nil;
|
||||
|
||||
@ -84,9 +84,13 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
if (!self) return self;
|
||||
|
||||
state = kDeactivated;
|
||||
discoveryState = kInactive;
|
||||
connectedToDaemon = NO;
|
||||
_delegate = nil;
|
||||
|
||||
// device discovery
|
||||
discoveredDevices = [[NSMutableArray alloc] init];
|
||||
|
||||
// read device database
|
||||
[self readDeviceInfo];
|
||||
|
||||
@ -124,23 +128,42 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
}
|
||||
|
||||
-(BTstackError) deactivate {
|
||||
if (!connectedToDaemon) return BTSTACK_CONNECTION_TO_BTDAEMON_FAILED;
|
||||
state = kW4Deactivated;
|
||||
bt_send_cmd(&btstack_set_power_mode, HCI_POWER_OFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Discovery
|
||||
-(BTstackError) startDiscovery {
|
||||
if (state != kActivated) return BTSTACK_NOT_ACTIVATED;
|
||||
discoveryState = kW4InquiryMode;
|
||||
bt_send_cmd(&hci_write_inquiry_mode, 0x01); // with RSSI
|
||||
return 0;
|
||||
};
|
||||
-(BTstackError) stopDiscovery{
|
||||
return 0;
|
||||
};
|
||||
|
||||
-(int) numberOfDevicesFound{
|
||||
return 0;
|
||||
return [discoveredDevices count];
|
||||
};
|
||||
|
||||
-(BTDevice*) deviceAtIndex:(int)index{
|
||||
return 0;
|
||||
return (BTDevice*) [discoveredDevices objectAtIndex:index];
|
||||
};
|
||||
|
||||
-(BTDevice*) deviceForAddress:(bd_addr_t*) address{
|
||||
for (BTDevice *device in discoveredDevices){
|
||||
// NSLog(@"compare %@ to %@", [BTDevice stringForAddress:address], [device addressString]);
|
||||
if ( BD_ADDR_CMP(address, [device address]) == 0){
|
||||
return device;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
// Connections
|
||||
-(BTstackError) createL2CAPChannelAtAddress:(bd_addr_t) address withPSM:(uint16_t)psm authenticated:(BOOL)authentication {
|
||||
return 0;
|
||||
@ -162,18 +185,14 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
return 0;
|
||||
};
|
||||
|
||||
- (void) handlePacketWithType:(uint8_t)packet_type forChannel:(uint16_t)channel andData:(uint8_t *)packet withLen:(uint16_t) size {
|
||||
- (void) activationHandleEvent:(uint8_t *)packet withLen:(uint16_t) size {
|
||||
switch (state) {
|
||||
|
||||
case kDeactivated:
|
||||
break;
|
||||
|
||||
|
||||
case kW4SysBTState:
|
||||
case kW4SysBTDisabled:
|
||||
|
||||
// BTSTACK_EVENT_SYSTEM_BLUETOOTH_ENABLED
|
||||
if ( packet_type == HCI_EVENT_PACKET
|
||||
&& packet[0] == BTSTACK_EVENT_SYSTEM_BLUETOOTH_ENABLED){
|
||||
if ( packet[0] == BTSTACK_EVENT_SYSTEM_BLUETOOTH_ENABLED){
|
||||
if (packet[2]){
|
||||
// system bt on - first time try to disable it
|
||||
if ( state == kW4SysBTState) {
|
||||
@ -196,20 +215,27 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
break;
|
||||
|
||||
case kW4Activated:
|
||||
if (packet_type == HCI_EVENT_PACKET){
|
||||
switch (packet[0]){
|
||||
case BTSTACK_EVENT_STATE:
|
||||
if (packet[2] == HCI_STATE_WORKING){
|
||||
state = kActivated;
|
||||
[_delegate activated];
|
||||
}
|
||||
break;
|
||||
case BTSTACK_EVENT_POWERON_FAILED:
|
||||
[_delegate activationFailed:BTSTACK_ACTIVATION_POWERON_FAILED];
|
||||
state = kDeactivated;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
switch (packet[0]){
|
||||
case BTSTACK_EVENT_STATE:
|
||||
if (packet[2] == HCI_STATE_WORKING){
|
||||
state = kActivated;
|
||||
[_delegate activated];
|
||||
}
|
||||
break;
|
||||
case BTSTACK_EVENT_POWERON_FAILED:
|
||||
[_delegate activationFailed:BTSTACK_ACTIVATION_POWERON_FAILED];
|
||||
state = kDeactivated;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case kW4Deactivated:
|
||||
if (packet[0] == BTSTACK_EVENT_STATE){
|
||||
if (packet[2] == HCI_STATE_OFF){
|
||||
state = kDeactivated;
|
||||
[_delegate deactivated];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -217,12 +243,154 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
-(void) discoveryRemoteName{
|
||||
BOOL found = NO;
|
||||
while ( discoveryDeviceIndex < [discoveredDevices count]){
|
||||
BTDevice *device = [discoveredDevices objectAtIndex:discoveryDeviceIndex];
|
||||
if (device.name) {
|
||||
discoveryDeviceIndex ++;
|
||||
continue;
|
||||
}
|
||||
bd_addr_t *addr = [device address];
|
||||
|
||||
// BD_ADDR_COPY(&addr, device.address);
|
||||
// NSLog(@"Get remote name of %@", [BTDevice stringForAddress:addr]);
|
||||
bt_send_cmd(&hci_remote_name_request, addr,
|
||||
device.pageScanRepetitionMode, 0, device.clockOffset | 0x8000);
|
||||
[_delegate discoveryQueryRemoteName:discoveryDeviceIndex];
|
||||
found = YES;
|
||||
break;
|
||||
}
|
||||
if (!found) {
|
||||
// printf("Queried all devices, restart.\n");
|
||||
discoveryState = kInquiry;
|
||||
bt_send_cmd(&hci_inquiry, HCI_INQUIRY_LAP, INQUIRY_INTERVAL, 0);
|
||||
[_delegate discoveryInquiry];
|
||||
}
|
||||
}
|
||||
|
||||
-(void) discoveryHandleEvent:(uint8_t *)packet withLen:(uint16_t) size {
|
||||
bd_addr_t addr;
|
||||
int i;
|
||||
int numResponses;
|
||||
|
||||
switch (discoveryState) {
|
||||
|
||||
case kInactive:
|
||||
break;
|
||||
|
||||
case kW4InquiryMode:
|
||||
if (packet[0] == HCI_EVENT_COMMAND_COMPLETE && COMMAND_COMPLETE_EVENT(packet, hci_write_inquiry_mode) ) {
|
||||
discoveryState = kInquiry;
|
||||
bt_send_cmd(&hci_inquiry, HCI_INQUIRY_LAP, INQUIRY_INTERVAL, 0);
|
||||
[_delegate discoveryInquiry];
|
||||
}
|
||||
break;
|
||||
|
||||
case kInquiry:
|
||||
|
||||
switch (packet[0]){
|
||||
case HCI_EVENT_INQUIRY_RESULT:
|
||||
numResponses = packet[2];
|
||||
for (i=0; i<numResponses ; i++){
|
||||
bt_flip_addr(addr, &packet[3+i*6]);
|
||||
// NSLog(@"found %@", [BTDevice stringForAddress:&addr]);
|
||||
BTDevice* device = [self deviceForAddress:&addr];
|
||||
if (device) continue;
|
||||
device = [[BTDevice alloc] init];
|
||||
[device setAddress:&addr];
|
||||
device.pageScanRepetitionMode = packet [3 + numResponses*(6) + i*1];
|
||||
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;
|
||||
[discoveredDevices addObject:device];
|
||||
|
||||
[_delegate deviceInfo:device];
|
||||
}
|
||||
break;
|
||||
|
||||
case HCI_EVENT_INQUIRY_RESULT_WITH_RSSI:
|
||||
numResponses = packet[2];
|
||||
for (i=0; i<numResponses ;i++){
|
||||
bt_flip_addr(addr, &packet[3+i*6]);
|
||||
// NSLog(@"found %@", [BTDevice stringForAddress:&addr]);
|
||||
BTDevice* device = [self deviceForAddress:&addr];
|
||||
if (device) continue;
|
||||
device = [[BTDevice alloc] init];
|
||||
[device setAddress:&addr];
|
||||
device.pageScanRepetitionMode = packet [3 + numResponses*(6) + i*1];
|
||||
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];
|
||||
[discoveredDevices addObject:device];
|
||||
|
||||
[_delegate deviceInfo:device];
|
||||
}
|
||||
break;
|
||||
|
||||
case HCI_EVENT_INQUIRY_COMPLETE:
|
||||
// printf("Inquiry scan done.\n");
|
||||
discoveryState = kRemoteName;
|
||||
discoveryDeviceIndex = 0;
|
||||
[self discoveryRemoteName];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case kRemoteName:
|
||||
if (packet[0] == HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE){
|
||||
bt_flip_addr(addr, &packet[3]);
|
||||
// NSLog(@"Get remote name done for %@", [BTDevice stringForAddress:&addr]);
|
||||
BTDevice* device = [self deviceForAddress:&addr];
|
||||
if (device) {
|
||||
if (packet[2] == 0) {
|
||||
// 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];
|
||||
}
|
||||
[_delegate deviceInfo:device];
|
||||
discoveryDeviceIndex++;
|
||||
[self discoveryRemoteName];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
-(void) handlePacketWithType:(uint8_t)packet_type forChannel:(uint16_t)channel andData:(uint8_t *)packet withLen:(uint16_t) size {
|
||||
switch (state) {
|
||||
|
||||
case kDeactivated:
|
||||
break;
|
||||
|
||||
// Activation
|
||||
case kW4SysBTState:
|
||||
case kW4SysBTDisabled:
|
||||
case kW4Activated:
|
||||
case kW4Deactivated:
|
||||
if (packet_type == HCI_EVENT_PACKET) [self activationHandleEvent:packet withLen:size];
|
||||
break;
|
||||
|
||||
// Discovery
|
||||
case kActivated:
|
||||
if (packet_type == HCI_EVENT_PACKET) [self discoveryHandleEvent:packet withLen:size];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
[_delegate handlePacketWithType:packet_type forChannel:channel andData:packet withLen:size];
|
||||
}
|
||||
|
||||
|
||||
- (void)readDeviceInfo {
|
||||
-(void)readDeviceInfo {
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
NSDictionary * dict = [defaults persistentDomainForName:BTstackManagerID];
|
||||
deviceInfo = [NSMutableDictionary dictionaryWithCapacity:([dict count]+5)];
|
||||
@ -236,7 +404,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
}
|
||||
}
|
||||
|
||||
- (void)storeDeviceInfo{
|
||||
-(void)storeDeviceInfo{
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults setPersistentDomain:deviceInfo forName:BTstackManagerID];
|
||||
[defaults synchronize];
|
||||
|
@ -5,23 +5,36 @@
|
||||
//
|
||||
|
||||
#import "TestBTstackManager.h"
|
||||
#import <BTstack/BTDevice.h>
|
||||
|
||||
@implementation TestBTstackManager
|
||||
-(id) init {
|
||||
return self;
|
||||
}
|
||||
-(void) test{
|
||||
|
||||
-(void) doTest{
|
||||
bt = [BTstackManager sharedInstance];
|
||||
[bt setDelegate:self];
|
||||
BTstackError err = [bt activate];
|
||||
if (err) NSLog(@"activate err 0x%02x!", err);
|
||||
}
|
||||
|
||||
-(void) activated{
|
||||
NSLog(@"activated!");
|
||||
[bt startDiscovery];
|
||||
}
|
||||
|
||||
-(void) activationFailed:(BTstackError)error{
|
||||
NSLog(@"activationFailed error 0x%02x!", error);
|
||||
};
|
||||
|
||||
-(void) discoveryInquiry{
|
||||
NSLog(@"discoveryInquiry!");
|
||||
}
|
||||
-(void) discoveryQueryRemoteName:(int)deviceIndex{
|
||||
NSLog(@"discoveryQueryRemoteName %u/%u!", deviceIndex+1, [bt numberOfDevicesFound]);
|
||||
}
|
||||
-(void) deviceInfo:(BTDevice*)device {
|
||||
NSLog(@"Device Info: addr %@ name %@ COD 0x%06x", [device addressString], [device name], [device classOfDevice] );
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@ -29,7 +42,7 @@ int main(int argc, char *argv[])
|
||||
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
TestBTstackManager * test = [[TestBTstackManager alloc] init];
|
||||
[test test];
|
||||
[test doTest];
|
||||
CFRunLoopRun();
|
||||
[test release];
|
||||
|
||||
|
13
TODO.txt
13
TODO.txt
@ -5,7 +5,15 @@
|
||||
|
||||
NEXT:
|
||||
|
||||
- Provide BTstack Objective-C class
|
||||
- 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?
|
||||
@ -14,11 +22,10 @@ NEXT:
|
||||
- move RFCOMM code into BTdaemon
|
||||
- L2CAP
|
||||
- segmentation
|
||||
- CocoaTouch
|
||||
- Warning and shutdown of Apple's stack
|
||||
- add timeouts to cocoa run loop
|
||||
- BUG: bt_close crashes when used in CocoaTouch app
|
||||
- BUG: BTdaemon crashes on iPhone when CocoaTouch app is closed (sometimes)
|
||||
- BUG: malloc warning when BTdaemon is started by launchd
|
||||
|
||||
== Release 0.2 - Incoming L2CAP supported + improved Inq Dialog
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
9C05FC971020D3F300255261 /* socket_connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C00F7301017ACC3008DAB17 /* socket_connection.c */; };
|
||||
9C18015C108BAA7200824BE7 /* libusb-1.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C18015B108BAA7200824BE7 /* libusb-1.0.dylib */; };
|
||||
9C46FC3A0FA906F700ABEF05 /* hci_transport_h4.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C46FC360FA906F700ABEF05 /* hci_transport_h4.c */; };
|
||||
9C50953A112744AA00A30986 /* BTstackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C509539112744AA00A30986 /* BTstackManager.m */; };
|
||||
9C77E79210667F0600F39DCF /* platform_iphone.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C77E79110667F0600F39DCF /* platform_iphone.c */; };
|
||||
9C7B5AC0100BD3340065D87E /* linked_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C7B5ABF100BD3340065D87E /* linked_list.c */; };
|
||||
9C7B5D01100FC9AE0065D87E /* btstack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9CC813A10FFC0774002816F9 /* btstack.c */; };
|
||||
@ -30,6 +31,10 @@
|
||||
9CCE6CEA1025BD0000FCE9F4 /* hci.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C46FC340FA906F700ABEF05 /* hci.c */; };
|
||||
9CEB4F17107AAAEF00DD5720 /* run_loop_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9CEB4DAC10753BE600DD5720 /* run_loop_posix.c */; };
|
||||
9CF13C1610F8A1C6004C4EEE /* bt_control_iphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF13C1510F8A1C6004C4EEE /* bt_control_iphone.m */; };
|
||||
9CF3F776112F241600D081C9 /* BTstackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C509539112744AA00A30986 /* BTstackManager.m */; };
|
||||
9CF3F782112F244C00D081C9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CF3F781112F244B00D081C9 /* UIKit.framework */; };
|
||||
9CF3F95311306FFB00D081C9 /* TestBTstackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF3F95211306FFB00D081C9 /* TestBTstackManager.m */; };
|
||||
9CF3F99F113083F100D081C9 /* BTDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C13C9FC10ECED6300B04243 /* BTDevice.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
@ -45,7 +50,7 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
8DD76FB20486AB0100D96B5E /* project */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = project; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8DD76FB20486AB0100D96B5E /* project */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = project; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9C00F7301017ACC3008DAB17 /* socket_connection.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = socket_connection.c; path = src/socket_connection.c; sourceTree = "<group>"; };
|
||||
9C00F7311017ACC3008DAB17 /* socket_connection.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = socket_connection.h; path = src/socket_connection.h; sourceTree = "<group>"; };
|
||||
9C00F7D61019082F008DAB17 /* hci_cmds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hci_cmds.c; path = src/hci_cmds.c; sourceTree = "<group>"; };
|
||||
@ -67,6 +72,8 @@
|
||||
9C46FC360FA906F700ABEF05 /* hci_transport_h4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hci_transport_h4.c; path = src/hci_transport_h4.c; sourceTree = "<group>"; };
|
||||
9C46FC370FA906F700ABEF05 /* hci_transport_h4.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = hci_transport_h4.h; path = src/hci_transport_h4.h; sourceTree = "<group>"; };
|
||||
9C46FC380FA906F700ABEF05 /* hci_transport.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = hci_transport.h; path = src/hci_transport.h; sourceTree = "<group>"; };
|
||||
9C509539112744AA00A30986 /* BTstackManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BTstackManager.m; path = CocoaTouch/src/BTstackManager.m; sourceTree = "<group>"; };
|
||||
9C50953B112744CD00A30986 /* BTstackManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BTstackManager.h; path = CocoaTouch/include/BTstack/BTstackManager.h; sourceTree = "<group>"; };
|
||||
9C5BA8A0110B756500D79BBE /* hci_cmds.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = hci_cmds.h; path = include/btstack/hci_cmds.h; sourceTree = "<group>"; };
|
||||
9C5BABAF110E28E900D79BBE /* l2cap-server.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "l2cap-server.c"; path = "example/l2cap-server.c"; sourceTree = "<group>"; };
|
||||
9C6459DE1037554B0081A00B /* platform_iphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = platform_iphone.h; path = src/platform_iphone.h; sourceTree = "<group>"; };
|
||||
@ -88,7 +95,7 @@
|
||||
9C78A0BB103C9DEE003B2950 /* ch.ringwald.BTstack.plist */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.plist.xml; name = ch.ringwald.BTstack.plist; path = resources/ch.ringwald.BTstack.plist; sourceTree = "<group>"; };
|
||||
9C7B5ABF100BD3340065D87E /* linked_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linked_list.c; path = src/linked_list.c; sourceTree = "<group>"; };
|
||||
9C7B5B7E100D04450065D87E /* test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = test.c; path = example/test.c; sourceTree = "<group>"; };
|
||||
9C7B5CF6100FC96A0065D87E /* clientTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = clientTest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9C7B5CF6100FC96A0065D87E /* clientTest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = clientTest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9C7ECB810FCC85650085DAC5 /* bt_control.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bt_control.h; path = src/bt_control.h; sourceTree = "<group>"; };
|
||||
9C7ECB830FCC85650085DAC5 /* bt_control_iphone.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bt_control_iphone.h; path = src/bt_control_iphone.h; sourceTree = "<group>"; };
|
||||
9C7ECBB30FCC95DD0085DAC5 /* hci_dump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hci_dump.h; path = src/hci_dump.h; sourceTree = "<group>"; };
|
||||
@ -111,6 +118,13 @@
|
||||
9CEB4DAA10753B4B00DD5720 /* run_loop_cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = run_loop_cocoa.m; path = src/run_loop_cocoa.m; sourceTree = "<group>"; };
|
||||
9CEB4DAC10753BE600DD5720 /* run_loop_posix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = run_loop_posix.c; path = src/run_loop_posix.c; sourceTree = "<group>"; };
|
||||
9CF13C1510F8A1C6004C4EEE /* bt_control_iphone.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = bt_control_iphone.m; path = src/bt_control_iphone.m; sourceTree = "<group>"; };
|
||||
9CF3F74C112F201600D081C9 /* BTstackCocoaAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = BTstackCocoaAppDelegate.h; path = CocoaTouch/src/BTstackCocoaAppDelegate.h; sourceTree = "<group>"; };
|
||||
9CF3F74D112F201600D081C9 /* BTstackCocoaAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = BTstackCocoaAppDelegate.m; path = CocoaTouch/src/BTstackCocoaAppDelegate.m; sourceTree = "<group>"; };
|
||||
9CF3F75F112F239B00D081C9 /* TestBTstackManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestBTstackManager.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9CF3F781112F244B00D081C9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
9CF3F95111306FFB00D081C9 /* TestBTstackManager.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = TestBTstackManager.h; path = CocoaTouch/src/TestBTstackManager.h; sourceTree = "<group>"; };
|
||||
9CF3F95211306FFB00D081C9 /* TestBTstackManager.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = TestBTstackManager.m; path = CocoaTouch/src/TestBTstackManager.m; sourceTree = "<group>"; };
|
||||
9CF3F95A1130702D00D081C9 /* TestBTstackManager-Info.plist */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.plist.xml; name = "TestBTstackManager-Info.plist"; path = "CocoaTouch/TestBTstackManager-Info.plist"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -130,6 +144,14 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9CF3F75D112F239B00D081C9 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9CF3F782112F244C00D081C9 /* UIKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
@ -195,6 +217,7 @@
|
||||
children = (
|
||||
8DD76FB20486AB0100D96B5E /* project */,
|
||||
9C7B5CF6100FC96A0065D87E /* clientTest */,
|
||||
9CF3F75F112F239B00D081C9 /* TestBTstackManager.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@ -202,10 +225,18 @@
|
||||
9C13C9FA10ECED6300B04243 /* CocoaTouch */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9CF3F74C112F201600D081C9 /* BTstackCocoaAppDelegate.h */,
|
||||
9CF3F74D112F201600D081C9 /* BTstackCocoaAppDelegate.m */,
|
||||
9C13C9FB10ECED6300B04243 /* BTDevice.h */,
|
||||
9C13C9FC10ECED6300B04243 /* BTDevice.m */,
|
||||
9C13C9FD10ECED6300B04243 /* BTInquiryViewController.h */,
|
||||
9C13C9FE10ECED6300B04243 /* BTInquiryViewController.m */,
|
||||
9C509539112744AA00A30986 /* BTstackManager.m */,
|
||||
9C50953B112744CD00A30986 /* BTstackManager.h */,
|
||||
9CF3F95111306FFB00D081C9 /* TestBTstackManager.h */,
|
||||
9CF3F95211306FFB00D081C9 /* TestBTstackManager.m */,
|
||||
9CF3F95A1130702D00D081C9 /* TestBTstackManager-Info.plist */,
|
||||
9CF3F781112F244B00D081C9 /* UIKit.framework */,
|
||||
);
|
||||
name = CocoaTouch;
|
||||
sourceTree = "<group>";
|
||||
@ -316,6 +347,23 @@
|
||||
productReference = 9C7B5CF6100FC96A0065D87E /* clientTest */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
9CF3F75E112F239B00D081C9 /* TestBTstackManager */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9CF3F765112F239C00D081C9 /* Build configuration list for PBXNativeTarget "TestBTstackManager" */;
|
||||
buildPhases = (
|
||||
9CF3F75B112F239B00D081C9 /* Resources */,
|
||||
9CF3F75C112F239B00D081C9 /* Sources */,
|
||||
9CF3F75D112F239B00D081C9 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = TestBTstackManager;
|
||||
productName = TestBTstackManager;
|
||||
productReference = 9CF3F75F112F239B00D081C9 /* TestBTstackManager.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
@ -330,10 +378,21 @@
|
||||
targets = (
|
||||
8DD76FA90486AB0100D96B5E /* BTdaemon */,
|
||||
9C7B5CF5100FC96A0065D87E /* clientTest */,
|
||||
9CF3F75E112F239B00D081C9 /* TestBTstackManager */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
9CF3F75B112F239B00D081C9 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
8DD76FAB0486AB0100D96B5E /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
@ -354,6 +413,7 @@
|
||||
9C04B826107D1CED002A63D0 /* run_loop.c in Sources */,
|
||||
9C04B876107D2B7C002A63D0 /* run_loop_cocoa.m in Sources */,
|
||||
9CF13C1610F8A1C6004C4EEE /* bt_control_iphone.m in Sources */,
|
||||
9C50953A112744AA00A30986 /* BTstackManager.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -370,6 +430,16 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9CF3F75C112F239B00D081C9 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9CF3F776112F241600D081C9 /* BTstackManager.m in Sources */,
|
||||
9CF3F95311306FFB00D081C9 /* TestBTstackManager.m in Sources */,
|
||||
9CF3F99F113083F100D081C9 /* BTDevice.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@ -510,6 +580,97 @@
|
||||
};
|
||||
name = "Debug iPhone";
|
||||
};
|
||||
9CF3F762112F239C00D081C9 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CODE_SIGN_IDENTITY = "Don't Code Sign";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h";
|
||||
INFOPLIST_FILE = "CocoaTouch/TestBTstackManager-Info.plist";
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"-I/Projects/iPhone/btstack/CocoaTouch/include",
|
||||
"-I/Projects/iPhone/btstack/include",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"-L/usr/local/lib",
|
||||
"-lbtstack",
|
||||
"-framework",
|
||||
Foundation,
|
||||
"-framework",
|
||||
UIKit,
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = TestBTstackManager;
|
||||
SDKROOT = iphonesimulator3.1.2;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9CF3F763112F239C00D081C9 /* Debug iPhone */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h";
|
||||
INFOPLIST_FILE = "CocoaTouch/TestBTstackManager-Info.plist";
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"-I/Projects/iPhone/btstack/CocoaTouch/include",
|
||||
"-I/Projects/iPhone/btstack/include",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"-L/usr/local/lib",
|
||||
"-lbtstack",
|
||||
"-framework",
|
||||
Foundation,
|
||||
"-framework",
|
||||
UIKit,
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = TestBTstackManager;
|
||||
SDKROOT = iphonesimulator3.1.2;
|
||||
};
|
||||
name = "Debug iPhone";
|
||||
};
|
||||
9CF3F764112F239C00D081C9 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h";
|
||||
INFOPLIST_FILE = "CocoaTouch/TestBTstackManager-Info.plist";
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"-I/Projects/iPhone/btstack/CocoaTouch/include",
|
||||
"-I/Projects/iPhone/btstack/include",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"-L/usr/local/lib",
|
||||
"-lbtstack",
|
||||
"-framework",
|
||||
Foundation,
|
||||
"-framework",
|
||||
UIKit,
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = TestBTstackManager;
|
||||
SDKROOT = iphonesimulator3.1.2;
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@ -543,6 +704,16 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
9CF3F765112F239C00D081C9 /* Build configuration list for PBXNativeTarget "TestBTstackManager" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9CF3F762112F239C00D081C9 /* Debug */,
|
||||
9CF3F763112F239C00D081C9 /* Debug iPhone */,
|
||||
9CF3F764112F239C00D081C9 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
|
||||
|
Loading…
x
Reference in New Issue
Block a user