ScopedIOHIDManager(const ScopedIOHIDManager&) = delete;
- bool Open() {
- IOReturn ret = IOHIDManagerOpen(manager_, kIOHIDManagerOptionNone);
- if (ret != kIOReturnSuccess) {
- ERROR("Failed to IOHIDManagerOpen: 0x%x", ret);
- return false;
- }
- return true;
- }
-
IOHIDManagerRef get() { return manager_; }
private:
bool IsIRAvailable() {
ScopedIOHIDManager manager;
IOHIDManagerSetDeviceMatching(manager.get(), nullptr);
- if (!manager.Open()) {
- //return false;
- }
ScopedCFTypeRef<CFSetRef> devices(IOHIDManagerCopyDevices(manager.get()));
if (!devices) {
ERROR("Failed to IOHIDManagerCopyDevices");
return false;
}
+const char* GetBooleanDescription(CFTypeRef boolean) {
+ if (CFGetTypeID(boolean) != CFBooleanGetTypeID()) {
+ ERROR("Unexpected non-boolean CFTypeRef");
+ abort();
+ }
+ return CFBooleanGetValue(static_cast<CFBooleanRef>(boolean)) ? "on" : "off";
+}
+
CFTypeRef GetUserPropertyValue() {
return CFPreferencesCopyValue(kPrefEnabled, kPrefDomain,
kCFPreferencesAnyUser, kCFPreferencesCurrentHost);
}
-int HandleRead() {
- CFTypeRef user_prop = GetUserPropertyValue();
- CFShow(user_prop);
-
+io_iterator_t CreateIOServiceIterator() {
CFMutableDictionaryRef matching_dict = IOServiceMatching("AppleIRController");
io_iterator_t iterator;
kern_return_t kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matching_dict, &iterator);
if (kr != KERN_SUCCESS) {
ERROR("Failed to IOServiceGetMatchingServices: 0x%x", kr);
- return EXIT_FAILURE;
+ return 0;
}
+ return iterator;
+}
+
+int HandleRead() {
+ CFTypeRef user_prop = GetUserPropertyValue();
+ printf("Userspace property value: %s\n", GetBooleanDescription(user_prop));
+
+ io_iterator_t iterator = CreateIOServiceIterator();
+ if (!iterator)
+ return EXIT_FAILURE;
io_object_t service;
bool did_find = false;
ScopedCFTypeRef<CFTypeRef> device_enabled(
IORegistryEntryCreateCFProperty(service, kPrefEnabled, nullptr, 0));
- CFShow(device_enabled.get());
+ printf("Kernel property value %s: %s\n",
+ name, GetBooleanDescription(device_enabled.get()));
#if 0
ScopedCFTypeRef<CFMutableDictionaryRef> props;