OSNumber* Xbox360ControllerClass::newLocationIDNumber() const { IOUSBDevice *device; OSNumber *number; UInt32 location = 0; device = GetOwnerProvider(this); if (device) { if ((number = OSDynamicCast(OSNumber, device->getProperty("locationID")))) { location = number->unsigned32BitValue(); } else { // Make up an address if ((number = OSDynamicCast(OSNumber, device->getProperty("USB Address")))) location |= number->unsigned8BitValue() << 24; if ((number = OSDynamicCast(OSNumber, device->getProperty("idProduct")))) location |= number->unsigned8BitValue() << 16; } } return (location != 0) ? OSNumber::withNumber(location, 32) : 0; }
OSNumber * IOHIDDeviceShim::newLocationIDNumber() const { OSNumber * number; UInt32 location = _location; if (_device && !location) { if ((number = OSDynamicCast(OSNumber, _device->getProperty("locationID"))) || (number = OSDynamicCast(OSNumber, _device->getProperty(kIOHIDLocationIDKey)))) { location = number->unsigned32BitValue(); } else { // Bullshit a location based on the ADB address and handler id if (number = OSDynamicCast(OSNumber, _device->getProperty("address"))) location |= number->unsigned8BitValue() << 24; if (number = OSDynamicCast(OSNumber, _device->getProperty("handler id"))) location |= number->unsigned8BitValue() << 16; } } return (location) ? OSNumber::withNumber(location, 32) : 0; }
bool IOBSDConsole::publishNotificationHandler( IOBSDConsole * self, void * ref, IOService * newService ) { IOHIKeyboard * keyboard = 0; IOService * audio = 0; if( ref) { audio = OSDynamicCast(IOService, newService->metaCast("IOAudioStream")); if (audio != 0) { OSNumber *out = newService->copyProperty("Out"); if (OSDynamicCast(OSNumber, out)) { if (out->unsigned8BitValue() == 1) { self->fAudioOut = newService; } } OSSafeReleaseNULL(out); } } else { audio = 0; keyboard = OSDynamicCast( IOHIKeyboard, newService ); if( keyboard && self->attach( keyboard )) { self->arbitrateForKeyboard( keyboard ); } if( newService->metaCast("IODisplayWrangler")) self->displayManager = newService; } return true; }
/****************************************************************************** * CodecCommander::parseAudioEngineState - repeats the action when timer fires ******************************************************************************/ void CodecCommander::parseAudioEngineState() { IORegistryEntry *hdaEngineOutputEntry = IORegistryEntry::fromPath(engineOutputPath); if (hdaEngineOutputEntry != NULL) { OSNumber *state = OSDynamicCast(OSNumber, hdaEngineOutputEntry->getProperty("IOAudioEngineState")); if (state != NULL) { hdaEngineState = state->unsigned8BitValue(); //DEBUG_LOG("CodecCommander: EngineOutput power state %d\n", hdaEngineState); if (hdaEngineState == 0x1) DEBUG_LOG("CodecCommander: cc: --> audio stream active\n"); //else //DEBUG_LOG("CodecCommander: cc: --> audio stream inactive\n"); // will produce spam in console } else { DEBUG_LOG("CodecCommander: IOAudioEngineState unknown\n"); return; } } else { DEBUG_LOG("CodecCommander: %s is unreachable\n", engineOutputPath); return; } hdaEngineOutputEntry->release(); }
/****************************************************************************** * CodecCommander::parseCodecPowerState - get codec power state from IOReg ******************************************************************************/ void CodecCommander::parseCodecPowerState() { // monitor power state of hda audio codec IORegistryEntry *hdaDriverEntry = IORegistryEntry::fromPath(hdaDriverPath); if (hdaDriverEntry != NULL) { OSNumber *powerState = OSDynamicCast(OSNumber, hdaDriverEntry->getProperty("IOAudioPowerState")); if (powerState != NULL) { hdaCurrentPowerState = powerState->unsigned8BitValue(); // if hda codec changed power state if (hdaCurrentPowerState != hdaPrevPowerState) { // store current power state as previous state for next workloop cycle hdaPrevPowerState = hdaCurrentPowerState; // notify about codec power loss state if (hdaCurrentPowerState == 0x0) { DEBUG_LOG("CodecCommander: cc: --> hda codec lost power\n"); eapdPoweredDown = true; coldBoot = false; //codec entered fugue state or sleep - no longer a cold boot updateCount = 0; } } } else { DEBUG_LOG("CodecCommander: IOAudioPowerState unknown\n"); return; } } else { DEBUG_LOG("CodecCommander: %s is unreachable\n", hdaDriverPath); return; } hdaDriverEntry->release(); }
// Get our location ID OSNumber* WirelessGamingReceiver::newLocationIDNumber() const { OSNumber *number; UInt32 location = 0; if (device) { if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) { location = number->unsigned32BitValue(); } else { // Make up an address if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) location |= number->unsigned8BitValue() << 24; if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) location |= number->unsigned8BitValue() << 16; } } return OSNumber::withNumber(location, 32); }
/****************************************************************************** * CodecCommander::parseCodecPowerState - get codec power state from IOReg ******************************************************************************/ void CodecCommander::parseCodecPowerState() { // monitor power state of hda audio codec IORegistryEntry *hdaDriverEntry = IORegistryEntry::fromPath(mConfiguration->getHDADriverPath()); if (hdaDriverEntry != NULL) { OSNumber *powerState = OSDynamicCast(OSNumber, hdaDriverEntry->getProperty("IOAudioPowerState")); if (powerState != NULL) { hdaCurrentPowerState = powerState->unsigned8BitValue(); // if hda codec changed power state if (hdaCurrentPowerState != hdaPrevPowerState) { DEBUG_LOG("CodecCommander: cc - power state transition from %d to %d recorded\n", hdaPrevPowerState, hdaCurrentPowerState); // store current power state as previous state for next workloop cycle hdaPrevPowerState = hdaCurrentPowerState; // notify about codec power loss state if (hdaCurrentPowerState == 0x0) { DEBUG_LOG("CodecCommander: HDA codec lost power\n"); handleStateChange(kStateSleep); // power down EAPDs properly eapdPoweredDown = true; coldBoot = false; //codec entered fugue state or sleep - no longer a cold boot } } } else DEBUG_LOG("CodecCommander: IOAudioPowerState unknown\n"); hdaDriverEntry->release(); } else DEBUG_LOG("CodecCommander: %s is unreachable\n", mConfiguration->getHDADriverPath()); }
// Read the settings from the registry void Xbox360Peripheral::readSettings(void) { OSBoolean *value = NULL; OSNumber *number = NULL; OSDictionary *dataDictionary = OSDynamicCast(OSDictionary, getProperty(kDriverSettingKey)); if (dataDictionary == NULL) return; value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertLeftX")); if (value != NULL) invertLeftX = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertLeftY")); if (value != NULL) invertLeftY = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertRightX")); if (value != NULL) invertRightX = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertRightY")); if (value != NULL) invertRightY = value->getValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("DeadzoneLeft")); if (number != NULL) deadzoneLeft = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("DeadzoneRight")); if (number != NULL) deadzoneRight = number->unsigned32BitValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("RelativeLeft")); if (value != NULL) relativeLeft = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("RelativeRight")); if (value != NULL) relativeRight=value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("DeadOffLeft")); if (value != NULL) deadOffLeft = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("DeadOffRight")); if (value != NULL) deadOffRight = value->getValue(); // number = OSDynamicCast(OSNumber, dataDictionary->getObject("ControllerType")); // No use currently. number = OSDynamicCast(OSNumber, dataDictionary->getObject("rumbleType")); if (number != NULL) rumbleType = number->unsigned8BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingUp")); if (number != NULL) mapping[0] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingDown")); if (number != NULL) mapping[1] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLeft")); if (number != NULL) mapping[2] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRight")); if (number != NULL) mapping[3] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingStart")); if (number != NULL) mapping[4] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingBack")); if (number != NULL) mapping[5] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLSC")); if (number != NULL) mapping[6] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRSC")); if (number != NULL) mapping[7] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLB")); if (number != NULL) mapping[8] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRB")); if (number != NULL) mapping[9] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingGuide")); if (number != NULL) mapping[10] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingA")); if (number != NULL) mapping[11] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingB")); if (number != NULL) mapping[12] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingX")); if (number != NULL) mapping[13] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingY")); if (number != NULL) mapping[14] = number->unsigned32BitValue(); #if 0 IOLog("Xbox360Peripheral preferences loaded:\n invertLeft X: %s, Y: %s\n invertRight X: %s, Y:%s\n deadzone Left: %d, Right: %d\n\n", invertLeftX?"True":"False",invertLeftY?"True":"False", invertRightX?"True":"False",invertRightY?"True":"False", deadzoneLeft,deadzoneRight); #endif }
bool SuperIOPlugin::start(IOService *provider) { if (!super::start(provider)) return false; OSNumber *number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOHWMAddress)); if (!number || !(address = number->unsigned16BitValue())) { HWSensorsFatalLog("wrong address provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOControlPort)); if (!number || !(port = number->unsigned8BitValue())) { HWSensorsFatalLog("wrong port provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOModelValue)); if (!number || !(model = number->unsigned16BitValue())) { HWSensorsFatalLog("wrong model provided"); return false; } OSString *string = OSDynamicCast(OSString, provider->getProperty(kSuperIOModelName)); if (!string || !(modelName = string->getCStringNoCopy())) { HWSensorsFatalLog("wrong model name provided"); return false; } string = OSDynamicCast(OSString, provider->getProperty(kSuperIOVendorName)); if (!string || !(vendorName = string->getCStringNoCopy())) { HWSensorsFatalLog("wrong vendor name provided"); return false; } if (!initialize()) return false; OSString *modelString = OSString::withCString(modelName); if (OSDictionary *configuration = getConfigurationNode(modelString)) { addTemperatureSensors(configuration); addVoltageSensors(configuration); addTachometerSensors(configuration); } else HWSensorsWarningLog("no platform profile provided"); OSSafeReleaseNULL(modelString); registerService(); HWSensorsInfoLog("started"); return true; }
bool LPCSensors::start(IOService *provider) { if (!super::start(provider)) return false; OSNumber *number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOHWMAddress)); if (!number || !(address = number->unsigned16BitValue())) { HWSensorsFatalLog("wrong address provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOControlPort)); if (!number || !(port = number->unsigned8BitValue())) { HWSensorsFatalLog("wrong port provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOModelValue)); if (!number || !(model = number->unsigned16BitValue())) { HWSensorsFatalLog("wrong model provided"); return false; } OSString *string = OSDynamicCast(OSString, provider->getProperty(kSuperIOModelName)); if (!string || !(modelName = string->getCStringNoCopy())) { HWSensorsFatalLog("wrong model name provided"); return false; } string = OSDynamicCast(OSString, provider->getProperty(kSuperIOVendorName)); if (!string || !(vendorName = string->getCStringNoCopy())) { HWSensorsFatalLog("wrong vendor name provided"); return false; } if (!initialize()) return false; OSString *modelString = OSString::withCString(modelName); if (OSDictionary *configuration = getConfigurationNode(modelString)) { addTemperatureSensors(configuration); addVoltageSensors(configuration); addTachometerSensors(configuration); } else HWSensorsWarningLog("no platform profile provided"); OSSafeReleaseNULL(modelString); // woorkloop if (!(workloop = getWorkLoop())) { HWSensorsFatalLog("Failed to obtain workloop"); return false; } if (!(timerEventSource = IOTimerEventSource::timerEventSource(this, OSMemberFunctionCast(IOTimerEventSource::Action, this, &LPCSensors::woorkloopTimerEvent)))) { HWSensorsFatalLog("failed to initialize timer event source"); return false; } if (kIOReturnSuccess != workloop->addEventSource(timerEventSource)) { HWSensorsFatalLog("failed to add timer event source into workloop"); return false; } // two power states - off and on static const IOPMPowerState powerStates[2] = { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, IOPMDeviceUsable, IOPMPowerOn, IOPMPowerOn, 0, 0, 0, 0, 0, 0, 0, 0 } }; // register interest in power state changes PMinit(); provider->joinPMtree(this); registerPowerDriver(this, (IOPMPowerState *)powerStates, 2); registerService(); HWSensorsInfoLog("started"); return true; }
bool com_reidburke_air_IntelEnhancedSpeedStep::init(OSDictionary* dict) { bool res = super::init(dict); info("Initializing xnu-speedstep-air\n"); // read data cpuid_update_generic_info(); /* Allocate our spinlock for later use */ Lock = IOSimpleLockAlloc(); /* Check for a patched kernel which properly implements rtc_clock_stepped() */ uint64_t magic = -1; // means autodetect OSBoolean* debugMsgs = (OSBoolean*) dict->getObject("DebugMessages"); if (debugMsgs != 0) DebugOn = debugMsgs->getValue(); else DebugOn = false; OSNumber* kernelFeatures = (OSNumber*) dict->getObject("KernelFeatures"); if (kernelFeatures != 0) magic = kernelFeatures->unsigned8BitValue(); if (magic == 255) nanoseconds_to_absolutetime(~(0), &magic); //255uint = -1 int if (magic == 1) { RtcFixKernel = true; Below1Ghz = false; } else if (magic == 2) { RtcFixKernel = true; Below1Ghz = true; } else if (magic == 3) { RtcFixKernel = false; Below1Ghz = true; } else { RtcFixKernel = false; Below1Ghz = false; } checkForNby2Ratio(); // check and store in global variable before loading pstate override if (getFSB() == false) return false; OSArray* overrideTable = (OSArray*) dict->getObject("PStateTable"); if (overrideTable != 0 ) loadPStateOverride(overrideTable); OSNumber* defaultState = (OSNumber*) dict->getObject("DefaultPState"); if (defaultState != 0) DefaultPState = defaultState->unsigned8BitValue(); else DefaultPState = -1; // indicate no default state OSNumber* maxLatency = (OSNumber*) dict->getObject("Latency"); if (maxLatency != 0) MaxLatency = maxLatency->unsigned32BitValue(); else MaxLatency = 0; /* Make preliminary check */ if ( (strcmp(cpuid_info()->cpuid_vendor, CPUID_VID_INTEL) == 0) // Check it's actually Intel && ( cpuid_info()->cpuid_features & CPUID_FEATURE_EST) ) { // Check it supports EST autostart = (OSNumber*) dict->getObject("AutoStart"); info( "do autostart %d \n", autostart->unsigned8BitValue() ); if ( autostart != 0 && autostart->unsigned8BitValue() == 1 ) { Throttler = new AutoThrottler; if (Throttler) { dbg("Throttler instantiated.\n"); OSNumber* targetload = (OSNumber*) dict->getObject("TargetCPULoad"); if (targetload != 0) Throttler->targetCPULoad = (targetload->unsigned16BitValue()) * 10; else Throttler->targetCPULoad = 700; } } } totalThrottles = 0; frequencyUsage[0] = '\0'; /* Return whatever the superclass returned */ return res; }
bool SuperIOMonitor::start(IOService *provider) { if (!super::start(provider)) return false; OSNumber *number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOHWMAddress)); if (!number || !(address = number->unsigned16BitValue())) { HWSensorsWarningLog("wrong address provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOControlPort)); if (!number || !(port = number->unsigned8BitValue())) { HWSensorsWarningLog("wrong port provided"); return false; } number = OSDynamicCast(OSNumber, provider->getProperty(kSuperIOModelValue)); if (!number || !(model = number->unsigned16BitValue())) { HWSensorsWarningLog("wrong model provided"); return false; } OSString *string = OSDynamicCast(OSString, provider->getProperty(kSuperIOModelName)); if (!string || !(modelName = string->getCStringNoCopy())) { HWSensorsWarningLog("wrong model name provided"); return false; } string = OSDynamicCast(OSString, provider->getProperty(kSuperIOVendorName)); if (!string || !(vendorName = string->getCStringNoCopy())) { HWSensorsWarningLog("wrong vendor name provided"); return false; } if (!initialize()) return false; OSString *manufacturerName = OSDynamicCast(OSString, provider->getProperty("mb-manufacturer")); OSString *productName = OSDynamicCast(OSString, provider->getProperty("mb-product")); OSDictionary *configuration = NULL; if (OSDictionary *list = OSDynamicCast(OSDictionary, getProperty("Sensors Configuration"))) { if (OSDictionary *manufacturer = OSDynamicCast(OSDictionary, list->getObject(manufacturerName))) if (!(configuration = lookupConfiguration(manufacturer, productName))) if (!(configuration = lookupConfiguration(manufacturer, modelName))) configuration = lookupConfiguration(manufacturer, "Default"); if (!configuration && !(configuration = lookupConfiguration(list, modelName))) configuration = lookupConfiguration(list, "Default"); } if (configuration) { addTemperatureSensors(configuration); addVoltageSensors(configuration); addTachometerSensors(configuration); registerService(); } else HWSensorsWarningLog("no sensors configuration provided"); HWSensorsInfoLog("started"); return true; }
// Read the settings from the registry void Wireless360Controller::readSettings(void) { OSBoolean *value; OSNumber *number; OSDictionary *dataDictionary = OSDynamicCast(OSDictionary, getProperty(kDriverSettingKey)); if(dataDictionary==NULL) return; value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertLeftX")); if (value != NULL) invertLeftX = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertLeftY")); if (value != NULL) invertLeftY = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertRightX")); if (value != NULL) invertRightX = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("InvertRightY")); if (value != NULL) invertRightY = value->getValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("DeadzoneLeft")); if (number != NULL) deadzoneLeft = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("DeadzoneRight")); if (number != NULL) deadzoneRight = number->unsigned32BitValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("RelativeLeft")); if (value != NULL) relativeLeft = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("RelativeRight")); if (value != NULL) relativeRight=value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("DeadOffLeft")); if (value != NULL) deadOffLeft = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("DeadOffRight")); if (value != NULL) deadOffRight = value->getValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("RumbleType")); if (number != NULL) rumbleType = number->unsigned8BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingUp")); if (number != NULL) mapping[0] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingDown")); if (number != NULL) mapping[1] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLeft")); if (number != NULL) mapping[2] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRight")); if (number != NULL) mapping[3] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingStart")); if (number != NULL) mapping[4] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingBack")); if (number != NULL) mapping[5] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLSC")); if (number != NULL) mapping[6] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRSC")); if (number != NULL) mapping[7] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingLB")); if (number != NULL) mapping[8] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingRB")); if (number != NULL) mapping[9] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingGuide")); if (number != NULL) mapping[10] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingA")); if (number != NULL) mapping[11] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingB")); if (number != NULL) mapping[12] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingX")); if (number != NULL) mapping[13] = number->unsigned32BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingY")); if (number != NULL) mapping[14] = number->unsigned32BitValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("SwapSticks")); if (value != NULL) swapSticks = value->getValue(); noMapping = true; UInt8 normalMapping[15] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15 }; for (int i = 0; i < 15; i++) { if (normalMapping[i] != mapping[i]) { noMapping = false; break; } } #if 0 IOLog("Xbox360ControllerClass preferences loaded:\n invertLeft X: %s, Y: %s\n invertRight X: %s, Y:%s\n deadzone Left: %d, Right: %d\n\n", invertLeftX?"True":"False",invertLeftY?"True":"False", invertRightX?"True":"False",invertRightY?"True":"False", deadzoneLeft,deadzoneRight); #endif }