diff options
-rw-r--r-- | DomeKey/HeadphoneKeyEventBluetooth.h | 6 | ||||
-rw-r--r-- | DomeKey/HeadphoneKeyEventBluetooth.m | 49 |
2 files changed, 52 insertions, 3 deletions
diff --git a/DomeKey/HeadphoneKeyEventBluetooth.h b/DomeKey/HeadphoneKeyEventBluetooth.h index a55a539..d92a77c 100644 --- a/DomeKey/HeadphoneKeyEventBluetooth.h +++ b/DomeKey/HeadphoneKeyEventBluetooth.h @@ -12,8 +12,12 @@ #import "HeadphoneKeyEventDelegate.h" #import "dome_key_map.h" -@interface HeadphoneKeyEventBluetooth : NSObject <IOBluetoothDevicePairDelegate> { +@interface HeadphoneKeyEventBluetooth : NSObject < + IOBluetoothDevicePairDelegate, + IOBluetoothL2CAPChannelDelegate +> { id <HeadphoneKeyEventDelegate> _delegate; + IOBluetoothL2CAPChannel *_l2cap_channel; } - (instancetype)initWithDelegate:(id <HeadphoneKeyEventDelegate>)delegate; diff --git a/DomeKey/HeadphoneKeyEventBluetooth.m b/DomeKey/HeadphoneKeyEventBluetooth.m index 74ae8b9..2f0c2c4 100644 --- a/DomeKey/HeadphoneKeyEventBluetooth.m +++ b/DomeKey/HeadphoneKeyEventBluetooth.m @@ -65,9 +65,54 @@ IOBluetoothSDPServiceRecord *service_record = [device getServiceRecordForUUID:[[IOBluetoothSDPUUID alloc] initWithUUID16:kBluetoothSDPUUID16ServiceClassAVRemoteControlController]]; - if (service_record) { - NSLog(@"Is remote controller"); + if (!service_record) { + NSLog(@"Not a remote control capable pair of headphones"); + return; } + + // BluetoothL2CAPPSM *psm = NULL; + IOReturn ret; + // ret = [service_record getL2CAPPSM:psm]; + // if (ret != kIOReturnSuccess) { + // NSLog(@"L2CAP PSM error: %d", ret); + // return; + // } + + IOBluetoothL2CAPChannel *l2cap; + ret = [device openL2CAPChannelAsync:&l2cap + // withPSM:*psm // (BluetoothL2CAPPSM)kBluetoothL2CAPPSMAVCTP + // Appears to only work for the Play/Pause button + withPSM:(BluetoothL2CAPPSM)kBluetoothL2CAPPSMAVCTP + delegate:self]; + if (ret != kIOReturnSuccess) { + _l2cap_channel = nil; + NSLog(@"L2CAP channel open error: %d", ret); + return; + } + + _l2cap_channel = l2cap; +} + +- (void)l2capChannelData:(IOBluetoothL2CAPChannel *)l2capChannel + data:(void *)dataPointer + length:(size_t)dataLength +{ + // for (size_t i = 0; i < dataLength; i++) { + // NSLog(@"L2CAP data: ?", dataPointer[i]); + // } + NSData *data = [NSData dataWithBytes:dataPointer length:dataLength]; + NSLog(@"L2CAP data: %@", data); +} + +- (void)l2capChannelOpenComplete:(IOBluetoothL2CAPChannel *)l2capChannel + status:(IOReturn)error +{ + NSLog(@"L2CAP channel open"); +} + +- (void)l2capChannelClosed:(IOBluetoothL2CAPChannel *)l2capChannel +{ + NSLog(@"L2CAP channel closed"); } @end |