hid integration
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29424 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1621,6 +1621,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
|||||||
src/mac/carbon/gauge.cpp
|
src/mac/carbon/gauge.cpp
|
||||||
src/mac/carbon/gdiobj.cpp
|
src/mac/carbon/gdiobj.cpp
|
||||||
src/mac/carbon/gsockosx.cpp
|
src/mac/carbon/gsockosx.cpp
|
||||||
|
src/mac/carbon/hid.cpp
|
||||||
src/mac/carbon/icon.cpp
|
src/mac/carbon/icon.cpp
|
||||||
src/mac/carbon/listbox.cpp
|
src/mac/carbon/listbox.cpp
|
||||||
src/mac/carbon/mdi.cpp
|
src/mac/carbon/mdi.cpp
|
||||||
|
@@ -1,4 +1,18 @@
|
|||||||
#include <wx/wx.h>
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 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
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/defs.h"
|
||||||
|
|
||||||
|
#ifdef __DARWIN__
|
||||||
|
|
||||||
#include <IOKit/IOKitLib.h>
|
#include <IOKit/IOKitLib.h>
|
||||||
#include <IOKit/IOCFPlugIn.h>
|
#include <IOKit/IOCFPlugIn.h>
|
||||||
#include <IOKit/hid/IOHIDLib.h>
|
#include <IOKit/hid/IOHIDLib.h>
|
||||||
@@ -60,4 +74,6 @@ class wxHIDKeyboard : public wxHIDDevice
|
|||||||
public:
|
public:
|
||||||
bool Create();
|
bool Create();
|
||||||
virtual void BuildCookies(wxCFArray& Array);
|
virtual void BuildCookies(wxCFArray& Array);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif //__DARWIN__
|
@@ -1,4 +1,22 @@
|
|||||||
#include "hid.h"
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: hid.cpp
|
||||||
|
// Purpose: DARWIN HID layer for WX Implementation
|
||||||
|
// Author: Ryan Norton
|
||||||
|
// Modified by:
|
||||||
|
// Created: 11/11/2003
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) Ryan Norton
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/defs.h"
|
||||||
|
|
||||||
|
//DARWIN _ONLY_
|
||||||
|
#ifdef __DARWIN__
|
||||||
|
|
||||||
|
#include "wx/mac/carbon/private/hid.h"
|
||||||
|
#include "wx/string.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
|
||||||
#define wxFORCECHECK_MSG(arg, msg) \
|
#define wxFORCECHECK_MSG(arg, msg) \
|
||||||
{\
|
{\
|
||||||
@@ -12,11 +30,18 @@
|
|||||||
#define wxKERNCHECK(arg, msg) wxFORCECHECK_MSG(arg != KERN_SUCCESS, msg)
|
#define wxKERNCHECK(arg, msg) wxFORCECHECK_MSG(arg != KERN_SUCCESS, msg)
|
||||||
#define wxSCHECK(arg, msg) wxFORCECHECK_MSG(arg != S_OK, msg)
|
#define wxSCHECK(arg, msg) wxFORCECHECK_MSG(arg != S_OK, msg)
|
||||||
|
|
||||||
|
#ifdef __WXDEBUG___
|
||||||
|
# define wxVERIFY(arg) wxASSERT(arg)
|
||||||
|
#else
|
||||||
|
# define wxVERIFY(arg) arg
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
void CFShowTypeIDDescription(CFTypeRef pData)
|
void CFShowTypeIDDescription(CFTypeRef pData)
|
||||||
{
|
{
|
||||||
if(!pData)
|
if(!pData)
|
||||||
{
|
{
|
||||||
wxMessageBox("AHHH!");
|
wxASSERT(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,6 +51,7 @@ void CFShowTypeIDDescription(CFTypeRef pData)
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -46,7 +72,7 @@ bool wxHIDDevice::Create (const int& nClass, const int& nType)
|
|||||||
//The call to IOServiceMatching filters down the
|
//The call to IOServiceMatching filters down the
|
||||||
//the services we want to hid services (and also eats the
|
//the services we want to hid services (and also eats the
|
||||||
//dictionary up for us (consumes one reference))
|
//dictionary up for us (consumes one reference))
|
||||||
wxASSERT((pDictionary = IOServiceMatching(kIOHIDDeviceKey)) != NULL );
|
wxVERIFY((pDictionary = IOServiceMatching(kIOHIDDeviceKey)) != NULL );
|
||||||
|
|
||||||
//Here we'll filter down the services to what we want
|
//Here we'll filter down the services to what we want
|
||||||
if (nType != -1)
|
if (nType != -1)
|
||||||
@@ -73,11 +99,11 @@ bool wxHIDDevice::Create (const int& nClass, const int& nType)
|
|||||||
io_object_t pObject;
|
io_object_t pObject;
|
||||||
while ( (pObject = IOIteratorNext(pIterator)) != NULL)
|
while ( (pObject = IOIteratorNext(pIterator)) != NULL)
|
||||||
{
|
{
|
||||||
wxASSERT(IORegistryEntryCreateCFProperties(pObject, &pDictionary,
|
wxVERIFY(IORegistryEntryCreateCFProperties(pObject, &pDictionary,
|
||||||
kCFAllocatorDefault, kNilOptions) == KERN_SUCCESS);
|
kCFAllocatorDefault, kNilOptions) == KERN_SUCCESS);
|
||||||
|
|
||||||
//Just for sanity :)
|
//Just for sanity :)
|
||||||
wxASSERT(CFGetTypeID(CFDictionaryGetValue(pDictionary, CFSTR(kIOHIDProductKey))) == CFStringGetTypeID());
|
wxVERIFY(CFGetTypeID(CFDictionaryGetValue(pDictionary, CFSTR(kIOHIDProductKey))) == CFStringGetTypeID());
|
||||||
|
|
||||||
//Get [product] name
|
//Get [product] name
|
||||||
m_szName = CFStringGetCStringPtr (
|
m_szName = CFStringGetCStringPtr (
|
||||||
@@ -91,7 +117,7 @@ bool wxHIDDevice::Create (const int& nClass, const int& nType)
|
|||||||
wxCFArray CookieArray = CFDictionaryGetValue(pDictionary, CFSTR(kIOHIDElementKey));
|
wxCFArray CookieArray = CFDictionaryGetValue(pDictionary, CFSTR(kIOHIDElementKey));
|
||||||
BuildCookies(CookieArray);
|
BuildCookies(CookieArray);
|
||||||
if (m_ppQueue != NULL)
|
if (m_ppQueue != NULL)
|
||||||
wxASSERT((*m_ppQueue)->start(m_ppQueue) == S_OK);
|
wxVERIFY((*m_ppQueue)->start(m_ppQueue) == S_OK);
|
||||||
|
|
||||||
//Create the interface (good grief - long function names!)
|
//Create the interface (good grief - long function names!)
|
||||||
SInt32 nScore;
|
SInt32 nScore;
|
||||||
@@ -111,7 +137,7 @@ bool wxHIDDevice::Create (const int& nClass, const int& nType)
|
|||||||
(*ppPlugin)->Release(ppPlugin);
|
(*ppPlugin)->Release(ppPlugin);
|
||||||
|
|
||||||
//open the HID interface...
|
//open the HID interface...
|
||||||
wxASSERT((*m_ppDevice)->open(m_ppDevice, 0) == S_OK);
|
wxVERIFY((*m_ppDevice)->open(m_ppDevice, 0) == S_OK);
|
||||||
|
|
||||||
//cleanup
|
//cleanup
|
||||||
CFRelease(pDictionary);
|
CFRelease(pDictionary);
|
||||||
@@ -138,7 +164,7 @@ void wxHIDDevice::AddCookie(CFTypeRef Data, const int& i)
|
|||||||
void wxHIDDevice::AddCookieInQueue(CFTypeRef Data, const int& i)
|
void wxHIDDevice::AddCookieInQueue(CFTypeRef Data, const int& i)
|
||||||
{
|
{
|
||||||
AddCookie(Data, i);
|
AddCookie(Data, i);
|
||||||
wxASSERT((*m_ppQueue)->addElement(m_ppQueue, m_pCookies[i], 0) == S_OK);//3rd Param flags (none yet)
|
wxVERIFY((*m_ppQueue)->addElement(m_ppQueue, m_pCookies[i], 0) == S_OK);//3rd Param flags (none yet)
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxHIDDevice::InitCookies(const size_t& dwSize, bool bQueue)
|
void wxHIDDevice::InitCookies(const size_t& dwSize, bool bQueue)
|
||||||
@@ -147,8 +173,8 @@ void wxHIDDevice::InitCookies(const size_t& dwSize, bool bQueue)
|
|||||||
if (bQueue)
|
if (bQueue)
|
||||||
{
|
{
|
||||||
wxASSERT( m_ppQueue != NULL);
|
wxASSERT( m_ppQueue != NULL);
|
||||||
wxASSERT( (m_ppQueue = (*m_ppDevice)->allocQueue(m_ppDevice)) != NULL);
|
wxVERIFY( (m_ppQueue = (*m_ppDevice)->allocQueue(m_ppDevice)) != NULL);
|
||||||
wxASSERT( (*m_ppQueue)->create(m_ppQueue, 0, 512) == S_OK); //Param 2, flags, none yet
|
wxVERIFY( (*m_ppQueue)->create(m_ppQueue, 0, 512) == S_OK); //Param 2, flags, none yet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,3 +441,5 @@ void wxHIDKeyboard::BuildCookies(wxCFArray& Array)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}//end buildcookies
|
}//end buildcookies
|
||||||
|
|
||||||
|
#endif //__DARWIN__
|
||||||
|
Reference in New Issue
Block a user