Better output for HandleRead().
authorRobert Sesek <rsesek@bluestatic.org>
Sun, 13 Mar 2016 22:36:47 +0000 (18:36 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Sun, 13 Mar 2016 22:37:53 +0000 (18:37 -0400)
apple-ir-control.cc

index 8a6f5df029a473f66b91d074b96444969f0ff739..b1028954f6c55a3a42ebbea86e54a5982161b9a2 100644 (file)
@@ -27,15 +27,6 @@ class ScopedIOHIDManager {
 
   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:
@@ -67,9 +58,6 @@ class ScopedCFTypeRef {
 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");
@@ -92,22 +80,37 @@ bool IsIRAvailable() {
   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;
@@ -125,7 +128,8 @@ int HandleRead() {
 
     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;