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 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 name:EAAccessoryDidConnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self 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 { 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]; %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/TP ef/doc/uid/TP Apples EADemo sample code Apple MFi page Redpark Serial Cable BlueGigas iWrap firmware (for their BlueTooth modules)

16 Questions, Maybe Answers Andrew acraze at

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

Similar presentations

Ads by Google