diff --git a/CocoaTouch/include/BTstack/BTInquiryViewController.h b/CocoaTouch/include/BTstack/BTInquiryViewController.h index 1a8710fbd..f081cf608 100644 --- a/CocoaTouch/include/BTstack/BTInquiryViewController.h +++ b/CocoaTouch/include/BTstack/BTInquiryViewController.h @@ -64,7 +64,8 @@ typedef enum { bool stopRemoteNameGathering; bool restartInquiry; BTDevice *remoteNameDevice; // device for which remote name request is pending - BTDevice *remoteDevice; + BTDevice *remoteDevice; // device for which connection is pending + BTDevice *connectedDevice; // device to which we're connected bool notifyDelegateOnInquiryStopped; } @@ -72,6 +73,7 @@ typedef enum { - (void) stopInquiry; - (void) showConnecting:(BTDevice *) device; +- (void) showConnected:(BTDevice *) device; @property (nonatomic, assign) bool allowSelection; @property (nonatomic, retain) NSMutableArray *devices; @@ -81,5 +83,6 @@ typedef enum { @protocol BTInquiryDelegate - (void) deviceChoosen:(BTInquiryViewController *) inqView device:(BTDevice*) device; - (void) deviceDetected:(BTInquiryViewController *) inqView device:(BTDevice*) device; +- (void) disconnectDevice:(BTInquiryViewController *) inqView device:(BTDevice*) device; - (void) inquiryStopped; @end diff --git a/CocoaTouch/src/BTInquiryViewController.m b/CocoaTouch/src/BTInquiryViewController.m index 34197e8aa..6445f96ba 100644 --- a/CocoaTouch/src/BTInquiryViewController.m +++ b/CocoaTouch/src/BTInquiryViewController.m @@ -93,6 +93,10 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe return; } NSLog(@"Inquiry started"); + + stopRemoteNameGathering = false; + restartInquiry = true; + inquiryState = kInquiryActive; [[self tableView] reloadData]; @@ -328,6 +332,11 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe [[self tableView] reloadData]; } +- (void) showConnected:(BTDevice *) device { + connectedDevice = device; + [[self tableView] reloadData]; +} + /* - (void)viewDidLoad { [super viewDidLoad]; @@ -427,7 +436,10 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe label = @"Bluetooth not accessible!"; cell.accessoryView = nil; } else { - if (remoteDevice) { + if (connectedDevice) { + label = @"Disconnect"; + cell.accessoryView = nil; + } else if (remoteDevice) { label = @"Connecting..."; cell.accessoryView = bluetoothActivity; } else { @@ -484,9 +496,19 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe // valid selection? int idx = [indexPath indexAtPosition:1]; - if (bluetoothState == HCI_STATE_WORKING && idx < [devices count]){ - if (delegate) { - [delegate deviceChoosen:self device:[devices objectAtIndex:idx]]; + if (bluetoothState == HCI_STATE_WORKING) { + if (delegate) { + if (idx < [devices count]){ + [delegate deviceChoosen:self device:[devices objectAtIndex:idx]]; + } else if (idx == [devices count]) { + if (connectedDevice) { + // DISCONNECT button + [delegate disconnectDevice:self device:connectedDevice]; + } else { + // Find more devices + [self myStartInquiry]; + } + } } } else { [tableView deselectRowAtIndexPath:indexPath animated:TRUE]; diff --git a/example/WiiMoteOpenGLDemo/Classes/WiiMoteOpenGLDemoAppDelegate.m b/example/WiiMoteOpenGLDemo/Classes/WiiMoteOpenGLDemoAppDelegate.m index 827f9052c..9492ded73 100644 --- a/example/WiiMoteOpenGLDemo/Classes/WiiMoteOpenGLDemoAppDelegate.m +++ b/example/WiiMoteOpenGLDemo/Classes/WiiMoteOpenGLDemoAppDelegate.m @@ -348,6 +348,9 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint NSLog(@"inquiryStopped"); } +- (void) disconnectDevice:(BTInquiryViewController *) inqView device:(BTDevice*) selectedDevice { +} + - (void)applicationWillTerminate:(UIApplication *)application { // disconnect if (wiiMoteConHandle) { diff --git a/project.xcodeproj/project.pbxproj b/project.xcodeproj/project.pbxproj index 56ec7891c..81b707c74 100644 --- a/project.xcodeproj/project.pbxproj +++ b/project.xcodeproj/project.pbxproj @@ -28,7 +28,6 @@ 9C7ECB840FCC85650085DAC5 /* bt_control_iphone.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C7ECB820FCC85650085DAC5 /* bt_control_iphone.c */; }; 9C7ECBB50FCC95DD0085DAC5 /* hci_dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C7ECBB40FCC95DD0085DAC5 /* hci_dump.c */; }; 9C88500E0FBF6702004980E4 /* l2cap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C88500C0FBF6702004980E4 /* l2cap.c */; }; - 9CAA573710A5D87400D0E1A9 /* inquiry.c in Sources */ = {isa = PBXBuildFile; fileRef = 9CAA573610A5D87400D0E1A9 /* inquiry.c */; }; 9CC813A20FFC0774002816F9 /* btstack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9CC813A10FFC0774002816F9 /* btstack.c */; }; 9CC813A50FFC0A51002816F9 /* daemon.c in Sources */ = {isa = PBXBuildFile; fileRef = 9CC813A40FFC0A51002816F9 /* daemon.c */; }; 9CCE6CEA1025BD0000FCE9F4 /* hci.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C46FC340FA906F700ABEF05 /* hci.c */; }; @@ -267,9 +266,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 8DD76FA90486AB0100D96B5E /* project */ = { + 8DD76FA90486AB0100D96B5E /* BTdaemon */ = { isa = PBXNativeTarget; - buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "project" */; + buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "BTdaemon" */; buildPhases = ( 8DD76FAB0486AB0100D96B5E /* Sources */, 8DD76FAD0486AB0100D96B5E /* Frameworks */, @@ -279,7 +278,7 @@ ); dependencies = ( ); - name = project; + name = BTdaemon; productInstallPath = "$(HOME)/bin"; productName = project; productReference = 8DD76FB20486AB0100D96B5E /* project */; @@ -313,7 +312,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 8DD76FA90486AB0100D96B5E /* project */, + 8DD76FA90486AB0100D96B5E /* BTdaemon */, 9C7B5CF5100FC96A0065D87E /* clientTest */, ); }; @@ -341,7 +340,6 @@ 9CEB4F17107AAAEF00DD5720 /* run_loop_posix.c in Sources */, 9C04B826107D1CED002A63D0 /* run_loop.c in Sources */, 9C04B876107D2B7C002A63D0 /* run_loop_cocoa.m in Sources */, - 9CAA573710A5D87400D0E1A9 /* inquiry.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -501,7 +499,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "project" */ = { + 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "BTdaemon" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB928608733DD80010E9CD /* Debug */,