Presentation is loading. Please wait.

Presentation is loading. Please wait.

Intro to the External Accessory Framework Andrew acraze at

Similar presentations

Presentation on theme: "Intro to the External Accessory Framework Andrew acraze at"— Presentation transcript:

1 Intro to the External Accessory Framework Andrew Craze @AndrewCr acraze at

2 Agenda What is the EA Framework useful for? What hardware can I talk to? How do I use the EA Framework? Why/how do I get more info from Apple under the MFi NDA?

3 What can I do with EAAccessory? Application [not accessory] -side code Enumerate connected accessories Open a serial session with an accessory Communicate via streams and get notifications

4 What cant I do with EAAccessory? Pair or make the connection with a BlueTooth device Use (any) BlueTooth profiles

5 Hardware Options Consumer-ready (pre-built cables) Like RedParks Build-your-own, with 3 rd -party firmware Like BlueGigas Build-your-own, with DIY firmware Join the MFi program for Docs

6 Easier Hardware (Examples, probably not the only options) RedPacks Serial CableBlueGigas iWrap Firmware

7 Application Checklist Link with ExternalAccessory.framework Add protocol(s) to info.plist Use EAAccessoryManager to find your device Add a delegate (EAAccessoryDelegate) to your accessorys object Connect with your chosen protocol Manage the I/O stream data

8 Link with ExternalAccessory.framework

9 Add protocol(s) to info.plist

10 Use EAAccessoryManager to find your device [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil]; [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; _accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];

11 Add delegate to your accessorys object, connect to streams [_accessory setDelegate:self]; _session = [[EASession alloc] initWithAccessory:_accessory forProtocol:_protocolString]; if (_session) { [[_session inputStream] setDelegate:self]; [[_session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [[_session inputStream] open]; [[_session outputStream] setDelegate:self]; [[_session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [[_session outputStream] open]; } else { NSLog(@"creating session failed"); }

12 Manage the I/O stream data, part 1 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventNone: break; case NSStreamEventOpenCompleted: break; case NSStreamEventHasBytesAvailable: [self _readData]; break; case NSStreamEventHasSpaceAvailable: [self _writeData]; break; case NSStreamEventErrorOccurred: break; case NSStreamEventEndEncountered: break; default: break; }

13 Manage the I/O stream data, part 2 - (void)_readData { #define EAD_INPUT_BUFFER_SIZE 128 uint8_t buf[EAD_INPUT_BUFFER_SIZE]; while ([[_session inputStream] hasBytesAvailable]) { NSInteger bytesRead = [[_session inputStream] read:buf maxLength:EAD_INPUT_BUFFER_SIZE]; if (_readData == nil) { _readData = [[NSMutableData alloc] init]; } [_readData appendBytes:(void *)buf length:bytesRead]; //NSLog(@"read %d bytes from input stream", bytesRead); } [[NSNotificationCenter defaultCenter] postNotificationName:EADSessionDataReceivedNotification object:self userInfo:nil]; } - (NSData *)readData:(NSUInteger)bytesToRead { NSData *data = nil; if ([_readData length] >= bytesToRead) { NSRange range = NSMakeRange(0, bytesToRead); data = [_readData subdataWithRange:range]; [_readData replaceBytesInRange:range withBytes:NULL length:0]; } return data; }

14 The MFi Program Separate NDA, over-and-above the iOS developer program Free, but you must be a bona-fide company (and prove it!) Plan on a month to get fully-approved Docs on everything you need to know for accessory-side development

15 Handy reference links (No endorsement expressed or implied. So there.) External Accessory Framework Reference (from Apple) ef/doc/uid/TP40008235 ef/doc/uid/TP40008235 Apples EADemo sample code Apple MFi page Redpark Serial Cable BlueGigas iWrap firmware (for their BlueTooth modules)

16 Questions, Maybe Answers Andrew Craze @AndrewCr acraze at

Download ppt "Intro to the External Accessory Framework Andrew acraze at"

Similar presentations

Ads by Google