value; })
#define GetHIDElementStringValue(element, key) ({ \
- const char *buf = ""; \
+ const char *ref = ""; \
+ const char *buf = ref; \
CFStringRef refType = (CFStringRef)CFDictionaryGetValue(element, CFSTR(key)); \
if (refType) { \
buf = CFStringGetCStringPtr(refType, CFStringGetSystemEncoding()); \
+ if (!buf) buf = ref; \
} \
buf; })
{GD_USAGE(kHIDUsage_GD_Vbrz), kHIDUsageAxis, "z-rel-vector"},
{GD_USAGE(kHIDUsage_GD_Vno), kHIDUsageAxis, "no-vector"},
- {GD_USAGE(kHIDUsage_GD_SystemPowerDown), kHIDUsageOSC, "button-system-power-down"},
- {GD_USAGE(kHIDUsage_GD_SystemSleep), kHIDUsageOSC, "button-system-sleep"},
- {GD_USAGE(kHIDUsage_GD_SystemWakeUp), kHIDUsageOSC, "button-system-wake-up"},
- {GD_USAGE(kHIDUsage_GD_SystemContextMenu), kHIDUsageOSC, "button-system-context-menu"},
- {GD_USAGE(kHIDUsage_GD_SystemMainMenu), kHIDUsageOSC, "button-system-main-menu"},
- {GD_USAGE(kHIDUsage_GD_SystemAppMenu), kHIDUsageOSC, "button-system-app-menu"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuHelp), kHIDUsageOSC, "button-system-menu-help"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuExit), kHIDUsageOSC, "button-system-menu-exit"},
- {GD_USAGE(kHIDUsage_GD_SystemMenu), kHIDUsageOSC, "button-system-menu"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuRight), kHIDUsageRTC, "button-system-menu-right"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuLeft), kHIDUsageRTC, "button-system-menu-left"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuUp), kHIDUsageRTC, "button-system-menu-up"},
- {GD_USAGE(kHIDUsage_GD_SystemMenuDown), kHIDUsageRTC, "button-system-menu-down"},
+ {GD_USAGE(kHIDUsage_GD_SystemPowerDown), kHIDUsageOSC, "system-power-down"},
+ {GD_USAGE(kHIDUsage_GD_SystemSleep), kHIDUsageOSC, "system-sleep"},
+ {GD_USAGE(kHIDUsage_GD_SystemWakeUp), kHIDUsageOSC, "system-wake-up"},
+ {GD_USAGE(kHIDUsage_GD_SystemContextMenu), kHIDUsageOSC, "system-context-menu"},
+ {GD_USAGE(kHIDUsage_GD_SystemMainMenu), kHIDUsageOSC, "system-main-menu"},
+ {GD_USAGE(kHIDUsage_GD_SystemAppMenu), kHIDUsageOSC, "system-app-menu"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuHelp), kHIDUsageOSC, "system-menu-help"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuExit), kHIDUsageOSC, "system-menu-exit"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenu), kHIDUsageOSC, "system-menu"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuRight), kHIDUsageRTC, "system-menu-right"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuLeft), kHIDUsageRTC, "system-menu-left"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuUp), kHIDUsageRTC, "system-menu-up"},
+ {GD_USAGE(kHIDUsage_GD_SystemMenuDown), kHIDUsageRTC, "system-menu-down"},
{GD_USAGE(kHIDUsage_GD_DPadUp), kHIDUsageOOC, "dpad-up"},
{GD_USAGE(kHIDUsage_GD_DPadDown), kHIDUsageOOC, "dpad-down"},
{GD_USAGE(kHIDUsage_GD_DPadRight), kHIDUsageOOC, "dpad-right"},
{GAME_USAGE(kHIDUsage_Game_MoveForwardOrBackward), kHIDUsageAxis, "y-move"},
{GAME_USAGE(kHIDUsage_Game_MoveUpOrDown), kHIDUsageAxis, "z-move"},
{GAME_USAGE(kHIDUsage_Game_LeanRightOrLeft), kHIDUsageAxis, "x-lean"},
- {GAME_USAGE(kHIDUsage_Game_LeanForwardOrBackward), kHIDUsageAxis, "z-lean"},
+ {GAME_USAGE(kHIDUsage_Game_LeanForwardOrBackward), kHIDUsageAxis, "y-lean"},
// General Control Devices Page
{GDC_USAGE(0x20), kHIDUsageDV, "battery-strength"},
{
if (name == "") {
stringstream ss;
- ss << (page == kHIDPage_KeyboardOrKeypad ? "keyboard-" : "button-") << usage;
+ ss << (page == kHIDPage_KeyboardOrKeypad ? "keyboard-" : "button-") << usage - 1;
ss >> name;
}
}
// FIXME: Any other elegant way for counting the same usage on a device?
// This is mainly needed for feature / hat elements to avoid assigning the sane event name.
elementCount[inputDevice][USAGE_KEY(page, usage)] += 1;
-
+
switch (usageType) {
case kHIDUsageAxis:
inputDevice->addElement(new AxisElement(element, page, usage));
break;
default:
- if (page == kHIDPage_Button || type == kIOHIDElementTypeInput_Button && usage > 0) {
+ if ((page == kHIDPage_Button || type == kIOHIDElementTypeInput_Button) && usage > 0) {
// FIXME: most of KeyboardOrKeypad elements should be treated as Selector type, not as Button...
inputDevice->addElement(new ButtonElement(element, page, usage));
} else if (page == kHIDPage_LEDs && usage > 0) {
#include "jsinput.h"
+#ifdef __APPLE__
+# include <CoreFoundation/CoreFoundation.h>
+#endif
+
using simgear::PropertyList;
bool confirmAnswer() {
root = "../data";
#elif defined( _WIN32 )
root = "..\\data";
-#elif defined(OSX_BUNDLE)
- /* the following code looks for the base package directly inside
- the application bundle. This can be changed fairly easily by
- fiddling with the code below. And yes, I know it's ugly and verbose.
+#elif defined(__APPLE__)
+ /*
+ The following code looks for the base package inside the application
+ bundle, in the standard Contents/Resources location.
*/
- CFBundleRef appBundle = CFBundleGetMainBundle();
- CFURLRef appUrl = CFBundleCopyBundleURL(appBundle);
- CFRelease(appBundle);
- // look for a 'data' subdir directly inside the bundle : is there
- // a better place? maybe in Resources? I don't know ...
- CFURLRef dataDir = CFURLCreateCopyAppendingPathComponent(NULL, appUrl, CFSTR("data"), true);
+ CFURLRef resourcesUrl = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle());
+
+ // look for a 'data' subdir
+ CFURLRef dataDir = CFURLCreateCopyAppendingPathComponent(NULL, resourcesUrl, CFSTR("data"), true);
// now convert down to a path, and the a c-string
CFStringRef path = CFURLCopyFileSystemPath(dataDir, kCFURLPOSIXPathStyle);
root = CFStringGetCStringPtr(path, CFStringGetSystemEncoding());
// tidy up.
- CFRelease(appBundle);
+ CFRelease(resourcesUrl);
CFRelease(dataDir);
CFRelease(path);
#else