From 5edccd66e56e54614c35d256a3642ea595a3ab67 Mon Sep 17 00:00:00 2001 From: "matthias.ringwald" Date: Thu, 22 Oct 2009 21:05:00 +0000 Subject: [PATCH] move all inquiry related code from BTstackCocoaAppDelegate into BTInquiryViewController --- .../include/BTstack/BTInquiryViewController.h | 10 +- CocoaTouch/src/BTInquiryViewController.m | 211 +++++++++++++++--- CocoaTouch/src/BTstackCocoaAppDelegate.h | 7 - CocoaTouch/src/BTstackCocoaAppDelegate.m | 181 ++------------- TODO.txt | 5 +- 5 files changed, 205 insertions(+), 209 deletions(-) diff --git a/CocoaTouch/include/BTstack/BTInquiryViewController.h b/CocoaTouch/include/BTstack/BTInquiryViewController.h index 1ec368d3b..606fce039 100644 --- a/CocoaTouch/include/BTstack/BTInquiryViewController.h +++ b/CocoaTouch/include/BTstack/BTInquiryViewController.h @@ -17,7 +17,8 @@ typedef enum { kInquiryRemoteName } InquiryState; -@interface BTInquiryViewController : UITableViewController { +@interface BTInquiryViewController : UITableViewController +{ NSMutableArray *devices; HCI_STATE bluetoothState; InquiryState inquiryState; @@ -27,14 +28,11 @@ typedef enum { UIFont * macAddressFont; id delegate; } -- (void) setBluetoothState:(HCI_STATE)state; -- (void) setInquiryState:(InquiryState)state; -- (InquiryState) inquiryState; -- (HCI_STATE) bluetoothState; +- (void) startInquiry; @property (nonatomic, retain) NSMutableArray *devices; @property (nonatomic, retain) id delegate; @end @protocol BTInquiryDelegate --(void) deviceChoosen:(BTInquiryViewController *) inqView device:(BTDevice*) device; +- (void) deviceChoosen:(BTInquiryViewController *) inqView device:(BTDevice*) device; @end diff --git a/CocoaTouch/src/BTInquiryViewController.m b/CocoaTouch/src/BTInquiryViewController.m index 7d55b0fce..f1e5dba9c 100644 --- a/CocoaTouch/src/BTInquiryViewController.m +++ b/CocoaTouch/src/BTInquiryViewController.m @@ -7,12 +7,176 @@ #import "BTInquiryViewController.h" #import "BTDevice.h" +#include + +static BTInquiryViewController *inqView; +static btstack_packet_handler_t clientHandler; +static uint8_t remoteNameIndex; + +@interface BTInquiryViewController (private) +- (void) handlePacket:(uint8_t) packet_type channel:(uint16_t) channel packet:(uint8_t*) packet size:(uint16_t) size; +- (BTDevice *) getDeviceForAddress:(bd_addr_t *)addr; +- (bool) getNextRemoteName; +- (void) startInquiry; +@end + +static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ + if (inqView) { + [inqView handlePacket:packet_type channel:channel packet:packet size:size]; + } +} + @implementation BTInquiryViewController @synthesize devices; @synthesize delegate; -int mock_state = 0; +- (void) handlePacket:(uint8_t) packet_type channel:(uint16_t) channel packet:(uint8_t*) packet size:(uint16_t) size { + static bool inquiryDone = 0; + bd_addr_t event_addr; + switch (packet_type) { + + case HCI_EVENT_PACKET: + + switch (packet[0]){ + + case BTSTACK_EVENT_STATE: + // bt stack activated + bluetoothState = packet[2]; + [[self tableView] reloadData]; + + // set BT state + if (!inquiryDone && packet[2] == HCI_STATE_WORKING) { + inquiryDone = true; + if (inquiryState != kInquiryInactive) { + NSLog(@"Inquiry already active"); + return; + } + NSLog(@"Inquiry started"); + inquiryState = kInquiryActive; + [[self tableView] reloadData]; + bt_send_cmd(&hci_inquiry, HCI_INQUIRY_LAP, 15, 0); + } + break; + + case BTSTACK_EVENT_POWERON_FAILED: + bluetoothState = HCI_STATE_OFF; + [[self tableView] reloadData]; + + UIAlertView* alertView = [[UIAlertView alloc] init]; + alertView.title = @"Bluetooth not accessible!"; + alertView.message = @"Hardware initialization failed!\n" + "Make sure you have turned off Bluetooth in the System Settings."; + NSLog(@"Alert: %@ - %@", alertView.title, alertView.message); + [alertView addButtonWithTitle:@"Dismiss"]; + [alertView show]; + break; + + case HCI_EVENT_INQUIRY_RESULT: + case HCI_EVENT_INQUIRY_RESULT_WITH_RSSI: + { + int numResponses = packet[2]; + int i; + for (i=0; i { UIWindow *window; BTInquiryViewController *inqView; - bool inqActive; - NSMutableArray *devices; - uint8_t remoteNameIndex; } - -- (void) handlePacketWithType:(uint8_t) packetType data:(uint8_t*)data len:(uint16_t)len; -- (void) startInquiry; - @property (nonatomic, retain) UIWindow *window; @end diff --git a/CocoaTouch/src/BTstackCocoaAppDelegate.m b/CocoaTouch/src/BTstackCocoaAppDelegate.m index 6880f17bb..af3ca868f 100644 --- a/CocoaTouch/src/BTstackCocoaAppDelegate.m +++ b/CocoaTouch/src/BTstackCocoaAppDelegate.m @@ -17,167 +17,13 @@ #include #include -// forward packet to Objective C method -void packet_handler(uint8_t packet_type, uint8_t *packet, uint16_t size){ - [ ((BTstackCocoaAppDelegate *)[[UIApplication sharedApplication] delegate]) handlePacketWithType:packet_type data:packet len:size]; -} - -void showAlert(NSString *title, NSString *message){ - NSLog(@"Alert: %@ - %@", title, message); - UIAlertView* alertView = [[UIAlertView alloc] init]; - alertView.title = title; - alertView.message = message; - [alertView addButtonWithTitle:@"Dismiss"]; - [alertView show]; +void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ } @implementation BTstackCocoaAppDelegate @synthesize window; -- (BTDevice *) getDeviceForAddress:(bd_addr_t *)addr { - uint8_t j; - for (j=0; j<[devices count]; j++){ - BTDevice *dev = [devices objectAtIndex:j]; - if (BD_ADDR_CMP(addr, [dev address]) == 0){ - return dev; - } - } - return nil; -} - -- (bool) getNextRemoteName{ - BTDevice *remoteDev = nil; - for (remoteNameIndex = 0; remoteNameIndex < [devices count] ; remoteNameIndex++){ - BTDevice *dev = [devices objectAtIndex:remoteNameIndex]; - if (![dev name]){ - remoteDev = dev; - break; - } - } - if (remoteDev) { - [inqView setInquiryState:kInquiryRemoteName]; - [remoteDev setConnectionState:kBluetoothConnectionRemoteName]; - bt_send_cmd(&hci_remote_name_request, [remoteDev address], [remoteDev pageScanRepetitionMode], 0, [remoteDev clockOffset] | 0x8000); - } else { - [inqView setInquiryState:kInquiryInactive]; - // inquiry done. - } - return remoteDev; -} - -- (void) startInquiry { - if ([inqView inquiryState] != kInquiryInactive) { - NSLog(@"Inquiry already active"); - return; - } - NSLog(@"Inquiry started"); - [inqView setInquiryState:kInquiryActive]; - bt_send_cmd(&hci_inquiry, HCI_INQUIRY_LAP, 15, 0); -} - -- (void) handlePacketWithType:(uint8_t) packetType data:(uint8_t*) data len:(uint16_t) len { - - static bool inquiryDone = 0; - bd_addr_t event_addr; - switch (packetType) { - - case HCI_EVENT_PACKET: - - switch (data[0]){ - - case BTSTACK_EVENT_STATE: - // bt stack activated - [inqView setBluetoothState:data[2] ]; - - // set BT state - if (!inquiryDone && data[2] == HCI_STATE_WORKING) { - inquiryDone = true; - [self startInquiry]; - } - break; - - case BTSTACK_EVENT_POWERON_FAILED: - [inqView setBluetoothState:HCI_STATE_OFF]; - showAlert(@"Bluetooth not accessible!", - @"Hardware initialization failed!\n" - "Make sure you have turned off Bluetooth in the System Settings."); - break; - - case HCI_EVENT_INQUIRY_RESULT: - case HCI_EVENT_INQUIRY_RESULT_WITH_RSSI: - { - int numResponses = data[2]; - int i; - for (i=0; i