Is it mandatory to use classic Bluetooth (Bluetooth Classic) to connect game controllers that support Apple’s MFi games and Arcade games, or can game controllers be developed using only Bluetooth Low Energy (BLE) for such accessories?
Post
Replies
Boosts
Views
Activity
Development environment: Xcode Version 15.1 (15C65), macOS 14.2.1 (23C71)
Run-time configuration: macOS 14.2.1 (23C71)
DESCRIPTION OF PROBLEM
1.The device supports sleep and wake functionality, and sleep/wake can be achieved on both Linux and Windows.
2.Does macOS's USBSerialDriverKit support sleep and wake? If so, how can I implement it?
3.Is it necessary to modify system permissions on macOS to use a USB serial device for sleep and wake functionality?
STEPS TO REPRODUCE
I don't know how macOS performs power management for serial devices. The sleep wake function fails to pass the test on macOS
I confirmed that I had successfully turned on the device and registered the callback method,
but the callback method was not successfully invoked when moving with Magic mouse.
What method does the Magic Mouse and Magic Trackpad need to use to get the input value of the device?
IOReturn ioReturn = IOHIDDeviceOpen(deviceRef, kIOHIDOptionsTypeNone);
if ( kIOReturnSuccess == ioReturn ) {
IOHIDDeviceRegisterInputValueCallback(deviceRef, mouseInputValueCallback, NULL);
}
static void mouseInputValueCallback(void *context, IOReturn result, void *sender, IOHIDValueRef value) {
NSLog(@"handle input value");
}
I passed the __IOHIDDeviceCopyMatchingInputElements get magic mouse input element
<__NSArrayM 0x6000012c4900>(
timestamp: 0 type: 1 usagePage: 1 usage: 48 reportID: 16 value: 0,
timestamp: 0 type: 1 usagePage: 1 usage: 49 reportID: 16 value: 0,
timestamp: 0 type: 2 usagePage: 9 usage: 1 reportID: 16 value: 0,
timestamp: 0 type: 2 usagePage: 9 usage: 2 reportID: 16 value: 0
)
(NSArray *)getHIDReprots {
if (!deviceRef) {
return nil;
}
NSMutableArray *reports = [[NSMutableArray alloc] init];
CFArrayRef elements;
CFIndex i;
elements = IOHIDDeviceCopyMatchingElements(deviceRef, NULL, kIOHIDOptionsTypeNone);
for (i = 0; i<CFArrayGetCount(elements); i++) {
const IOHIDElementRef element = (void*)CFArrayGetValueAtIndex(elements, i);
IOHIDElementType eleType = IOHIDElementGetType(element);
NSString *eleTypeStr = @"";
switch (eleType) {
case kIOHIDElementTypeInput_Misc:
eleTypeStr = @"kIOHIDElementTypeInput_Misc";
break;
case kIOHIDElementTypeInput_Button:
eleTypeStr = @"kIOHIDElementTypeInput_Button";
break;
case kIOHIDElementTypeInput_Axis:
eleTypeStr = @"kIOHIDElementTypeInput_Axis";
break;
case kIOHIDElementTypeInput_ScanCodes:
eleTypeStr = @"kIOHIDElementTypeInput_ScanCodes";
break;
case kIOHIDElementTypeInput_NULL:
eleTypeStr = @"kIOHIDElementTypeInput_NULL";
break;
case kIOHIDElementTypeOutput:
eleTypeStr = @"kIOHIDElementTypeOutput";
break;
case kIOHIDElementTypeFeature:
eleTypeStr = @"kIOHIDElementTypeFeature";
break;
case kIOHIDElementTypeCollection:
eleTypeStr = @"kIOHIDElementTypeCollection";
break;
default:
break;
}
uint32_t page = IOHIDElementGetUsagePage(element);
uint32_t usage = IOHIDElementGetUsage(element);
uint32_t reportID = IOHIDElementGetReportID(element);
uint32_t reportSize = IOHIDElementGetReportSize(element);
uint32_t reportCount = IOHIDElementGetReportCount(element);
NSString *elementStr = [[NSString alloc] initWithFormat:@" reportID:%d, reportSize:%d, type:%@, UsagePage:%d, usage:%d, reportCount:%d\n\n",reportID, reportSize, eleTypeStr, page, usage, reportCount];
[reports addObject:elementStr];
}
return reports;
}
reportID:0, reportSize:0, type:kIOHIDElementTypeCollection, UsagePage:1, usage:2, reportCount:1
reportID:0, reportSize:0, type:kIOHIDElementTypeCollection, UsagePage:1, usage:1, reportCount:1
reportID:16, reportSize:16, type:kIOHIDElementTypeInput_Misc, UsagePage:1, usage:48, reportCount:1
reportID:16, reportSize:16, type:kIOHIDElementTypeInput_Misc, UsagePage:1, usage:49, reportCount:1
reportID:16, reportSize:1, type:kIOHIDElementTypeInput_Button, UsagePage:9, usage:1, reportCount:1
reportID:16, reportSize:1, type:kIOHIDElementTypeInput_Button, UsagePage:9, usage:2, reportCount:1
reportID:71, reportSize:8, type:kIOHIDElementTypeFeature, UsagePage:6, usage:32, reportCount:1
reportID:85, reportSize:512, type:kIOHIDElementTypeFeature, UsagePage:65282, usage:85, reportCount:64
reportID:0, reportSize:0, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:-1, reportCount:1
reportID:0, reportSize:1, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:0, reportCount:1
reportID:16, reportSize:0, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:-1, reportCount:1
reportID:16, reportSize:1, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:0, reportCount:1
reportID:71, reportSize:0, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:-1, reportCount:1
reportID:71, reportSize:1, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:0, reportCount:1
reportID:85, reportSize:0, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:-1, reportCount:1
reportID:85, reportSize:1, type:kIOHIDElementTypeInput_NULL, UsagePage:0, usage:0, reportCount:1
Devices:
VendorID ProductID LocationID UsagePage Usage RegistryID Transport Class Product UserClass Built-In
0x4c 0x265 0x3bab3ec3 1 2 0x100001ec4 Bluetooth AppleHSBluetoothHIDDriver Magic Trackpad (null) 0
0x4c 0x265 0x3bab3ec3 0 1 0x100001eb2 Bluetooth AppleHSBluetoothDevice Magic Trackpad (null) 0
0x5ac 0x30d 0x5abbb32b 1 2 0x100001221 Bluetooth BNBMouseDevice Magic Mouse (null) 0
0x4c 0x265 0x3bab3ec3 65280 3 0x100001ed2 Bluetooth AppleHSBluetoothHIDDriver Magic Trackpad (null) 0
0x4c 0x265 0x3bab3ec3 65280 13 0x100001ecc Bluetooth AppleHSBluetoothHIDDriver Magic Trackpad (null) 0
0x4c 0x265 0x3bab3ec3 65280 11 0x100001eba Bluetooth AppleHSBluetoothHIDDriver Magic Trackpad (null) 0
When a new version of xcode is archived using Developer ID Application, the system extension cannot recognize the corresponding provisioning profile,only the development type provisioning profile, I carefully confirmed the contents of the description file and regenerated the new description file. The system extension could not select the provisioning profile of Developer ID Application.
how to obtain information about transmission errors such as overrun, framing, parity, and
break signals?
Hello, I checked the relevant definitions in #include <sys/ttycom.h>, how can I get the RXError information of IOUserSerial in DriverKit.
We are the developer team of Nanjing Qinheng Microelectronics Co., Ltd. Recently, we have carried out device driver development and system adaptation for a variety of USB-to-serial chips.
At present, our project is stagnant in the release stage because the "Provisioning Profile" does not contain our vendor ID(0x1A86). The release process of this driver will affect millions of users worldwide. We hope that the "Provisioning Profile" can be completed more quickly. This is very important for our customer and the experience of Apple's Big Sur.