X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65442ab650425a5f6a1d5d685e8df582401a9be7..f8087c0d2c63f5c905ed7d5874001cfd86a2aadc:/include/wx/mac/corefoundation/hid.h diff --git a/include/wx/mac/corefoundation/hid.h b/include/wx/mac/corefoundation/hid.h index 3789e81ff3..ec7c09cf08 100644 --- a/include/wx/mac/corefoundation/hid.h +++ b/include/wx/mac/corefoundation/hid.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: hid.h +// Name: wx/mac/corefoundation/hid.h // Purpose: DARWIN HID layer for WX // Author: Ryan Norton // Modified by: @@ -8,6 +8,7 @@ // Copyright: (c) Ryan Norton // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// + // =========================================================================== // declarations // =========================================================================== @@ -19,17 +20,9 @@ #ifndef _WX_MACCARBONHID_H_ #define _WX_MACCARBONHID_H_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "hid.h" -#endif - #include "wx/defs.h" #include "wx/string.h" -// --------------------------------------------------------------------------- -// definitions -// --------------------------------------------------------------------------- - //Mac OSX only #ifdef __DARWIN__ @@ -39,72 +32,85 @@ #include #include -#include +//Darn apple - doesn't properly wrap their headers in extern "C"! +//http://www.macosx.com/forums/archive/index.php/t-68069.html +//Needed for codewarrior link error with mach_port_deallocate() +extern "C" { +#include +} + +#include //this actually includes mach_port.h (see above) + +// =========================================================================== +// definitions +// =========================================================================== -//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; -}; +// --------------------------------------------------------------------------- +// wxHIDDevice // -// 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!). +// 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 + wxHIDDevice() : m_ppDevice(NULL), m_ppQueue(NULL), m_pCookies(NULL) {} + + bool Create (int nClass = -1, int nType = -1, int nDev = 1); + + static size_t 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(CFArrayRef Array) = 0; + + //checks to see whether the cookie at nIndex is active (element value != 0) + bool IsActive(int nIndex); + + //checks to see whether an element in the internal cookie array + //exists bool HasElement(int nIndex); - - //closes the device and cleans the queue and cookies - virtual ~wxHIDDevice(); - + + //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 - - wxString m_szProductName; //product name - int m_nProductId; //product id - int m_nManufacturerId; //manufacturer id - mach_port_t m_pPort; + IOHIDDeviceInterface** m_ppDevice; //this, essentially + IOHIDQueueInterface** m_ppQueue; //queue (if we want one) + IOHIDElementCookie* m_pCookies; //cookies + + wxString m_szProductName; //product name + int m_nProductId; //product id + int m_nManufacturerId; //manufacturer id + mach_port_t m_pPort; //mach port to use }; +// --------------------------------------------------------------------------- +// wxHIDKeyboard +// +// Semi-simple implementation that opens a connection to the first +// keyboard of the machine. Used in wxGetKeyState. +// --------------------------------------------------------------------------- class wxHIDKeyboard : public wxHIDDevice { public: - bool Create(); - virtual void BuildCookies(wxCFArray& Array); + static int GetCount(); + bool Create(int nDev = 1); + void AddCookie(CFTypeRef Data, int i); + virtual void BuildCookies(CFArrayRef Array); + void DoBuildCookies(CFArrayRef Array); }; #endif //__DARWIN__ -#endif - //WX_MACCARBONHID_H \ No newline at end of file +#endif + // _WX_MACCARBONHID_H_