From: Frederic Bouvier Date: Fri, 14 Jan 2011 21:03:15 +0000 (+0100) Subject: It looks like it was not the last mac js code that was committed in the first place X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=ab686ab8d4acfe83e6a91096e80f4257b64fb9bc;p=flightgear.git It looks like it was not the last mac js code that was committed in the first place --- diff --git a/src/Input/jsMacOSX.cxx b/src/Input/jsMacOSX.cxx index 72dbbb989..c3b6aa505 100644 --- a/src/Input/jsMacOSX.cxx +++ b/src/Input/jsMacOSX.cxx @@ -18,7 +18,7 @@ For further information visit http://plib.sourceforge.net - $Id: jsMacOSX.cxx 2118 2007-09-14 22:23:32Z fayjf $ + $Id: jsMacOSX.cxx 2158 2009-08-29 12:35:36Z fayjf $ */ #ifdef __APPLE__ @@ -137,7 +137,7 @@ static void findDevices(mach_port_t masterPort) jsJoystick::jsJoystick(int ident) : id(ident), os(NULL), - error(false), + error(JS_FALSE), num_axes(0), num_buttons(0) { @@ -154,18 +154,24 @@ jsJoystick::jsJoystick(int ident) : CFTypeRef ref = CFDictionaryGetValue (properties, CFSTR(kIOHIDProductKey)); if (!ref) ref = CFDictionaryGetValue (properties, CFSTR("USB Product Name")); - char tmpname[128]; - if (!ref || !CFStringGetCString ((CFStringRef) ref, tmpname, sizeof(tmpname), CFStringGetSystemEncoding ())) { + + if (!ref || !CFStringGetCString ((CFStringRef) ref, name, 128, CFStringGetSystemEncoding ())) { ulSetError(UL_WARNING, "error getting device name"); - tmpname[0] = '\0'; + name[0] = '\0'; } - name = tmpname; //printf("Joystick name: %s \n", name); open(); } void jsJoystick::open() { +#if 0 // test already done in the constructor + if (id >= numDevices) { + ulSetError(UL_WARNING, "device index out of range in jsJoystick::open"); + return; + } +#endif + // create device interface IOReturn rv; SInt32 score; @@ -222,6 +228,27 @@ CFDictionaryRef getCFProperties(io_object_t ioDev) IOReturn rv; CFMutableDictionaryRef cfProperties; +#if 0 + // comment copied from darwin/SDL_sysjoystick.c + /* Mac OS X currently is not mirroring all USB properties to HID page so need to look at USB device page also + * get dictionary for usb properties: step up two levels and get CF dictionary for USB properties + */ + + io_registry_entry_t parent1, parent2; + + rv = IORegistryEntryGetParentEntry (ioDev, kIOServicePlane, &parent1); + if (rv != kIOReturnSuccess) { + ulSetError(UL_WARNING, "error getting device entry parent"); + return NULL; + } + + rv = IORegistryEntryGetParentEntry (parent1, kIOServicePlane, &parent2); + if (rv != kIOReturnSuccess) { + ulSetError(UL_WARNING, "error getting device entry parent 2"); + return NULL; + } + +#endif rv = IORegistryEntryCreateCFProperties( ioDev /*parent2*/, &cfProperties, kCFAllocatorDefault, kNilOptions); if (rv != kIOReturnSuccess || !cfProperties) { @@ -302,9 +329,22 @@ void os_specific_s::parseElement(jsJoystick* joy, CFDictionaryRef element) ulSetError(UL_WARNING, "input type element has weird usage (%lx)\n", usage); break; } + } else if (page == kHIDPage_Simulation) { + switch (usage) /* look at usage to determine function */ + { + case kHIDUsage_Sim_Rudder: + case kHIDUsage_Sim_Throttle: + //printf(" axis\n"); + /*joy->os->*/addAxisElement(joy, (CFDictionaryRef) element); + break; + default: + ulSetError(UL_WARNING, "Simulation page input type element has weird usage (%lx)\n", usage); + } } else if (page == kHIDPage_Button) { //printf(" button\n"); /*joy->os->*/addButtonElement(joy, (CFDictionaryRef) element); + } else if (page == kHIDPage_PID) { + ulSetError(UL_WARNING, "Force feedback and related data ignored\n", usage); } else ulSetError(UL_WARNING, "input type element has weird usage (%lx)\n", usage); break; @@ -385,12 +425,14 @@ void os_specific_s::addHatElement(jsJoystick* joy, CFDictionaryRef hat) void jsJoystick::rawRead(int *buttons, float *axes) { - *buttons = 0; + if (buttons) + *buttons = 0; + IOHIDEventStruct hidEvent; for (int b=0; bhidDev))->getElementValue(os->hidDev, os->buttonCookies[b], &hidEvent); - if (hidEvent.value) + if (hidEvent.value && buttons) *buttons |= 1 << b; }