]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mac/corefoundation/hid.h
Move HID stuff into both OSX builds. Add preliminary joystick for OSX
[wxWidgets.git] / include / wx / mac / corefoundation / hid.h
diff --git a/include/wx/mac/corefoundation/hid.h b/include/wx/mac/corefoundation/hid.h
new file mode 100644 (file)
index 0000000..52e661e
--- /dev/null
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        hid.h
+// Purpose:     DARWIN HID layer for WX
+// Author:      Ryan Norton
+// Modified by:
+// Created:     11/11/2003
+// RCS-ID:      $Id$
+// Copyright:   (c) Ryan Norton
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+// ===========================================================================
+// declarations
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
+
+#ifndef _WX_MACCARBONHID_H_
+#define _WX_MACCARBONHID_H_
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+    #pragma interface "hid.h"
+#endif
+
+#include "wx/defs.h"
+
+
+// ---------------------------------------------------------------------------
+// definitions
+// ---------------------------------------------------------------------------
+
+//Mac OSX only
+#ifdef __DARWIN__
+
+#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 (int nClass = -1, int nType = -1, int nDev = 1);
+    
+    static int GetCount(int nClass = -1, int nType = -1);
+
+       void AddCookie(CFTypeRef Data, int i);
+       void AddCookieInQueue(CFTypeRef Data, int i);   
+       void InitCookies(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 nIndex is active (element value != 0)
+       bool IsActive(int nIndex);
+    
+    //checks to see whether the cookie at nIndex exists
+    bool HasElement(int nIndex);
+       
+       //closes the device and cleans the queue and cookies
+       virtual ~wxHIDDevice();
+    
+protected:
+       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);
+};
+
+#endif //__DARWIN__
+
+#endif 
+        //WX_MACCARBONHID_H
\ No newline at end of file