]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mac/private/hid.h
HID support (preliminary - not added to bakefiles yet)
[wxWidgets.git] / include / wx / mac / private / hid.h
diff --git a/include/wx/mac/private/hid.h b/include/wx/mac/private/hid.h
new file mode 100644 (file)
index 0000000..2947ee3
--- /dev/null
@@ -0,0 +1,63 @@
+#include <wx/wx.h>
+#include <IOKit/IOKitLib.h>
+#include <IOKit/IOCFPlugIn.h>
+#include <IOKit/hid/IOHIDLib.h>
+#include <IOKit/hid/IOHIDKeys.h>
+#include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h>
+
+#include <mach/mach.h>
+
+//Utility wrapper around CFArray
+class wxCFArray
+{
+public:
+       wxCFArray(CFTypeRef pData) : pArray((CFArrayRef) pData) {}
+       CFTypeRef operator [] (const int& nIndex) {return CFArrayGetValueAtIndex(pArray, nIndex); }
+       int Count() {return CFArrayGetCount(pArray);}
+private:
+       CFArrayRef pArray;
+};
+
+//
+//     A wrapper around OS X HID Manager procedures.
+//     The tutorial "Working With HID Class Device Interfaces" Is
+//     Quite good, as is the sample program associated with it 
+//  (Depite the author's protests!).
+class wxHIDDevice
+{
+public:
+       wxHIDDevice() : m_ppDevice(NULL), m_ppQueue(NULL), m_pCookies(NULL) {}
+       //kHIDPage_GenericDesktop
+       //kHIDUsage_GD_Joystick,kHIDUsage_GD_Mouse,kHIDUsage_GD_Keyboard
+       bool Create (const int& nClass = -1, const int& nType = -1);
+
+       inline void AddCookie(CFTypeRef Data, const int& i);
+       inline void AddCookieInQueue(CFTypeRef Data, const int& i);     
+       inline void InitCookies(const size_t& dwSize, bool bQueue = false);
+
+       //Must be implemented by derived classes
+       //builds the cookie array -
+       //first call InitCookies to initialize the cookie
+       //array, then AddCookie to add a cookie at a certain point in an array
+       virtual void BuildCookies(wxCFArray& Array) = 0;
+               
+       //checks to see whether the cookie at index nIndex is active (element value != 0)
+       bool IsActive(const int& nIndex);
+       
+       //closes the device and cleans the queue and cookies
+       virtual ~wxHIDDevice();
+private:
+       IOHIDDeviceInterface**  m_ppDevice; //this, essentially
+       IOHIDQueueInterface**   m_ppQueue;  //queue (if we want one)
+       IOHIDElementCookie*     m_pCookies; //cookies
+
+       const char*                     m_szName; //(product) name
+       mach_port_t                     m_pPort;
+};
+
+class wxHIDKeyboard : public wxHIDDevice
+{
+public:
+       bool Create();
+       virtual void BuildCookies(wxCFArray& Array);
+};
\ No newline at end of file