From 40de60b07620aa2c11b2c44f5d9392a151c045b5 Mon Sep 17 00:00:00 2001 From: David Ryskalczyk Date: Thu, 5 Nov 2015 19:18:14 -0500 Subject: [PATCH 001/216] Update URLs in readme --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index bd1eff4a..06ba6bf5 100644 --- a/Readme.md +++ b/Readme.md @@ -23,7 +23,7 @@ driver. Most users will want to install and run this. If you are interested in installing as a developer please see below. -[2]: https://github.com/d235j/360Controller/releases +[2]: https://github.com/360Controller/360Controller/releases ## Usage ## @@ -35,7 +35,7 @@ Preference Pane uses the standard Mac OS X Frameworks for accessing HID devices and accessing Force Feedback capabilities, so should be a good test that the installation is functional. -[List of working and non-working games.](https://github.com/d235j/360Controller/wiki/Games) +[List of working and non-working games.](https://github.com/360Controller/360Controller/wiki/Games) ## Developer info ## From 1a487c5a92d0804ef6aecc30a60b6f037753e108 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Sun, 15 Nov 2015 16:29:56 -0600 Subject: [PATCH 002/216] Change links to github.com/360Controller/360Controller --- Install360Controller/Text/Readme.rtf | 6 +++--- Install360Controller/Text/Welcome.rtf | 10 +++++----- Pref360Control/en.lproj/Pref360ControlPref.xib | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Install360Controller/Text/Readme.rtf b/Install360Controller/Text/Readme.rtf index c8a4f1c6..0bbb51b4 100644 --- a/Install360Controller/Text/Readme.rtf +++ b/Install360Controller/Text/Readme.rtf @@ -11,7 +11,7 @@ \fs36 \cf0 About\ \pard\pardeftab720\sa283 -\b0\fs24 \cf0 This driver supports the +\b0\fs24 \cf0 This driver supports the \b Microsoft Xbox 360 controller, Original Xbox Controller, Xbox One Controller \b0 and various licensed third party controllers from brands like Hori, MadCatz, Logitech, etc. Including access to rumble motors and LEDs, on the Mac OS X platform. It includes a plugin for the Apple Force Feedback Framework so some games will be able to activate them, along with a Preference Pane with which allows you to test everything is installed correctly. Both wire controllers connected via USB, and wireless 360 controllers connected via the Wireless Gaming Receiver for Windows, are supported.\ This project is a fork of the {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt \cf2 \ul \ulc0 Xbox360Controller project}} originally created by Colin Munro, and includes hard work from {\field{\*\fldinst{HYPERLINK "https://github.com/d235j/"}}{\fldrslt d235j}} (who forked the project and fixed Force Feedback), {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane"}}{\fldrslt C.W. Betts}} (dozens of improvements and fixes!), {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}} (Xbox One Controller support and other improvements), {\field{\*\fldinst{HYPERLINK "https://github.com/kasbert"}}{\fldrslt kasbert}} (Original Xbox Controller Support), {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}} (User Interface overhaul), {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}} (kext sign and some scripts) and others (please forgive us if we forgot to include someone).\ @@ -20,7 +20,7 @@ This project is a fork of the {\field{\*\fldinst{HYPERLINK "http://tattiebogle.n \b\fs36 \cf0 Installation\ \pard\pardeftab720\sa283 -\b0\fs24 \cf0 See the {\field{\*\fldinst{HYPERLINK "https://github.com/d235j/360Controller/releases"}}{\fldrslt \cf2 \ul \ulc0 releases page}} for the latest compiled and signed version of the driver. Most users will want to install and run this.\ +\b0\fs24 \cf0 See the {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases"}}{\fldrslt \cf2 \ul \ulc0 releases page}} for the latest compiled and signed version of the driver. Most users will want to install and run this.\ If you are interested in installing as a developer please see below.\ \pard\pardeftab720\sb200\sa120 @@ -74,4 +74,4 @@ If you'd like to avoid paying apple for the developer account and want to disabl \b0\fs24 \cf0 Copyright (C) 2006-2013 Colin Munro\ This driver is licensed under the GNU Public License. A copy of this license is included in the distribution file, please inspect it before using the binary or source.\ -} \ No newline at end of file +} diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 5962024d..9e2ac629 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -26,7 +26,7 @@ \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural -\b0\fs24 \cf0 Version 0.15 (beta 3) +\b0\fs24 \cf0 Version 0.15 (beta 3) \i unofficial \i0 \ Copyright (C) 2005-2013 Colin Munro\ @@ -103,7 +103,7 @@ Update 0.14 (beta): 10/30/2014\ \ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ -{\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/d235j/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ +{\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ \ls5\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ @@ -253,7 +253,7 @@ This update includes:\ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver}} for information on this software. Consider donating or buying via the Amazon associate links to support development of this driver!\ \ -\b Update: -\b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/d235j/360Controller/releases/"}}{\fldrslt https://github.com/d235j/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ +\b Update: +\b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ \ -Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file +Ensure to read the following Read Me and License sections before installing!} diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 66019a56..f8409918 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -919,10 +919,10 @@ Downloaded from: - + - + @@ -966,10 +966,10 @@ Project Home: - + - + From 8f1bc9540888661fc82bde5856e8235856aa667f Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 24 Dec 2015 22:14:45 -0600 Subject: [PATCH 003/216] Fix Xone Implementation, Add Controllers --- 360Controller/Controller.cpp | 377 ++- 360Controller/Controller.h | 68 +- 360Controller/Info.plist | 4094 ++++++++++++++------------- 360Controller/_60Controller.cpp | 930 +++--- 360Controller/_60Controller.h | 168 +- 360Controller/xboxOnehid.h | 132 + Feedback360/Feedback360.cpp | 121 +- Pref360Control/Pref360ControlPref.h | 4 +- Pref360Control/Pref360ControlPref.m | 2 +- 9 files changed, 3200 insertions(+), 2696 deletions(-) create mode 100644 360Controller/xboxOnehid.h diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 98f7d5d6..1e69b5d3 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -24,12 +24,16 @@ #include #include #include "Controller.h" -#include "ControlStruct.h" namespace HID_360 { #include "xbox360hid.h" } +namespace HID_ONE { +#include "xboxOnehid.h" +} #include "_60Controller.h" +#pragma mark - Xbox360ControllerClass + OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOHIDDevice) static Xbox360Peripheral* GetOwner(IOService *us) @@ -132,7 +136,7 @@ IOReturn Xbox360ControllerClass::handleReport(IOMemoryDescriptor * descriptor, I if (desc != NULL) { XBOX360_IN_REPORT *report=(XBOX360_IN_REPORT*)desc->getBytesNoCopy(); if ((report->header.command==inReport) && (report->header.size==sizeof(XBOX360_IN_REPORT))) { - GetOwner(this)->fiddleReport(desc); + GetOwner(this)->fiddleReport(report->left, report->right); remapButtons(report); if (GetOwner(this)->swapSticks) remapAxes(report); @@ -263,6 +267,8 @@ void Xbox360ControllerClass::remapAxes(void *buffer) } +#pragma mark - XboxOriginalControllerClass + /* * Xbox original controller. * Convert reports to Xbox 360 controller format and fake product ids @@ -415,9 +421,12 @@ IOReturn XboxOriginalControllerClass::setReport(IOMemoryDescriptor *report,IOHID } } + +#pragma mark - XboxOneControllerClass + /* * Xbox One controller. - * Convert reports to Xbox 360 controller format and fake product ids + * Does not pretend to be an Xbox 360 controller. */ typedef struct { @@ -453,110 +462,127 @@ typedef struct { UInt8 period; // Period of time between pulses. DO NOT INCLUDE WHEN SUBSTRUCTURE IS 0x09 } PACKED XBOXONE_OUT_RUMBLE; +typedef enum { + XONE_SYNC = 0x0001, // Bit 00 + XONE_MENU = 0x0004, // Bit 02 + XONE_VIEW = 0x0008, // Bit 03 + XONE_A = 0x0010, // Bit 04 + XONE_B = 0x0020, // Bit 05 + XONE_X = 0x0040, // Bit 06 + XONE_Y = 0x0080, // Bit 07 + XONE_DPAD_UP = 0x0100, // Bit 08 + XONE_DPAD_DOWN = 0x0200, // Bit 09 + XONE_DPAD_LEFT = 0x0400, // Bit 10 + XONE_DPAD_RIGHT = 0x0800, // Bit 11 + XONE_LEFT_SHOULDER = 0x1000, // Bit 12 + XONE_RIGHT_SHOULDER = 0x2000, // Bit 13 + XONE_LEFT_THUMB = 0x4000, // Bit 14 + XONE_RIGHT_THUMB = 0x8000, // Bit 15 +} GAMEPAD_XONE; + OSDefineMetaClassAndStructors(XboxOneControllerClass, Xbox360ControllerClass) -OSNumber* XboxOneControllerClass::newVendorIDNumber() const +OSString* XboxOneControllerClass::newManufacturerString() const { - return OSNumber::withNumber(1118,16); + return OSString::withCString("Microsoft"); } -OSString* XboxOneControllerClass::newManufacturerString() const +OSString* XboxOneControllerClass::newProductString() const { - return OSString::withCString("Microsoft"); + return OSString::withCString("Xbox One Wired Controller"); } -OSNumber* XboxOneControllerClass::newProductIDNumber() const +IOReturn XboxOneControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const { - return OSNumber::withNumber(654,16); + IOBufferMemoryDescriptor *buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,sizeof(HID_ONE::ReportDescriptor)); + + if (buffer == NULL) return kIOReturnNoResources; + buffer->writeBytes(0,HID_ONE::ReportDescriptor,sizeof(HID_ONE::ReportDescriptor)); + *descriptor=buffer; + return kIOReturnSuccess; } -OSString* XboxOneControllerClass::newProductString() const +void XboxOneControllerClass::reorderButtons(UInt16* buttons, UInt8 mapping[]) { - return OSString::withCString("Xbox One Wired Controller"); + UInt16 new_buttons = 0; + + new_buttons |= ((*buttons & 4) == 4) << GetOwner(this)->mapping[4]; + new_buttons |= ((*buttons & 8) == 8) << GetOwner(this)->mapping[5]; + new_buttons |= ((*buttons & 16) == 16) << GetOwner(this)->mapping[11]; + new_buttons |= ((*buttons & 32) == 32) << GetOwner(this)->mapping[12]; + new_buttons |= ((*buttons & 64) == 64) << GetOwner(this)->mapping[13]; + new_buttons |= ((*buttons & 128) == 128) << GetOwner(this)->mapping[14]; + new_buttons |= ((*buttons & 256) == 256) << GetOwner(this)->mapping[0]; + new_buttons |= ((*buttons & 512) == 512) << GetOwner(this)->mapping[1]; + new_buttons |= ((*buttons & 1024) == 1024) << GetOwner(this)->mapping[2]; + new_buttons |= ((*buttons & 2048) == 2048) << GetOwner(this)->mapping[3]; + new_buttons |= ((*buttons & 4096) == 4096) << GetOwner(this)->mapping[8]; + new_buttons |= ((*buttons & 8192) == 8192) << GetOwner(this)->mapping[9]; + new_buttons |= ((*buttons & 16384) == 16384) << GetOwner(this)->mapping[6]; + new_buttons |= ((*buttons & 32768) == 32768) << GetOwner(this)->mapping[7]; + + *buttons = new_buttons; } -// This converts Xbox One controller report into Xbox360 form -void XboxOneControllerClass::convertFromXboxOne(void *buffer, void* override) { +void XboxOneControllerClass::remapButtons(void *buffer) +{ + XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; -// if (data[0] != 0x00 || data[1] != 0x14) { -// IOLog("Unknown report command %d, length %d\n", (int)data[0], (int)data[1]); -// return; -// } + reorderButtons(&report->buttons, GetOwner(this)->mapping); - XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; - UInt8 trigL = 0, trigR = 0; - UInt16 new_buttons = 0; - XBOX360_HAT left, right; + // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", GetOwner(this)->mapping[0], GetOwner(this)->mapping[1], GetOwner(this)->mapping[2], GetOwner(this)->mapping[3], GetOwner(this)->mapping[4], GetOwner(this)->mapping[5], GetOwner(this)->mapping[6], GetOwner(this)->mapping[7], GetOwner(this)->mapping[8], GetOwner(this)->mapping[9], GetOwner(this)->mapping[10], GetOwner(this)->mapping[11], GetOwner(this)->mapping[12], GetOwner(this)->mapping[13], GetOwner(this)->mapping[14]); +} + +void XboxOneControllerClass::fixTriggers(void *buffer) +{ + XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; - if (override == NULL) { - XBOXONE_IN_REPORT *reportXone = (XBOXONE_IN_REPORT*)buffer; - report360->header.command = reportXone->header.command - 0x20; // Change 0x20 into 0x00 - report360->header.size = reportXone->header.size + 0x06; // Change 0x0E into 0x14 - - new_buttons |= ((reportXone->buttons & 4) == 4) << 4; - new_buttons |= ((reportXone->buttons & 8) == 8) << 5; - new_buttons |= ((reportXone->buttons & 16) == 16) << 12; - new_buttons |= ((reportXone->buttons & 32) == 32) << 13; - new_buttons |= ((reportXone->buttons & 64) == 64) << 14; - new_buttons |= ((reportXone->buttons & 128) == 128) << 15; - new_buttons |= ((reportXone->buttons & 256) == 256) << 0; - new_buttons |= ((reportXone->buttons & 512) == 512) << 1; - new_buttons |= ((reportXone->buttons & 1024) == 1024) << 2; - new_buttons |= ((reportXone->buttons & 2048) == 2048) << 3; - new_buttons |= ((reportXone->buttons & 4096) == 4096) << 8; - new_buttons |= ((reportXone->buttons & 8192) == 8192) << 9; - new_buttons |= ((reportXone->buttons & 16384) == 16384) << 6; - new_buttons |= ((reportXone->buttons & 32768) == 32768) << 7; - new_buttons |= (isXboxOneGuideButtonPressed) << 10; - trigL = (reportXone->trigL / 1023.0) * 255; - trigR = (reportXone->trigR / 1023.0) * 255; - left = reportXone->left; - right = reportXone->right; - - report360->buttons = new_buttons; - report360->trigL = trigL; - report360->trigR = trigR; - report360->left = left; - report360->right = right; - } else { - XBOX360_IN_REPORT *reportOverride = (XBOX360_IN_REPORT*)override; - report360->header = reportOverride->header; - report360->buttons = reportOverride->buttons; - report360->buttons |= (isXboxOneGuideButtonPressed) << 10; - report360->trigL = reportOverride->trigL; - report360->trigR = reportOverride->trigR; - report360->left = reportOverride->left; - report360->right = reportOverride->right; - } + UInt16 newTrigL = (report->trigL / 1023.0) * 255; + UInt16 newTrigR = (report->trigR / 1023.0) * 255; + + report->trigL = newTrigL; + report->trigR = newTrigR; } -IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) { - UInt8 data[sizeof(XBOXONE_IN_REPORT)]; - descriptor->readBytes(0, data, sizeof(XBOXONE_IN_REPORT)); - const XBOXONE_IN_REPORT *report=(const XBOXONE_IN_REPORT*)data; - if ((report->header.command==0x20) && report->header.size==(sizeof(XBOXONE_IN_REPORT)-4)) { - convertFromXboxOne(data, NULL); - memcpy(lastData, data, sizeof(XBOX360_IN_REPORT)); - descriptor->writeBytes(0, data, sizeof(XBOX360_IN_REPORT)); - } - else if (report->header.command==0x07 && report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4)) - { - const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; - isXboxOneGuideButtonPressed = (bool)guideReport->state; - convertFromXboxOne(data, lastData); - descriptor->writeBytes(0, data, sizeof(XBOX360_IN_REPORT)); - } +void XboxOneControllerClass::remapAxes(void *buffer) +{ + XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; - IOReturn ret = Xbox360ControllerClass::handleReport(descriptor, reportType, options); + XBOX360_HAT temp = report->left; + report->left = report->right; + report->right = temp; +} + +IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) +{ + if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { + IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); + if (desc != NULL) { + XBOXONE_IN_REPORT *report=(XBOXONE_IN_REPORT*)desc->getBytesNoCopy(); + if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_IN_REPORT)-4)) { + GetOwner(this)->fiddleReport(report->left, report->right); + reorderButtons(&report->buttons, GetOwner(this)->mapping); + fixTriggers(report); + if (GetOwner(this)->swapSticks) + remapAxes(report); + } + else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) + { + const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; + isXboxOneGuideButtonPressed = (bool)guideReport->state; + } + } + } + IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); return ret; } IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) { -// IOLog("Xbox One Controller - setReport\n"); + // IOLog("Xbox One Controller - setReport\n"); unsigned char data[4]; report->readBytes(0, &data, 4); -// IOLog("Attempting to send: %d %d %d %d\n",((unsigned char*)data)[0], ((unsigned char*)data)[1], ((unsigned char*)data)[2], ((unsigned char*)data)[3]); + // IOLog("Attempting to send: %d %d %d %d\n",((unsigned char*)data)[0], ((unsigned char*)data)[1], ((unsigned char*)data)[2], ((unsigned char*)data)[3]); UInt8 rumbleType; switch(data[0])//(header.command) { @@ -606,3 +632,194 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor return kIOReturnUnsupported; } } + + +#pragma mark - XboxOnePretend360Class + +/* + * Xbox One controller. + * Convert reports to Xbox 360 controller format and fake product ids + */ + +OSDefineMetaClassAndStructors(XboxOnePretend360Class, XboxOneControllerClass) + +OSString* XboxOnePretend360Class::newProductString() const +{ + return OSString::withCString("Xbox One Wired Controller (Xbox 360)"); +} + +OSNumber* XboxOnePretend360Class::newProductIDNumber() const +{ + return OSNumber::withNumber(654,16); +} + +OSNumber* XboxOnePretend360Class::newVendorIDNumber() const +{ + return OSNumber::withNumber(1118,16); +} + +IOReturn XboxOnePretend360Class::newReportDescriptor(IOMemoryDescriptor **descriptor) const +{ + return Xbox360ControllerClass::newReportDescriptor(descriptor); +} + +void XboxOnePretend360Class::convertFromXboxOne(void *buffer, void* overrideBuffer) { + + // if (data[0] != 0x00 || data[1] != 0x14) { + // IOLog("Unknown report command %d, length %d\n", (int)data[0], (int)data[1]); + // return; + // } + + XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; + UInt8 trigL = 0, trigR = 0; + UInt16 new_buttons = 0; + XBOX360_HAT left, right; + + if (overrideBuffer == NULL) { + XBOXONE_IN_REPORT *reportXone = (XBOXONE_IN_REPORT*)buffer; + report360->header.command = reportXone->header.command - 0x20; // Change 0x20 into 0x00 + report360->header.size = reportXone->header.size + 0x06; // Change 0x0E into 0x14 + + new_buttons |= ((reportXone->buttons & 4) == 4) << 4; + new_buttons |= ((reportXone->buttons & 8) == 8) << 5; + new_buttons |= ((reportXone->buttons & 16) == 16) << 12; + new_buttons |= ((reportXone->buttons & 32) == 32) << 13; + new_buttons |= ((reportXone->buttons & 64) == 64) << 14; + new_buttons |= ((reportXone->buttons & 128) == 128) << 15; + new_buttons |= ((reportXone->buttons & 256) == 256) << 0; + new_buttons |= ((reportXone->buttons & 512) == 512) << 1; + new_buttons |= ((reportXone->buttons & 1024) == 1024) << 2; + new_buttons |= ((reportXone->buttons & 2048) == 2048) << 3; + new_buttons |= ((reportXone->buttons & 4096) == 4096) << 8; + new_buttons |= ((reportXone->buttons & 8192) == 8192) << 9; + new_buttons |= ((reportXone->buttons & 16384) == 16384) << 6; + new_buttons |= ((reportXone->buttons & 32768) == 32768) << 7; + + new_buttons |= (isXboxOneGuideButtonPressed) << 10; + + trigL = (reportXone->trigL / 1023.0) * 255; + trigR = (reportXone->trigR / 1023.0) * 255; + left = reportXone->left; + right = reportXone->right; + + report360->buttons = new_buttons; + report360->trigL = trigL; + report360->trigR = trigR; + report360->left = left; + report360->right = right; + } else { + XBOX360_IN_REPORT *reportOverride = (XBOX360_IN_REPORT*)overrideBuffer; + report360->header = reportOverride->header; + report360->buttons = reportOverride->buttons; + report360->buttons |= (isXboxOneGuideButtonPressed) << 10; + report360->trigL = reportOverride->trigL; + report360->trigR = reportOverride->trigR; + report360->left = reportOverride->left; + report360->right = reportOverride->right; + } +} + +IOReturn XboxOnePretend360Class::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) +{ + if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { + IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); + if (desc != NULL) { + XBOXONE_IN_REPORT *report=(XBOXONE_IN_REPORT*)desc->getBytesNoCopy(); + if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_IN_REPORT)-4)) { + + reorderButtons(&report->buttons, GetOwner(this)->mapping); + + convertFromXboxOne(report, NULL); + XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; + GetOwner(this)->fiddleReport(report360->left, report360->right); + + if (GetOwner(this)->swapSticks) + Xbox360ControllerClass::remapAxes(report360); + } + else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) + { + const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; + isXboxOneGuideButtonPressed = (bool)guideReport->state; + convertFromXboxOne(report, lastData); + } + } + } + IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); + return ret; +} + + +#pragma mark - XboxOneEliteControllerClass + +/* + * Xbox One Elite Controller Class + * Added so special Elite functions can be added later. + */ + +typedef struct { + XBOXONE_HEADER header; + UInt16 buttons; + UInt16 trigL, trigR; + XBOX360_HAT left, right; + UInt16 true_buttons; + UInt16 true_trigL, true_trigR; + XBOX360_HAT true_left, true_right; + UInt8 paddle; +} PACKED XBOXONE_ELITE_IN_REPORT; + +typedef enum { + XONE_PADDLE_UPPER_LEFT = 0x0001, // Bit 00 + XONE_PADDLE_UPPER_RIGHT = 0x0002, // Bit 01 + XONE_PADDLE_LOWER_LEFT = 0x0004, // Bit 02 + XONE_PADDLE_LOWER_RIGHT = 0x0008, // Bit 03 + XONE_PADDLE_PRESET_NUM = 0x0010, // Bit 04 +} GAMEPAD_XONE_ELITE_PADDLE; + +OSDefineMetaClassAndStructors(XboxOneEliteControllerClass, XboxOneControllerClass) + +OSString* XboxOneEliteControllerClass::newProductString() const +{ + return OSString::withCString("Xbox One Elite Wired Controller"); +} + +void XboxOneEliteControllerClass::remapButtons(void *buffer) +{ + // TODO(Drew): Currently does nothing special. May need it later. + XBOXONE_ELITE_IN_REPORT *report = (XBOXONE_ELITE_IN_REPORT*)buffer; + reorderButtons(&report->buttons, GetOwner(this)->mapping); + + // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", GetOwner(this)->mapping[0], GetOwner(this)->mapping[1], GetOwner(this)->mapping[2], GetOwner(this)->mapping[3], GetOwner(this)->mapping[4], GetOwner(this)->mapping[5], GetOwner(this)->mapping[6], GetOwner(this)->mapping[7], GetOwner(this)->mapping[8], GetOwner(this)->mapping[9], GetOwner(this)->mapping[10], GetOwner(this)->mapping[11], GetOwner(this)->mapping[12], GetOwner(this)->mapping[13], GetOwner(this)->mapping[14]); +} + +void XboxOneEliteControllerClass::remapAxes(void *buffer) +{ + XBOXONE_ELITE_IN_REPORT *report = (XBOXONE_ELITE_IN_REPORT*)buffer; + + XBOX360_HAT temp = report->left; + report->left = report->right; + report->right = temp; +} + +IOReturn XboxOneEliteControllerClass::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) +{ + if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { + IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); + if (desc != NULL) { + XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); + if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_ELITE_IN_REPORT)-4)) { + GetOwner(this)->fiddleReport(report->left, report->right); + reorderButtons(&report->buttons, GetOwner(this)->mapping); + fixTriggers(report); + if (GetOwner(this)->swapSticks) + remapAxes(report); + } + else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) + { + const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; + isXboxOneGuideButtonPressed = (bool)guideReport->state; + } + } + } + IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); + return ret; +} diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 0d9c7319..83c548ac 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -25,16 +25,19 @@ class Xbox360ControllerClass : public IOHIDDevice { - OSDeclareDefaultStructors(Xbox360ControllerClass) - + OSDeclareDefaultStructors(Xbox360ControllerClass) + +private: + bool pretend360; + private: OSString* getDeviceString(UInt8 index,const char *def=NULL) const; - + public: virtual bool start(IOService *provider); - + virtual IOReturn setProperties(OSObject *properties); - + virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); @@ -43,7 +46,7 @@ class Xbox360ControllerClass : public IOHIDDevice IOMemoryDescriptor * report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - + virtual OSString* newManufacturerString() const; virtual OSNumber* newPrimaryUsageNumber() const; virtual OSNumber* newPrimaryUsagePageNumber() const; @@ -52,7 +55,7 @@ class Xbox360ControllerClass : public IOHIDDevice virtual OSString* newSerialNumberString() const; virtual OSString* newTransportString() const; virtual OSNumber* newVendorIDNumber() const; - + virtual OSNumber* newLocationIDNumber() const; virtual void remapButtons(void *buffer); @@ -88,11 +91,13 @@ class XboxOneControllerClass : public Xbox360ControllerClass #define XboxOne_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x-4);} -private: - UInt8 lastData[20]; +protected: bool isXboxOneGuideButtonPressed; + void reorderButtons(UInt16* buttons, UInt8 mapping[]); public: + virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; + virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn handleReport( IOMemoryDescriptor * report, @@ -100,8 +105,49 @@ class XboxOneControllerClass : public Xbox360ControllerClass IOOptionBits options = 0 ); virtual OSString* newManufacturerString() const; + virtual OSString* newProductString() const; + + virtual void remapButtons(void *buffer); + virtual void remapAxes(void *buffer); + virtual void fixTriggers(void *buffer); +}; + + +class XboxOnePretend360Class : public XboxOneControllerClass +{ + OSDeclareDefaultStructors(XboxOnePretend360Class) + +protected: + UInt8 lastData[20]; + +public: + virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; + + virtual IOReturn handleReport( + IOMemoryDescriptor * report, + IOHIDReportType reportType = kIOHIDReportTypeInput, + IOOptionBits options = 0 ); + + virtual OSString* newProductString() const; virtual OSNumber* newProductIDNumber() const; virtual OSNumber* newVendorIDNumber() const; - virtual OSString* newProductString() const; - virtual void convertFromXboxOne(void *buffer, void* override); + + virtual void convertFromXboxOne(void *buffer, void* overrideBuffer); }; + + +class XboxOneEliteControllerClass : public XboxOneControllerClass +{ + OSDeclareDefaultStructors(XboxOneEliteControllerClass) + +public: + virtual IOReturn handleReport( + IOMemoryDescriptor * report, + IOHIDReportType reportType = kIOHIDReportTypeInput, + IOOptionBits options = 0 ); + + virtual OSString* newProductString() const; + + virtual void remapButtons(void *buffer); + virtual void remapAxes(void *buffer); +}; \ No newline at end of file diff --git a/360Controller/Info.plist b/360Controller/Info.plist index a18c49c4..082c4e4f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1,2011 +1,2091 @@ - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.mice.driver.Xbox360Controller - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - KEXT - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - IOKitPersonalities - - AfterglowGamepad1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1043 - idVendor - 3695 - - ArcadeGameStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18264 - idVendor - 1848 - - BETOPGAMEFORWINDOWS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21766 - idVendor - 4544 - - BatarangWired - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16144 - idVendor - 5604 - - BigBenController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1537 - idVendor - 5227 - - ChatPadKeyboardEvents - - CFBundleIdentifier - com.apple.iokit.IOHIDFamily - IOClass - IOHIDEventDriver - IOProviderClass - IOHIDInterface - VendorID - 100 - - Chinese-madeXboxController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 65535 - idVendor - 65535 - - Controller - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 654 - idVendor - 1118 - - DOA4Stick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 10 - idVendor - 3853 - - GEMPADEX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21773 - idVendor - 9414 - - GameStopGamepad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1025 - idVendor - 3695 - - GameStopGamepad4 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 769 - idVendor - 3695 - - GamestopGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 770 - idVendor - 4779 - - GamestopGamepad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63745 - idVendor - 7085 - - GenericController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62209 - idVendor - 1133 - - GuitarHero - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18248 - idVendor - 5168 - - HoriFSVX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62723 - idVendor - 7085 - - HoriFightingStickEX2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 10 - idVendor - 3853 - - HoriFightingStickEX2B - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62725 - idVendor - 7085 - - HoriFightingStickEX2C - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 13 - idVendor - 3853 - - HoriPadEX2Turbo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62721 - idVendor - 7085 - - HoriPadEXTurbo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 12 - idVendor - 3853 - - HoriPadOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 103 - idVendor - 3853 - - HoriRAPHayabusaXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 99 - idVendor - 3853 - - HoriRAPVXSA - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62722 - idVendor - 7085 - - HoriUnnamed - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21760 - idVendor - 7085 - - HoriUnnamedBlueSolo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64001 - idVendor - 7085 - - IonDrumRocker - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 304 - idVendor - 7085 - - JoytekXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 48879 - idVendor - 5678 - - KonamiDancePad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 4 - idVendor - 4779 - - LogitechF310 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49693 - idVendor - 1133 - - LogitechF510 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49694 - idVendor - 1133 - - LogitechF710 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49695 - idVendor - 1133 - - MLGGamePadforXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61475 - idVendor - 7085 - - MVC2TEStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61497 - idVendor - 7085 - - MVC2TEStick2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 46904 - idVendor - 1848 - - MadCatzBrawlStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61465 - idVendor - 7085 - - MadCatzFPSPro - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61479 - idVendor - 7085 - - MadCatzFightPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61486 - idVendor - 7085 - - MadCatzFightStickNeo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61498 - idVendor - 7085 - - MadCatzFightStickSoulCaliber - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61503 - idVendor - 7085 - - MadCatzFightStickTE2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61568 - idVendor - 7085 - - MadCatzGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18198 - idVendor - 1848 - - MadCatzGamepad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63746 - idVendor - 7085 - - MadCatzGamepad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61642 - idVendor - 7085 - - MadCatzMicroConGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18230 - idVendor - 1848 - - MadCatzMicroGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18230 - idVendor - 1848 - - MadCatzPad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61462 - idVendor - 7085 - - MadCatzPortableDrum - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 39025 - idVendor - 1848 - - MadCatzProGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18214 - idVendor - 1848 - - MicrosoftCorp.XboxControllerS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 649 - idVendor - 1118 - - MicrosoftCorp.XboxControllerSHub - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 648 - idVendor - 1118 - - MicrosoftX-Boxpad(Japan) - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 645 - idVendor - 1118 - - MicrosoftX-Boxpadv1(US) - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 514 - idVendor - 1118 - - MicrosoftXboxControllerS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 647 - idVendor - 1118 - - MicrosoftXboxOneController2013 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 721 - idVendor - 1118 - - MicrosoftXboxOneController2015 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 733 - idVendor - 1118 - - PDPAfterglow - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63744 - idVendor - 7085 - - PDPAfterglowAX1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 275 - idVendor - 3695 - - PDPAfterglowV2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 531 - idVendor - 3695 - - PDPMarvelXboxOneController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 327 - idVendor - 3695 - - PDPTron - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63747 - idVendor - 7085 - - PDPVersusPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63748 - idVendor - 7085 - - PowerAAirflow - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16138 - idVendor - 5604 - - PowerAMiniProEXGreen - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16128 - idVendor - 5604 - - PowerAMiniProEXGreen2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21274 - idVendor - 9414 - - PowerAMiniProEXWhite - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21248 - idVendor - 9414 - - PowerAMiniXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21530 - idVendor - 9414 - - PowerASpectraIlluminatedXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21546 - idVendor - 9414 - - QanBaJoystickPlus - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 48879 - idVendor - 1848 - - RAPEXSE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 22 - idVendor - 3853 - - REALARCADEPROEX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62724 - idVendor - 7085 - - RazerOnza - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64769 - idVendor - 7085 - - RazerOnza2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64769 - idVendor - 5769 - - RazerOnzaTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64768 - idVendor - 7085 - - RazerOnzaTE2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64768 - idVendor - 5769 - - RazerSabertoothElite - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 65024 - idVendor - 5769 - - RazerSabertoothElite2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 23812 - idVendor - 9414 - - RedOctaneController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63489 - idVendor - 5168 - - RockBandDrums - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 3 - idVendor - 7085 - - RockBandGuitar - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 2 - idVendor - 7085 - - RockCandy - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 287 - idVendor - 3695 - - RockCandyGamepadForXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 543 - idVendor - 3695 - - RockCandyGamepadforXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 326 - idVendor - 3695 - - SC4VF5Stick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 13 - idVendor - 3853 - - SF4FightPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61480 - idVendor - 7085 - - SF4FightPad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18216 - idVendor - 1848 - - SF4StickSE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18200 - idVendor - 1848 - - SF4StickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18232 - idVendor - 1848 - - SF4StickTER2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61496 - idVendor - 7085 - - SSF4StickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63288 - idVendor - 1848 - - SSFIVTEChunLi - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61501 - idVendor - 7085 - - SaitekCB360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 51970 - idVendor - 1848 - - StrikeController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1 - idVendor - 5769 - - TSZPelican - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 513 - idVendor - 3695 - - ThrustMasterGPXGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 45862 - idVendor - 1103 - - ThrustmasterGPXLightback - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 23298 - idVendor - 9414 - - XB360MortalKombatFightStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63750 - idVendor - 7085 - - Xbox360ProEXController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21258 - idVendor - 9414 - - - NSHumanReadableCopyright - Copyright © 2013 MICE Software. All rights reserved. - OSBundleLibraries - - com.apple.iokit.IOHIDFamily - 1.2 - com.apple.iokit.IOUSBFamily - 1.8 - com.apple.kpi.iokit - 8.0.0 - com.apple.kpi.libkern - 8.0.0 - com.apple.kpi.mach - 8.0.0 - - + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.mice.driver.Xbox360Controller + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + IOKitPersonalities + + AfterglowGamepad1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1043 + idVendor + 3695 + + ArcadeGameStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18264 + idVendor + 1848 + + BETOPGAMEFORWINDOWS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21766 + idVendor + 4544 + + BatarangWired + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16144 + idVendor + 5604 + + BigBenController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1537 + idVendor + 5227 + + ChatPadKeyboardEvents + + CFBundleIdentifier + com.apple.iokit.IOHIDFamily + IOClass + IOHIDEventDriver + IOProviderClass + IOHIDInterface + VendorID + 100 + + Chinese-madeXboxController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 65535 + idVendor + 65535 + + Controller + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 654 + idVendor + 1118 + + DOA4Stick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10 + idVendor + 3853 + + GEMPADEX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21773 + idVendor + 9414 + + GameStopGamepad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1025 + idVendor + 3695 + + GameStopGamepad4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 769 + idVendor + 3695 + + GamestopGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 770 + idVendor + 4779 + + GamestopGamepad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63745 + idVendor + 7085 + + GenericController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62209 + idVendor + 1133 + + GuitarHero + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18248 + idVendor + 5168 + + HoriFSVX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62723 + idVendor + 7085 + + HoriFightingStickEX2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10 + idVendor + 3853 + + HoriFightingStickEX2B + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62725 + idVendor + 7085 + + HoriFightingStickEX2C + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 13 + idVendor + 3853 + + HoriPadEX2Turbo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62721 + idVendor + 7085 + + HoriPadEXTurbo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 12 + idVendor + 3853 + + HoriPadOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 103 + idVendor + 3853 + + HoriRAPHayabusaXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 99 + idVendor + 3853 + + HoriRAPVXSA + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62722 + idVendor + 7085 + + HoriUnnamed + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21760 + idVendor + 7085 + + HoriUnnamedBlueSolo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64001 + idVendor + 7085 + + IonDrumRocker + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 304 + idVendor + 7085 + + JoytekXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 48879 + idVendor + 5678 + + KonamiDancePad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 4 + idVendor + 4779 + + LogitechF310 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49693 + idVendor + 1133 + + LogitechF510 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49694 + idVendor + 1133 + + LogitechF710 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49695 + idVendor + 1133 + + MLGGamePadforXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61475 + idVendor + 7085 + + MVC2TEStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61497 + idVendor + 7085 + + MVC2TEStick2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46904 + idVendor + 1848 + + MadCatzBrawlStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61465 + idVendor + 7085 + + MadCatzFPSPro + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61479 + idVendor + 7085 + + MadCatzFightPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61486 + idVendor + 7085 + + MadCatzFightStickNeo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61498 + idVendor + 7085 + + MadCatzFightStickSoulCaliber + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61503 + idVendor + 7085 + + MadCatzFightStickTE2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61568 + idVendor + 7085 + + MadCatzGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18198 + idVendor + 1848 + + MadCatzGamepad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63746 + idVendor + 7085 + + MadCatzGamepad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61642 + idVendor + 7085 + + MadCatzMicroConGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18230 + idVendor + 1848 + + MadCatzMicroGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18230 + idVendor + 1848 + + MadCatzPad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61462 + idVendor + 7085 + + MadCatzPortableDrum + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 39025 + idVendor + 1848 + + MadCatzProGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18214 + idVendor + 1848 + + MicrosoftCorp.XboxControllerS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 649 + idVendor + 1118 + + MicrosoftCorp.XboxControllerSHub + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 648 + idVendor + 1118 + + MicrosoftX-Boxpad(Japan) + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 645 + idVendor + 1118 + + MicrosoftX-Boxpadv1(US) + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 514 + idVendor + 1118 + + MicrosoftXboxControllerS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 647 + idVendor + 1118 + + MicrosoftXboxOneController2013 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 721 + idVendor + 1118 + + MicrosoftXboxOneController2015 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 733 + idVendor + 1118 + + MicrosoftXboxOneControllerElite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 739 + idVendor + 1118 + + PDPAfterglow + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63744 + idVendor + 7085 + + PDPAfterglowAX1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 275 + idVendor + 3695 + + PDPAfterglowV2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 531 + idVendor + 3695 + + PDPMarvelXboxOneController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 327 + idVendor + 3695 + + PDPTron + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63747 + idVendor + 7085 + + PDPVersusPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63748 + idVendor + 7085 + + PowerAAirflow + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16138 + idVendor + 5604 + + PowerAMiniProEXGreen + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16128 + idVendor + 5604 + + PowerAMiniProEXGreen2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21274 + idVendor + 9414 + + PowerAMiniProEXWhite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21248 + idVendor + 9414 + + PowerAMiniXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21530 + idVendor + 9414 + + PowerASpectraIlluminatedXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21546 + idVendor + 9414 + + QanBaJoystickPlus + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 48879 + idVendor + 1848 + + RAPEXSE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22 + idVendor + 3853 + + REALARCADEPROEX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62724 + idVendor + 7085 + + RazerOnza + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64769 + idVendor + 7085 + + RazerOnza2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64769 + idVendor + 5769 + + RazerOnzaTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64768 + idVendor + 7085 + + RazerOnzaTE2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64768 + idVendor + 5769 + + RazerSabertoothElite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 65024 + idVendor + 5769 + + RazerSabertoothElite2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23812 + idVendor + 9414 + + RazerWildcat + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2563 + idVendor + 5426 + + RedOctaneController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63489 + idVendor + 5168 + + RedOctaneControllerAdapter + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 672 + idVendor + 5168 + + RockBandDrums + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 3 + idVendor + 7085 + + RockBandGuitar + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2 + idVendor + 7085 + + RockCandy + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 287 + idVendor + 3695 + + RockCandyGamepadForXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 543 + idVendor + 3695 + + RockCandyGamepadforXboxOne2013 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 326 + idVendor + 3695 + + RockCandyGamepadforXboxOne2015 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 582 + idVendor + 3695 + + SC4VF5Stick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 13 + idVendor + 3853 + + SF4FightPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61480 + idVendor + 7085 + + SF4FightPad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18216 + idVendor + 1848 + + SF4StickSE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18200 + idVendor + 1848 + + SF4StickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18232 + idVendor + 1848 + + SF4StickTER2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61496 + idVendor + 7085 + + SSF4StickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63288 + idVendor + 1848 + + SSFIVTEChunLi + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61501 + idVendor + 7085 + + SaitekCB360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51970 + idVendor + 1848 + + StrikeController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1 + idVendor + 5769 + + TSZPelican + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 513 + idVendor + 3695 + + ThrustMasterGPXGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 45862 + idVendor + 1103 + + ThrustmasterGPXLightback + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23298 + idVendor + 9414 + + XB360MortalKombatFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63750 + idVendor + 7085 + + Xbox360ProEXController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21258 + idVendor + 9414 + + + NSHumanReadableCopyright + Copyright © 2013 MICE Software. All rights reserved. + OSBundleLibraries + + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.iokit.IOUSBFamily + 1.8 + com.apple.kpi.iokit + 8.0.0 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + + diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 3aa6b4bc..875f9fb7 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1,31 +1,30 @@ /* - MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2013 Colin Munro - Bug fixes contributed by Cody "codeman38" Boisclair - - _60Controller.cpp - main source of the driver - - This file is part of Xbox360Controller. - - Xbox360Controller is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - Xbox360Controller is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Foobar; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2013 Colin Munro + Bug fixes contributed by Cody "codeman38" Boisclair + + _60Controller.cpp - main source of the driver + + This file is part of Xbox360Controller. + + Xbox360Controller is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Xbox360Controller is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ #include #include #include #include "_60Controller.h" -#include "ControlStruct.h" #include "ChatPad.h" #include "Controller.h" @@ -63,45 +62,45 @@ static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) void Xbox360Peripheral::SendSpecial(UInt16 value) { - IOUSBDevRequest controlReq; - - controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBInterface); - controlReq.bRequest = 0x00; - controlReq.wValue = value; - controlReq.wIndex = 0x0002; - controlReq.wLength = 0; - controlReq.pData = NULL; - if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) - IOLog("Failed to send special message %.4x\n", value); + IOUSBDevRequest controlReq; + + controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBInterface); + controlReq.bRequest = 0x00; + controlReq.wValue = value; + controlReq.wIndex = 0x0002; + controlReq.wLength = 0; + controlReq.pData = NULL; + if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) + IOLog("Failed to send special message %.4x\n", value); } void Xbox360Peripheral::SendInit(UInt16 value, UInt16 index) { - IOUSBDevRequest controlReq; - - controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice); - controlReq.bRequest = 0xa9; - controlReq.wValue = value; - controlReq.wIndex = index; - controlReq.wLength = 0; - controlReq.pData = NULL; - device->DeviceRequest(&controlReq, 100, 100, NULL); // Will fail - but device should still act on it + IOUSBDevRequest controlReq; + + controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice); + controlReq.bRequest = 0xa9; + controlReq.wValue = value; + controlReq.wIndex = index; + controlReq.wLength = 0; + controlReq.pData = NULL; + device->DeviceRequest(&controlReq, 100, 100, NULL); // Will fail - but device should still act on it } bool Xbox360Peripheral::SendSwitch(bool sendOut) { - IOUSBDevRequest controlReq; - - controlReq.bmRequestType = USBmakebmRequestType(sendOut ? kUSBOut : kUSBIn, kUSBVendor, kUSBDevice); - controlReq.bRequest = 0xa1; - controlReq.wValue = 0x0000; - controlReq.wIndex = 0xe416; - controlReq.wLength = sizeof(chatpadInit); - controlReq.pData = chatpadInit; + IOUSBDevRequest controlReq; + + controlReq.bmRequestType = USBmakebmRequestType(sendOut ? kUSBOut : kUSBIn, kUSBVendor, kUSBDevice); + controlReq.bRequest = 0xa1; + controlReq.wValue = 0x0000; + controlReq.wIndex = 0xe416; + controlReq.wLength = sizeof(chatpadInit); + controlReq.pData = chatpadInit; IOReturn err = device->DeviceRequest(&controlReq, 100, 100, NULL); if (err == kIOReturnSuccess) return true; - + const char *errStr = device->stringFromReturn(err); IOLog("start - failed to %s chatpad setting (%x): %s\n", sendOut ? "write" : "read", err, errStr); @@ -110,117 +109,117 @@ bool Xbox360Peripheral::SendSwitch(bool sendOut) void Xbox360Peripheral::SendToggle(void) { - SendSpecial(serialToggle ? 0x1F : 0x1E); - serialToggle = !serialToggle; + SendSpecial(serialToggle ? 0x1F : 0x1E); + serialToggle = !serialToggle; } void Xbox360Peripheral::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) { - Xbox360Peripheral *controller; - - controller = OSDynamicCast(Xbox360Peripheral, owner); - controller->ChatPadTimerAction(sender); + Xbox360Peripheral *controller; + + controller = OSDynamicCast(Xbox360Peripheral, owner); + controller->ChatPadTimerAction(sender); } void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) { - int nextTime, serialGot; - - serialGot = 0; - nextTime = 1000; - switch (serialTimerState) - { - case tsToggle: - SendToggle(); - if (serialActive) - { - if (!serialHeard) - { - serialActive = false; - serialGot = 2; - } - } - else - { - if (serialHeard) - { - serialTimerState = tsReset1; - serialResetCount = 0; - nextTime = 40; - } - } - break; - - case tsMiniToggle: - SendToggle(); - if (serialHeard) - { - serialTimerState = tsSet1; - nextTime = 40; - } - else - { - serialResetCount++; - if (serialResetCount > 3) - { - serialTimerState = tsToggle; - } - else - { - serialTimerState = tsReset1; - nextTime = 40; - } - } - break; - - case tsReset1: - SendSpecial(0x1B); - serialTimerState = tsReset2; - nextTime = 35; - break; - - case tsReset2: - SendSpecial(0x1B); - serialTimerState = tsMiniToggle; - nextTime = 150; - break; - - case tsSet1: - SendSpecial(0x18); - serialTimerState = tsSet2; - nextTime = 10; - break; - - case tsSet2: - SendSpecial(0x10); - serialTimerState = tsSet3; - nextTime = 10; - break; - - case tsSet3: - SendSpecial(0x03); - serialTimerState = tsToggle; - nextTime = 940; - serialActive = true; - serialGot = 1; - break; - } - sender->setTimeoutMS(nextTime); // Todo: Make it take into account function execution time? - serialHeard = false; - // Make it happen after the timer's set, for minimum impact - switch (serialGot) - { - case 1: - SerialConnect(); - break; - - case 2: - SerialDisconnect(); - break; - - default: - break; - } + int nextTime, serialGot; + + serialGot = 0; + nextTime = 1000; + switch (serialTimerState) + { + case tsToggle: + SendToggle(); + if (serialActive) + { + if (!serialHeard) + { + serialActive = false; + serialGot = 2; + } + } + else + { + if (serialHeard) + { + serialTimerState = tsReset1; + serialResetCount = 0; + nextTime = 40; + } + } + break; + + case tsMiniToggle: + SendToggle(); + if (serialHeard) + { + serialTimerState = tsSet1; + nextTime = 40; + } + else + { + serialResetCount++; + if (serialResetCount > 3) + { + serialTimerState = tsToggle; + } + else + { + serialTimerState = tsReset1; + nextTime = 40; + } + } + break; + + case tsReset1: + SendSpecial(0x1B); + serialTimerState = tsReset2; + nextTime = 35; + break; + + case tsReset2: + SendSpecial(0x1B); + serialTimerState = tsMiniToggle; + nextTime = 150; + break; + + case tsSet1: + SendSpecial(0x18); + serialTimerState = tsSet2; + nextTime = 10; + break; + + case tsSet2: + SendSpecial(0x10); + serialTimerState = tsSet3; + nextTime = 10; + break; + + case tsSet3: + SendSpecial(0x03); + serialTimerState = tsToggle; + nextTime = 940; + serialActive = true; + serialGot = 1; + break; + } + sender->setTimeoutMS(nextTime); // Todo: Make it take into account function execution time? + serialHeard = false; + // Make it happen after the timer's set, for minimum impact + switch (serialGot) + { + case 1: + SerialConnect(); + break; + + case 2: + SerialDisconnect(); + break; + + default: + break; + } } // Read the settings from the registry @@ -251,7 +250,7 @@ void Xbox360Peripheral::readSettings(void) 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("ControllerType")); // No use currently. number = OSDynamicCast(OSNumber, dataDictionary->getObject("rumbleType")); if (number != NULL) rumbleType = number->unsigned8BitValue(); number = OSDynamicCast(OSNumber, dataDictionary->getObject("BindingUp")); @@ -286,12 +285,14 @@ void Xbox360Peripheral::readSettings(void) if (number != NULL) mapping[14] = number->unsigned32BitValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("SwapSticks")); if (value != NULL) swapSticks = value->getValue(); - + value = OSDynamicCast(OSBoolean, dataDictionary->getObject("Pretend360")); + if (value != NULL) pretend360 = value->getValue(); + #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); + invertLeftX?"True":"False",invertLeftY?"True":"False", + invertRightX?"True":"False",invertRightY?"True":"False", + deadzoneLeft,deadzoneRight); #endif } @@ -305,12 +306,12 @@ bool Xbox360Peripheral::init(OSDictionary *propTable) inPipe=NULL; outPipe=NULL; inBuffer=NULL; - padHandler = NULL; - serialIn = NULL; - serialInPipe = NULL; - serialInBuffer = NULL; - serialTimer = NULL; - serialHandler = NULL; + padHandler = NULL; + serialIn = NULL; + serialInPipe = NULL; + serialInBuffer = NULL; + serialTimer = NULL; + serialHandler = NULL; // Default settings invertLeftX=invertLeftY=false; invertRightX=invertRightY=false; @@ -348,12 +349,12 @@ bool Xbox360Peripheral::start(IOService *provider) IOUSBFindEndpointRequest pipe; XBOX360_OUT_LED led; IOWorkLoop *workloop = NULL; + /* * Xbox One controller init packets. - * The Rock Candy Xbox One controller requires more than just 0x05 + * Third party Xbox One controllers requires more than just 0x05 0x20 * Minimum required packets unknown. */ - UInt8 xoneInitFirst[] = { 0x04, 0x20, 0x01, 0x00 }; UInt8 xoneInitSecond[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x9c, 0x00 }; UInt8 xoneInitThird[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -362,13 +363,8 @@ bool Xbox360Peripheral::start(IOService *provider) UInt8 xoneInitSixth[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; UInt8 xoneInitSeventh[] = { 0x06, 0x20, 0x01, 0x02, 0x01, 0x00 }; -// UInt8 xoneInitFirst[] = { 0x02, 0x20, 0x01, 0x1C, 0x7E, 0xED, 0x8B, 0x11, 0x0F, 0xA8, 0x00, 0x00, 0x5E, 0x04, 0xD1, 0x02, 0x01, 0x00, 0x01, 0x00, 0x17, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00 }; -// UInt8 xoneInitSecond[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; -// UInt8 xoneInitThird[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; -// UInt8 xoneInitFourth[] = { 0x0A, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; - if (!super::start(provider)) - return false; + return false; // Get device device=OSDynamicCast(IOUSBDevice,provider); if(device==NULL) { @@ -447,6 +443,7 @@ bool Xbox360Peripheral::start(IOService *provider) controllerType = XboxOriginal; goto interfacefound; } + previousType = controllerType; interfacefound: interface->open(this); // Find pipes @@ -473,73 +470,73 @@ bool Xbox360Peripheral::start(IOService *provider) IOLog("start - failed to allocate input buffer\n"); goto fail; } - // Find chatpad interface - intf.bInterfaceClass = kIOUSBFindInterfaceDontCare; - intf.bInterfaceSubClass = 93; - intf.bInterfaceProtocol = 2; - intf.bAlternateSetting = kIOUSBFindInterfaceDontCare; - serialIn = device->FindNextInterface(NULL, &intf); - if (serialIn == NULL) { - IOLog("start - unable to find chatpad interface\n"); + // Find chatpad interface + intf.bInterfaceClass = kIOUSBFindInterfaceDontCare; + intf.bInterfaceSubClass = 93; + intf.bInterfaceProtocol = 2; + intf.bAlternateSetting = kIOUSBFindInterfaceDontCare; + serialIn = device->FindNextInterface(NULL, &intf); + if (serialIn == NULL) { + IOLog("start - unable to find chatpad interface\n"); goto nochat; } - serialIn->open(this); - // Find chatpad pipe - pipe.direction = kUSBIn; - pipe.interval = 0; - pipe.type = kUSBInterrupt; - pipe.maxPacketSize = 0; - serialInPipe = serialIn->FindNextPipe(NULL, &pipe); - if (serialInPipe == NULL) - { - IOLog("start - unable to find chatpad in pipe\n"); - goto fail; - } - serialInPipe->retain(); - // Get a buffer for the chatpad - serialInBuffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, GetMaxPacketSize(serialInPipe)); - if (serialInBuffer == NULL) - { - IOLog("start - failed to allocate input buffer for chatpad\n"); - goto fail; - } - // Create timer for chatpad - serialTimer = IOTimerEventSource::timerEventSource(this, ChatPadTimerActionWrapper); - if (serialTimer == NULL) - { - IOLog("start - failed to create timer for chatpad\n"); - goto fail; - } + serialIn->open(this); + // Find chatpad pipe + pipe.direction = kUSBIn; + pipe.interval = 0; + pipe.type = kUSBInterrupt; + pipe.maxPacketSize = 0; + serialInPipe = serialIn->FindNextPipe(NULL, &pipe); + if (serialInPipe == NULL) + { + IOLog("start - unable to find chatpad in pipe\n"); + goto fail; + } + serialInPipe->retain(); + // Get a buffer for the chatpad + serialInBuffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, GetMaxPacketSize(serialInPipe)); + if (serialInBuffer == NULL) + { + IOLog("start - failed to allocate input buffer for chatpad\n"); + goto fail; + } + // Create timer for chatpad + serialTimer = IOTimerEventSource::timerEventSource(this, ChatPadTimerActionWrapper); + if (serialTimer == NULL) + { + IOLog("start - failed to create timer for chatpad\n"); + goto fail; + } workloop = getWorkLoop(); - if ((workloop == NULL) || (workloop->addEventSource(serialTimer) != kIOReturnSuccess)) - { - IOLog("start - failed to connect timer for chatpad\n"); - goto fail; - } - // Configure ChatPad - // Send 'configuration' - SendInit(0xa30c, 0x4423); - SendInit(0x2344, 0x7f03); - SendInit(0x5839, 0x6832); - // Set 'switch' + if ((workloop == NULL) || (workloop->addEventSource(serialTimer) != kIOReturnSuccess)) + { + IOLog("start - failed to connect timer for chatpad\n"); + goto fail; + } + // Configure ChatPad + // Send 'configuration' + SendInit(0xa30c, 0x4423); + SendInit(0x2344, 0x7f03); + SendInit(0x5839, 0x6832); + // Set 'switch' if ((!SendSwitch(false)) || (!SendSwitch(true)) || (!SendSwitch(false))) { // Commenting goto fail fixes the driver for the Hori Real Arcade Pro EX //goto fail; - } - // Begin toggle - serialHeard = false; - serialActive = false; - serialToggle = false; - serialResetCount = 0; - serialTimerState = tsToggle; - serialTimer->setTimeoutMS(1000); + } + // Begin toggle + serialHeard = false; + serialActive = false; + serialToggle = false; + serialResetCount = 0; + serialTimerState = tsToggle; + serialTimer->setTimeoutMS(1000); // Begin reading if (!QueueSerialRead()) goto fail; nochat: if (!QueueRead()) - goto fail; - if (controllerType == XboxOne) { + goto fail; + if (controllerType == XboxOne || controllerType == XboxOnePretend360 || controllerType == XboxOneElite) { QueueWrite(&xoneInitFirst, sizeof(xoneInitFirst)); QueueWrite(&xoneInitSecond, sizeof(xoneInitSecond)); QueueWrite(&xoneInitThird, sizeof(xoneInitThird)); @@ -555,8 +552,8 @@ bool Xbox360Peripheral::start(IOService *provider) } // Done - PadConnect(); - registerService(); + PadConnect(); + registerService(); return true; fail: ReleaseAll(); @@ -568,7 +565,7 @@ bool Xbox360Peripheral::QueueRead(void) { IOUSBCompletion complete; IOReturn err; - + if ((inPipe == NULL) || (inBuffer == NULL)) return false; complete.target=this; @@ -586,7 +583,7 @@ bool Xbox360Peripheral::QueueSerialRead(void) { IOUSBCompletion complete; IOReturn err; - + if ((serialInPipe == NULL) || (serialInBuffer == NULL)) return false; complete.target = this; @@ -594,11 +591,11 @@ bool Xbox360Peripheral::QueueSerialRead(void) complete.parameter = serialInBuffer; err = serialInPipe->Read(serialInBuffer, 0, 0, serialInBuffer->getLength(), &complete); if (err == kIOReturnSuccess) - { - return true; - } + { + return true; + } else - { + { IOLog("read - failed to start for chatpad (0x%.8x)\n",err); return false; } @@ -639,31 +636,31 @@ void Xbox360Peripheral::ReleaseAll(void) { LockRequired locker(mainLock); - SerialDisconnect(); - PadDisconnect(); - if (serialTimer != NULL) - { - serialTimer->cancelTimeout(); - getWorkLoop()->removeEventSource(serialTimer); - serialTimer->release(); - serialTimer = NULL; - } - if (serialInPipe != NULL) - { - serialInPipe->Abort(); - serialInPipe->release(); - serialInPipe = NULL; - } - if (serialInBuffer != NULL) - { - serialInBuffer->release(); - serialInBuffer = NULL; - } - if (serialIn != NULL) - { - serialIn->close(this); - serialIn = NULL; - } + SerialDisconnect(); + PadDisconnect(); + if (serialTimer != NULL) + { + serialTimer->cancelTimeout(); + getWorkLoop()->removeEventSource(serialTimer); + serialTimer->release(); + serialTimer = NULL; + } + if (serialInPipe != NULL) + { + serialInPipe->Abort(); + serialInPipe->release(); + serialInPipe = NULL; + } + if (serialInBuffer != NULL) + { + serialInBuffer->release(); + serialInBuffer = NULL; + } + if (serialIn != NULL) + { + serialIn->close(this); + serialIn = NULL; + } if(outPipe!=NULL) { outPipe->Abort(); outPipe->release(); @@ -723,142 +720,75 @@ static inline XBox360_SShort getAbsolute(XBox360_SShort value) return (reverse<0)?~reverse:reverse; } -// Adjusts the report for any settings speciified by the user -void Xbox360Peripheral::fiddleReport(IOBufferMemoryDescriptor *buffer) +void Xbox360Peripheral::normalizeAxis(SInt16& axis, short deadzone) +{ + static const UInt16 max16=32767; + const float current=getAbsolute(axis); + const float maxVal=max16-deadzone; + + if (current>deadzone) { + if (axis<0) { + axis=max16*(current-deadzone)/maxVal; + axis=~axis; + } else { + axis=max16*(current-deadzone)/maxVal; + } + } else { + axis=0; + } +} + +void Xbox360Peripheral::fiddleReport(XBOX360_HAT& left, XBOX360_HAT& right) { - XBOX360_IN_REPORT *report=(XBOX360_IN_REPORT*)buffer->getBytesNoCopy(); - if(invertLeftX) report->left.x=~report->left.x; - if(!invertLeftY) report->left.y=~report->left.y; - if(invertRightX) report->right.x=~report->right.x; - if(!invertRightY) report->right.y=~report->right.y; + // deadOff - Normalize checkbox is checked if true + // relative - Linked checkbox is checked if true + + if(invertLeftX) left.x=~left.x; + if(!invertLeftY) left.y=~left.y; + if(invertRightX) right.x=~right.x; + if(!invertRightY) right.y=~right.y; + if(deadzoneLeft!=0) { if(relativeLeft) { - if((getAbsolute(report->left.x)left.y)left.x=0; - report->left.y=0; + if((getAbsolute(left.x)left.x); - if (valX>deadzoneLeft) { - if (report->left.x<0) { - report->left.x=max16*(valX-deadzoneLeft)/maxVal; - report->left.x=~report->left.x; - } else { - report->left.x=max16*(valX-deadzoneLeft)/maxVal; - } - } else { - report->left.x=0; - } - float valY=getAbsolute(report->left.y); - if (valY>deadzoneLeft) { - if (report->left.y<0) { - report->left.y=max16*(valY-deadzoneLeft)/maxVal; - report->left.y=~report->left.y; - } else { - report->left.y=max16*(valY-deadzoneLeft)/maxVal; - } - } else { - report->left.y=0; - } + normalizeAxis(left.x, deadzoneLeft); + normalizeAxis(left.y, deadzoneLeft); } - } else { - if(getAbsolute(report->left.x)left.x=0; + } else { // Linked checkbox has no check + if(getAbsolute(left.x)left.x<0) { - float valX=getAbsolute(report->left.x); - report->left.x=max16*(valX-deadzoneLeft)/maxVal; - report->left.x=~report->left.x; - } else { - float valX=getAbsolute(report->left.x); - report->left.x=max16*(valX-deadzoneLeft)/maxVal; - } - } - if(getAbsolute(report->left.y)left.y=0; + normalizeAxis(left.x, deadzoneLeft); + + if(getAbsolute(left.y)left.y<0) { - float valY=getAbsolute(report->left.y); - report->left.y=max16*(valY-deadzoneLeft)/maxVal; - report->left.y=~report->left.y; - } else { - float valY=getAbsolute(report->left.y); - report->left.y=max16*(valY-deadzoneLeft)/maxVal; - } - } + normalizeAxis(left.y, deadzoneLeft); } } if(deadzoneRight!=0) { if(relativeRight) { - if((getAbsolute(report->right.x)right.y)right.x=0; - report->right.y=0; + if((getAbsolute(right.x)right.x); - if (valX>deadzoneRight) { - if (report->right.x<0) { - report->right.x=max16*(valX-deadzoneRight)/maxVal; - report->right.x=~report->right.x; - } else { - report->right.x=max16*(valX-deadzoneRight)/maxVal; - } - } else { - report->right.x = 0; - } - float valY=getAbsolute(report->right.y); - if (valY>deadzoneRight) { - if (report->right.y<0) { - report->right.y=max16*(valY-deadzoneRight)/maxVal; - report->right.y=~report->right.y; - } else { - report->right.y=max16*(valY-deadzoneRight)/maxVal; - } - } else { - report->right.y = 0; - } + normalizeAxis(left.x, deadzoneRight); + normalizeAxis(left.y, deadzoneRight); } } else { - if(getAbsolute(report->right.x)right.x=0; + if(getAbsolute(right.x)right.x<0) { - float valX=getAbsolute(report->right.x); - report->right.x=max16*(valX-deadzoneRight)/maxVal; - report->right.x=~report->right.x; - } else { - float valX=getAbsolute(report->right.x); - report->right.x=max16*(valX-deadzoneRight)/maxVal; - } - } - if(getAbsolute(report->right.y)right.y=0; + normalizeAxis(right.x, deadzoneRight); + if(getAbsolute(right.y)right.y<0) { - float valY=getAbsolute(report->right.y); - report->right.y=max16*(valY-deadzoneRight)/maxVal; - report->right.y=~report->right.y; - } else { - float valY=getAbsolute(report->right.y); - report->right.y=max16*(valY-deadzoneRight)/maxVal; - } - } + normalizeAxis(right.y, deadzoneRight); } } } @@ -872,8 +802,8 @@ void Xbox360Peripheral::ReadCompleteInternal(void *target,void *parameter,IORetu void Xbox360Peripheral::SerialReadCompleteInternal(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { - if (target != NULL) - ((Xbox360Peripheral*)target)->SerialReadComplete(parameter, status, bufferSizeRemaining); + if (target != NULL) + ((Xbox360Peripheral*)target)->SerialReadComplete(parameter, status, bufferSizeRemaining); } // This forwards a completed write notification to a member function @@ -925,36 +855,36 @@ void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 buff void Xbox360Peripheral::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { - if (padHandler != NULL) // avoid deadlock with release - { - LockRequired locker(mainLock); - bool reread = !isInactive(); - - switch (status) - { - case kIOReturnOverrun: - IOLog("read (serial) - kIOReturnOverrun, clearing stall\n"); - if (serialInPipe != NULL) - serialInPipe->ClearStall(); - // Fall through - case kIOReturnSuccess: - serialHeard = true; - if (serialInBuffer != NULL) - SerialMessage(serialInBuffer, serialInBuffer->getCapacity() - bufferSizeRemaining); - break; - - case kIOReturnNotResponding: - IOLog("read (serial) - kIOReturnNotResponding\n"); - reread = false; - break; - - default: - reread = false; - break; - } - if (reread) - QueueSerialRead(); - } + if (padHandler != NULL) // avoid deadlock with release + { + LockRequired locker(mainLock); + bool reread = !isInactive(); + + switch (status) + { + case kIOReturnOverrun: + IOLog("read (serial) - kIOReturnOverrun, clearing stall\n"); + if (serialInPipe != NULL) + serialInPipe->ClearStall(); + // Fall through + case kIOReturnSuccess: + serialHeard = true; + if (serialInBuffer != NULL) + SerialMessage(serialInBuffer, serialInBuffer->getCapacity() - bufferSizeRemaining); + break; + + case kIOReturnNotResponding: + IOLog("read (serial) - kIOReturnNotResponding\n"); + reread = false; + break; + + default: + reread = false; + break; + } + if (reread) + QueueSerialRead(); + } } // Handle a completed asynchronous write @@ -968,6 +898,73 @@ void Xbox360Peripheral::WriteComplete(void *parameter,IOReturn status,UInt32 buf } +void Xbox360Peripheral::MakeSettingsChanges() +{ + if (controllerType == XboxOne || controllerType == XboxOneElite) + { + if (pretend360) // Convert to a 360 controller + { + PadDisconnect(); + previousType = controllerType; + controllerType = XboxOnePretend360; + PadConnect(); + } + + for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping + { + + switch (mapping[i]) { + case 0: { mapping[i] = 8; } break; // Move to Up position + case 1: { mapping[i] = 9; } break; // Move to Down position + case 2: { mapping[i] = 10; } break; // Move to Left position + case 3: { mapping[i] = 11; } break; // Move to Right position + case 4: { mapping[i] = 2; } break; // Move to Start position + case 5: { mapping[i] = 3; } break; // Move to Back position + case 6: { mapping[i] = 14; } break; // Move to LB position + case 7: { mapping[i] = 15; } break; // Move to RB position + case 8: { mapping[i] = 12; } break; // Move to LSC position + case 9: { mapping[i] = 13; } break; // Move to RSC position + case 10: { mapping[i] = 0; } break; // Move to Guide position + case 12: { mapping[i] = 4; } break; // Move to A position + case 13: { mapping[i] = 5; } break; // Move to B position + case 14: { mapping[i] = 6; } break; // Move to X position + case 15: { mapping[i] = 7; } break; // Move to Y position + } + } + } + if (controllerType == XboxOnePretend360) + { + if (!pretend360) + { + PadDisconnect(); + controllerType = previousType; + PadConnect(); + } + + for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping + { + switch (mapping[i]) { + case 0: { mapping[i] = 8; } break; // Move to Up position + case 1: { mapping[i] = 9; } break; // Move to Down position + case 2: { mapping[i] = 10; } break; // Move to Left position + case 3: { mapping[i] = 11; } break; // Move to Right position + case 4: { mapping[i] = 2; } break; // Move to Start position + case 5: { mapping[i] = 3; } break; // Move to Back position + case 6: { mapping[i] = 14; } break; // Move to LB position + case 7: { mapping[i] = 15; } break; // Move to RB position + case 8: { mapping[i] = 12; } break; // Move to LSC position + case 9: { mapping[i] = 13; } break; // Move to RSC position + case 10: { mapping[i] = 0; } break; // Move to Guide position + case 12: { mapping[i] = 4; } break; // Move to A position + case 13: { mapping[i] = 5; } break; // Move to B position + case 14: { mapping[i] = 6; } break; // Move to X position + case 15: { mapping[i] = 7; } break; // Move to Y position + } + } + } +} + + // Called by the userspace IORegistryEntrySetCFProperties function IOReturn Xbox360Peripheral::setProperties(OSObject *properties) { @@ -979,77 +976,90 @@ IOReturn Xbox360Peripheral::setProperties(OSObject *properties) dictionary->setObject(OSString::withCString("ControllerType"), OSNumber::withNumber(controllerType, 8)); setProperty(kDriverSettingKey,dictionary); readSettings(); + + MakeSettingsChanges(); + return kIOReturnSuccess; } else return kIOReturnBadArgument; } IOHIDDevice* Xbox360Peripheral::getController(int index) { - switch (index) - { - case 0: - return padHandler; - case 1: - return serialHandler; - default: - return NULL; - } + switch (index) + { + case 0: + return padHandler; + case 1: + return serialHandler; + default: + return NULL; + } } // Main controller support void Xbox360Peripheral::PadConnect(void) { - PadDisconnect(); + PadDisconnect(); if (controllerType == XboxOriginal) { padHandler = new XboxOriginalControllerClass; } else if (controllerType == XboxOne) { - padHandler = new XboxOneControllerClass; + if ((device->GetVendorID() == 1118) && (device->GetProductID() == 739)) + { + controllerType = XboxOneElite; + padHandler = new XboxOneEliteControllerClass; + } + else + padHandler = new XboxOneControllerClass; + } else if (controllerType == XboxOnePretend360) { + padHandler = new XboxOnePretend360Class; + } else if (controllerType == XboxOneElite) { + padHandler = new XboxOneEliteControllerClass; } else { padHandler = new Xbox360ControllerClass; } - if (padHandler != NULL) - { + if (padHandler != NULL) + { const OSString *keys[] = { OSString::withCString(kIOSerialDeviceType), - OSString::withCString("IOCFPlugInTypes"), - OSString::withCString("IOKitDebug"), + OSString::withCString("IOCFPlugInTypes"), + OSString::withCString("IOKitDebug"), }; const OSObject *objects[] = { OSNumber::withNumber((unsigned long long)1, 32), - getProperty("IOCFPlugInTypes"), + getProperty("IOCFPlugInTypes"), OSNumber::withNumber((unsigned long long)65535, 32), }; OSDictionary *dictionary = OSDictionary::withObjects(objects, keys, sizeof(keys) / sizeof(keys[0])); - if (padHandler->init(dictionary)) - { - padHandler->attach(this); - padHandler->start(this); - } - else - { - padHandler->release(); - padHandler = NULL; - } - } + if (padHandler->init(dictionary)) + { + padHandler->attach(this); + padHandler->start(this); + } + else + { + padHandler->release(); + padHandler = NULL; + } + } } void Xbox360Peripheral::PadDisconnect(void) { - if (padHandler != NULL) - { - padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); - padHandler->release(); - padHandler = NULL; - } + if (padHandler != NULL) + { + padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + padHandler->release(); + padHandler = NULL; + } } // Serial peripheral support void Xbox360Peripheral::SerialConnect(void) { - SerialDisconnect(); - serialHandler = new ChatPadKeyboardClass; + SerialDisconnect(); + serialHandler = new ChatPadKeyboardClass; if (serialHandler != NULL) { const OSString *keys[] = { @@ -1062,7 +1072,7 @@ void Xbox360Peripheral::SerialConnect(void) if (serialHandler->init(dictionary)) { serialHandler->attach(this); - serialHandler->start(this); + serialHandler->start(this); } else { @@ -1074,21 +1084,21 @@ void Xbox360Peripheral::SerialConnect(void) void Xbox360Peripheral::SerialDisconnect(void) { - if (serialHandler != NULL) - { + if (serialHandler != NULL) + { // Hope it's okay to terminate twice... - serialHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); - serialHandler->release(); - serialHandler = NULL; - } + serialHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + serialHandler->release(); + serialHandler = NULL; + } } void Xbox360Peripheral::SerialMessage(IOBufferMemoryDescriptor *data, size_t length) { - if (serialHandler != NULL) - { - char *buffer = (char*)data->getBytesNoCopy(); - if ((length == 5) && (buffer[0] == 0x00)) - serialHandler->handleReport(data, kIOHIDReportTypeInput); - } + if (serialHandler != NULL) + { + char *buffer = (char*)data->getBytesNoCopy(); + if ((length == 5) && (buffer[0] == 0x00)) + serialHandler->handleReport(data, kIOHIDReportTypeInput); + } } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 86b07f2e..f1d86566 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,31 +1,32 @@ /* - MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2013 Colin Munro - - _60Controller.h - declaration of the driver main class - - This file is part of Xbox360Controller. - - Xbox360Controller is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - Xbox360Controller is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Foobar; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2013 Colin Munro + + _60Controller.h - declaration of the driver main class + + This file is part of Xbox360Controller. + + Xbox360Controller is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + Xbox360Controller is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ #ifndef __XBOX360CONTROLLER_H__ #define __XBOX360CONTROLLER_H__ #include #include #include +#include "ControlStruct.h" class Xbox360ControllerClass; class ChatPadKeyboardClass; @@ -33,72 +34,77 @@ class ChatPadKeyboardClass; class Xbox360Peripheral : public IOService { OSDeclareDefaultStructors(Xbox360Peripheral) - + private: void ReleaseAll(void); bool QueueRead(void); - bool QueueSerialRead(void); - - static void SerialReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); + bool QueueSerialRead(void); + + static void SerialReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); static void ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); static void WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); - void SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining); - + void SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining); + void readSettings(void); - - static void ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender); - void ChatPadTimerAction(IOTimerEventSource *sender); - void SendToggle(void); - void SendSpecial(UInt16 value); - void SendInit(UInt16 value, UInt16 index); + + static void ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender); + void ChatPadTimerAction(IOTimerEventSource *sender); + void SendToggle(void); + void SendSpecial(UInt16 value); + void SendInit(UInt16 value, UInt16 index); bool SendSwitch(bool sendOut); - - void PadConnect(void); - void PadDisconnect(void); - - void SerialConnect(void); - void SerialDisconnect(void); - void SerialMessage(IOBufferMemoryDescriptor *data, size_t length); - + + void PadConnect(void); + void PadDisconnect(void); + + void SerialConnect(void); + void SerialDisconnect(void); + void SerialMessage(IOBufferMemoryDescriptor *data, size_t length); + + void MakeSettingsChanges(void); + protected: - typedef enum TIMER_STATE { - tsToggle, - tsReset1, - tsReset2, - tsMiniToggle, - tsSet1, - tsSet2, - tsSet3, - } TIMER_STATE; + typedef enum TIMER_STATE { + tsToggle, + tsReset1, + tsReset2, + tsMiniToggle, + tsSet1, + tsSet2, + tsSet3, + } TIMER_STATE; typedef enum CONTROLLER_TYPE { Xbox360 = 0, XboxOriginal = 1, - XboxOne = 2 + XboxOne = 2, + XboxOnePretend360 = 3, + XboxOneElite = 4 } CONTROLLER_TYPE; - + IOUSBDevice *device; IOLock *mainLock; - - // Joypad + + // Joypad IOUSBInterface *interface; IOUSBPipe *inPipe,*outPipe; IOBufferMemoryDescriptor *inBuffer; - - // Keyboard - IOUSBInterface *serialIn; - IOUSBPipe *serialInPipe; + + // Keyboard + IOUSBInterface *serialIn; + IOUSBPipe *serialInPipe; IOBufferMemoryDescriptor *serialInBuffer; - IOTimerEventSource *serialTimer; - bool serialToggle, serialHeard, serialActive; - int serialResetCount; - TIMER_STATE serialTimerState; - ChatPadKeyboardClass *serialHandler; - Xbox360ControllerClass *padHandler; + IOTimerEventSource *serialTimer; + bool serialToggle, serialHeard, serialActive; + int serialResetCount; + TIMER_STATE serialTimerState; + ChatPadKeyboardClass *serialHandler; + Xbox360ControllerClass *padHandler; UInt8 chatpadInit[2]; CONTROLLER_TYPE controllerType; - + CONTROLLER_TYPE previousType; + // Settings bool invertLeftX,invertLeftY; bool invertRightX,invertRightY; @@ -106,36 +112,42 @@ class Xbox360Peripheral : public IOService bool relativeLeft,relativeRight; bool deadOffLeft, deadOffRight; + void normalizeAxis(SInt16& axis, short deadzone); + public: // Controller specific UInt8 rumbleType; - + bool swapSticks; UInt8 mapping[15]; + bool pretend360; // Change VID and PID to MS 360 Controller // this is from the IORegistryEntry - no provider yet virtual bool init(OSDictionary *propTable); virtual void free(void); - - bool start(IOService *provider); - void stop(IOService *provider); - + + bool start(IOService *provider); + void stop(IOService *provider); + // IOKit methods. These methods are defines in - + virtual IOReturn setProperties(OSObject *properties); - + virtual IOReturn message(UInt32 type, IOService *provider, void *argument); - + virtual bool didTerminate(IOService *provider, IOOptionBits options, bool *defer); - // Hooks + // Hooks virtual void ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); virtual void WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); - + bool QueueWrite(const void *bytes,UInt32 length); - virtual void fiddleReport(IOBufferMemoryDescriptor *buffer); - - IOHIDDevice* getController(int index); + void fiddleReport(XBOX360_HAT& left, XBOX360_HAT& right); + // virtual void fiddleReport(IOBufferMemoryDescriptor *buffer); + + IOHIDDevice* getController(int index); + + }; #endif /* __XBOX360CONTROLLER_H__ */ diff --git a/360Controller/xboxOnehid.h b/360Controller/xboxOnehid.h new file mode 100644 index 00000000..ac1a3557 --- /dev/null +++ b/360Controller/xboxOnehid.h @@ -0,0 +1,132 @@ +/* + Copyright (c) 2014-2015 Drew Mills + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +// Report that makes the device appear as an Xbox One controller +unsigned char ReportDescriptor[] = { + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x05, // USAGE (Game Pad) + 0xa1, 0x01, // COLLECTION (Application) + 0xa1, 0x00, // COLLECTION (Physical) + 0x85, 0x20, // REPORT_ID (32) + + // Report id and size + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x00, // USAGE (Undefined) + 0x95, 0x02, // REPORT_COUNT (2) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + // Sync + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x0c, // USAGE (Button 12) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // Dummy (always zero) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + // Menu button + 0x09, 0x09, // USAGE (Button 9) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // View button + 0x09, 0x0a, // USAGE (Button 10) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // A, B, X & Y buttons + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // D-Pad up, down, left & right + 0x19, 0x0c, // USAGE_MINIMUM (Button 12) + 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // Left & right bumpers + 0x19, 0x05, // USAGE_MINIMUM (Button 5) + 0x29, 0x06, // USAGE_MAXIMUM (Button 6) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // Left & right stick buttons + 0x19, 0x07, // USAGE_MINIMUM (Button 7) + 0x29, 0x08, // USAGE_MAXIMUM (Button 8) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // Left & right triggers + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x32, // USAGE (Z) + 0x09, 0x35, // USAGE (Rz) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) + 0x75, 0x10, // REPORT_SIZE (16) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + // Left & right sticks (H & -V) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x09, 0x33, // USAGE (Rx) + 0x09, 0x34, // USAGE (Ry) + 0x16, 0x00, 0x80, // LOGICAL_MINIMUM (-32768) + 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767) + 0x75, 0x10, // REPORT_SIZE (16) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + + 0xa1, 0x00, // COLLECTION (Physical) + 0x85, 0x07, // REPORT_ID (7) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x00, // USAGE (Undefined) + 0x95, 0x02, // REPORT_COUNT (2) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + // Xbox button + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x0b, // USAGE (Button 11) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x00, // USAGE (Undefined) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION +}; + +// Old trigger minimum and maximum. +// Holding onto it so it is easy to replace if we need it. +// Goes on lines 84 and 85 at time of writing. +// 0x15, 0x00, // LOGICAL_MINIMUM (0) +// 0x26, 0xff, 0x03, // LOGICAL_MAXIMUM (1023) \ No newline at end of file diff --git a/Feedback360/Feedback360.cpp b/Feedback360/Feedback360.cpp index 7c2f3069..d4553830 100644 --- a/Feedback360/Feedback360.cpp +++ b/Feedback360/Feedback360.cpp @@ -1,23 +1,23 @@ /* - MICE Xbox 360 Controller driver for Mac OS X - Force Feedback module - Copyright (C) 2013 David Ryskalczyk - based on xi, Copyright (C) 2011 Masahiko Morii - - Feedback360.cpp - Main code for the FF plugin - + MICE Xbox 360 Controller driver for Mac OS X + Force Feedback module + Copyright (C) 2013 David Ryskalczyk + based on xi, Copyright (C) 2011 Masahiko Morii + + Feedback360.cpp - Main code for the FF plugin + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Xbox360Controller; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -33,14 +33,19 @@ using std::min; double CurrentTimeUsingMach() { - mach_timebase_info_data_t info = {0}; - if (mach_timebase_info(&info) != KERN_SUCCESS) { - //FIXME: why would this fail/set to fail more gracefully. - return -1.0; - } - + static mach_timebase_info_data_t info = {0}; + if (!info.denom) + { + if (mach_timebase_info(&info) != KERN_SUCCESS) + { + //Generally it can't fail here. Look at XNU sources //FIXME + info.denom = 0; + return -1.0; + } + } + uint64_t start = mach_absolute_time(); - + uint64_t nanos = start * info.numer / info.denom; return (double)nanos / NSEC_PER_SEC; } @@ -86,13 +91,13 @@ Paused(false), PausedTime(0), LastTime(0), Gain(10000), PrvLeftLevel(0), PrvRightLevel(0), Actuator(true), Manual(false) { EffectList = Feedback360EffectVector(); - + iIOCFPlugInInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOCFPlugInInterface; iIOCFPlugInInterface.obj = this; - + iIOForceFeedbackDeviceInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOForceFeedbackDeviceInterface; iIOForceFeedbackDeviceInterface.obj = this; - + FactoryID = kFeedback360Uuid; CFRetain(FactoryID); CFPlugInAddInstanceForFactory(FactoryID); @@ -107,7 +112,7 @@ Feedback360::~Feedback360() HRESULT Feedback360::QueryInterface(REFIID iid, LPVOID *ppv) { CFUUIDRef interface = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); - + if(CFEqual(interface, kIOForceFeedbackDeviceInterfaceID)) *ppv = &this->iIOForceFeedbackDeviceInterface; // IUnknown || IOCFPlugInInterface @@ -115,7 +120,7 @@ HRESULT Feedback360::QueryInterface(REFIID iid, LPVOID *ppv) *ppv = &this->iIOCFPlugInInterface; else *ppv = NULL; - + // Done CFRelease(interface); if ((*ppv) == NULL) return E_NOINTERFACE; @@ -176,10 +181,10 @@ HRESULT Feedback360::SetProperty(FFProperty property, void *value) if(property != FFPROP_FFGAIN) { return FFERR_UNSUPPORTED; } - + UInt32 NewGain = *((UInt32*)value); __block HRESULT Result = FF_OK; - + dispatch_sync(Queue, ^{ if (1 <= NewGain && NewGain <= 10000) { @@ -189,7 +194,7 @@ HRESULT Feedback360::SetProperty(FFProperty property, void *value) Result = FF_TRUNCATED; } }); - + return Result; } @@ -232,12 +237,12 @@ HRESULT Feedback360::StopEffect(UInt32 EffectHandle) HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *EffectHandle, FFEFFECT *DiEffect, FFEffectParameterFlag Flags) { __block HRESULT Result = FF_OK; - + if (Flags & FFEP_NODOWNLOAD) { return FF_OK; } - + dispatch_sync(Queue, ^{ Feedback360Effect *Effect = NULL; if (*EffectHandle == 0) { @@ -252,51 +257,51 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef } } } - + if (Effect == NULL || Result == -1) { Result = FFERR_INTERNAL; } else { Effect->Type = EffectType; Effect->DiEffect.dwFlags = DiEffect->dwFlags; - + if( Flags & FFEP_DURATION ) { Effect->DiEffect.dwDuration = DiEffect->dwDuration; } - + if( Flags & FFEP_SAMPLEPERIOD ) { Effect->DiEffect.dwSamplePeriod = DiEffect->dwSamplePeriod; } - + if( Flags & FFEP_GAIN ) { Effect->DiEffect.dwGain = DiEffect->dwGain; } - + if( Flags & FFEP_TRIGGERBUTTON ) { Effect->DiEffect.dwTriggerButton = DiEffect->dwTriggerButton; } - + if( Flags & FFEP_TRIGGERREPEATINTERVAL ) { Effect->DiEffect.dwTriggerRepeatInterval = DiEffect->dwTriggerRepeatInterval; } - + if( Flags & FFEP_AXES ) { Effect->DiEffect.cAxes = DiEffect->cAxes; Effect->DiEffect.rgdwAxes = NULL; } - + if( Flags & FFEP_DIRECTION ) { Effect->DiEffect.cAxes = DiEffect->cAxes; Effect->DiEffect.rglDirection = NULL; } - + if( ( Flags & FFEP_ENVELOPE ) && DiEffect->lpEnvelope != NULL ) { memcpy( &Effect->DiEnvelope, DiEffect->lpEnvelope, sizeof( FFENVELOPE ) ); @@ -307,9 +312,9 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef } Effect->DiEffect.lpEnvelope = &Effect->DiEnvelope; } - + Effect->DiEffect.cbTypeSpecificParams = DiEffect->cbTypeSpecificParams; - + if( Flags & FFEP_TYPESPECIFICPARAMS ) { if(CFEqual(EffectType, kFFEffectType_CustomForce_ID)) { @@ -319,7 +324,7 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef ,DiEffect->cbTypeSpecificParams ); Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiCustomForce; } - + else if(CFEqual(EffectType, kFFEffectType_ConstantForce_ID)) { memcpy( &Effect->DiConstantForce @@ -342,19 +347,19 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiRampforce; } } - + if( Flags & FFEP_STARTDELAY ) { Effect->DiEffect.dwStartDelay = DiEffect->dwStartDelay; } - + if( Flags & FFEP_START ) { Effect->Status = FFEGES_PLAYING; Effect->PlayCount = 1; Effect->StartTime = CurrentTimeUsingMach(); } - + if( Flags & FFEP_NORESTART ) { ; @@ -371,7 +376,7 @@ HRESULT Feedback360::GetForceFeedbackState(ForceFeedbackDeviceState *DeviceState { return FFERR_INVALIDPARAM; } - + dispatch_sync(Queue, ^{ DeviceState->dwState = NULL; if( EffectList.size() == 0 ) @@ -395,10 +400,10 @@ HRESULT Feedback360::GetForceFeedbackState(ForceFeedbackDeviceState *DeviceState DeviceState->dwState |= FFGFFS_POWERON; DeviceState->dwState |= FFGFFS_SAFETYSWITCHOFF; DeviceState->dwState |= FFGFFS_USERFFSWITCHON; - + DeviceState->dwLoad = 0; }); - + return FF_OK; } @@ -434,7 +439,7 @@ HRESULT Feedback360::GetForceFeedbackCapabilities(FFCAPABILITIES *capabilities) HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) { __block HRESULT Result = FF_OK; - + dispatch_sync(Queue, ^{ switch (state) { case FFSFFC_RESET: @@ -442,7 +447,7 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) Stopped = true; Paused = false; break; - + case FFSFFC_STOPALL: for (Feedback360EffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) { @@ -451,12 +456,12 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) Stopped = true; Paused = false; break; - + case FFSFFC_PAUSE: Paused = true; PausedTime = CurrentTimeUsingMach(); break; - + case FFSFFC_CONTINUE: for (Feedback360EffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) { @@ -464,15 +469,15 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) } Paused = false; break; - + case FFSFFC_SETACTUATORSON: Actuator = true; break; - + case FFSFFC_SETACTUATORSOFF: Actuator = false; break; - + default: Result = FFERR_INVALIDPARAM; break; @@ -515,7 +520,7 @@ HRESULT Feedback360::InitializeTerminate(NumVersion APIversion, io_object_t hidD SetForce(0, 0); Device_Finalise(&this->device); }); - + } return FF_OK; } @@ -597,27 +602,27 @@ void Feedback360::SetForce(LONG LeftLevel, LONG RightLevel) void Feedback360::EffectProc( void *params ) { Feedback360 *cThis = (Feedback360 *)params; - + LONG LeftLevel = 0; LONG RightLevel = 0; LONG Gain = cThis->Gain; LONG CalcResult = 0; - + if (cThis->Actuator == true) { for (Feedback360EffectIterator effectIterator = cThis->EffectList.begin(); effectIterator != cThis->EffectList.end(); ++effectIterator) { - if((CurrentTimeUsingMach() - cThis->LastTime*1000*1000) >= effectIterator->DiEffect.dwSamplePeriod) { + if(((CurrentTimeUsingMach() - cThis->LastTime)*1000*1000) >= effectIterator->DiEffect.dwSamplePeriod) { CalcResult = effectIterator->Calc(&LeftLevel, &RightLevel); } } } - + if ((cThis->PrvLeftLevel != LeftLevel || cThis->PrvRightLevel != RightLevel) && (CalcResult != -1)) { //fprintf(stderr, "PL: %d, PR: %d; L: %d, R: %d; \n", cThis->PrvLeftLevel, cThis->PrvRightLevel, LeftLevel, RightLevel); cThis->SetForce((unsigned char)min(SCALE_MAX, LeftLevel * Gain / 10000),(unsigned char)min(SCALE_MAX, RightLevel * Gain / 10000 )); - + cThis->PrvLeftLevel = LeftLevel; cThis->PrvRightLevel = RightLevel; } diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index fc31d300..b78ebce9 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -40,7 +40,9 @@ typedef NS_ENUM(NSUInteger, ControllerType) { Xbox360Controller = 0, XboxOriginalController = 1, - XboxOneController = 2 + XboxOneController = 2, + XboxOnePretend360Controller = 3, + XboxOneEliteController = 4 } controllerType; @interface Pref360ControlPref : NSPreferencePane diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 420ee220..791ae8ed 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -88,7 +88,7 @@ -(void)awakeFromNib { [_aboutPopover setAppearance:NSPopoverAppearanceHUD]; [_rumbleOptions removeAllItems]; [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; - if (controllerType == XboxOneController) + if (controllerType == XboxOneController || controllerType == XboxOneEliteController || controllerType == XboxOnePretend360Controller) [_rumbleOptions addItemsWithTitles:@[@"Triggers Only", @"Both"]]; } From 51b5b38d0bf7b60780b86ca008f748b6f9735b28 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 24 Dec 2015 22:32:08 -0600 Subject: [PATCH 004/216] Add various new devices --- 360Controller/Info.plist | 4234 +++++++++++++++++++------------------- 1 file changed, 2147 insertions(+), 2087 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 082c4e4f..82edb396 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1,2091 +1,2151 @@ - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.mice.driver.Xbox360Controller - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - KEXT - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - IOKitPersonalities - - AfterglowGamepad1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1043 - idVendor - 3695 - - ArcadeGameStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18264 - idVendor - 1848 - - BETOPGAMEFORWINDOWS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21766 - idVendor - 4544 - - BatarangWired - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16144 - idVendor - 5604 - - BigBenController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1537 - idVendor - 5227 - - ChatPadKeyboardEvents - - CFBundleIdentifier - com.apple.iokit.IOHIDFamily - IOClass - IOHIDEventDriver - IOProviderClass - IOHIDInterface - VendorID - 100 - - Chinese-madeXboxController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 65535 - idVendor - 65535 - - Controller - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 654 - idVendor - 1118 - - DOA4Stick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 10 - idVendor - 3853 - - GEMPADEX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21773 - idVendor - 9414 - - GameStopGamepad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1025 - idVendor - 3695 - - GameStopGamepad4 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 769 - idVendor - 3695 - - GamestopGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 770 - idVendor - 4779 - - GamestopGamepad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63745 - idVendor - 7085 - - GenericController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62209 - idVendor - 1133 - - GuitarHero - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18248 - idVendor - 5168 - - HoriFSVX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62723 - idVendor - 7085 - - HoriFightingStickEX2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 10 - idVendor - 3853 - - HoriFightingStickEX2B - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62725 - idVendor - 7085 - - HoriFightingStickEX2C - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 13 - idVendor - 3853 - - HoriPadEX2Turbo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62721 - idVendor - 7085 - - HoriPadEXTurbo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 12 - idVendor - 3853 - - HoriPadOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 103 - idVendor - 3853 - - HoriRAPHayabusaXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 99 - idVendor - 3853 - - HoriRAPVXSA - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62722 - idVendor - 7085 - - HoriUnnamed - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21760 - idVendor - 7085 - - HoriUnnamedBlueSolo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64001 - idVendor - 7085 - - IonDrumRocker - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 304 - idVendor - 7085 - - JoytekXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 48879 - idVendor - 5678 - - KonamiDancePad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 4 - idVendor - 4779 - - LogitechF310 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49693 - idVendor - 1133 - - LogitechF510 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49694 - idVendor - 1133 - - LogitechF710 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 49695 - idVendor - 1133 - - MLGGamePadforXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61475 - idVendor - 7085 - - MVC2TEStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61497 - idVendor - 7085 - - MVC2TEStick2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 46904 - idVendor - 1848 - - MadCatzBrawlStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61465 - idVendor - 7085 - - MadCatzFPSPro - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61479 - idVendor - 7085 - - MadCatzFightPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61486 - idVendor - 7085 - - MadCatzFightStickNeo - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61498 - idVendor - 7085 - - MadCatzFightStickSoulCaliber - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61503 - idVendor - 7085 - - MadCatzFightStickTE2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61568 - idVendor - 7085 - - MadCatzGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18198 - idVendor - 1848 - - MadCatzGamepad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63746 - idVendor - 7085 - - MadCatzGamepad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61642 - idVendor - 7085 - - MadCatzMicroConGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18230 - idVendor - 1848 - - MadCatzMicroGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18230 - idVendor - 1848 - - MadCatzPad3 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61462 - idVendor - 7085 - - MadCatzPortableDrum - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 39025 - idVendor - 1848 - - MadCatzProGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18214 - idVendor - 1848 - - MicrosoftCorp.XboxControllerS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 649 - idVendor - 1118 - - MicrosoftCorp.XboxControllerSHub - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 648 - idVendor - 1118 - - MicrosoftX-Boxpad(Japan) - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 645 - idVendor - 1118 - - MicrosoftX-Boxpadv1(US) - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 514 - idVendor - 1118 - - MicrosoftXboxControllerS - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 647 - idVendor - 1118 - - MicrosoftXboxOneController2013 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 721 - idVendor - 1118 - - MicrosoftXboxOneController2015 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 733 - idVendor - 1118 - - MicrosoftXboxOneControllerElite - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 739 - idVendor - 1118 - - PDPAfterglow - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63744 - idVendor - 7085 - - PDPAfterglowAX1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 275 - idVendor - 3695 - - PDPAfterglowV2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 531 - idVendor - 3695 - - PDPMarvelXboxOneController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 327 - idVendor - 3695 - - PDPTron - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63747 - idVendor - 7085 - - PDPVersusPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63748 - idVendor - 7085 - - PowerAAirflow - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16138 - idVendor - 5604 - - PowerAMiniProEXGreen - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 16128 - idVendor - 5604 - - PowerAMiniProEXGreen2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21274 - idVendor - 9414 - - PowerAMiniProEXWhite - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21248 - idVendor - 9414 - - PowerAMiniXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21530 - idVendor - 9414 - - PowerASpectraIlluminatedXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21546 - idVendor - 9414 - - QanBaJoystickPlus - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 48879 - idVendor - 1848 - - RAPEXSE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 22 - idVendor - 3853 - - REALARCADEPROEX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62724 - idVendor - 7085 - - RazerOnza - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64769 - idVendor - 7085 - - RazerOnza2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64769 - idVendor - 5769 - - RazerOnzaTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64768 - idVendor - 7085 - - RazerOnzaTE2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64768 - idVendor - 5769 - - RazerSabertoothElite - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 65024 - idVendor - 5769 - - RazerSabertoothElite2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 23812 - idVendor - 9414 - - RazerWildcat - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 2563 - idVendor - 5426 - - RedOctaneController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63489 - idVendor - 5168 - - RedOctaneControllerAdapter - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 672 - idVendor - 5168 - - RockBandDrums - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 3 - idVendor - 7085 - - RockBandGuitar - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 2 - idVendor - 7085 - - RockCandy - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 287 - idVendor - 3695 - - RockCandyGamepadForXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 543 - idVendor - 3695 - - RockCandyGamepadforXboxOne2013 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 326 - idVendor - 3695 - - RockCandyGamepadforXboxOne2015 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 582 - idVendor - 3695 - - SC4VF5Stick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 13 - idVendor - 3853 - - SF4FightPad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61480 - idVendor - 7085 - - SF4FightPad2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18216 - idVendor - 1848 - - SF4StickSE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18200 - idVendor - 1848 - - SF4StickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 18232 - idVendor - 1848 - - SF4StickTER2 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61496 - idVendor - 7085 - - SSF4StickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63288 - idVendor - 1848 - - SSFIVTEChunLi - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61501 - idVendor - 7085 - - SaitekCB360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 51970 - idVendor - 1848 - - StrikeController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1 - idVendor - 5769 - - TSZPelican - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 513 - idVendor - 3695 - - ThrustMasterGPXGamepad - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 45862 - idVendor - 1103 - - ThrustmasterGPXLightback - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 23298 - idVendor - 9414 - - XB360MortalKombatFightStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63750 - idVendor - 7085 - - Xbox360ProEXController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 21258 - idVendor - 9414 - - - NSHumanReadableCopyright - Copyright © 2013 MICE Software. All rights reserved. - OSBundleLibraries - - com.apple.iokit.IOHIDFamily - 1.2 - com.apple.iokit.IOUSBFamily - 1.8 - com.apple.kpi.iokit - 8.0.0 - com.apple.kpi.libkern - 8.0.0 - com.apple.kpi.mach - 8.0.0 - - + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.mice.driver.Xbox360Controller + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + IOKitPersonalities + + AfterglowGamepad1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1043 + idVendor + 3695 + + ArcadeGameStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18264 + idVendor + 1848 + + BETOPGAMEFORWINDOWS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21766 + idVendor + 4544 + + BatarangWired + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16144 + idVendor + 5604 + + BigBenController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1537 + idVendor + 5227 + + ChatPadKeyboardEvents + + CFBundleIdentifier + com.apple.iokit.IOHIDFamily + IOClass + IOHIDEventDriver + IOProviderClass + IOHIDInterface + VendorID + 100 + + Chinese-madeXboxController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 65535 + idVendor + 65535 + + Controller + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 654 + idVendor + 1118 + + DOA4Stick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10 + idVendor + 3853 + + GEMPADEX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21773 + idVendor + 9414 + + GameStopGamepad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1025 + idVendor + 3695 + + GameStopGamepad4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 769 + idVendor + 3695 + + GamestopGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 770 + idVendor + 4779 + + GamestopGamepad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63745 + idVendor + 7085 + + GenericController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62209 + idVendor + 1133 + + GuitarHero + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18248 + idVendor + 5168 + + HoriEX2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 13 + idVendor + 3853 + + HoriFSVX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62723 + idVendor + 7085 + + HoriFightingStickEX2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10 + idVendor + 3853 + + HoriFightingStickEX2B + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62725 + idVendor + 7085 + + HoriFightingStickEX2C + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 13 + idVendor + 3853 + + HoriPadEX2Turbo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62721 + idVendor + 7085 + + HoriPadEXTurbo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 12 + idVendor + 3853 + + HoriPadOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 103 + idVendor + 3853 + + HoriRAPHayabusaXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 99 + idVendor + 3853 + + HoriRAPVXSA + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62722 + idVendor + 7085 + + HoriUnnamed + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21760 + idVendor + 7085 + + HoriUnnamedBlueSolo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64001 + idVendor + 7085 + + IonDrumRocker + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 304 + idVendor + 7085 + + JoytekXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 48879 + idVendor + 5678 + + KonamiDancePad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 4 + idVendor + 4779 + + LogitechChillStream + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49730 + idVendor + 1133 + + LogitechF310 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49693 + idVendor + 1133 + + LogitechF510 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49694 + idVendor + 1133 + + LogitechF710 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49695 + idVendor + 1133 + + MLGGamePadforXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61475 + idVendor + 7085 + + MVC2TEStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61497 + idVendor + 7085 + + MVC2TEStick2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46904 + idVendor + 1848 + + MadCatzBrawlStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61465 + idVendor + 7085 + + MadCatzFPSPro + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61479 + idVendor + 7085 + + MadCatzFightPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61486 + idVendor + 7085 + + MadCatzFightStickNeo + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61498 + idVendor + 7085 + + MadCatzFightStickSoulCaliber + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61503 + idVendor + 7085 + + MadCatzFightStickTE2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61568 + idVendor + 7085 + + MadCatzGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18198 + idVendor + 1848 + + MadCatzGamepad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63746 + idVendor + 7085 + + MadCatzGamepad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61642 + idVendor + 7085 + + MadCatzMicroConGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18230 + idVendor + 1848 + + MadCatzMicroGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18230 + idVendor + 1848 + + MadCatzPad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61462 + idVendor + 7085 + + MadCatzPortableDrum + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 39025 + idVendor + 1848 + + MadCatzProGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18214 + idVendor + 1848 + + MicrosoftCorp.XboxControllerS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 649 + idVendor + 1118 + + MicrosoftCorp.XboxControllerSHub + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 648 + idVendor + 1118 + + MicrosoftX-Boxpad(Japan) + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 645 + idVendor + 1118 + + MicrosoftX-Boxpadv1(US) + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 514 + idVendor + 1118 + + MicrosoftXboxControllerS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 647 + idVendor + 1118 + + MicrosoftXboxOneController2013 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 721 + idVendor + 1118 + + MicrosoftXboxOneController2015 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 733 + idVendor + 1118 + + MicrosoftXboxOneControllerElite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 739 + idVendor + 1118 + + PDPAfterglow + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63744 + idVendor + 7085 + + PDPAfterglowAX1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 275 + idVendor + 3695 + + PDPAfterglowV2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 531 + idVendor + 3695 + + PDPMarvelXboxOneController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 327 + idVendor + 3695 + + PDPTron + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63747 + idVendor + 7085 + + PDPVersusPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63748 + idVendor + 7085 + + PowerAAirflow + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16138 + idVendor + 5604 + + PowerAMiniProEXGreen + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 16128 + idVendor + 5604 + + PowerAMiniProEXGreen2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21274 + idVendor + 9414 + + PowerAMiniProEXWhite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21248 + idVendor + 9414 + + PowerAMiniXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21530 + idVendor + 9414 + + PowerASpectraIlluminatedXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21546 + idVendor + 9414 + + QanBaJoystickPlus + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 48879 + idVendor + 1848 + + RAPEXSE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22 + idVendor + 3853 + + REALARCADEPROEX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62724 + idVendor + 7085 + + RazerOnza + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64769 + idVendor + 7085 + + RazerOnza2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64769 + idVendor + 5769 + + RazerOnzaTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64768 + idVendor + 7085 + + RazerOnzaTE2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64768 + idVendor + 5769 + + RazerSabertoothElite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 65024 + idVendor + 5769 + + RazerSabertoothElite2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23812 + idVendor + 9414 + + RazerWildcat + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2563 + idVendor + 5426 + + RedOctaneController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63489 + idVendor + 5168 + + RedOctaneControllerAdapter + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 672 + idVendor + 5168 + + RockBandDrums + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 3 + idVendor + 7085 + + RockBandGuitar + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2 + idVendor + 7085 + + RockCandy + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 287 + idVendor + 3695 + + RockCandyGamepadForXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 543 + idVendor + 3695 + + RockCandyGamepadforXboxOne2013 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 326 + idVendor + 3695 + + RockCandyGamepadforXboxOne2015 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 582 + idVendor + 3695 + + SC4VF5Stick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 13 + idVendor + 3853 + + SF4FightPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61480 + idVendor + 7085 + + SF4FightPad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18216 + idVendor + 1848 + + SF4StickSE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18200 + idVendor + 1848 + + SF4StickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18232 + idVendor + 1848 + + SF4StickTER2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61496 + idVendor + 7085 + + SSF4StickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63288 + idVendor + 1848 + + SSFIVTEChunLi + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61501 + idVendor + 7085 + + SaitekCB360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51970 + idVendor + 1848 + + StrikeController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1 + idVendor + 5769 + + TSZPelican + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 513 + idVendor + 3695 + + ThrustMasterFerrari458 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23299 + idVendor + 9414 + + ThrustMasterGPXGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 45862 + idVendor + 1103 + + ThrustmasterGPXLightback + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23298 + idVendor + 9414 + + XB360MortalKombatFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63750 + idVendor + 7085 + + Xbox360ProEXController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21258 + idVendor + 9414 + + + NSHumanReadableCopyright + Copyright © 2013 MICE Software. All rights reserved. + OSBundleLibraries + + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.iokit.IOUSBFamily + 1.8 + com.apple.kpi.iokit + 8.0.0 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + + From d4045225fc1f2b533b50af9849835598685b1d60 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 28 Dec 2015 22:47:09 -0600 Subject: [PATCH 005/216] Remove Elite Remap --- 360Controller/Controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 1e69b5d3..25a58084 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -808,7 +808,7 @@ IOReturn XboxOneEliteControllerClass::handleReport(IOMemoryDescriptor * descript XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_ELITE_IN_REPORT)-4)) { GetOwner(this)->fiddleReport(report->left, report->right); - reorderButtons(&report->buttons, GetOwner(this)->mapping); +// reorderButtons(&report->buttons, GetOwner(this)->mapping); fixTriggers(report); if (GetOwner(this)->swapSticks) remapAxes(report); From 23d4e3989c5c2bbb65a8401fd69c8b9023e7b4c2 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 30 Dec 2015 22:41:05 -0600 Subject: [PATCH 006/216] Add Pretend360 Hooks --- Pref360Control/Pref360ControlPref.m | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 791ae8ed..2637b35e 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -673,6 +673,11 @@ - (void)startDevice if(CFDictionaryGetValueIfPresent(dict,CFSTR("SwapSticks"),(void*)&boolValue)) { [_swapSticks setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; } else NSLog(@"No value for SwapSticks\n"); + + // TODO(Drew): Add connection to UI +// if(CFDictionaryGetValueIfPresent(dict,CFSTR("Pretend360"),(void*)&boolValue)) { +// [_pretend360 setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; +// } else NSLog(@"No value for Pretend360"); } else NSLog(@"No settings found\n"); } // Enable GUI components @@ -928,7 +933,8 @@ - (IBAction)changeSetting:(id)sender @"BindingB": @((UInt8)([MyWhole360ControllerMapper mapping][12])), @"BindingX": @((UInt8)([MyWhole360ControllerMapper mapping][13])), @"BindingY": @((UInt8)([MyWhole360ControllerMapper mapping][14])), - @"SwapSticks": @((BOOL)([_swapSticks state]==NSOnState))}; + @"SwapSticks": @((BOOL)([_swapSticks state]==NSOnState)), + @"Pretend360": @((BOOL)(NO))}; // TODO(Drew): Add connection to UI // Set property IORegistryEntrySetCFProperties(registryEntry, (__bridge CFTypeRef)(dict)); From 5d771d12c401d30c5ca672a4f5afa5100314cec4 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 1 Jan 2016 12:02:40 -0600 Subject: [PATCH 007/216] Remove sync from Xone --- 360Controller/xboxOnehid.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/360Controller/xboxOnehid.h b/360Controller/xboxOnehid.h index ac1a3557..779cb581 100644 --- a/360Controller/xboxOnehid.h +++ b/360Controller/xboxOnehid.h @@ -31,16 +31,18 @@ unsigned char ReportDescriptor[] = { 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x95, 0x01, // REPORT_COUNT (1) + 0x95, 0x02, // REPORT_COUNT (2) 0x81, 0x03, // INPUT (Cnst,Var,Abs) // Sync - 0x05, 0x09, // USAGE_PAGE (Button) - 0x09, 0x0c, // USAGE (Button 12) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x75, 0x01, // REPORT_SIZE (1) - 0x81, 0x02, // INPUT (Data,Var,Abs) + // To reactivate sync button funcationality, uncomment below + //and change line 34 to: 0x95, 0x01, +// 0x05, 0x09, // USAGE_PAGE (Button) +// 0x09, 0x0f, // USAGE (Button 15) +// 0x15, 0x00, // LOGICAL_MINIMUM (0) +// 0x25, 0x01, // LOGICAL_MAXIMUM (1) +// 0x75, 0x01, // REPORT_SIZE (1) +// 0x81, 0x02, // INPUT (Data,Var,Abs) // Dummy (always zero) 0x81, 0x03, // INPUT (Cnst,Var,Abs) @@ -60,8 +62,8 @@ unsigned char ReportDescriptor[] = { 0x81, 0x02, // INPUT (Data,Var,Abs) // D-Pad up, down, left & right - 0x19, 0x0c, // USAGE_MINIMUM (Button 12) - 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) + 0x19, 0x0b, // USAGE_MINIMUM (Button 11) + 0x29, 0x0e, // USAGE_MAXIMUM (Button 14) 0x95, 0x04, // REPORT_COUNT (4) 0x81, 0x02, // INPUT (Data,Var,Abs) From f667c1f66c881cf64a137cc4b07ef54d24e165b4 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 3 Jan 2016 12:47:48 -0600 Subject: [PATCH 008/216] Resolves #192 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 82edb396..836a7022 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -171,6 +171,26 @@ idVendor 1118 + Counterfeit360Controller1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 672 + idVendor + 3695 + DOA4Stick CFBundleIdentifier From 591861b879218a8785d82f0b3d755a96992e2bca Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 14 Jan 2016 13:19:08 -0600 Subject: [PATCH 009/216] Add Pretend360 to PrefPane --- Pref360Control/Pref360ControlPref.h | 1 + Pref360Control/Pref360ControlPref.m | 9 +- .../en.lproj/Pref360ControlPref.xib | 581 +++++++++++++----- 3 files changed, 442 insertions(+), 149 deletions(-) diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index b78ebce9..dd6b3297 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -94,6 +94,7 @@ typedef NS_ENUM(NSUInteger, ControllerType) { @property (weak) IBOutlet NSButton *rightStickInvertYAlt; @property (weak) IBOutlet NSButton *normalizeDeadzoneLeft; @property (weak) IBOutlet NSButton *normalizeDeadzoneRight; +@property (weak) IBOutlet NSButton *pretend360Button; // About Tab /* put About Tab's @properties here */ diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 2637b35e..86b69fd6 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -674,10 +674,9 @@ - (void)startDevice [_swapSticks setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; } else NSLog(@"No value for SwapSticks\n"); - // TODO(Drew): Add connection to UI -// if(CFDictionaryGetValueIfPresent(dict,CFSTR("Pretend360"),(void*)&boolValue)) { -// [_pretend360 setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; -// } else NSLog(@"No value for Pretend360"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("Pretend360"),(void*)&boolValue)) { + [_pretend360Button setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; + } else NSLog(@"No value for Pretend360"); } else NSLog(@"No settings found\n"); } // Enable GUI components @@ -934,7 +933,7 @@ - (IBAction)changeSetting:(id)sender @"BindingX": @((UInt8)([MyWhole360ControllerMapper mapping][13])), @"BindingY": @((UInt8)([MyWhole360ControllerMapper mapping][14])), @"SwapSticks": @((BOOL)([_swapSticks state]==NSOnState)), - @"Pretend360": @((BOOL)(NO))}; // TODO(Drew): Add connection to UI + @"Pretend360": @((BOOL)([_pretend360Button state]==NSOnState))}; // Set property IORegistryEntrySetCFProperties(registryEntry, (__bridge CFTypeRef)(dict)); diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index f8409918..e39a72d8 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,5 +1,5 @@ - + @@ -32,6 +32,7 @@ + @@ -60,13 +61,14 @@ - + - + + @@ -86,6 +88,7 @@ + @@ -100,6 +103,7 @@ + @@ -109,6 +113,7 @@ + @@ -133,6 +138,7 @@ + @@ -143,6 +149,7 @@ + @@ -153,6 +160,7 @@ + @@ -160,6 +168,7 @@ + @@ -167,9 +176,11 @@ + - - - + + @@ -242,6 +258,7 @@ + @@ -255,19 +272,22 @@ + - + + - + + @@ -283,8 +303,9 @@ - - + - - - + + @@ -328,8 +352,9 @@ - + @@ -353,6 +379,7 @@ + @@ -378,6 +405,7 @@ + @@ -387,6 +415,7 @@ + @@ -407,6 +436,7 @@ - - - + + + @@ -598,8 +643,9 @@ - - + + + @@ -635,17 +683,19 @@ + - + - + - - - + + + @@ -673,8 +725,9 @@ - - - + + + @@ -718,10 +774,12 @@ + + @@ -733,6 +791,7 @@ + @@ -742,8 +801,9 @@ - + @@ -788,11 +851,13 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -808,15 +873,41 @@ Due to some internal limitations, you need to connect your device once to be abl + + + + + + + + + + + + + + + - + + @@ -824,6 +915,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -839,15 +931,16 @@ Due to some internal limitations, you need to connect your device once to be abl - + + - + @@ -857,18 +950,42 @@ Due to some internal limitations, you need to connect your device once to be abl - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -878,18 +995,42 @@ Due to some internal limitations, you need to connect your device once to be abl - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -903,18 +1044,42 @@ Downloaded from: - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -925,18 +1090,42 @@ Downloaded from: - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -950,18 +1139,42 @@ Project Home: - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -972,18 +1185,42 @@ Project Home: - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -996,18 +1233,42 @@ Cg - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1020,18 +1281,42 @@ Cg - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1208,22 +1493,27 @@ This driver is licensed under the GNU Public License. A copy of this license is - + + + + + @@ -1231,6 +1521,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1241,6 +1532,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1257,6 +1549,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + From 648e1f728ac84940446deaaca8920c2db7ba1a4b Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 14 Jan 2016 13:22:48 -0600 Subject: [PATCH 010/216] Add device from #196 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 836a7022..3c396493 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1991,6 +1991,26 @@ idVendor 7085 + SaitekAV8R02 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 52009 + idVendor + 1848 + SaitekCB360 CFBundleIdentifier From 4837806251146283c4f27057b4989fee183bbf05 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 14 Jan 2016 14:43:07 -0600 Subject: [PATCH 011/216] Fix Xbox One HID --- 360Controller/xboxOnehid.h | 23 ++-- Install360Controller/Text/Welcome.rtf | 169 ++++++++++++++------------ 2 files changed, 107 insertions(+), 85 deletions(-) diff --git a/360Controller/xboxOnehid.h b/360Controller/xboxOnehid.h index 779cb581..5d1eea0a 100644 --- a/360Controller/xboxOnehid.h +++ b/360Controller/xboxOnehid.h @@ -31,17 +31,20 @@ unsigned char ReportDescriptor[] = { 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x95, 0x02, // REPORT_COUNT (2) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + // Sync - Replaced by constant + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x03, // INPUT (Cnst,Var,Abs) - // Sync - // To reactivate sync button funcationality, uncomment below - //and change line 34 to: 0x95, 0x01, -// 0x05, 0x09, // USAGE_PAGE (Button) + // Sync - As a button + 0x05, 0x09, // USAGE_PAGE (Button) // 0x09, 0x0f, // USAGE (Button 15) -// 0x15, 0x00, // LOGICAL_MINIMUM (0) -// 0x25, 0x01, // LOGICAL_MAXIMUM (1) -// 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) // 0x81, 0x02, // INPUT (Data,Var,Abs) // Dummy (always zero) @@ -62,8 +65,8 @@ unsigned char ReportDescriptor[] = { 0x81, 0x02, // INPUT (Data,Var,Abs) // D-Pad up, down, left & right - 0x19, 0x0b, // USAGE_MINIMUM (Button 11) - 0x29, 0x0e, // USAGE_MAXIMUM (Button 14) + 0x19, 0x0c, // USAGE_MINIMUM (Button 12) + 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) 0x95, 0x04, // REPORT_COUNT (4) 0x81, 0x02, // INPUT (Data,Var,Abs) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 9e2ac629..7f9552fd 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -18,15 +18,16 @@ {\list\listtemplateid15\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid15} {\list\listtemplateid16\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid16} {\list\listtemplateid17\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid17} -{\list\listtemplateid18\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid18}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}} -\paperw12240\paperh15840\margl1440\margr1440\vieww10240\viewh12600\viewkind0 -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +{\list\listtemplateid18\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid18} +{\list\listtemplateid19\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid19}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}} +\margl1440\margr1440\vieww10240\viewh12600\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.15 (beta 3) +\b0\fs24 \cf0 Version 0.15 (beta 4) \i unofficial \i0 \ Copyright (C) 2005-2013 Colin Munro\ @@ -34,221 +35,239 @@ Copyright (C) 2005-2013 Colin Munro\ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ +Update 0.15 (beta 4): 01/14/2016\ + +\b0 This update includes:\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0 +\b \cf0 {\listtext \'95 } +\b0 Added various new Xbox 360 controllers.\ +\ls1\ilvl0 +\b {\listtext \'95 } +\b0 Xbox One controllers no longer pretend to be 360 controllers.\ +\ls1\ilvl0 +\b {\listtext \'95 } +\b0 Added support for the Xbox One Elite controller. +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls3\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls4\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls3\ilvl0 +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls4\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.14: 12/23/2014\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls4\ilvl0 +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls5\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls5\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls6\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls5\ilvl0 +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls6\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls6\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls7\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls7\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls8\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.12: 4/01/2013\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls8\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls9\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.11: 10/01/2012\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls9\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls10\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.10: 8/05/2011\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls10\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls11\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.09: 21/11/2009\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls11\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls12\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls12\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls13\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.07: 16/12/2007\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls13\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls14\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.06: 10/11/2007 \b0 \ \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls14\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls15\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.05: 21/4/2007 \b0 \ \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls15\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls16\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.04: 27/2/2007\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls16\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls17\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.03: 22/7/2006\ \b0 \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls17\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls18\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ \b Update 0.02: 11/2/2006 \b0 \ \ This update includes:\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural -\ls18\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls19\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ {\listtext \'95 }D-pad moved from pointer to plain joypad buttons, for better support in games\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver}} for information on this software. Consider donating or buying via the Amazon associate links to support development of this driver!\ \ @@ -256,4 +275,4 @@ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/Proj \b Update: \b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ \ -Ensure to read the following Read Me and License sections before installing!} +Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file From ee4f6463ed89f336d5a4da5e5c102635e5f75e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Arg=C3=BCello?= Date: Sat, 16 Jan 2016 02:01:50 +0000 Subject: [PATCH 012/216] Update version number label to beta 4 --- Pref360Control/en.lproj/Pref360ControlPref.xib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index e39a72d8..4caf2b78 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -990,7 +990,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + From f6e4f283634e372389859afab7536d8b2850d8b0 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 16 Jan 2016 18:46:22 -0600 Subject: [PATCH 013/216] Add xboxOnehid.h to xcodeproj --- 360 Driver.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index f53d0823..23c65672 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -107,6 +107,7 @@ 622A73C31A7C339000784C02 /* MyWhole360ControllerMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */; }; 622A73CE1A7C879300784C02 /* BindingTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 622A73CC1A7C879300784C02 /* BindingTableView.h */; }; 622A73CF1A7C879300784C02 /* BindingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 622A73CD1A7C879300784C02 /* BindingTableView.m */; }; + 6235D51F1C4B1BA0000A33E7 /* xboxOnehid.h in Headers */ = {isa = PBXBuildFile; fileRef = 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -311,6 +312,7 @@ 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyWhole360ControllerMapper.m; sourceTree = ""; }; 622A73CC1A7C879300784C02 /* BindingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BindingTableView.h; sourceTree = ""; }; 622A73CD1A7C879300784C02 /* BindingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BindingTableView.m; sourceTree = ""; }; + 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xboxOnehid.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -568,6 +570,7 @@ 55B636F618C1054F00CE933D /* Controller.cpp */, 55B636F818C1054F00CE933D /* ControlStruct.h */, 55B636FD18C1054F00CE933D /* xbox360hid.h */, + 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */, 55A2B8E218C11D4D006829A2 /* Resources */, ); path = 360Controller; @@ -672,6 +675,7 @@ files = ( 55B6375218C1098D00CE933D /* chatpadkeys.h in Headers */, 55B6375318C1098D00CE933D /* Controller.h in Headers */, + 6235D51F1C4B1BA0000A33E7 /* xboxOnehid.h in Headers */, 55B6375518C1098D00CE933D /* xbox360hid.h in Headers */, 55B6375018C1098D00CE933D /* ChatPad.h in Headers */, 55B6375118C1098D00CE933D /* chatpadhid.h in Headers */, From 8c61eca85bec8f148ca90038c856cc38e6126aae Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 16 Jan 2016 21:24:39 -0600 Subject: [PATCH 014/216] Add controller from #201 --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 3c396493..5350d01c 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1071,7 +1071,27 @@ idVendor 1848 - MicrosoftCorp.XboxControllerS + MicrosoftBigButtonController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 672 + idVendor + 1118 + + MicrosoftCorp.XboxControllerS - 2 CFBundleIdentifier com.mice.driver.Xbox360Controller From 00c9e4b870ae31220f66a8ced7866aece7fa9839 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 19 Jan 2016 08:15:36 -0600 Subject: [PATCH 015/216] Add devices from #139 --- 360Controller/Info.plist | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 5350d01c..ac7babde 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -391,6 +391,26 @@ idVendor 7085 + HoriFSVXAlt + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21762 + idVendor + 9414 + HoriFightingStickEX2 CFBundleIdentifier @@ -1551,6 +1571,26 @@ idVendor 7085 + RazerAtrox + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2560 + idVendor + 5426 + RazerOnza CFBundleIdentifier From 7ff928db52c47e76a11ca823db56a1567a60d3ef Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 19 Jan 2016 08:49:15 -0600 Subject: [PATCH 016/216] Add SIP to Readme --- Readme.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 06ba6bf5..beaf0cb6 100644 --- a/Readme.md +++ b/Readme.md @@ -93,8 +93,32 @@ sudo nvram boot-args="kext-dev-mode=1" sudo kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions ``` -Note that this is probably a bad idea unless you understand the implications of -running unsigned driver code. +In addition, you will need to disable System Integrity Protection. In order to +do this, you must boot into recovery mode. When starting the computer, hold +down `CMD + R`. This will get you into recovery mode. From there, simply open +the terminal using the utilities menu item, then enter this command: + +``` bash +csrutil disable +``` + +In order to undo these changes, within recovery mode run: + +``` bash +csrutil enable +``` + +And within the normal OS, reset the boot args using: + +``` bash +sudo nvram -d boot-args +``` + +This will clear all boot args, so if you have boot args already, you will have +to change your boot args an alterate way. + +Note that disabling driver signing is probably a bad idea unless you understand +the implications of running unsigned driver code. ### Debugging ### From 2decf920599eb5987f81ede3ae674905ac4c62fe Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 19 Jan 2016 14:03:42 -0600 Subject: [PATCH 017/216] Add device from #152 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index ac7babde..3998192f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1391,6 +1391,26 @@ idVendor 7085 + PDPXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 314 + idVendor + 3695 + PowerAAirflow CFBundleIdentifier From 3d54074f6d0ab400c0c8efa0467a588f06c60ab3 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 22 Jan 2016 20:58:00 -0600 Subject: [PATCH 018/216] Overhaul Elite Implementation --- 360Controller/Controller.cpp | 319 +++++++++------------------- 360Controller/Controller.h | 39 +--- 360Controller/Info.plist | 60 ++++++ 360Controller/_60Controller.cpp | 102 +++------ 360Controller/_60Controller.h | 4 +- 360Controller/xbox360hid.h | 25 +++ Pref360Control/Pref360ControlPref.h | 3 +- Pref360Control/Pref360ControlPref.m | 22 +- Readme.md | 28 ++- 9 files changed, 253 insertions(+), 349 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 25a58084..5ca86cad 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -443,6 +443,17 @@ typedef struct { XBOX360_HAT left, right; } PACKED XBOXONE_IN_REPORT; +typedef struct { + XBOXONE_HEADER header; + UInt16 buttons; + UInt16 trigL, trigR; + XBOX360_HAT left, right; + UInt16 true_buttons; + UInt16 true_trigL, true_trigR; + XBOX360_HAT true_left, true_right; + UInt8 paddle; +} PACKED XBOXONE_ELITE_IN_REPORT; + typedef struct { XBOXONE_HEADER header; UInt8 state; @@ -480,77 +491,87 @@ typedef enum { XONE_RIGHT_THUMB = 0x8000, // Bit 15 } GAMEPAD_XONE; -OSDefineMetaClassAndStructors(XboxOneControllerClass, Xbox360ControllerClass) +typedef enum { + XONE_PADDLE_UPPER_LEFT = 0x0001, // Bit 00 + XONE_PADDLE_UPPER_RIGHT = 0x0002, // Bit 01 + XONE_PADDLE_LOWER_LEFT = 0x0004, // Bit 02 + XONE_PADDLE_LOWER_RIGHT = 0x0008, // Bit 03 + XONE_PADDLE_PRESET_NUM = 0x0010, // Bit 04 +} GAMEPAD_XONE_ELITE_PADDLE; -OSString* XboxOneControllerClass::newManufacturerString() const -{ - return OSString::withCString("Microsoft"); -} +OSDefineMetaClassAndStructors(XboxOneControllerClass, Xbox360ControllerClass) OSString* XboxOneControllerClass::newProductString() const { return OSString::withCString("Xbox One Wired Controller"); } -IOReturn XboxOneControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const -{ - IOBufferMemoryDescriptor *buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,sizeof(HID_ONE::ReportDescriptor)); - - if (buffer == NULL) return kIOReturnNoResources; - buffer->writeBytes(0,HID_ONE::ReportDescriptor,sizeof(HID_ONE::ReportDescriptor)); - *descriptor=buffer; - return kIOReturnSuccess; -} - -void XboxOneControllerClass::reorderButtons(UInt16* buttons, UInt8 mapping[]) +UInt16 XboxOneControllerClass::convertButtonPacket(UInt16 buttons) { UInt16 new_buttons = 0; - new_buttons |= ((*buttons & 4) == 4) << GetOwner(this)->mapping[4]; - new_buttons |= ((*buttons & 8) == 8) << GetOwner(this)->mapping[5]; - new_buttons |= ((*buttons & 16) == 16) << GetOwner(this)->mapping[11]; - new_buttons |= ((*buttons & 32) == 32) << GetOwner(this)->mapping[12]; - new_buttons |= ((*buttons & 64) == 64) << GetOwner(this)->mapping[13]; - new_buttons |= ((*buttons & 128) == 128) << GetOwner(this)->mapping[14]; - new_buttons |= ((*buttons & 256) == 256) << GetOwner(this)->mapping[0]; - new_buttons |= ((*buttons & 512) == 512) << GetOwner(this)->mapping[1]; - new_buttons |= ((*buttons & 1024) == 1024) << GetOwner(this)->mapping[2]; - new_buttons |= ((*buttons & 2048) == 2048) << GetOwner(this)->mapping[3]; - new_buttons |= ((*buttons & 4096) == 4096) << GetOwner(this)->mapping[8]; - new_buttons |= ((*buttons & 8192) == 8192) << GetOwner(this)->mapping[9]; - new_buttons |= ((*buttons & 16384) == 16384) << GetOwner(this)->mapping[6]; - new_buttons |= ((*buttons & 32768) == 32768) << GetOwner(this)->mapping[7]; + new_buttons |= ((buttons & 4) == 4) << 4; + new_buttons |= ((buttons & 8) == 8) << 5; + new_buttons |= ((buttons & 16) == 16) << 12; + new_buttons |= ((buttons & 32) == 32) << 13; + new_buttons |= ((buttons & 64) == 64) << 14; + new_buttons |= ((buttons & 128) == 128) << 15; + new_buttons |= ((buttons & 256) == 256) << 0; + new_buttons |= ((buttons & 512) == 512) << 1; + new_buttons |= ((buttons & 1024) == 1024) << 2; + new_buttons |= ((buttons & 2048) == 2048) << 3; + new_buttons |= ((buttons & 4096) == 4096) << 8; + new_buttons |= ((buttons & 8192) == 8192) << 9; + new_buttons |= ((buttons & 16384) == 16384) << 6; + new_buttons |= ((buttons & 32768) == 32768) << 7; - *buttons = new_buttons; + new_buttons |= (isXboxOneGuideButtonPressed) << 10; + + return new_buttons; } -void XboxOneControllerClass::remapButtons(void *buffer) +void XboxOneControllerClass::convertFromXboxOne(void *buffer) { - XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; + XBOXONE_IN_REPORT *reportXone = (XBOXONE_IN_REPORT*)buffer; + XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; + UInt8 trigL = 0, trigR = 0; + XBOX360_HAT left, right; - reorderButtons(&report->buttons, GetOwner(this)->mapping); + report360->header.command = 0x00; + report360->header.size = 0x14; - // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", GetOwner(this)->mapping[0], GetOwner(this)->mapping[1], GetOwner(this)->mapping[2], GetOwner(this)->mapping[3], GetOwner(this)->mapping[4], GetOwner(this)->mapping[5], GetOwner(this)->mapping[6], GetOwner(this)->mapping[7], GetOwner(this)->mapping[8], GetOwner(this)->mapping[9], GetOwner(this)->mapping[10], GetOwner(this)->mapping[11], GetOwner(this)->mapping[12], GetOwner(this)->mapping[13], GetOwner(this)->mapping[14]); + trigL = (reportXone->trigL / 1023.0) * 255; + trigR = (reportXone->trigR / 1023.0) * 255; + left = reportXone->left; + right = reportXone->right; + + report360->buttons = convertButtonPacket(reportXone->buttons); + report360->trigL = trigL; + report360->trigR = trigR; + report360->left = left; + report360->right = right; } -void XboxOneControllerClass::fixTriggers(void *buffer) +void XboxOneControllerClass::convertFromXboxOneElite(void *buffer) { - XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; + XBOXONE_ELITE_IN_REPORT *reportXone = (XBOXONE_ELITE_IN_REPORT*)buffer; + XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; + UInt8 trigL = 0, trigR = 0; + XBOX360_HAT left, right; - UInt16 newTrigL = (report->trigL / 1023.0) * 255; - UInt16 newTrigR = (report->trigR / 1023.0) * 255; + report360->header.command = 0x00; + report360->header.size = 0x14; - report->trigL = newTrigL; - report->trigR = newTrigR; -} - -void XboxOneControllerClass::remapAxes(void *buffer) -{ - XBOXONE_IN_REPORT *report = (XBOXONE_IN_REPORT*)buffer; + trigL = (reportXone->trigL / 1023.0) * 255; + trigR = (reportXone->trigR / 1023.0) * 255; + left = reportXone->left; + right = reportXone->right; - XBOX360_HAT temp = report->left; - report->left = report->right; - report->right = temp; + report360->buttons = convertButtonPacket(reportXone->buttons); + report360->trigL = trigL; + report360->trigR = trigR; + report360->left = left; + report360->right = right; } IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) @@ -558,13 +579,29 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); if (desc != NULL) { - XBOXONE_IN_REPORT *report=(XBOXONE_IN_REPORT*)desc->getBytesNoCopy(); - if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_IN_REPORT)-4)) { - GetOwner(this)->fiddleReport(report->left, report->right); - reorderButtons(&report->buttons, GetOwner(this)->mapping); - fixTriggers(report); - if (GetOwner(this)->swapSticks) - remapAxes(report); + XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); + if (report->header.command==0x20) + { + if (report->header.size==0x0e)//(sizeof(XBOXONE_IN_REPORT)-4)) //0x0e + { + convertFromXboxOne(report); + XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; + remapButtons(report360); + GetOwner(this)->fiddleReport(report360->left, report360->right); + + if (GetOwner(this)->swapSticks) + remapAxes(report360); + } + else if (report->header.size==0x1d)//(sizeof(XBOXONE_ELITE_IN_REPORT)-5)) //0x1d + { + convertFromXboxOneElite(report); + XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; + remapButtons(report360); + GetOwner(this)->fiddleReport(report360->left, report360->right); + + if (GetOwner(this)->swapSticks) + remapAxes(report360); + } } else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) { @@ -638,7 +675,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor /* * Xbox One controller. - * Convert reports to Xbox 360 controller format and fake product ids + * Fake PID and VID of Xbox 360 controller */ OSDefineMetaClassAndStructors(XboxOnePretend360Class, XboxOneControllerClass) @@ -656,170 +693,4 @@ OSNumber* XboxOnePretend360Class::newProductIDNumber() const OSNumber* XboxOnePretend360Class::newVendorIDNumber() const { return OSNumber::withNumber(1118,16); -} - -IOReturn XboxOnePretend360Class::newReportDescriptor(IOMemoryDescriptor **descriptor) const -{ - return Xbox360ControllerClass::newReportDescriptor(descriptor); -} - -void XboxOnePretend360Class::convertFromXboxOne(void *buffer, void* overrideBuffer) { - - // if (data[0] != 0x00 || data[1] != 0x14) { - // IOLog("Unknown report command %d, length %d\n", (int)data[0], (int)data[1]); - // return; - // } - - XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; - UInt8 trigL = 0, trigR = 0; - UInt16 new_buttons = 0; - XBOX360_HAT left, right; - - if (overrideBuffer == NULL) { - XBOXONE_IN_REPORT *reportXone = (XBOXONE_IN_REPORT*)buffer; - report360->header.command = reportXone->header.command - 0x20; // Change 0x20 into 0x00 - report360->header.size = reportXone->header.size + 0x06; // Change 0x0E into 0x14 - - new_buttons |= ((reportXone->buttons & 4) == 4) << 4; - new_buttons |= ((reportXone->buttons & 8) == 8) << 5; - new_buttons |= ((reportXone->buttons & 16) == 16) << 12; - new_buttons |= ((reportXone->buttons & 32) == 32) << 13; - new_buttons |= ((reportXone->buttons & 64) == 64) << 14; - new_buttons |= ((reportXone->buttons & 128) == 128) << 15; - new_buttons |= ((reportXone->buttons & 256) == 256) << 0; - new_buttons |= ((reportXone->buttons & 512) == 512) << 1; - new_buttons |= ((reportXone->buttons & 1024) == 1024) << 2; - new_buttons |= ((reportXone->buttons & 2048) == 2048) << 3; - new_buttons |= ((reportXone->buttons & 4096) == 4096) << 8; - new_buttons |= ((reportXone->buttons & 8192) == 8192) << 9; - new_buttons |= ((reportXone->buttons & 16384) == 16384) << 6; - new_buttons |= ((reportXone->buttons & 32768) == 32768) << 7; - - new_buttons |= (isXboxOneGuideButtonPressed) << 10; - - trigL = (reportXone->trigL / 1023.0) * 255; - trigR = (reportXone->trigR / 1023.0) * 255; - left = reportXone->left; - right = reportXone->right; - - report360->buttons = new_buttons; - report360->trigL = trigL; - report360->trigR = trigR; - report360->left = left; - report360->right = right; - } else { - XBOX360_IN_REPORT *reportOverride = (XBOX360_IN_REPORT*)overrideBuffer; - report360->header = reportOverride->header; - report360->buttons = reportOverride->buttons; - report360->buttons |= (isXboxOneGuideButtonPressed) << 10; - report360->trigL = reportOverride->trigL; - report360->trigR = reportOverride->trigR; - report360->left = reportOverride->left; - report360->right = reportOverride->right; - } -} - -IOReturn XboxOnePretend360Class::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) -{ - if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { - IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); - if (desc != NULL) { - XBOXONE_IN_REPORT *report=(XBOXONE_IN_REPORT*)desc->getBytesNoCopy(); - if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_IN_REPORT)-4)) { - - reorderButtons(&report->buttons, GetOwner(this)->mapping); - - convertFromXboxOne(report, NULL); - XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; - GetOwner(this)->fiddleReport(report360->left, report360->right); - - if (GetOwner(this)->swapSticks) - Xbox360ControllerClass::remapAxes(report360); - } - else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) - { - const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; - isXboxOneGuideButtonPressed = (bool)guideReport->state; - convertFromXboxOne(report, lastData); - } - } - } - IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); - return ret; -} - - -#pragma mark - XboxOneEliteControllerClass - -/* - * Xbox One Elite Controller Class - * Added so special Elite functions can be added later. - */ - -typedef struct { - XBOXONE_HEADER header; - UInt16 buttons; - UInt16 trigL, trigR; - XBOX360_HAT left, right; - UInt16 true_buttons; - UInt16 true_trigL, true_trigR; - XBOX360_HAT true_left, true_right; - UInt8 paddle; -} PACKED XBOXONE_ELITE_IN_REPORT; - -typedef enum { - XONE_PADDLE_UPPER_LEFT = 0x0001, // Bit 00 - XONE_PADDLE_UPPER_RIGHT = 0x0002, // Bit 01 - XONE_PADDLE_LOWER_LEFT = 0x0004, // Bit 02 - XONE_PADDLE_LOWER_RIGHT = 0x0008, // Bit 03 - XONE_PADDLE_PRESET_NUM = 0x0010, // Bit 04 -} GAMEPAD_XONE_ELITE_PADDLE; - -OSDefineMetaClassAndStructors(XboxOneEliteControllerClass, XboxOneControllerClass) - -OSString* XboxOneEliteControllerClass::newProductString() const -{ - return OSString::withCString("Xbox One Elite Wired Controller"); -} - -void XboxOneEliteControllerClass::remapButtons(void *buffer) -{ - // TODO(Drew): Currently does nothing special. May need it later. - XBOXONE_ELITE_IN_REPORT *report = (XBOXONE_ELITE_IN_REPORT*)buffer; - reorderButtons(&report->buttons, GetOwner(this)->mapping); - - // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", GetOwner(this)->mapping[0], GetOwner(this)->mapping[1], GetOwner(this)->mapping[2], GetOwner(this)->mapping[3], GetOwner(this)->mapping[4], GetOwner(this)->mapping[5], GetOwner(this)->mapping[6], GetOwner(this)->mapping[7], GetOwner(this)->mapping[8], GetOwner(this)->mapping[9], GetOwner(this)->mapping[10], GetOwner(this)->mapping[11], GetOwner(this)->mapping[12], GetOwner(this)->mapping[13], GetOwner(this)->mapping[14]); -} - -void XboxOneEliteControllerClass::remapAxes(void *buffer) -{ - XBOXONE_ELITE_IN_REPORT *report = (XBOXONE_ELITE_IN_REPORT*)buffer; - - XBOX360_HAT temp = report->left; - report->left = report->right; - report->right = temp; -} - -IOReturn XboxOneEliteControllerClass::handleReport(IOMemoryDescriptor * descriptor, IOHIDReportType reportType, IOOptionBits options) -{ - if (descriptor->getLength() >= sizeof(XBOXONE_IN_GUIDE_REPORT)) { - IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); - if (desc != NULL) { - XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); - if ((report->header.command==0x20) && (report->header.size==sizeof(XBOXONE_ELITE_IN_REPORT)-4)) { - GetOwner(this)->fiddleReport(report->left, report->right); -// reorderButtons(&report->buttons, GetOwner(this)->mapping); - fixTriggers(report); - if (GetOwner(this)->swapSticks) - remapAxes(report); - } - else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) - { - const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; - isXboxOneGuideButtonPressed = (bool)guideReport->state; - } - } - } - IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); - return ret; -} +} \ No newline at end of file diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 83c548ac..c87a9a09 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -94,22 +94,18 @@ class XboxOneControllerClass : public Xbox360ControllerClass protected: bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); + UInt16 convertButtonPacket(UInt16 buttons); public: - virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; - virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn handleReport( IOMemoryDescriptor * report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - virtual OSString* newManufacturerString() const; + virtual void convertFromXboxOne(void *buffer); + virtual void convertFromXboxOneElite(void *buffer); virtual OSString* newProductString() const; - - virtual void remapButtons(void *buffer); - virtual void remapAxes(void *buffer); - virtual void fixTriggers(void *buffer); }; @@ -117,37 +113,8 @@ class XboxOnePretend360Class : public XboxOneControllerClass { OSDeclareDefaultStructors(XboxOnePretend360Class) -protected: - UInt8 lastData[20]; - public: - virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; - - virtual IOReturn handleReport( - IOMemoryDescriptor * report, - IOHIDReportType reportType = kIOHIDReportTypeInput, - IOOptionBits options = 0 ); - virtual OSString* newProductString() const; virtual OSNumber* newProductIDNumber() const; virtual OSNumber* newVendorIDNumber() const; - - virtual void convertFromXboxOne(void *buffer, void* overrideBuffer); -}; - - -class XboxOneEliteControllerClass : public XboxOneControllerClass -{ - OSDeclareDefaultStructors(XboxOneEliteControllerClass) - -public: - virtual IOReturn handleReport( - IOMemoryDescriptor * report, - IOHIDReportType reportType = kIOHIDReportTypeInput, - IOOptionBits options = 0 ); - - virtual OSString* newProductString() const; - - virtual void remapButtons(void *buffer); - virtual void remapAxes(void *buffer); }; \ No newline at end of file diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 5350d01c..3998192f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -391,6 +391,26 @@ idVendor 7085 + HoriFSVXAlt + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21762 + idVendor + 9414 + HoriFightingStickEX2 CFBundleIdentifier @@ -1371,6 +1391,26 @@ idVendor 7085 + PDPXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 314 + idVendor + 3695 + PowerAAirflow CFBundleIdentifier @@ -1551,6 +1591,26 @@ idVendor 7085 + RazerAtrox + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2560 + idVendor + 5426 + RazerOnza CFBundleIdentifier diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 875f9fb7..829eee38 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -355,13 +355,19 @@ bool Xbox360Peripheral::start(IOService *provider) * Third party Xbox One controllers requires more than just 0x05 0x20 * Minimum required packets unknown. */ - UInt8 xoneInitFirst[] = { 0x04, 0x20, 0x01, 0x00 }; - UInt8 xoneInitSecond[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x9c, 0x00 }; - UInt8 xoneInitThird[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00 }; - UInt8 xoneInitFourth[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; - UInt8 xoneInitFifth[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; - UInt8 xoneInitSixth[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; - UInt8 xoneInitSeventh[] = { 0x06, 0x20, 0x01, 0x02, 0x01, 0x00 }; +// UInt8 xoneInitFirst[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; + UInt8 xoneInitFirst[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; +// UInt8 xoneInitThird[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; +// UInt8 xoneInitFourth[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; +// UInt8 xoneInitFourth[] = { 0x09, 0x08, 0x04, 0x08, 0x00, 0x03, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00 }; +// UInt8 xoneInitFifth[] = { 0x09, 0x00, 0x04, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }; +// UInt8 xoneInitFirst[] = { 0x04, 0x20, 0x01, 0x00 }; +// UInt8 xoneInitSecond[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x9c, 0x00 }; +// UInt8 xoneInitThird[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00 }; +// UInt8 xoneInitFourth[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; +// UInt8 xoneInitFifth[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; +// UInt8 xoneInitSixth[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; +// UInt8 xoneInitSeventh[] = { 0x06, 0x20, 0x01, 0x02, 0x01, 0x00 }; if (!super::start(provider)) return false; @@ -443,7 +449,6 @@ bool Xbox360Peripheral::start(IOService *provider) controllerType = XboxOriginal; goto interfacefound; } - previousType = controllerType; interfacefound: interface->open(this); // Find pipes @@ -536,14 +541,15 @@ bool Xbox360Peripheral::start(IOService *provider) nochat: if (!QueueRead()) goto fail; - if (controllerType == XboxOne || controllerType == XboxOnePretend360 || controllerType == XboxOneElite) { + if (controllerType == XboxOne || controllerType == XboxOnePretend360) { QueueWrite(&xoneInitFirst, sizeof(xoneInitFirst)); - QueueWrite(&xoneInitSecond, sizeof(xoneInitSecond)); - QueueWrite(&xoneInitThird, sizeof(xoneInitThird)); - QueueWrite(&xoneInitFourth, sizeof(xoneInitFourth)); - QueueWrite(&xoneInitFifth, sizeof(xoneInitFifth)); - QueueWrite(&xoneInitSixth, sizeof(xoneInitSixth)); - QueueWrite(&xoneInitSeventh, sizeof(xoneInitSeventh)); +// QueueWrite(&xoneInitSecond, sizeof(xoneInitSecond)); +// QueueWrite(&xoneInitThird, sizeof(xoneInitThird)); +// QueueWrite(&xoneInitFourth, sizeof(xoneInitFourth)); +// QueueWrite(&xoneInitFifth, sizeof(xoneInitFifth)); +// QueueWrite(&xoneInitSixth, sizeof(xoneInitSixth)); +// QueueWrite(&xoneInitSeventh, sizeof(xoneInitSeventh)); + IOLog("Xbox One Init send\n"); } else { // Disable LED Xbox360_Prepare(led,outLed); @@ -900,67 +906,21 @@ void Xbox360Peripheral::WriteComplete(void *parameter,IOReturn status,UInt32 buf void Xbox360Peripheral::MakeSettingsChanges() { - if (controllerType == XboxOne || controllerType == XboxOneElite) + if (controllerType == XboxOne) { - if (pretend360) // Convert to a 360 controller + if (pretend360) { - PadDisconnect(); - previousType = controllerType; controllerType = XboxOnePretend360; PadConnect(); } - - for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping - { - - switch (mapping[i]) { - case 0: { mapping[i] = 8; } break; // Move to Up position - case 1: { mapping[i] = 9; } break; // Move to Down position - case 2: { mapping[i] = 10; } break; // Move to Left position - case 3: { mapping[i] = 11; } break; // Move to Right position - case 4: { mapping[i] = 2; } break; // Move to Start position - case 5: { mapping[i] = 3; } break; // Move to Back position - case 6: { mapping[i] = 14; } break; // Move to LB position - case 7: { mapping[i] = 15; } break; // Move to RB position - case 8: { mapping[i] = 12; } break; // Move to LSC position - case 9: { mapping[i] = 13; } break; // Move to RSC position - case 10: { mapping[i] = 0; } break; // Move to Guide position - case 12: { mapping[i] = 4; } break; // Move to A position - case 13: { mapping[i] = 5; } break; // Move to B position - case 14: { mapping[i] = 6; } break; // Move to X position - case 15: { mapping[i] = 7; } break; // Move to Y position - } - } } - if (controllerType == XboxOnePretend360) + else if (controllerType == XboxOnePretend360) { if (!pretend360) { - PadDisconnect(); - controllerType = previousType; + controllerType = XboxOne; PadConnect(); } - - for (UInt8 i = 0; i < 15; i++) // Change mappings to save time in remapping - { - switch (mapping[i]) { - case 0: { mapping[i] = 8; } break; // Move to Up position - case 1: { mapping[i] = 9; } break; // Move to Down position - case 2: { mapping[i] = 10; } break; // Move to Left position - case 3: { mapping[i] = 11; } break; // Move to Right position - case 4: { mapping[i] = 2; } break; // Move to Start position - case 5: { mapping[i] = 3; } break; // Move to Back position - case 6: { mapping[i] = 14; } break; // Move to LB position - case 7: { mapping[i] = 15; } break; // Move to RB position - case 8: { mapping[i] = 12; } break; // Move to LSC position - case 9: { mapping[i] = 13; } break; // Move to RSC position - case 10: { mapping[i] = 0; } break; // Move to Guide position - case 12: { mapping[i] = 4; } break; // Move to A position - case 13: { mapping[i] = 5; } break; // Move to B position - case 14: { mapping[i] = 6; } break; // Move to X position - case 15: { mapping[i] = 7; } break; // Move to Y position - } - } } } @@ -1004,17 +964,9 @@ void Xbox360Peripheral::PadConnect(void) if (controllerType == XboxOriginal) { padHandler = new XboxOriginalControllerClass; } else if (controllerType == XboxOne) { - if ((device->GetVendorID() == 1118) && (device->GetProductID() == 739)) - { - controllerType = XboxOneElite; - padHandler = new XboxOneEliteControllerClass; - } - else - padHandler = new XboxOneControllerClass; + padHandler = new XboxOneControllerClass; } else if (controllerType == XboxOnePretend360) { padHandler = new XboxOnePretend360Class; - } else if (controllerType == XboxOneElite) { - padHandler = new XboxOneEliteControllerClass; } else { padHandler = new Xbox360ControllerClass; } @@ -1048,7 +1000,7 @@ void Xbox360Peripheral::PadDisconnect(void) { if (padHandler != NULL) { - padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + bool b1 = padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); padHandler->release(); padHandler = NULL; } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index f1d86566..fce1d37a 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -79,8 +79,7 @@ class Xbox360Peripheral : public IOService Xbox360 = 0, XboxOriginal = 1, XboxOne = 2, - XboxOnePretend360 = 3, - XboxOneElite = 4 + XboxOnePretend360 = 3 } CONTROLLER_TYPE; IOUSBDevice *device; @@ -103,7 +102,6 @@ class Xbox360Peripheral : public IOService Xbox360ControllerClass *padHandler; UInt8 chatpadInit[2]; CONTROLLER_TYPE controllerType; - CONTROLLER_TYPE previousType; // Settings bool invertLeftX,invertLeftY; diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index e8ae1850..79fd39e9 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -121,5 +121,30 @@ static const unsigned char ReportDescriptor[] = { 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0, // END_COLLECTION 0xc0, // END_COLLECTION + + 0xa1, 0x00, // COLLECTION (Physical) + 0x85, 0x07, // REPORT_ID (7) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x00, // USAGE (Undefined) + 0x95, 0x02, // REPORT_COUNT (2) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + + // Xbox button + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x0b, // USAGE (Button 11) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x00, // USAGE (Undefined) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION }; diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index dd6b3297..369ce96a 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -41,8 +41,7 @@ typedef NS_ENUM(NSUInteger, ControllerType) { Xbox360Controller = 0, XboxOriginalController = 1, XboxOneController = 2, - XboxOnePretend360Controller = 3, - XboxOneEliteController = 4 + XboxOnePretend360Controller = 3 } controllerType; @interface Pref360ControlPref : NSPreferencePane diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 86b69fd6..f3e76b03 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -88,7 +88,7 @@ -(void)awakeFromNib { [_aboutPopover setAppearance:NSPopoverAppearanceHUD]; [_rumbleOptions removeAllItems]; [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; - if (controllerType == XboxOneController || controllerType == XboxOneEliteController || controllerType == XboxOnePretend360Controller) + if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) [_rumbleOptions addItemsWithTitles:@[@"Triggers Only", @"Both"]]; } @@ -198,7 +198,7 @@ - (void)axisChanged:(int)index newValue:(int)value if (tabIndex == 0) { // Controller Test [_leftTrigger setVal:value]; largeMotor=value; - [self testMotorsLarge:largeMotor small:smallMotor]; +// [self testMotorsLarge:largeMotor small:smallMotor]; } break; @@ -206,7 +206,7 @@ - (void)axisChanged:(int)index newValue:(int)value if (tabIndex == 0) { [_rightTrigger setVal:value]; smallMotor=value; - [self testMotorsLarge:largeMotor small:smallMotor]; +// [self testMotorsLarge:largeMotor small:smallMotor]; } break; @@ -351,6 +351,7 @@ - (void)inputEnable:(BOOL)enable [_normalizeDeadzoneRight setEnabled:enable]; [_rumbleOptions setEnabled:enable]; [_swapSticks setEnabled:enable]; + [_pretend360Button setEnabled:enable]; } // Reset GUI components @@ -392,8 +393,8 @@ - (void)resetDisplay - (void)stopDevice { if(registryEntry==0) return; - [self testMotorsLarge:0 small:0]; - [self testMotorsCleanUp]; +// [self testMotorsLarge:0 small:0]; +// [self testMotorsCleanUp]; if (hidQueue) { CFRunLoopSourceRef eventSource; @@ -683,8 +684,8 @@ - (void)startDevice [self inputEnable:YES]; // Set device capabilities // Set FF motor control - [self testMotorsInit]; - [self testMotorsLarge:0 small:0]; +// [self testMotorsInit]; +// [self testMotorsLarge:0 small:0]; largeMotor = 0; smallMotor = 0; // Battery level? @@ -949,6 +950,8 @@ - (IBAction)changeSetting:(id)sender [_rightDeadZone setVal:[_rightStickDeadzone doubleValue]]; [_wholeController setRightStickDeadzone:[_rightStickDeadzone doubleValue]]; [_rightStickAnalog setDeadzone:[_rightStickDeadzone doubleValue]]; + + [self updateDeviceList]; } // Run an AppleScript from String and returns YES on successful execution @@ -1132,4 +1135,9 @@ - (IBAction)resetRemappingPressed:(id)sender { [_wholeControllerMapper reset]; } +- (IBAction)pretend360Checked:(id)sender { + [self changeSetting:NULL]; + [self performSelector:@selector(updateDeviceList) withObject:nil afterDelay:0.5]; +} + @end diff --git a/Readme.md b/Readme.md index 06ba6bf5..beaf0cb6 100644 --- a/Readme.md +++ b/Readme.md @@ -93,8 +93,32 @@ sudo nvram boot-args="kext-dev-mode=1" sudo kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions ``` -Note that this is probably a bad idea unless you understand the implications of -running unsigned driver code. +In addition, you will need to disable System Integrity Protection. In order to +do this, you must boot into recovery mode. When starting the computer, hold +down `CMD + R`. This will get you into recovery mode. From there, simply open +the terminal using the utilities menu item, then enter this command: + +``` bash +csrutil disable +``` + +In order to undo these changes, within recovery mode run: + +``` bash +csrutil enable +``` + +And within the normal OS, reset the boot args using: + +``` bash +sudo nvram -d boot-args +``` + +This will clear all boot args, so if you have boot args already, you will have +to change your boot args an alterate way. + +Note that disabling driver signing is probably a bad idea unless you understand +the implications of running unsigned driver code. ### Debugging ### From 3ef0c1abd21cd58a48680e17fd96432cd94e1bd3 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 22 Jan 2016 21:01:23 -0600 Subject: [PATCH 019/216] Remove xboxOnehid.h --- 360 Driver.xcodeproj/project.pbxproj | 4 - 360Controller/xboxOnehid.h | 137 --------------------------- 2 files changed, 141 deletions(-) delete mode 100644 360Controller/xboxOnehid.h diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index 23c65672..f53d0823 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -107,7 +107,6 @@ 622A73C31A7C339000784C02 /* MyWhole360ControllerMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */; }; 622A73CE1A7C879300784C02 /* BindingTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 622A73CC1A7C879300784C02 /* BindingTableView.h */; }; 622A73CF1A7C879300784C02 /* BindingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 622A73CD1A7C879300784C02 /* BindingTableView.m */; }; - 6235D51F1C4B1BA0000A33E7 /* xboxOnehid.h in Headers */ = {isa = PBXBuildFile; fileRef = 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -312,7 +311,6 @@ 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyWhole360ControllerMapper.m; sourceTree = ""; }; 622A73CC1A7C879300784C02 /* BindingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BindingTableView.h; sourceTree = ""; }; 622A73CD1A7C879300784C02 /* BindingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BindingTableView.m; sourceTree = ""; }; - 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xboxOnehid.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -570,7 +568,6 @@ 55B636F618C1054F00CE933D /* Controller.cpp */, 55B636F818C1054F00CE933D /* ControlStruct.h */, 55B636FD18C1054F00CE933D /* xbox360hid.h */, - 6235D51E1C4B1BA0000A33E7 /* xboxOnehid.h */, 55A2B8E218C11D4D006829A2 /* Resources */, ); path = 360Controller; @@ -675,7 +672,6 @@ files = ( 55B6375218C1098D00CE933D /* chatpadkeys.h in Headers */, 55B6375318C1098D00CE933D /* Controller.h in Headers */, - 6235D51F1C4B1BA0000A33E7 /* xboxOnehid.h in Headers */, 55B6375518C1098D00CE933D /* xbox360hid.h in Headers */, 55B6375018C1098D00CE933D /* ChatPad.h in Headers */, 55B6375118C1098D00CE933D /* chatpadhid.h in Headers */, diff --git a/360Controller/xboxOnehid.h b/360Controller/xboxOnehid.h deleted file mode 100644 index 5d1eea0a..00000000 --- a/360Controller/xboxOnehid.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright (c) 2014-2015 Drew Mills - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -// Report that makes the device appear as an Xbox One controller -unsigned char ReportDescriptor[] = { - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x05, // USAGE (Game Pad) - 0xa1, 0x01, // COLLECTION (Application) - 0xa1, 0x00, // COLLECTION (Physical) - 0x85, 0x20, // REPORT_ID (32) - - // Report id and size - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x00, // USAGE (Undefined) - 0x95, 0x02, // REPORT_COUNT (2) - 0x75, 0x08, // REPORT_SIZE (8) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - // Sync - Replaced by constant - 0x75, 0x01, // REPORT_SIZE (1) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - // Sync - As a button - 0x05, 0x09, // USAGE_PAGE (Button) -// 0x09, 0x0f, // USAGE (Button 15) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x75, 0x01, // REPORT_SIZE (1) -// 0x81, 0x02, // INPUT (Data,Var,Abs) - - // Dummy (always zero) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - // Menu button - 0x09, 0x09, // USAGE (Button 9) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // View button - 0x09, 0x0a, // USAGE (Button 10) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // A, B, X & Y buttons - 0x19, 0x01, // USAGE_MINIMUM (Button 1) - 0x29, 0x04, // USAGE_MAXIMUM (Button 4) - 0x95, 0x04, // REPORT_COUNT (4) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // D-Pad up, down, left & right - 0x19, 0x0c, // USAGE_MINIMUM (Button 12) - 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) - 0x95, 0x04, // REPORT_COUNT (4) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // Left & right bumpers - 0x19, 0x05, // USAGE_MINIMUM (Button 5) - 0x29, 0x06, // USAGE_MAXIMUM (Button 6) - 0x95, 0x02, // REPORT_COUNT (2) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // Left & right stick buttons - 0x19, 0x07, // USAGE_MINIMUM (Button 7) - 0x29, 0x08, // USAGE_MAXIMUM (Button 8) - 0x95, 0x02, // REPORT_COUNT (2) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // Left & right triggers - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x32, // USAGE (Z) - 0x09, 0x35, // USAGE (Rz) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) - 0x75, 0x10, // REPORT_SIZE (16) - 0x95, 0x02, // REPORT_COUNT (2) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - // Left & right sticks (H & -V) - 0x09, 0x30, // USAGE (X) - 0x09, 0x31, // USAGE (Y) - 0x09, 0x33, // USAGE (Rx) - 0x09, 0x34, // USAGE (Ry) - 0x16, 0x00, 0x80, // LOGICAL_MINIMUM (-32768) - 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767) - 0x75, 0x10, // REPORT_SIZE (16) - 0x95, 0x04, // REPORT_COUNT (4) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0xc0, // END_COLLECTION - - 0xa1, 0x00, // COLLECTION (Physical) - 0x85, 0x07, // REPORT_ID (7) - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x00, // USAGE (Undefined) - 0x95, 0x02, // REPORT_COUNT (2) - 0x75, 0x08, // REPORT_SIZE (8) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - // Xbox button - 0x05, 0x09, // USAGE_PAGE (Button) - 0x09, 0x0b, // USAGE (Button 11) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x00, // USAGE (Undefined) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - 0xc0, // END_COLLECTION - 0xc0 // END_COLLECTION -}; - -// Old trigger minimum and maximum. -// Holding onto it so it is easy to replace if we need it. -// Goes on lines 84 and 85 at time of writing. -// 0x15, 0x00, // LOGICAL_MINIMUM (0) -// 0x26, 0xff, 0x03, // LOGICAL_MAXIMUM (1023) \ No newline at end of file From 8e449c982f037ce6fbccdd2de302ff3cbb06e594 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 22 Jan 2016 21:09:10 -0600 Subject: [PATCH 020/216] Remove xboxOnehid.h --- 360Controller/Controller.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 5ca86cad..f1437526 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -27,9 +27,6 @@ namespace HID_360 { #include "xbox360hid.h" } -namespace HID_ONE { -#include "xboxOnehid.h" -} #include "_60Controller.h" #pragma mark - Xbox360ControllerClass From 29e7804bd1c7b56ecc2007d056fd374ff6f29d13 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 22 Jan 2016 21:41:06 -0600 Subject: [PATCH 021/216] Pretend360 Auto-Reload --- 360Controller/_60Controller.cpp | 2 +- Pref360Control/MyWhole360ControllerMapper.m | 2 +- Pref360Control/Pref360ControlPref.m | 2 -- Pref360Control/en.lproj/Pref360ControlPref.xib | 9 +++++---- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 829eee38..115a588d 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1000,7 +1000,7 @@ void Xbox360Peripheral::PadDisconnect(void) { if (padHandler != NULL) { - bool b1 = padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); padHandler->release(); padHandler = NULL; } diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 336a650b..63f6907f 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -163,7 +163,7 @@ - (void)reset { [remappingButton setState:NSOffState]; [pref changeSetting:nil]; [[BindingTableView tableView] reloadData]; -// [pref changeSetting:nil]; + [pref changeSetting:nil]; } - (void)awakeFromNib { diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index f3e76b03..6243f38f 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -950,8 +950,6 @@ - (IBAction)changeSetting:(id)sender [_rightDeadZone setVal:[_rightStickDeadzone doubleValue]]; [_wholeController setRightStickDeadzone:[_rightStickDeadzone doubleValue]]; [_rightStickAnalog setDeadzone:[_rightStickDeadzone doubleValue]]; - - [self updateDeviceList]; } // Run an AppleScript from String and returns YES on successful execution diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 4caf2b78..0034296b 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,7 +1,8 @@ - + + @@ -457,7 +458,7 @@ - + @@ -516,7 +517,7 @@ - + @@ -891,7 +892,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + From a67afc86d95090acfaedce040edf37b9c098064b Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 22 Jan 2016 21:43:05 -0600 Subject: [PATCH 022/216] Clean up debugging --- Pref360Control/Pref360ControlPref.m | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 6243f38f..db9021ad 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -198,7 +198,7 @@ - (void)axisChanged:(int)index newValue:(int)value if (tabIndex == 0) { // Controller Test [_leftTrigger setVal:value]; largeMotor=value; -// [self testMotorsLarge:largeMotor small:smallMotor]; + [self testMotorsLarge:largeMotor small:smallMotor]; } break; @@ -206,7 +206,7 @@ - (void)axisChanged:(int)index newValue:(int)value if (tabIndex == 0) { [_rightTrigger setVal:value]; smallMotor=value; -// [self testMotorsLarge:largeMotor small:smallMotor]; + [self testMotorsLarge:largeMotor small:smallMotor]; } break; @@ -393,8 +393,8 @@ - (void)resetDisplay - (void)stopDevice { if(registryEntry==0) return; -// [self testMotorsLarge:0 small:0]; -// [self testMotorsCleanUp]; + [self testMotorsLarge:0 small:0]; + [self testMotorsCleanUp]; if (hidQueue) { CFRunLoopSourceRef eventSource; @@ -684,8 +684,8 @@ - (void)startDevice [self inputEnable:YES]; // Set device capabilities // Set FF motor control -// [self testMotorsInit]; -// [self testMotorsLarge:0 small:0]; + [self testMotorsInit]; + [self testMotorsLarge:0 small:0]; largeMotor = 0; smallMotor = 0; // Battery level? From 502981319b0c667e4a592993eec5660f257c32e4 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 23 Jan 2016 10:38:49 -0600 Subject: [PATCH 023/216] Remove unneeded code --- 360Controller/Controller.cpp | 34 +-------------------------------- 360Controller/Controller.h | 1 - 360Controller/_60Controller.cpp | 19 ------------------ 3 files changed, 1 insertion(+), 53 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index f1437526..7b093cef 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -528,28 +528,6 @@ UInt16 XboxOneControllerClass::convertButtonPacket(UInt16 buttons) } void XboxOneControllerClass::convertFromXboxOne(void *buffer) -{ - XBOXONE_IN_REPORT *reportXone = (XBOXONE_IN_REPORT*)buffer; - XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; - UInt8 trigL = 0, trigR = 0; - XBOX360_HAT left, right; - - report360->header.command = 0x00; - report360->header.size = 0x14; - - trigL = (reportXone->trigL / 1023.0) * 255; - trigR = (reportXone->trigR / 1023.0) * 255; - left = reportXone->left; - right = reportXone->right; - - report360->buttons = convertButtonPacket(reportXone->buttons); - report360->trigL = trigL; - report360->trigR = trigR; - report360->left = left; - report360->right = right; -} - -void XboxOneControllerClass::convertFromXboxOneElite(void *buffer) { XBOXONE_ELITE_IN_REPORT *reportXone = (XBOXONE_ELITE_IN_REPORT*)buffer; XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; @@ -579,23 +557,13 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); if (report->header.command==0x20) { - if (report->header.size==0x0e)//(sizeof(XBOXONE_IN_REPORT)-4)) //0x0e + if (report->header.size==0x0e || report->header.size==0x1d) { convertFromXboxOne(report); XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; remapButtons(report360); GetOwner(this)->fiddleReport(report360->left, report360->right); - if (GetOwner(this)->swapSticks) - remapAxes(report360); - } - else if (report->header.size==0x1d)//(sizeof(XBOXONE_ELITE_IN_REPORT)-5)) //0x1d - { - convertFromXboxOneElite(report); - XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; - remapButtons(report360); - GetOwner(this)->fiddleReport(report360->left, report360->right); - if (GetOwner(this)->swapSticks) remapAxes(report360); } diff --git a/360Controller/Controller.h b/360Controller/Controller.h index c87a9a09..b1579322 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -104,7 +104,6 @@ class XboxOneControllerClass : public Xbox360ControllerClass IOOptionBits options = 0 ); virtual void convertFromXboxOne(void *buffer); - virtual void convertFromXboxOneElite(void *buffer); virtual OSString* newProductString() const; }; diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 115a588d..22d4347c 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -355,19 +355,7 @@ bool Xbox360Peripheral::start(IOService *provider) * Third party Xbox One controllers requires more than just 0x05 0x20 * Minimum required packets unknown. */ -// UInt8 xoneInitFirst[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; UInt8 xoneInitFirst[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; -// UInt8 xoneInitThird[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; -// UInt8 xoneInitFourth[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; -// UInt8 xoneInitFourth[] = { 0x09, 0x08, 0x04, 0x08, 0x00, 0x03, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00 }; -// UInt8 xoneInitFifth[] = { 0x09, 0x00, 0x04, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }; -// UInt8 xoneInitFirst[] = { 0x04, 0x20, 0x01, 0x00 }; -// UInt8 xoneInitSecond[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x9c, 0x00 }; -// UInt8 xoneInitThird[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00 }; -// UInt8 xoneInitFourth[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; -// UInt8 xoneInitFifth[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; -// UInt8 xoneInitSixth[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; -// UInt8 xoneInitSeventh[] = { 0x06, 0x20, 0x01, 0x02, 0x01, 0x00 }; if (!super::start(provider)) return false; @@ -543,13 +531,6 @@ bool Xbox360Peripheral::start(IOService *provider) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { QueueWrite(&xoneInitFirst, sizeof(xoneInitFirst)); -// QueueWrite(&xoneInitSecond, sizeof(xoneInitSecond)); -// QueueWrite(&xoneInitThird, sizeof(xoneInitThird)); -// QueueWrite(&xoneInitFourth, sizeof(xoneInitFourth)); -// QueueWrite(&xoneInitFifth, sizeof(xoneInitFifth)); -// QueueWrite(&xoneInitSixth, sizeof(xoneInitSixth)); -// QueueWrite(&xoneInitSeventh, sizeof(xoneInitSeventh)); - IOLog("Xbox One Init send\n"); } else { // Disable LED Xbox360_Prepare(led,outLed); From 3f91bd62b19c39379bef338788ce706652555639 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 25 Jan 2016 00:22:17 -0600 Subject: [PATCH 024/216] Fix Xbox One rumble --- 360Controller/Controller.cpp | 27 ++++++++++++++++----------- 360Controller/Controller.h | 1 + 360Controller/_60Controller.cpp | 17 +++++++++-------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 7b093cef..8b5fd84a 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -458,16 +458,14 @@ typedef struct { } PACKED XBOXONE_IN_GUIDE_REPORT; typedef struct { - UInt8 command; // 0x09 - UInt8 reserved1; // So far 0x08 - UInt8 reserved2; // So far always 0x00 - UInt8 substructure; // 0x08 - Continuous, 0x09 - Single + XBOXONE_HEADER header; UInt8 mode; // So far always 0x00 UInt8 rumbleMask; // So far always 0x0F UInt8 trigL, trigR; UInt8 little, big; UInt8 length; // Length of time to rumble UInt8 period; // Period of time between pulses. DO NOT INCLUDE WHEN SUBSTRUCTURE IS 0x09 + UInt8 extra; } PACKED XBOXONE_OUT_RUMBLE; typedef enum { @@ -573,6 +571,10 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; isXboxOneGuideButtonPressed = (bool)guideReport->state; } + else + { + IOLog("Xbox One - Other packet: %d\n", report->header.command); + } } } IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); @@ -590,14 +592,17 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor { case 0x00: // Set force feedback XBOXONE_OUT_RUMBLE rumble; - rumble.command = 0x09; - rumble.reserved1 = 0x08; - rumble.reserved2 = 0x00; - rumble.substructure = 0x09; + rumble.header.command = 0x09; + rumble.header.reserved1 = 0x00; + rumble.header.counter = outCounter++; + rumble.header.size = 0x09; rumble.mode = 0x00; rumble.rumbleMask = 0x0F; - rumble.length = 0x80; - + rumble.length = 0xFF; + rumble.period = 0x00; + rumble.extra = 0x00; +// IOLog("Data: %d %d %d %d, outCounter: %d\n", data[0], data[1], data[2], data[3], rumble.reserved2); + rumbleType = GetOwner(this)->rumbleType; if (rumbleType == 0) // Default { @@ -625,7 +630,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor rumble.big = data[3]; } - GetOwner(this)->QueueWrite(&rumble,11); + GetOwner(this)->QueueWrite(&rumble,13); return kIOReturnSuccess; case 0x01: // Unsupported LED return kIOReturnSuccess; diff --git a/360Controller/Controller.h b/360Controller/Controller.h index b1579322..6aff6e88 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -92,6 +92,7 @@ class XboxOneControllerClass : public Xbox360ControllerClass #define XboxOne_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x-4);} protected: + UInt8 outCounter = 4; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); UInt16 convertButtonPacket(UInt16 buttons); diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 22d4347c..004bcbab 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -350,13 +350,6 @@ bool Xbox360Peripheral::start(IOService *provider) XBOX360_OUT_LED led; IOWorkLoop *workloop = NULL; - /* - * Xbox One controller init packets. - * Third party Xbox One controllers requires more than just 0x05 0x20 - * Minimum required packets unknown. - */ - UInt8 xoneInitFirst[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; - if (!super::start(provider)) return false; // Get device @@ -530,7 +523,15 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { - QueueWrite(&xoneInitFirst, sizeof(xoneInitFirst)); + UInt8 xoneInit1[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; + UInt8 xoneInit2[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; + UInt8 xoneInit3[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; + UInt8 xoneInit4[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; +// UInt8 xoneInit5[] = { 0x09, 0x00, 0x04, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }; + QueueWrite(&xoneInit1, sizeof(xoneInit1)); + QueueWrite(&xoneInit2, sizeof(xoneInit2)); + QueueWrite(&xoneInit3, sizeof(xoneInit3)); + QueueWrite(&xoneInit4, sizeof(xoneInit4)); } else { // Disable LED Xbox360_Prepare(led,outLed); From 914bb650b6a8d823eead196f90f38756d668c47b Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 25 Jan 2016 08:40:46 -0600 Subject: [PATCH 025/216] Clean up --- 360Controller/_60Controller.cpp | 2 +- 360Controller/_60Controller.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 004bcbab..b601309a 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -320,6 +320,7 @@ bool Xbox360Peripheral::init(OSDictionary *propTable) deadOffLeft = false; deadOffRight = false; swapSticks = false; + pretend360 = false; // Controller Specific rumbleType = 0; // Bindings @@ -527,7 +528,6 @@ bool Xbox360Peripheral::start(IOService *provider) UInt8 xoneInit2[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; UInt8 xoneInit3[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; UInt8 xoneInit4[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; -// UInt8 xoneInit5[] = { 0x09, 0x00, 0x04, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }; QueueWrite(&xoneInit1, sizeof(xoneInit1)); QueueWrite(&xoneInit2, sizeof(xoneInit2)); QueueWrite(&xoneInit3, sizeof(xoneInit3)); diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index fce1d37a..145da933 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -141,7 +141,6 @@ class Xbox360Peripheral : public IOService bool QueueWrite(const void *bytes,UInt32 length); void fiddleReport(XBOX360_HAT& left, XBOX360_HAT& right); - // virtual void fiddleReport(IOBufferMemoryDescriptor *buffer); IOHIDDevice* getController(int index); From 8edb65b55d1bcc28ecea96f68fc8891ed4c96773 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 25 Jan 2016 10:17:38 -0600 Subject: [PATCH 026/216] Update version number --- Pref360Control/en.lproj/Pref360ControlPref.xib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 0034296b..cbb40912 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -991,7 +991,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + From ec86a14d50f420d203707a25d1e33b499941b67b Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 25 Jan 2016 10:44:55 -0600 Subject: [PATCH 027/216] Update to beta 5 --- Install360Controller/Text/Welcome.rtf | 83 +++++++++------- .../en.lproj/Pref360ControlPref.xib | 96 ++----------------- 2 files changed, 57 insertions(+), 122 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 7f9552fd..5b0591d0 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -19,15 +19,16 @@ {\list\listtemplateid16\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid16} {\list\listtemplateid17\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid17} {\list\listtemplateid18\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid18} -{\list\listtemplateid19\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid19}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}} +{\list\listtemplateid19\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid19} +{\list\listtemplateid20\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid20}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.15 (beta 4) +\b0\fs24 \cf0 Version 0.15 (beta 5) \i unofficial \i0 \ Copyright (C) 2005-2013 Colin Munro\ @@ -35,19 +36,31 @@ Copyright (C) 2005-2013 Colin Munro\ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ -Update 0.15 (beta 4): 01/14/2016\ +Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls1\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls1\ilvl0 \b \cf0 {\listtext \'95 } +\b0 Fix Xbox One rumble. +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ +Update 0.15 (beta 4): 01/14/2016\ + +\b0 This update includes:\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0 +\b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls1\ilvl0 +\ls2\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls1\ilvl0 +\ls2\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -57,7 +70,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls3\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -65,7 +78,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls4\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -75,19 +88,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls5\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0 +\ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -97,16 +110,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls6\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0 +\ls6\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -116,17 +129,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls7\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0 +\ls7\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls6\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls6\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -136,7 +149,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls8\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -145,7 +158,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls9\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -155,7 +168,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls10\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -167,7 +180,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls11\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -177,7 +190,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls12\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -189,7 +202,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls13\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -199,7 +212,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls14\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -210,7 +223,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls15\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -220,7 +233,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls16\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -231,7 +244,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls17\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -242,7 +255,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls18\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -253,7 +266,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls19\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -262,7 +275,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls20\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index cbb40912..12ec9d39 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -69,7 +69,6 @@ - @@ -89,7 +88,6 @@ - @@ -104,7 +102,6 @@ - @@ -114,7 +111,6 @@ - @@ -139,7 +135,6 @@ - @@ -150,7 +145,6 @@ - @@ -161,7 +155,6 @@ - @@ -169,7 +162,6 @@ - @@ -177,11 +169,9 @@ - - @@ -259,7 +244,6 @@ - @@ -273,13 +257,11 @@ - - @@ -288,7 +270,6 @@ - @@ -306,7 +287,6 @@ - @@ -355,7 +332,6 @@ - @@ -380,7 +355,6 @@ - @@ -406,7 +380,6 @@ - @@ -416,7 +389,6 @@ - @@ -437,7 +409,6 @@ - @@ -646,7 +602,6 @@ - @@ -728,7 +677,6 @@ - @@ -852,13 +790,11 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -874,7 +810,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -886,7 +821,6 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -916,7 +848,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -937,12 +868,11 @@ Due to some internal limitations, you need to connect your device once to be abl - + - - + XBox 360 Controller Driver @@ -1495,26 +1425,21 @@ This driver is licensed under the GNU Public License. A copy of this license is - + - - - - + - @@ -1522,7 +1447,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1533,7 +1457,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1550,7 +1473,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - From eb9496043cb453c7c731ac671992ccbc5951b80e Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 25 Jan 2016 19:00:14 -0600 Subject: [PATCH 028/216] Fix guide button issues --- 360Controller/Controller.cpp | 21 +++++++++++---------- 360Controller/Controller.h | 1 + 360Controller/xbox360hid.h | 25 ------------------------- 3 files changed, 12 insertions(+), 35 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 8b5fd84a..2b2db83a 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -553,7 +553,15 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); if (desc != NULL) { XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); - if (report->header.command==0x20) + if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) + { + XBOXONE_IN_GUIDE_REPORT *guideReport=(XBOXONE_IN_GUIDE_REPORT*)report; + isXboxOneGuideButtonPressed = (bool)guideReport->state; + XBOX360_IN_REPORT *oldReport = (XBOX360_IN_REPORT*)lastData; + oldReport->buttons ^= (-isXboxOneGuideButtonPressed ^ oldReport->buttons) & (1 << GetOwner(this)->mapping[10]); + memcpy(report, lastData, sizeof(XBOX360_IN_REPORT)); + } + else if (report->header.command==0x20) { if (report->header.size==0x0e || report->header.size==0x1d) { @@ -564,17 +572,10 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I if (GetOwner(this)->swapSticks) remapAxes(report360); + + memcpy(lastData, report360, sizeof(XBOX360_IN_REPORT)); } } - else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) - { - const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; - isXboxOneGuideButtonPressed = (bool)guideReport->state; - } - else - { - IOLog("Xbox One - Other packet: %d\n", report->header.command); - } } } IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 6aff6e88..4a955cc7 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -92,6 +92,7 @@ class XboxOneControllerClass : public Xbox360ControllerClass #define XboxOne_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x-4);} protected: + UInt8 lastData[20]; UInt8 outCounter = 4; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index 79fd39e9..e8ae1850 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -121,30 +121,5 @@ static const unsigned char ReportDescriptor[] = { 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0, // END_COLLECTION 0xc0, // END_COLLECTION - - 0xa1, 0x00, // COLLECTION (Physical) - 0x85, 0x07, // REPORT_ID (7) - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x00, // USAGE (Undefined) - 0x95, 0x02, // REPORT_COUNT (2) - 0x75, 0x08, // REPORT_SIZE (8) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - - // Xbox button - 0x05, 0x09, // USAGE_PAGE (Button) - 0x09, 0x0b, // USAGE (Button 11) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x81, 0x02, // INPUT (Data,Var,Abs) - - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x00, // USAGE (Undefined) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - 0xc0, // END_COLLECTION - 0xc0 // END_COLLECTION }; From 9c3ff1c4a3caae40dad83ab3964c8db54036ec87 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 26 Jan 2016 22:08:22 -0600 Subject: [PATCH 029/216] Add device from #213 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 3998192f..8a35697f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2251,6 +2251,26 @@ idVendor 9414 + XboxOneProEXController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21562 + idVendor + 9414 + NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From 5d891bd01ec31ba5a6e57d70f4657eafc33d0338 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 31 Jan 2016 10:55:35 -0600 Subject: [PATCH 030/216] Add ANOTHER Rock Candy Xone --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 8a35697f..d66c7187 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1911,6 +1911,26 @@ idVendor 3695 + RockCandyGamepadforXboxOne2016 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 838 + idVendor + 3695 + SC4VF5Stick CFBundleIdentifier From 715f334717c999e0fce1aeea35fe0fcc1af96afc Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 7 Feb 2016 13:01:54 -0600 Subject: [PATCH 031/216] New devices --- 360Controller/Info.plist | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index d66c7187..9d2a1e8a 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -171,6 +171,26 @@ idVendor 1118 + Controller2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 655 + idVendor + 1118 + Counterfeit360Controller1 CFBundleIdentifier @@ -751,6 +771,26 @@ idVendor 1133 + LogitechG920 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 49761 + idVendor + 1133 + MLGGamePadforXbox360 CFBundleIdentifier @@ -831,6 +871,26 @@ idVendor 7085 + MadCatzCallOfDuty + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61477 + idVendor + 7085 + MadCatzFPSPro CFBundleIdentifier From d0b6b1c78268ab19a868d686ca74e1081aedde17 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Mon, 8 Feb 2016 16:37:00 -0500 Subject: [PATCH 032/216] Add Afterglow Prismatic Controller for Xbox One --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 9d2a1e8a..d66469cc 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -40,6 +40,26 @@ idVendor 3695 + AfterglowPrismaticOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 313 + idVendor + 3695 + ArcadeGameStick CFBundleIdentifier From e5c44092b30adee6e0178ae6e6bb75b465e676d2 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 18 Feb 2016 23:31:09 -0600 Subject: [PATCH 033/216] Fix new Xone fight stick packet --- 360Controller/Controller.cpp | 55 +++++++++++++++++++++++---------- 360Controller/Controller.h | 3 +- 360Controller/_60Controller.cpp | 12 +++++++ 360Controller/_60Controller.h | 1 + 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 8b5fd84a..5c688067 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -134,7 +134,8 @@ IOReturn Xbox360ControllerClass::handleReport(IOMemoryDescriptor * descriptor, I XBOX360_IN_REPORT *report=(XBOX360_IN_REPORT*)desc->getBytesNoCopy(); if ((report->header.command==inReport) && (report->header.size==sizeof(XBOX360_IN_REPORT))) { GetOwner(this)->fiddleReport(report->left, report->right); - remapButtons(report); + if (!(GetOwner(this)->noMapping)) + remapButtons(report); if (GetOwner(this)->swapSticks) remapAxes(report); } @@ -440,6 +441,16 @@ typedef struct { XBOX360_HAT left, right; } PACKED XBOXONE_IN_REPORT; +typedef struct { + XBOXONE_HEADER header; + UInt16 buttons; + UInt16 trigL, trigR; + XBOX360_HAT left, right; + UInt8 unknown1[6]; + UInt8 triggersAsButtons; // 0x40 is RT. 0x80 is LT + UInt8 unknown2[7]; +} PACKED XBOXONE_IN_FIGHTSTICK_REPORT; + typedef struct { XBOXONE_HEADER header; UInt16 buttons; @@ -525,7 +536,7 @@ UInt16 XboxOneControllerClass::convertButtonPacket(UInt16 buttons) return new_buttons; } -void XboxOneControllerClass::convertFromXboxOne(void *buffer) +void XboxOneControllerClass::convertFromXboxOne(void *buffer, UInt8 packetSize) { XBOXONE_ELITE_IN_REPORT *reportXone = (XBOXONE_ELITE_IN_REPORT*)buffer; XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; @@ -535,8 +546,16 @@ void XboxOneControllerClass::convertFromXboxOne(void *buffer) report360->header.command = 0x00; report360->header.size = 0x14; - trigL = (reportXone->trigL / 1023.0) * 255; - trigR = (reportXone->trigR / 1023.0) * 255; + if (packetSize == 0x1a) // Fight Stick + { + if ((0x80 & reportXone->true_trigR) == 0x80) { trigL = 255; } + if ((0x40 & reportXone->true_trigR) == 0x40) { trigR = 255; } + } + else + { + trigL = (reportXone->trigL / 1023.0) * 255; + trigR = (reportXone->trigR / 1023.0) * 255; + } left = reportXone->left; right = reportXone->right; @@ -553,28 +572,30 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I IOBufferMemoryDescriptor *desc = OSDynamicCast(IOBufferMemoryDescriptor, descriptor); if (desc != NULL) { XBOXONE_ELITE_IN_REPORT *report=(XBOXONE_ELITE_IN_REPORT*)desc->getBytesNoCopy(); - if (report->header.command==0x20) + if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) { - if (report->header.size==0x0e || report->header.size==0x1d) + XBOXONE_IN_GUIDE_REPORT *guideReport=(XBOXONE_IN_GUIDE_REPORT*)report; + isXboxOneGuideButtonPressed = (bool)guideReport->state; + XBOX360_IN_REPORT *oldReport = (XBOX360_IN_REPORT*)lastData; + oldReport->buttons ^= (-isXboxOneGuideButtonPressed ^ oldReport->buttons) & (1 << GetOwner(this)->mapping[10]); + memcpy(report, lastData, sizeof(XBOX360_IN_REPORT)); + } + else if (report->header.command==0x20) + { + if (report->header.size==0x0e || report->header.size==0x1d || report->header.size==0x1a) { - convertFromXboxOne(report); + convertFromXboxOne(report, report->header.size); XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; - remapButtons(report360); + if (!(GetOwner(this)->noMapping)) + remapButtons(report360); GetOwner(this)->fiddleReport(report360->left, report360->right); if (GetOwner(this)->swapSticks) remapAxes(report360); + + memcpy(lastData, report360, sizeof(XBOX360_IN_REPORT)); } } - else if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) - { - const XBOXONE_IN_GUIDE_REPORT *guideReport=(const XBOXONE_IN_GUIDE_REPORT*)report; - isXboxOneGuideButtonPressed = (bool)guideReport->state; - } - else - { - IOLog("Xbox One - Other packet: %d\n", report->header.command); - } } } IOReturn ret = IOHIDDevice::handleReport(descriptor, reportType, options); diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 6aff6e88..f9ed8c58 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -92,6 +92,7 @@ class XboxOneControllerClass : public Xbox360ControllerClass #define XboxOne_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x-4);} protected: + UInt8 lastData[20]; UInt8 outCounter = 4; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); @@ -104,7 +105,7 @@ class XboxOneControllerClass : public Xbox360ControllerClass IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - virtual void convertFromXboxOne(void *buffer); + virtual void convertFromXboxOne(void *buffer, UInt8 packetSize); virtual OSString* newProductString() const; }; diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index b601309a..62d5e4ea 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -324,6 +324,7 @@ bool Xbox360Peripheral::init(OSDictionary *propTable) // Controller Specific rumbleType = 0; // Bindings + noMapping = true; for (int i = 0; i < 11; i++) { mapping[i] = i; @@ -904,6 +905,17 @@ void Xbox360Peripheral::MakeSettingsChanges() PadConnect(); } } + + 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; + } + } } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 145da933..9b3cf12a 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -118,6 +118,7 @@ class Xbox360Peripheral : public IOService bool swapSticks; UInt8 mapping[15]; + bool noMapping = true; bool pretend360; // Change VID and PID to MS 360 Controller // this is from the IORegistryEntry - no provider yet From fc89bbb0df7d646c8975100e50c7be0bc1cf6ace Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 21 Feb 2016 13:54:19 -0600 Subject: [PATCH 034/216] Add device from #234 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index d66469cc..efc9f85c 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2231,6 +2231,26 @@ idVendor 5769 + TrustPredator + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 3 + idVendor + 2064 + TSZPelican CFBundleIdentifier From 974ad1918d3b622e7d09139e8f9f1c6e705e9232 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 21 Feb 2016 16:01:55 -0600 Subject: [PATCH 035/216] Add device from #235 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index efc9f85c..5e50296f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1591,6 +1591,26 @@ idVendor 9414 + PowerAMiniXboxOne2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21562 + idVendor + 9414 + PowerASpectraIlluminatedXboxOne CFBundleIdentifier From 6da02a1fbc8cabfd5583d162c527076a7013c7e4 Mon Sep 17 00:00:00 2001 From: Kevin Eaves Date: Thu, 17 Mar 2016 20:39:04 -0700 Subject: [PATCH 036/216] Remove trailing whitespaces --- 360Controller/ChatPad.cpp | 14 +-- 360Controller/ChatPad.h | 18 +-- 360Controller/ControlStruct.h | 4 +- 360Controller/Controller.cpp | 64 +++++----- 360Controller/Controller.h | 46 +++---- 360Controller/_60Controller.cpp | 84 ++++++------- 360Controller/_60Controller.h | 66 +++++----- 360Controller/chatpadhid.h | 10 +- 360Controller/chatpadkeys.cpp | 12 +- 360Controller/chatpadkeys.h | 10 +- 360Controller/xbox360hid.h | 4 +- 360Daemon/360Daemon.m | 24 ++-- 360Daemon/ControlPrefs.h | 10 +- 360Daemon/ControlPrefs.m | 16 +-- 360Daemon/DaemonLEDs.m | 30 ++--- .../360Control.appiconset/Contents.json | 2 +- 360Daemon/en.lproj/InfoPlist.strings | 1 - DriverTool/DriverTool.m | 30 ++--- Feedback360/Feedback360.cpp | 102 +++++++-------- Feedback360/Feedback360.h | 2 +- Feedback360/Feedback360Effect.cpp | 4 +- Feedback360/Feedback360Effect.h | 2 +- Feedback360/devlink.cpp | 6 +- Feedback360/devlink.h | 4 +- Install360Controller/Text/Welcome.rtf | 2 +- Install360Controller/makedmg.sh | 2 +- Pref360Control/DeviceItem.h | 4 +- Pref360Control/DeviceItem.m | 12 +- Pref360Control/DeviceLister.h | 10 +- Pref360Control/DeviceLister.m | 76 ++++++------ Pref360Control/MyAnalogStick.h | 4 +- Pref360Control/MyAnalogStick.m | 22 ++-- Pref360Control/MyBatteryMonitor.m | 2 +- Pref360Control/MyCentreButtons.h | 4 +- Pref360Control/MyCentreButtons.m | 6 +- Pref360Control/MyDeadZoneViewer.m | 2 +- Pref360Control/MyDigitalStick.h | 4 +- Pref360Control/MyDigitalStick.m | 10 +- Pref360Control/MyMainButtons.h | 4 +- Pref360Control/MyMainButtons.m | 8 +- Pref360Control/MyShoulderButton.h | 4 +- Pref360Control/MyShoulderButton.m | 6 +- Pref360Control/MyTrigger.m | 2 +- Pref360Control/MyWhole360Controller.m | 2 +- Pref360Control/MyWhole360ControllerMapper.h | 2 +- Pref360Control/MyWhole360ControllerMapper.m | 32 ++--- Pref360Control/Pref360ControlPref.h | 4 +- Pref360Control/Pref360ControlPref.m | 116 +++++++++--------- Pref360Control/Pref360StyleKit.m | 24 ++-- .../AboutTemplate.imageset/Contents.json | 2 +- .../PowerOffTemplate.imageset/Contents.json | 2 +- .../Wireless360Controller.cpp | 32 ++--- Wireless360Controller/Wireless360Controller.h | 12 +- WirelessGamingReceiver/WirelessDevice.cpp | 6 +- WirelessGamingReceiver/WirelessDevice.h | 12 +- .../WirelessGamingReceiver.cpp | 68 +++++----- .../WirelessGamingReceiver.h | 24 ++-- WirelessGamingReceiver/WirelessHIDDevice.cpp | 42 +++---- WirelessGamingReceiver/WirelessHIDDevice.h | 10 +- WirelessGamingReceiver/devices.h | 4 +- 60 files changed, 571 insertions(+), 572 deletions(-) diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp index 7b8feee8..cf312563 100644 --- a/360Controller/ChatPad.cpp +++ b/360Controller/ChatPad.cpp @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + ChatPad.cpp - Implementation of the ChatPad Accessory driver - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -34,7 +34,7 @@ OSDefineMetaClassAndStructors(ChatPadKeyboardClass, IOHIDDevice) IOReturn ChatPadKeyboardClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const { IOBufferMemoryDescriptor *buffer; - + buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, sizeof(HID_ChatPad::ReportDescriptor)); if (buffer == NULL) return kIOReturnNoResources; @@ -106,7 +106,7 @@ OSNumber* ChatPadKeyboardClass::newProductIDNumber() const static IOHIDDevice* GetParent(const IOService *current) { Xbox360Peripheral *owner; - + owner = OSDynamicCast(Xbox360Peripheral, current->getProvider()); if (owner == NULL) return NULL; diff --git a/360Controller/ChatPad.h b/360Controller/ChatPad.h index c7afdfaf..89de84c0 100644 --- a/360Controller/ChatPad.h +++ b/360Controller/ChatPad.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + ChatPad.h - Driver class for the ChatPad accessory - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -26,7 +26,7 @@ class ChatPadKeyboardClass : public IOHIDDevice { OSDeclareDefaultStructors(ChatPadKeyboardClass) - + private: public: @@ -34,12 +34,12 @@ class ChatPadKeyboardClass : public IOHIDDevice // IOHidDevice methods virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; - + virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options); virtual IOReturn handleReport(IOMemoryDescriptor *report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0); - + virtual OSString* newManufacturerString() const; virtual OSNumber* newPrimaryUsageNumber() const; virtual OSNumber* newPrimaryUsagePageNumber() const; @@ -48,6 +48,6 @@ class ChatPadKeyboardClass : public IOHIDDevice virtual OSString* newSerialNumberString() const; virtual OSString* newTransportString() const; virtual OSNumber* newVendorIDNumber() const; - + virtual OSNumber* newLocationIDNumber() const; }; diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index 6fe8e722..cfd7228b 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + ControlStruct.h - Structures used by the device - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 5c688067..7191a909 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Controller.cpp - driver class for the 360 controller - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -36,7 +36,7 @@ OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOHIDDevice) static Xbox360Peripheral* GetOwner(IOService *us) { IOService *prov = us->getProvider(); - + if (prov == NULL) return NULL; return OSDynamicCast(Xbox360Peripheral, prov); @@ -45,7 +45,7 @@ static Xbox360Peripheral* GetOwner(IOService *us) static IOUSBDevice* GetOwnerProvider(const IOService *us) { IOService *prov = us->getProvider(), *provprov; - + if (prov == NULL) return NULL; provprov = prov->getProvider(); @@ -73,7 +73,7 @@ IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) IOReturn Xbox360ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const { IOBufferMemoryDescriptor *buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,sizeof(HID_360::ReportDescriptor)); - + if (buffer == NULL) return kIOReturnNoResources; buffer->writeBytes(0,HID_360::ReportDescriptor,sizeof(HID_360::ReportDescriptor)); *descriptor=buffer; @@ -84,7 +84,7 @@ IOReturn Xbox360ControllerClass::newReportDescriptor(IOMemoryDescriptor **descri IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) { char data[2]; - + report->readBytes(0, data, 2); if (GetOwner(this)->rumbleType == 1) // Don't Rumble return kIOReturnSuccess; @@ -93,7 +93,7 @@ IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor if((data[1]!=report->getLength()) || (data[1]!=0x04)) return kIOReturnUnsupported; { XBOX360_OUT_RUMBLE rumble; - + Xbox360_Prepare(rumble,outRumble); report->readBytes(2,data,2); rumble.big=data[0]; @@ -106,7 +106,7 @@ IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor if((data[1]!=report->getLength())||(data[1]!=0x03)) return kIOReturnUnsupported; { XBOX360_OUT_LED led; - + report->readBytes(2,data,1); Xbox360_Prepare(led,outLed); led.pattern=data[0]; @@ -152,7 +152,7 @@ OSString* Xbox360ControllerClass::getDeviceString(UInt8 index,const char *def) c IOReturn err; char buf[1024]; const char *string; - + err = GetOwnerProvider(this)->GetStringDescriptor(index, buf, sizeof(buf)); if(err==kIOReturnSuccess) string=buf; else { @@ -207,7 +207,7 @@ OSNumber* Xbox360ControllerClass::newLocationIDNumber() const IOUSBDevice *device; OSNumber *number; UInt32 location = 0; - + device = GetOwnerProvider(this); if (device) { @@ -220,12 +220,12 @@ OSNumber* Xbox360ControllerClass::newLocationIDNumber() const // 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; } @@ -249,16 +249,16 @@ void Xbox360ControllerClass::remapButtons(void *buffer) new_buttons |= ((report360->buttons & 8192) == 8192) << GetOwner(this)->mapping[12]; new_buttons |= ((report360->buttons & 16384) == 16384) << GetOwner(this)->mapping[13]; new_buttons |= ((report360->buttons & 32768) == 32768) << GetOwner(this)->mapping[14]; - + // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", GetOwner(this)->mapping[0], GetOwner(this)->mapping[1], GetOwner(this)->mapping[2], GetOwner(this)->mapping[3], GetOwner(this)->mapping[4], GetOwner(this)->mapping[5], GetOwner(this)->mapping[6], GetOwner(this)->mapping[7], GetOwner(this)->mapping[8], GetOwner(this)->mapping[9], GetOwner(this)->mapping[10], GetOwner(this)->mapping[11], GetOwner(this)->mapping[12], GetOwner(this)->mapping[13], GetOwner(this)->mapping[14]); - + report360->buttons = new_buttons; } void Xbox360ControllerClass::remapAxes(void *buffer) { XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; - + XBOX360_HAT temp = report360->left; report360->left = report360->right; report360->right = temp; @@ -373,7 +373,7 @@ IOReturn XboxOriginalControllerClass::handleReport(IOMemoryDescriptor * descript IOLog("%s %d \n", __FUNCTION__, (int)reportType); logData(data, (int)descriptor->getLength()); } - + } else { descriptor->readBytes(0, data, descriptor->getLength()); if (reportType != 0 && data[0] != 0) { @@ -382,7 +382,7 @@ IOReturn XboxOriginalControllerClass::handleReport(IOMemoryDescriptor * descript logData(data, (int)descriptor->getLength()); } } - + IOReturn ret = Xbox360ControllerClass::handleReport(descriptor, reportType, options); //IOLog("%s END\n", __FUNCTION__); return ret; @@ -391,7 +391,7 @@ IOReturn XboxOriginalControllerClass::handleReport(IOMemoryDescriptor * descript IOReturn XboxOriginalControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) { char data[2]; - + report->readBytes(0, data, 2); if (GetOwner(this)->rumbleType == 1) // Don't Rumble return kIOReturnSuccess; @@ -412,7 +412,7 @@ IOReturn XboxOriginalControllerClass::setReport(IOMemoryDescriptor *report,IOHID if((data[1]!=report->getLength())||(data[1]!=0x03)) return kIOReturnUnsupported; // No leds return kIOReturnSuccess; - + default: IOLog("Unknown escape %d\n", data[0]); return kIOReturnUnsupported; @@ -515,7 +515,7 @@ OSString* XboxOneControllerClass::newProductString() const UInt16 XboxOneControllerClass::convertButtonPacket(UInt16 buttons) { UInt16 new_buttons = 0; - + new_buttons |= ((buttons & 4) == 4) << 4; new_buttons |= ((buttons & 8) == 8) << 5; new_buttons |= ((buttons & 16) == 16) << 12; @@ -530,9 +530,9 @@ UInt16 XboxOneControllerClass::convertButtonPacket(UInt16 buttons) new_buttons |= ((buttons & 8192) == 8192) << 9; new_buttons |= ((buttons & 16384) == 16384) << 6; new_buttons |= ((buttons & 32768) == 32768) << 7; - + new_buttons |= (isXboxOneGuideButtonPressed) << 10; - + return new_buttons; } @@ -542,10 +542,10 @@ void XboxOneControllerClass::convertFromXboxOne(void *buffer, UInt8 packetSize) XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; UInt8 trigL = 0, trigR = 0; XBOX360_HAT left, right; - + report360->header.command = 0x00; report360->header.size = 0x14; - + if (packetSize == 0x1a) // Fight Stick { if ((0x80 & reportXone->true_trigR) == 0x80) { trigL = 255; } @@ -558,7 +558,7 @@ void XboxOneControllerClass::convertFromXboxOne(void *buffer, UInt8 packetSize) } left = reportXone->left; right = reportXone->right; - + report360->buttons = convertButtonPacket(reportXone->buttons); report360->trigL = trigL; report360->trigR = trigR; @@ -589,10 +589,10 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I if (!(GetOwner(this)->noMapping)) remapButtons(report360); GetOwner(this)->fiddleReport(report360->left, report360->right); - + if (GetOwner(this)->swapSticks) remapAxes(report360); - + memcpy(lastData, report360, sizeof(XBOX360_IN_REPORT)); } } @@ -650,7 +650,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor rumble.little = data[2]; rumble.big = data[3]; } - + GetOwner(this)->QueueWrite(&rumble,13); return kIOReturnSuccess; case 0x01: // Unsupported LED @@ -684,4 +684,4 @@ OSNumber* XboxOnePretend360Class::newProductIDNumber() const OSNumber* XboxOnePretend360Class::newVendorIDNumber() const { return OSNumber::withNumber(1118,16); -} \ No newline at end of file +} diff --git a/360Controller/Controller.h b/360Controller/Controller.h index f9ed8c58..c6d9e79c 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Controller.h - Driver class for the 360 controller - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -26,27 +26,27 @@ class Xbox360ControllerClass : public IOHIDDevice { OSDeclareDefaultStructors(Xbox360ControllerClass) - + private: bool pretend360; - + private: OSString* getDeviceString(UInt8 index,const char *def=NULL) const; - + public: virtual bool start(IOService *provider); - + virtual IOReturn setProperties(OSObject *properties); - + virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; - + virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options); virtual IOReturn handleReport( IOMemoryDescriptor * report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - + virtual OSString* newManufacturerString() const; virtual OSNumber* newPrimaryUsageNumber() const; virtual OSNumber* newPrimaryUsagePageNumber() const; @@ -55,9 +55,9 @@ class Xbox360ControllerClass : public IOHIDDevice virtual OSString* newSerialNumberString() const; virtual OSString* newTransportString() const; virtual OSNumber* newVendorIDNumber() const; - + virtual OSNumber* newLocationIDNumber() const; - + virtual void remapButtons(void *buffer); virtual void remapAxes(void *buffer); }; @@ -66,18 +66,18 @@ class Xbox360ControllerClass : public IOHIDDevice class XboxOriginalControllerClass : public Xbox360ControllerClass { OSDeclareDefaultStructors(XboxOriginalControllerClass) - + private: UInt8 lastData[32]; UInt32 repeatCount; - + public: virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn handleReport( IOMemoryDescriptor * report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - + virtual OSString* newManufacturerString() const; virtual OSNumber* newProductIDNumber() const; virtual OSNumber* newVendorIDNumber() const; @@ -88,23 +88,23 @@ class XboxOriginalControllerClass : public Xbox360ControllerClass class XboxOneControllerClass : public Xbox360ControllerClass { OSDeclareDefaultStructors(XboxOneControllerClass) - + #define XboxOne_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x-4);} - + protected: UInt8 lastData[20]; UInt8 outCounter = 4; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); UInt16 convertButtonPacket(UInt16 buttons); - + public: virtual IOReturn setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options=0); virtual IOReturn handleReport( IOMemoryDescriptor * report, IOHIDReportType reportType = kIOHIDReportTypeInput, IOOptionBits options = 0 ); - + virtual void convertFromXboxOne(void *buffer, UInt8 packetSize); virtual OSString* newProductString() const; }; @@ -113,9 +113,9 @@ class XboxOneControllerClass : public Xbox360ControllerClass class XboxOnePretend360Class : public XboxOneControllerClass { OSDeclareDefaultStructors(XboxOnePretend360Class) - + public: virtual OSString* newProductString() const; virtual OSNumber* newProductIDNumber() const; virtual OSNumber* newVendorIDNumber() const; -}; \ No newline at end of file +}; diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 62d5e4ea..8dec6789 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -2,21 +2,21 @@ MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro Bug fixes contributed by Cody "codeman38" Boisclair - + _60Controller.cpp - main source of the driver - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -55,7 +55,7 @@ class LockRequired static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) { const IOUSBEndpointDescriptor *ed = pipe->GetEndpointDescriptor(); - + if(ed==NULL) return 0; else return ed->wMaxPacketSize; } @@ -63,7 +63,7 @@ static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) void Xbox360Peripheral::SendSpecial(UInt16 value) { IOUSBDevRequest controlReq; - + controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBInterface); controlReq.bRequest = 0x00; controlReq.wValue = value; @@ -77,7 +77,7 @@ void Xbox360Peripheral::SendSpecial(UInt16 value) void Xbox360Peripheral::SendInit(UInt16 value, UInt16 index) { IOUSBDevRequest controlReq; - + controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice); controlReq.bRequest = 0xa9; controlReq.wValue = value; @@ -90,7 +90,7 @@ void Xbox360Peripheral::SendInit(UInt16 value, UInt16 index) bool Xbox360Peripheral::SendSwitch(bool sendOut) { IOUSBDevRequest controlReq; - + controlReq.bmRequestType = USBmakebmRequestType(sendOut ? kUSBOut : kUSBIn, kUSBVendor, kUSBDevice); controlReq.bRequest = 0xa1; controlReq.wValue = 0x0000; @@ -100,7 +100,7 @@ bool Xbox360Peripheral::SendSwitch(bool sendOut) IOReturn err = device->DeviceRequest(&controlReq, 100, 100, NULL); if (err == kIOReturnSuccess) return true; - + const char *errStr = device->stringFromReturn(err); IOLog("start - failed to %s chatpad setting (%x): %s\n", sendOut ? "write" : "read", err, errStr); @@ -116,7 +116,7 @@ void Xbox360Peripheral::SendToggle(void) void Xbox360Peripheral::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) { Xbox360Peripheral *controller; - + controller = OSDynamicCast(Xbox360Peripheral, owner); controller->ChatPadTimerAction(sender); } @@ -124,7 +124,7 @@ void Xbox360Peripheral::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventS void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) { int nextTime, serialGot; - + serialGot = 0; nextTime = 1000; switch (serialTimerState) @@ -149,7 +149,7 @@ void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) } } break; - + case tsMiniToggle: SendToggle(); if (serialHeard) @@ -171,31 +171,31 @@ void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) } } break; - + case tsReset1: SendSpecial(0x1B); serialTimerState = tsReset2; nextTime = 35; break; - + case tsReset2: SendSpecial(0x1B); serialTimerState = tsMiniToggle; nextTime = 150; break; - + case tsSet1: SendSpecial(0x18); serialTimerState = tsSet2; nextTime = 10; break; - + case tsSet2: SendSpecial(0x10); serialTimerState = tsSet3; nextTime = 10; break; - + case tsSet3: SendSpecial(0x03); serialTimerState = tsToggle; @@ -212,11 +212,11 @@ void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) case 1: SerialConnect(); break; - + case 2: SerialDisconnect(); break; - + default: break; } @@ -228,7 +228,7 @@ 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(); @@ -287,7 +287,7 @@ void Xbox360Peripheral::readSettings(void) if (value != NULL) swapSticks = value->getValue(); value = OSDynamicCast(OSBoolean, dataDictionary->getObject("Pretend360")); if (value != NULL) pretend360 = value->getValue(); - + #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", @@ -351,7 +351,7 @@ bool Xbox360Peripheral::start(IOService *provider) IOUSBFindEndpointRequest pipe; XBOX360_OUT_LED led; IOWorkLoop *workloop = NULL; - + if (!super::start(provider)) return false; // Get device @@ -539,7 +539,7 @@ bool Xbox360Peripheral::start(IOService *provider) led.pattern=ledOff; QueueWrite(&led,sizeof(led)); } - + // Done PadConnect(); registerService(); @@ -554,7 +554,7 @@ bool Xbox360Peripheral::QueueRead(void) { IOUSBCompletion complete; IOReturn err; - + if ((inPipe == NULL) || (inBuffer == NULL)) return false; complete.target=this; @@ -572,7 +572,7 @@ bool Xbox360Peripheral::QueueSerialRead(void) { IOUSBCompletion complete; IOReturn err; - + if ((serialInPipe == NULL) || (serialInBuffer == NULL)) return false; complete.target = this; @@ -596,7 +596,7 @@ bool Xbox360Peripheral::QueueWrite(const void *bytes,UInt32 length) IOBufferMemoryDescriptor *outBuffer; IOUSBCompletion complete; IOReturn err; - + outBuffer=IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,length); if(outBuffer==NULL) { IOLog("send - unable to allocate buffer\n"); @@ -624,7 +624,7 @@ void Xbox360Peripheral::stop(IOService *provider) void Xbox360Peripheral::ReleaseAll(void) { LockRequired locker(mainLock); - + SerialDisconnect(); PadDisconnect(); if (serialTimer != NULL) @@ -698,7 +698,7 @@ IOReturn Xbox360Peripheral::message(UInt32 type,IOService *provider,void *argume static inline XBox360_SShort getAbsolute(XBox360_SShort value) { XBox360_SShort reverse; - + #ifdef __LITTLE_ENDIAN__ reverse=value; #elif __BIG_ENDIAN__ @@ -714,7 +714,7 @@ void Xbox360Peripheral::normalizeAxis(SInt16& axis, short deadzone) static const UInt16 max16=32767; const float current=getAbsolute(axis); const float maxVal=max16-deadzone; - + if (current>deadzone) { if (axis<0) { axis=max16*(current-deadzone)/maxVal; @@ -731,12 +731,12 @@ void Xbox360Peripheral::fiddleReport(XBOX360_HAT& left, XBOX360_HAT& right) { // deadOff - Normalize checkbox is checked if true // relative - Linked checkbox is checked if true - + if(invertLeftX) left.x=~left.x; if(!invertLeftY) left.y=~left.y; if(invertRightX) right.x=~right.x; if(!invertRightY) right.y=~right.y; - + if(deadzoneLeft!=0) { if(relativeLeft) { if((getAbsolute(left.x)getCapacity() - bufferSizeRemaining); break; - + case kIOReturnNotResponding: IOLog("read (serial) - kIOReturnNotResponding\n"); reread = false; break; - + default: reread = false; break; @@ -905,7 +905,7 @@ void Xbox360Peripheral::MakeSettingsChanges() PadConnect(); } } - + 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++) @@ -923,16 +923,16 @@ void Xbox360Peripheral::MakeSettingsChanges() IOReturn Xbox360Peripheral::setProperties(OSObject *properties) { OSDictionary *dictionary; - + dictionary=OSDynamicCast(OSDictionary,properties); - + if(dictionary!=NULL) { dictionary->setObject(OSString::withCString("ControllerType"), OSNumber::withNumber(controllerType, 8)); setProperty(kDriverSettingKey,dictionary); readSettings(); - + MakeSettingsChanges(); - + return kIOReturnSuccess; } else return kIOReturnBadArgument; } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 9b3cf12a..ddf7b902 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + _60Controller.h - declaration of the driver main class - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -34,36 +34,36 @@ class ChatPadKeyboardClass; class Xbox360Peripheral : public IOService { OSDeclareDefaultStructors(Xbox360Peripheral) - + private: void ReleaseAll(void); bool QueueRead(void); bool QueueSerialRead(void); - + static void SerialReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); static void ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); static void WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); - + void SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining); - + void readSettings(void); - + static void ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender); void ChatPadTimerAction(IOTimerEventSource *sender); void SendToggle(void); void SendSpecial(UInt16 value); void SendInit(UInt16 value, UInt16 index); bool SendSwitch(bool sendOut); - + void PadConnect(void); void PadDisconnect(void); - + void SerialConnect(void); void SerialDisconnect(void); void SerialMessage(IOBufferMemoryDescriptor *data, size_t length); - + void MakeSettingsChanges(void); - + protected: typedef enum TIMER_STATE { tsToggle, @@ -74,22 +74,22 @@ class Xbox360Peripheral : public IOService tsSet2, tsSet3, } TIMER_STATE; - + typedef enum CONTROLLER_TYPE { Xbox360 = 0, XboxOriginal = 1, XboxOne = 2, XboxOnePretend360 = 3 } CONTROLLER_TYPE; - + IOUSBDevice *device; IOLock *mainLock; - + // Joypad IOUSBInterface *interface; IOUSBPipe *inPipe,*outPipe; IOBufferMemoryDescriptor *inBuffer; - + // Keyboard IOUSBInterface *serialIn; IOUSBPipe *serialInPipe; @@ -102,50 +102,50 @@ class Xbox360Peripheral : public IOService Xbox360ControllerClass *padHandler; UInt8 chatpadInit[2]; CONTROLLER_TYPE controllerType; - + // Settings bool invertLeftX,invertLeftY; bool invertRightX,invertRightY; short deadzoneLeft,deadzoneRight; bool relativeLeft,relativeRight; bool deadOffLeft, deadOffRight; - + void normalizeAxis(SInt16& axis, short deadzone); - + public: // Controller specific UInt8 rumbleType; - + bool swapSticks; UInt8 mapping[15]; bool noMapping = true; bool pretend360; // Change VID and PID to MS 360 Controller - + // this is from the IORegistryEntry - no provider yet virtual bool init(OSDictionary *propTable); virtual void free(void); - + bool start(IOService *provider); void stop(IOService *provider); - + // IOKit methods. These methods are defines in - + virtual IOReturn setProperties(OSObject *properties); - + virtual IOReturn message(UInt32 type, IOService *provider, void *argument); - + virtual bool didTerminate(IOService *provider, IOOptionBits options, bool *defer); - + // Hooks virtual void ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); virtual void WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); - + bool QueueWrite(const void *bytes,UInt32 length); void fiddleReport(XBOX360_HAT& left, XBOX360_HAT& right); - + IOHIDDevice* getController(int index); - - + + }; #endif /* __XBOX360CONTROLLER_H__ */ diff --git a/360Controller/chatpadhid.h b/360Controller/chatpadhid.h index dcd7d514..642141a7 100644 --- a/360Controller/chatpadhid.h +++ b/360Controller/chatpadhid.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + chatpadhid.h - a HID descriptor for the Microsoft ChatPad accessory - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/360Controller/chatpadkeys.cpp b/360Controller/chatpadkeys.cpp index 7c46b791..9ec2cc04 100644 --- a/360Controller/chatpadkeys.cpp +++ b/360Controller/chatpadkeys.cpp @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + chatpadkeys.cpp - Converts a chatpad scancode to a USB key value - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -44,7 +44,7 @@ unsigned char ChatPad2USB(unsigned char input) { unsigned char row = input & 0x0F; unsigned char column = (input & 0xF0) >> 4; - + if (row >= ROW_SIZE) return 0x00; if (column >= (sizeof(columns) / sizeof(columns[0]))) diff --git a/360Controller/chatpadkeys.h b/360Controller/chatpadkeys.h index 4add680d..756989c2 100644 --- a/360Controller/chatpadkeys.h +++ b/360Controller/chatpadkeys.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + chatpadkeys.h - public functions of the ChatPad key handling - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index e8ae1850..5ccc2d8c 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + xbox360hid.h - HID descriptor for the driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index ffe21455..a638de2e 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + 360Daemon.m - main functionality of the support daemon - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -84,7 +84,7 @@ static void ShowAlert(NSInteger index) (NSString*)kCFUserNotificationAlertMessageKey: NSLocalizedString(alertStrings[index], nil), (NSString*)kCFUserNotificationCheckBoxTitlesKey: checkBoxes, (NSString*)kCFUserNotificationIconURLKey: [[NSBundle mainBundle] URLForImageResource:@"Alert"]}; - + if (AlertDisabled(index)) return; @@ -106,7 +106,7 @@ static void ConfigureDevice(io_service_t object) IOUSBDeviceInterface **dev; IOReturn err; SInt32 score; - + if ((!IOCreatePlugInInterfaceForService(object, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score))&&iodev) { err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBDeviceInterfaceID), (LPVOID)&dev); @@ -116,7 +116,7 @@ static void ConfigureDevice(io_service_t object) if ((*dev)->USBDeviceOpen(dev) == 0) { IOUSBConfigurationDescriptorPtr confDesc; - + if ((*dev)->GetConfigurationDescriptorPtr(dev, 0, &confDesc) == 0) { (*dev)->SetConfiguration(dev, confDesc->bConfigurationValue); @@ -134,7 +134,7 @@ static void callbackConnected(void *param,io_iterator_t iterator) { @autoreleasepool { io_service_t object = 0; - + while ((object = IOIteratorNext(iterator)) != 0) { #if 0 @@ -146,7 +146,7 @@ static void callbackConnected(void *param,io_iterator_t iterator) { FFDeviceObjectReference forceFeedback = 0; NSString *serialNumber = GetSerialNumber(object); - + // Supported device - load settings ConfigController(object, GetController(serialNumber)); // Set LEDs @@ -157,7 +157,7 @@ static void callbackConnected(void *param,io_iterator_t iterator) FFEFFESCAPE escape = {0}; unsigned char c; int i; - + c = 0x0a; if (serialNumber != nil) { @@ -220,7 +220,7 @@ static void callbackDisconnected(void *param, io_iterator_t iterator) io_service_t object = 0; NSString *serial; int i; - + while ((object = IOIteratorNext(iterator)) != 0) { #if 0 diff --git a/360Daemon/ControlPrefs.h b/360Daemon/ControlPrefs.h index a7481a77..f7929662 100644 --- a/360Daemon/ControlPrefs.h +++ b/360Daemon/ControlPrefs.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + ControlPrefs.h - interface to the preferences functionality - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 3cb4f823..918245c2 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + ControlPrefs.m - code to read and write shared preferences - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -35,7 +35,7 @@ BOOL AlertDisabled(NSInteger index) NSString *prop = [NSString stringWithFormat:@"%@%li", D_SHOWONCE, (long)index]; BOOL result = NO; CFPropertyListRef value = CFPreferencesCopyValue((__bridge CFStringRef)prop, DOM_DAEMON, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); - + if (value != NULL) { result = [CFBridgingRelease(value) boolValue]; @@ -60,7 +60,7 @@ void SetController(NSString *serial, NSDictionary *data) NSString* GetSerialNumber(io_service_t device) { CFTypeRef value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("USB Serial Number"), kCFAllocatorDefault, kIORegistryIterateRecursively); - + if (value == NULL) value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("SerialNumber"), kCFAllocatorDefault, kIORegistryIterateRecursively); return CFBridgingRelease(value); @@ -83,7 +83,7 @@ void SetKnownDevices(NSDictionary *devices) { CFPropertyListRef value; NSData *data; - + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); value = CFPreferencesCopyValue((CFStringRef)D_KNOWNDEV, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); data = CFBridgingRelease(value); diff --git a/360Daemon/DaemonLEDs.m b/360Daemon/DaemonLEDs.m index a9b5fd23..01ea829f 100644 --- a/360Daemon/DaemonLEDs.m +++ b/360Daemon/DaemonLEDs.m @@ -23,15 +23,15 @@ - (void)setLED:(int)theLED toSerialNumber:(NSString*)serialNum case 0: self.theLED0 = serialNum; break; - + case 1: self.theLED1 = serialNum; break; - + case 2: self.theLED2 = serialNum; break; - + case 3: self.theLED3 = serialNum; break; @@ -47,19 +47,19 @@ - (NSString *)serialNumberAtLED:(int)theLED case 0: return self.theLED0; break; - + case 1: return self.theLED1; break; - + case 2: return self.theLED2; break; - + case 3: return self.theLED3; break; - + default: return @""; break; @@ -72,19 +72,19 @@ - (BOOL)serialNumberAtLEDIsBlank:(int)theLED case 0: return self.theLED0 == nil; break; - + case 1: return self.theLED1 == nil; break; - + case 2: return self.theLED2 == nil; break; - + case 3: return self.theLED3 == nil; break; - + default: return NO; break; @@ -97,19 +97,19 @@ - (void)clearSerialNumberAtLED:(int)theLED case 0: self.theLED0 = nil; break; - + case 1: self.theLED1 = nil; break; - + case 2: self.theLED2 = nil; break; - + case 3: self.theLED3 = nil; break; - + default: break; } diff --git a/360Daemon/Images.xcassets/360Control.appiconset/Contents.json b/360Daemon/Images.xcassets/360Control.appiconset/Contents.json index b60be381..9e67b1e5 100644 --- a/360Daemon/Images.xcassets/360Control.appiconset/Contents.json +++ b/360Daemon/Images.xcassets/360Control.appiconset/Contents.json @@ -65,4 +65,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/360Daemon/en.lproj/InfoPlist.strings b/360Daemon/en.lproj/InfoPlist.strings index 477b28ff..b92732c7 100644 --- a/360Daemon/en.lproj/InfoPlist.strings +++ b/360Daemon/en.lproj/InfoPlist.strings @@ -1,2 +1 @@ /* Localized versions of Info.plist keys */ - diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 94cdde3d..9d721c1f 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + DriverTool.m - implementation of driver info tweaking tool - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -45,7 +45,7 @@ NSString *filename = GetDriverConfigPath(driver); NSError *error; NSData *data; - + infoPlistAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filename error:&error]; if (infoPlistAttributes == nil) { @@ -61,13 +61,13 @@ static void WriteDriverConfig(NSString *driver, id config) NSString *filename = GetDriverConfigPath(driver); NSError *error; NSData *data = [NSPropertyListSerialization dataWithPropertyList:config format:NSPropertyListXMLFormat_v1_0 options:0 error:&error]; - + if (data == nil) NSLog(@"Error writing config for driver: %@", error); - + if (![data writeToFile:filename atomically:NO]) NSLog(@"Failed to write file!"); - + if (infoPlistAttributes != nil) { if (![[NSFileManager defaultManager] setAttributes:infoPlistAttributes ofItemAtPath:filename error:&error]) { NSLog(@"Error setting attributes on '%@': %@", filename, error); @@ -78,7 +78,7 @@ static void WriteDriverConfig(NSString *driver, id config) static void ScrubDevices(NSMutableDictionary *devices) { NSMutableArray *deviceKeys = [[NSMutableArray alloc] initWithCapacity:10]; - + for (NSString *key in devices) { NSDictionary *device = devices[key]; if ([(NSString*)device[@"IOClass"] compare:@"Xbox360Peripheral"] == NSOrderedSame) @@ -97,18 +97,18 @@ static id MakeMutableCopy(id object) static void AddDevice(NSMutableDictionary *personalities, NSString *name, int vendor, int product) { NSMutableDictionary *controller = [[NSMutableDictionary alloc] initWithCapacity:10]; - + // Standard controller[@"CFBundleIdentifier"] = @"com.mice.driver.Xbox360Controller"; controller[@"IOCFPlugInTypes"] = @{@"F4545CE5-BF5B-11D6-A4BB-0003933E3E3E": @"360Controller.kext/Contents/PlugIns/Feedback360.plugin"}; controller[@"IOClass"] = @"Xbox360Peripheral"; controller[@"IOProviderClass"] = @"IOUSBDevice"; controller[@"IOKitDebug"] = @65535; - + // Device-specific controller[@"idVendor"] = @(vendor); controller[@"idProduct"] = @(product); - + // Add it to the tree personalities[name] = controller; } @@ -145,7 +145,7 @@ int main (int argc, const char * argv[]) { } else if ((argc > 1) && (strcmp(argv[1], "edit") == 0) && (((argc - 2) % 3) == 0)) { NSMutableDictionary *saving; NSMutableDictionary *devices; - + saving = MakeMutableCopy(config); devices = saving[@"IOKitPersonalities"]; ScrubDevices(devices); @@ -156,7 +156,7 @@ int main (int argc, const char * argv[]) { } else NSLog(@"Invalid number of parameters (%i)", argc); - + return 0; } } diff --git a/Feedback360/Feedback360.cpp b/Feedback360/Feedback360.cpp index d4553830..32efbf28 100644 --- a/Feedback360/Feedback360.cpp +++ b/Feedback360/Feedback360.cpp @@ -3,21 +3,21 @@ Force Feedback module Copyright (C) 2013 David Ryskalczyk based on xi, Copyright (C) 2011 Masahiko Morii - + Feedback360.cpp - Main code for the FF plugin - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Xbox360Controller; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -43,9 +43,9 @@ double CurrentTimeUsingMach() return -1.0; } } - + uint64_t start = mach_absolute_time(); - + uint64_t nanos = start * info.numer / info.denom; return (double)nanos / NSEC_PER_SEC; } @@ -91,13 +91,13 @@ Paused(false), PausedTime(0), LastTime(0), Gain(10000), PrvLeftLevel(0), PrvRightLevel(0), Actuator(true), Manual(false) { EffectList = Feedback360EffectVector(); - + iIOCFPlugInInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOCFPlugInInterface; iIOCFPlugInInterface.obj = this; - + iIOForceFeedbackDeviceInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOForceFeedbackDeviceInterface; iIOForceFeedbackDeviceInterface.obj = this; - + FactoryID = kFeedback360Uuid; CFRetain(FactoryID); CFPlugInAddInstanceForFactory(FactoryID); @@ -112,7 +112,7 @@ Feedback360::~Feedback360() HRESULT Feedback360::QueryInterface(REFIID iid, LPVOID *ppv) { CFUUIDRef interface = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); - + if(CFEqual(interface, kIOForceFeedbackDeviceInterfaceID)) *ppv = &this->iIOForceFeedbackDeviceInterface; // IUnknown || IOCFPlugInInterface @@ -120,7 +120,7 @@ HRESULT Feedback360::QueryInterface(REFIID iid, LPVOID *ppv) *ppv = &this->iIOCFPlugInInterface; else *ppv = NULL; - + // Done CFRelease(interface); if ((*ppv) == NULL) return E_NOINTERFACE; @@ -181,10 +181,10 @@ HRESULT Feedback360::SetProperty(FFProperty property, void *value) if(property != FFPROP_FFGAIN) { return FFERR_UNSUPPORTED; } - + UInt32 NewGain = *((UInt32*)value); __block HRESULT Result = FF_OK; - + dispatch_sync(Queue, ^{ if (1 <= NewGain && NewGain <= 10000) { @@ -194,7 +194,7 @@ HRESULT Feedback360::SetProperty(FFProperty property, void *value) Result = FF_TRUNCATED; } }); - + return Result; } @@ -237,12 +237,12 @@ HRESULT Feedback360::StopEffect(UInt32 EffectHandle) HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *EffectHandle, FFEFFECT *DiEffect, FFEffectParameterFlag Flags) { __block HRESULT Result = FF_OK; - + if (Flags & FFEP_NODOWNLOAD) { return FF_OK; } - + dispatch_sync(Queue, ^{ Feedback360Effect *Effect = NULL; if (*EffectHandle == 0) { @@ -257,51 +257,51 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef } } } - + if (Effect == NULL || Result == -1) { Result = FFERR_INTERNAL; } else { Effect->Type = EffectType; Effect->DiEffect.dwFlags = DiEffect->dwFlags; - + if( Flags & FFEP_DURATION ) { Effect->DiEffect.dwDuration = DiEffect->dwDuration; } - + if( Flags & FFEP_SAMPLEPERIOD ) { Effect->DiEffect.dwSamplePeriod = DiEffect->dwSamplePeriod; } - + if( Flags & FFEP_GAIN ) { Effect->DiEffect.dwGain = DiEffect->dwGain; } - + if( Flags & FFEP_TRIGGERBUTTON ) { Effect->DiEffect.dwTriggerButton = DiEffect->dwTriggerButton; } - + if( Flags & FFEP_TRIGGERREPEATINTERVAL ) { Effect->DiEffect.dwTriggerRepeatInterval = DiEffect->dwTriggerRepeatInterval; } - + if( Flags & FFEP_AXES ) { Effect->DiEffect.cAxes = DiEffect->cAxes; Effect->DiEffect.rgdwAxes = NULL; } - + if( Flags & FFEP_DIRECTION ) { Effect->DiEffect.cAxes = DiEffect->cAxes; Effect->DiEffect.rglDirection = NULL; } - + if( ( Flags & FFEP_ENVELOPE ) && DiEffect->lpEnvelope != NULL ) { memcpy( &Effect->DiEnvelope, DiEffect->lpEnvelope, sizeof( FFENVELOPE ) ); @@ -312,9 +312,9 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef } Effect->DiEffect.lpEnvelope = &Effect->DiEnvelope; } - + Effect->DiEffect.cbTypeSpecificParams = DiEffect->cbTypeSpecificParams; - + if( Flags & FFEP_TYPESPECIFICPARAMS ) { if(CFEqual(EffectType, kFFEffectType_CustomForce_ID)) { @@ -324,7 +324,7 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef ,DiEffect->cbTypeSpecificParams ); Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiCustomForce; } - + else if(CFEqual(EffectType, kFFEffectType_ConstantForce_ID)) { memcpy( &Effect->DiConstantForce @@ -347,19 +347,19 @@ HRESULT Feedback360::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *Ef Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiRampforce; } } - + if( Flags & FFEP_STARTDELAY ) { Effect->DiEffect.dwStartDelay = DiEffect->dwStartDelay; } - + if( Flags & FFEP_START ) { Effect->Status = FFEGES_PLAYING; Effect->PlayCount = 1; Effect->StartTime = CurrentTimeUsingMach(); } - + if( Flags & FFEP_NORESTART ) { ; @@ -376,7 +376,7 @@ HRESULT Feedback360::GetForceFeedbackState(ForceFeedbackDeviceState *DeviceState { return FFERR_INVALIDPARAM; } - + dispatch_sync(Queue, ^{ DeviceState->dwState = NULL; if( EffectList.size() == 0 ) @@ -400,10 +400,10 @@ HRESULT Feedback360::GetForceFeedbackState(ForceFeedbackDeviceState *DeviceState DeviceState->dwState |= FFGFFS_POWERON; DeviceState->dwState |= FFGFFS_SAFETYSWITCHOFF; DeviceState->dwState |= FFGFFS_USERFFSWITCHON; - + DeviceState->dwLoad = 0; }); - + return FF_OK; } @@ -439,7 +439,7 @@ HRESULT Feedback360::GetForceFeedbackCapabilities(FFCAPABILITIES *capabilities) HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) { __block HRESULT Result = FF_OK; - + dispatch_sync(Queue, ^{ switch (state) { case FFSFFC_RESET: @@ -447,7 +447,7 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) Stopped = true; Paused = false; break; - + case FFSFFC_STOPALL: for (Feedback360EffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) { @@ -456,12 +456,12 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) Stopped = true; Paused = false; break; - + case FFSFFC_PAUSE: Paused = true; PausedTime = CurrentTimeUsingMach(); break; - + case FFSFFC_CONTINUE: for (Feedback360EffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) { @@ -469,15 +469,15 @@ HRESULT Feedback360::SendForceFeedbackCommand(FFCommandFlag state) } Paused = false; break; - + case FFSFFC_SETACTUATORSON: Actuator = true; break; - + case FFSFFC_SETACTUATORSOFF: Actuator = false; break; - + default: Result = FFERR_INVALIDPARAM; break; @@ -520,7 +520,7 @@ HRESULT Feedback360::InitializeTerminate(NumVersion APIversion, io_object_t hidD SetForce(0, 0); Device_Finalise(&this->device); }); - + } return FF_OK; } @@ -553,7 +553,7 @@ HRESULT Feedback360::Escape(FFEffectDownloadID downloadID, FFEFFESCAPE *escape) Manual=((unsigned char*)escape->lpvInBuffer)[0]!=0x00; }); break; - + case 0x01: // Set motors if (escape->cbInBuffer!=2) return FFERR_INVALIDPARAM; dispatch_sync(Queue, ^{ @@ -564,7 +564,7 @@ HRESULT Feedback360::Escape(FFEffectDownloadID downloadID, FFEFFESCAPE *escape) } }); break; - + case 0x02: // Set LED if (escape->cbInBuffer!=1) return FFERR_INVALIDPARAM; { @@ -575,7 +575,7 @@ HRESULT Feedback360::Escape(FFEffectDownloadID downloadID, FFEFFESCAPE *escape) }); } break; - + case 0x03: // Power off { dispatch_sync(Queue, ^{ @@ -584,7 +584,7 @@ HRESULT Feedback360::Escape(FFEffectDownloadID downloadID, FFEFFESCAPE *escape) }); } break; - + default: fprintf(stderr, "Xbox360Controller FF plugin: Unknown escape (%i)\n", (int)escape->dwCommand); return FFERR_UNSUPPORTED; @@ -602,12 +602,12 @@ void Feedback360::SetForce(LONG LeftLevel, LONG RightLevel) void Feedback360::EffectProc( void *params ) { Feedback360 *cThis = (Feedback360 *)params; - + LONG LeftLevel = 0; LONG RightLevel = 0; LONG Gain = cThis->Gain; LONG CalcResult = 0; - + if (cThis->Actuator == true) { for (Feedback360EffectIterator effectIterator = cThis->EffectList.begin(); effectIterator != cThis->EffectList.end(); ++effectIterator) @@ -617,12 +617,12 @@ void Feedback360::EffectProc( void *params ) } } } - + if ((cThis->PrvLeftLevel != LeftLevel || cThis->PrvRightLevel != RightLevel) && (CalcResult != -1)) { //fprintf(stderr, "PL: %d, PR: %d; L: %d, R: %d; \n", cThis->PrvLeftLevel, cThis->PrvRightLevel, LeftLevel, RightLevel); cThis->SetForce((unsigned char)min(SCALE_MAX, LeftLevel * Gain / 10000),(unsigned char)min(SCALE_MAX, RightLevel * Gain / 10000 )); - + cThis->PrvLeftLevel = LeftLevel; cThis->PrvRightLevel = RightLevel; } diff --git a/Feedback360/Feedback360.h b/Feedback360/Feedback360.h index cea2dcbf..3320c776 100644 --- a/Feedback360/Feedback360.h +++ b/Feedback360/Feedback360.h @@ -122,7 +122,7 @@ class Feedback360 : IUnknown // event loop func static void EffectProc( void *params ); - + // actual member functions ultimately called by the FF API (through the static functions) virtual IOReturn Probe ( CFDictionaryRef propertyTable, io_service_t service, SInt32 * order ); virtual IOReturn Start ( CFDictionaryRef propertyTable, io_service_t service ); diff --git a/Feedback360/Feedback360Effect.cpp b/Feedback360/Feedback360Effect.cpp index 87d4fe0b..a10fe538 100644 --- a/Feedback360/Feedback360Effect.cpp +++ b/Feedback360/Feedback360Effect.cpp @@ -5,7 +5,7 @@ Based on xi, Copyright (C) 2011 Masahiko Morii Feedback360Effect.cpp - Main code for the FF plugin - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -34,7 +34,7 @@ Feedback360Effect::Feedback360Effect() : Type(NULL), Status(0), PlayCount(0), StartTime(0), Index(0), LastTime(0), Handle(0), DiEffect({0}), DiEnvelope({0}), DiCustomForce({0}), DiConstantForce({0}), DiPeriodic({0}), DiRampforce({0}) { - + } Feedback360Effect::Feedback360Effect(FFEffectDownloadID theHand) : Feedback360Effect() diff --git a/Feedback360/Feedback360Effect.h b/Feedback360/Feedback360Effect.h index c63573a3..254965e8 100644 --- a/Feedback360/Feedback360Effect.h +++ b/Feedback360/Feedback360Effect.h @@ -5,7 +5,7 @@ based on xi, Copyright (C) 2011 Masahiko Morii Feedback360Effect.cpp - Main code for the FF plugin - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Feedback360/devlink.cpp b/Feedback360/devlink.cpp index d343a7ec..85869ed5 100644 --- a/Feedback360/devlink.cpp +++ b/Feedback360/devlink.cpp @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + devlink.c - code to speak to the driver itself - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -30,7 +30,7 @@ bool Device_Initialise(DeviceLink *link,io_object_t device) IOCFPlugInInterface **plugInInterface = NULL; SInt32 score = 0; IOReturn ret = IOCreatePlugInInterfaceForService(device, kIOHIDDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &plugInInterface, &score); - + if (ret!=kIOReturnSuccess) return false; ret=(*plugInInterface)->QueryInterface(plugInInterface, CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID121), (LPVOID*)(&link->interface)); (*plugInInterface)->Release(plugInInterface); diff --git a/Feedback360/devlink.h b/Feedback360/devlink.h index f620cd77..ef4f06e6 100644 --- a/Feedback360/devlink.h +++ b/Feedback360/devlink.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + devlink.h - Interface to the device link - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 5b0591d0..eff1d13f 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -288,4 +288,4 @@ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/Proj \b Update: \b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ \ -Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file +Ensure to read the following Read Me and License sections before installing!} diff --git a/Install360Controller/makedmg.sh b/Install360Controller/makedmg.sh index 63f35c5a..bc5b95a2 100755 --- a/Install360Controller/makedmg.sh +++ b/Install360Controller/makedmg.sh @@ -1,2 +1,2 @@ #!/bin/sh -hdiutil create -volname 360ControllerInstall -srcfolder ./build -ov -format UDZO 360ControllerInstall.dmg \ No newline at end of file +hdiutil create -volname 360ControllerInstall -srcfolder ./build -ov -format UDZO 360ControllerInstall.dmg diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index 748f1ee2..817382a4 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + DeviceItem.h - declaration of wrapper class for device handles - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index 4f38f0a9..992b966d 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + DeviceItem.m - implementation of device wrapper class - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -27,7 +27,7 @@ CFMutableDictionaryRef serviceProperties; NSDictionary *properties; NSString *deviceName = nil; - + if (IORegistryEntryCreateCFProperties(device, &serviceProperties, kCFAllocatorDefault, kNilOptions) != KERN_SUCCESS) return nil; properties = CFBridgingRelease(serviceProperties); @@ -56,7 +56,7 @@ - (instancetype)initWithItemForDevice:(io_service_t)device IOReturn ret; IOCFPlugInInterface **plugInInterface; SInt32 score=0; - + ret = IOCreatePlugInInterfaceForService(device, kIOHIDDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &plugInInterface, &score); if (ret != kIOReturnSuccess) { return nil; @@ -77,10 +77,10 @@ - (instancetype)initWithItemForDevice:(io_service_t)device + (instancetype)allocateDeviceItemForDevice:(io_service_t)device { DeviceItem *item = [[[self class] alloc] initWithItemForDevice:device]; - + if (item) return item; - + IOObjectRelease(device); return nil; } diff --git a/Pref360Control/DeviceLister.h b/Pref360Control/DeviceLister.h index 8eb32839..b553cc1e 100644 --- a/Pref360Control/DeviceLister.h +++ b/Pref360Control/DeviceLister.h @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + DeviceLister.h - decleration of a class to display supported devices - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index 9cb8c89b..0117650f 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -1,21 +1,21 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + DeviceLister.m - implementation of a class to list supported devices - + This file is part of Xbox360Controller. - + Xbox360Controller is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Xbox360Controller is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -33,7 +33,7 @@ static id GetDeviceValue(io_service_t device, NSString *key) { CFTypeRef value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, (__bridge CFStringRef)key, kCFAllocatorDefault, kIORegistryIterateRecursively); - + return CFBridgingRelease(value); } @@ -42,7 +42,7 @@ static id GetDeviceValue(io_service_t device, NSString *key) { NSMutableString *output = [[NSMutableString alloc] initWithCapacity:100]; NSInteger i; - + for (i = 0; i < [name length]; i++) { unichar c = [name characterAtIndex:i]; @@ -62,7 +62,7 @@ static id GetDeviceValue(io_service_t device, NSString *key) IOUSBDeviceInterface **dev; IOReturn err; SInt32 score; - + if ((IOCreatePlugInInterfaceForService(device, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score) == kIOReturnSuccess) && (iodev != NULL)) { err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBDeviceInterfaceID), (LPVOID)&dev); @@ -80,7 +80,7 @@ static id GetDeviceValue(io_service_t device, NSString *key) IOUSBInterfaceInterface **intf; IOReturn err; SInt32 score; - + if ((IOCreatePlugInInterfaceForService(interface, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score) == kIOReturnSuccess) && (iodev != NULL)) { err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID), (LPVOID)&intf); @@ -111,10 +111,10 @@ static BOOL IsXBox360Controller(io_service_t device) io_iterator_t iterator; io_service_t devInterface; IOUSBInterfaceInterface **interfaceInterface; - + int interfaceCount; UInt8 interfaceNum, classNum, subClassNum, protocolNum, endpointCount; - + BOOL devValid; // Get the interface to the device @@ -124,7 +124,7 @@ static BOOL IsXBox360Controller(io_service_t device) (*interface)->GetDeviceSubClass(interface, &subClassNum); (*interface)->GetDeviceProtocol(interface, &protocolNum); devValid = (classNum == 0xFF) && (subClassNum == 0xFF) && (protocolNum == 0xFF); - + // Search the interfaces iRq.bInterfaceClass = kIOUSBFindInterfaceDontCare; iRq.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; @@ -160,10 +160,10 @@ static BOOL IsXBox360Controller(io_service_t device) } IOObjectRelease(iterator); } - + // Done (*interface)->Release(interface); - + return devValid && (interfaceCount >= 3); // Only 3 in case the security descriptor is missing? } @@ -213,32 +213,32 @@ - (NSString*)readTool NSData *data; NSString *response; NSArray *lines; - + // Prepare to run the tool task = [[NSTask alloc] init]; [task setLaunchPath:[self toolPath]]; - + // Hook up the pipe to catch the output pipe = [NSPipe pipe]; [task setStandardOutput:pipe]; error = [NSPipe pipe]; [task setStandardError:error]; - + // Run the tool [task launch]; [task waitUntilExit]; - + // Check result if ([task terminationStatus] != 0) { data = [[error fileHandleForReading] readDataToEndOfFile]; return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } - + // Read the data back data = [[pipe fileHandleForReading] readDataToEndOfFile]; response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - + // Parse the results lines = [response componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; for (NSString *line in lines) @@ -253,7 +253,7 @@ - (NSString*)readTool if (entries[key] == nil) entries[key] = SanitiseName(values[0]); } - + return nil; } @@ -262,7 +262,7 @@ - (NSString*)readKnownDevices { NSDictionary *known; NSArray *keys; - + known = GetKnownDevices(); keys = [known allKeys]; for (NSNumber *key in keys) @@ -278,7 +278,7 @@ - (NSString*)readIOKit { io_iterator_t iterator = 0; io_service_t object; - + IOServiceGetMatchingServices([owner masterPort], IOServiceMatching(kIOUSBDeviceClassName), &iterator); if (iterator != 0) { @@ -288,17 +288,17 @@ - (NSString*)readIOKit { NSNumber *vendorValue, *productValue; UInt16 vendor,product; - + vendorValue = GetDeviceValue(object, @"idVendor"); vendor = [vendorValue intValue]; - + productValue = GetDeviceValue(object, @"idProduct"); product = [productValue intValue]; - + if ((vendorValue != nil) && (productValue != nil)) { NSNumber *key = @((UInt32)((vendor << 16) | product)); - + [connected addObject:key]; if (entries[key] == nil) { @@ -331,12 +331,12 @@ - (void)showFailure:(NSString*)message - (BOOL)loadDevices { NSString *error; - + // Initialise [entries removeAllObjects]; [connected removeAllObjects]; [enabled removeAllObjects]; - + // These can be done in any order, depending on the behaviour desired if (error == nil) error = [self readKnownDevices]; @@ -344,14 +344,14 @@ - (BOOL)loadDevices error = [self readTool]; if (error == nil) error = [self readIOKit]; - + // Check for errors if (error != nil) { [self showFailure:error]; return NO; } - + // Done SetKnownDevices(entries); [list reloadData]; @@ -365,7 +365,7 @@ - (BOOL)trySave OSStatus status; AuthorizationRef authorisationRef; BOOL success = NO; - + status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, @@ -375,7 +375,7 @@ - (BOOL)trySave [self showFailure:Three60LocalizedString(@"Unable to create authorisation request", @"")]; return NO; } - + AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; AuthorizationRights rights = {1, &right}; status = AuthorizationCopyRights(authorisationRef, @@ -388,16 +388,16 @@ - (BOOL)trySave [self showFailure:Three60LocalizedString(@"Unable to acquire authorisation", @"")]; goto fail; } - + status = [self writeToolWithAuthorisation:authorisationRef]; if (status != errAuthorizationSuccess) { [self showFailure:Three60LocalizedString(@"Failed to execute the driver tool", @"")]; goto fail; } - + success = YES; - + fail: AuthorizationFree(authorisationRef, kAuthorizationFlagDestroyRights); return success; @@ -430,7 +430,7 @@ - (NSArray*)allEntries NSNumber *str2 = obj2; UInt32 num1 = str1.unsignedIntValue; UInt32 num2 = str2.unsignedIntValue; - + NSComparisonResult retval; if (num1 > num2) { retval = NSOrderedAscending; @@ -460,7 +460,7 @@ - (id)tableView:(NSTableView*)aTableView objectValueForTableColumn:(NSTableColum if ([identifier compare:@"name"] == NSOrderedSame) { NSColor *colour; - + if ([connected containsObject:key]) colour = [NSColor blueColor]; else diff --git a/Pref360Control/MyAnalogStick.h b/Pref360Control/MyAnalogStick.h index 047eb4bd..dd76df88 100644 --- a/Pref360Control/MyAnalogStick.h +++ b/Pref360Control/MyAnalogStick.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyAnalogStick.h - declaration of analog stick view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/MyAnalogStick.m b/Pref360Control/MyAnalogStick.m index 37299976..c1538bf6 100644 --- a/Pref360Control/MyAnalogStick.m +++ b/Pref360Control/MyAnalogStick.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyAnalogStick.m - implementation of analog stick view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -50,12 +50,12 @@ - (void)setDeadzone:(int)adeadzone - (void)setPositionX:(int)positionX { x = positionX; - + if (normalized) { const UInt16 max16 = 32767; float maxVal = max16 - deadzone; - + if (x > 0) realX = (abs(x) * maxVal / max16) + deadzone + 1; else if (x < 0) @@ -67,19 +67,19 @@ - (void)setPositionX:(int)positionX { realX = 0; } - + self.needsDisplay = YES; } - (void)setPositionY:(int)positionY { y = positionY; - + if (normalized) { const UInt16 max16 = 32767; float maxVal = max16 - deadzone; - + if (y > 0) realY = (abs(y) * maxVal / max16) + deadzone + 1; else if (y < 0) @@ -91,7 +91,7 @@ - (void)setPositionY:(int)positionY { realY = 0; } - + self.needsDisplay = YES; } @@ -109,7 +109,7 @@ - (void)setLinked:(BOOL)alinked - (void)drawRect:(NSRect)rect { NSRect area = [self bounds], deadRect, posRect, realPosRect; - + // Compute positions // Deadzone deadRect.size.width = (deadzone * area.size.width) / 32768; @@ -131,7 +131,7 @@ - (void)drawRect:(NSRect)rect // Draw pressed state if(pressed) { NSRect pressArea; - + pressArea=area; pressArea.origin.x += PRESSED_INSET; pressArea.origin.y += PRESSED_INSET; @@ -146,7 +146,7 @@ - (void)drawRect:(NSRect)rect if (linked) NSFrameRect(deadRect); else { NSRect trueRect; - + trueRect = deadRect; trueRect.origin.x = area.origin.x; trueRect.size.width = area.size.width; diff --git a/Pref360Control/MyBatteryMonitor.m b/Pref360Control/MyBatteryMonitor.m index 06ae33eb..37c48e3c 100644 --- a/Pref360Control/MyBatteryMonitor.m +++ b/Pref360Control/MyBatteryMonitor.m @@ -17,7 +17,7 @@ - (void)setBars:(int)value { - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; - + [Pref360StyleKit drawBatteryMonitorWithBars:_bars]; } diff --git a/Pref360Control/MyCentreButtons.h b/Pref360Control/MyCentreButtons.h index f149d7f3..52a8927a 100644 --- a/Pref360Control/MyCentreButtons.h +++ b/Pref360Control/MyCentreButtons.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyCentreButtons.h - definition of view to draw the central buttons - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/MyCentreButtons.m b/Pref360Control/MyCentreButtons.m index 705b261f..3bef7623 100644 --- a/Pref360Control/MyCentreButtons.m +++ b/Pref360Control/MyCentreButtons.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyCentreButtons.m - implementation of central button view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ + (void)drawButton:(NSString*)button inRectangle:(NSRect)rect pressed:(BOOL)down NSDictionary *attributes; NSPoint point; NSColor *colour = [NSColor blackColor]; - + // Draw circle [colour set]; if(down) { diff --git a/Pref360Control/MyDeadZoneViewer.m b/Pref360Control/MyDeadZoneViewer.m index 383693cf..0812c27d 100644 --- a/Pref360Control/MyDeadZoneViewer.m +++ b/Pref360Control/MyDeadZoneViewer.m @@ -22,7 +22,7 @@ - (void)setLinked:(BOOL)linked { - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; - + [Pref360StyleKit drawDeadZoneViewerWithValue:_val / 32768 linked:_linked]; } diff --git a/Pref360Control/MyDigitalStick.h b/Pref360Control/MyDigitalStick.h index ceeb0789..d647a063 100644 --- a/Pref360Control/MyDigitalStick.h +++ b/Pref360Control/MyDigitalStick.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyDigitalStick.h - declaration of view to draw digital stick view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/MyDigitalStick.m b/Pref360Control/MyDigitalStick.m index 258301a1..2bd8a20b 100644 --- a/Pref360Control/MyDigitalStick.m +++ b/Pref360Control/MyDigitalStick.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyDigitalStick.m - implementation of digital stick view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -70,7 +70,7 @@ + (NSBezierPath*)makeTriangle:(int)start inRectangle:(NSRect)rect; {0,1}, {0,0} }; - + // Find central part centre.x = rect.origin.x + (rect.size.width / 2); centre.y = rect.origin.y + (rect.size.height / 2); @@ -91,7 +91,7 @@ - (id)initWithFrame:(NSRect)frameRect { if ((self = [super initWithFrame:frameRect]) != nil) { NSRect rect = [self bounds], triangle; - + triangle.origin.x = INSET_AMOUNT; triangle.origin.y = INSET_AMOUNT; triangle.size.width =- INSET_AMOUNT * 2; @@ -115,7 +115,7 @@ - (id)initWithFrame:(NSRect)frameRect - (void)drawRect:(NSRect)rect { NSRect area = [self bounds]; - + NSDrawLightBezel(area, area); [[NSColor blackColor] set]; if (bUp) [up fill]; diff --git a/Pref360Control/MyMainButtons.h b/Pref360Control/MyMainButtons.h index 765294cc..8e12ca5e 100644 --- a/Pref360Control/MyMainButtons.h +++ b/Pref360Control/MyMainButtons.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyMainButtons.h - declaration of A/B/X/Y button view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/MyMainButtons.m b/Pref360Control/MyMainButtons.m index 3fc9ba88..f69bd5af 100644 --- a/Pref360Control/MyMainButtons.m +++ b/Pref360Control/MyMainButtons.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyMainButtons.m - implementation of A/B/X/Y button view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -62,7 +62,7 @@ + (void)drawButton:(NSString*)button inRectangle:(NSRect)rect pressed:(BOOL)down NSPoint point; NSColor *colour = [NSColor blackColor]; NSRect bling = rect; - + // Draw circle if(down) { [path fill]; @@ -87,7 +87,7 @@ + (void)drawButton:(NSString*)button inRectangle:(NSRect)rect pressed:(BOOL)down - (void)drawRect:(NSRect)rect { NSRect area = [self bounds], bit; - + bit.size.width = area.size.width / 3; bit.size.height = area.size.height / 3; bit.origin.x = area.origin.x + bit.size.width; diff --git a/Pref360Control/MyShoulderButton.h b/Pref360Control/MyShoulderButton.h index af173178..527c6324 100644 --- a/Pref360Control/MyShoulderButton.h +++ b/Pref360Control/MyShoulderButton.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyShoulderButton.h - simple button view declaration - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/MyShoulderButton.m b/Pref360Control/MyShoulderButton.m index d4f62c53..cdc5397a 100644 --- a/Pref360Control/MyShoulderButton.m +++ b/Pref360Control/MyShoulderButton.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + MyShoulderButton.m - implementation of simple button view - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -36,7 +36,7 @@ - (void)setPressed:(BOOL)apressed - (void)drawRect:(NSRect)rect { NSRect area = [self bounds]; - + NSDrawLightBezel(area, area); if (pressed) { area.origin.x += INSET_AMOUNT; diff --git a/Pref360Control/MyTrigger.m b/Pref360Control/MyTrigger.m index def691fd..53653d6b 100644 --- a/Pref360Control/MyTrigger.m +++ b/Pref360Control/MyTrigger.m @@ -23,7 +23,7 @@ - (void)setVal:(int)value { - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; - + if (_name == NULL) _name = @""; [Pref360StyleKit drawTriggerMetterWithIntensity:(_val / 255.0) triggerTitle:_name]; diff --git a/Pref360Control/MyWhole360Controller.m b/Pref360Control/MyWhole360Controller.m index ee29bc4d..bda7756d 100644 --- a/Pref360Control/MyWhole360Controller.m +++ b/Pref360Control/MyWhole360Controller.m @@ -171,7 +171,7 @@ - (void)awakeFromNib { - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; - + [Pref360StyleKit drawX360ControllerWithControllerNumber:0 aPressed:_aPressed bPressed:_bPressed xPressed:_xPressed yPressed:_yPressed leftPressed:_leftPressed upPressed:_upPressed rightPressed:_rightPressed downPressed:_downPressed backPressed:_backPressed startPressed:_startPressed lbPressed:_lbPressed rbPressed:_rbPressed homePressed:_homePressed leftStickPressed:_leftStickPressed rightStickPressed:_rightStickPressed leftStick:_leftStickPosition rightStick:_rightStickPosition leftStickDeadzone:_leftStickDeadzone rightStickDeadzone:_rightStickDeadzone isLeftNormalized:_leftNormalized isRightNormalized:_rightNormalized]; } diff --git a/Pref360Control/MyWhole360ControllerMapper.h b/Pref360Control/MyWhole360ControllerMapper.h index f144c23d..4972f329 100644 --- a/Pref360Control/MyWhole360ControllerMapper.h +++ b/Pref360Control/MyWhole360ControllerMapper.h @@ -18,4 +18,4 @@ - (void)buttonPressedAtIndex:(int)index; + (UInt8 *)mapping; -@end \ No newline at end of file +@end diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 63f6907f..dc9b7758 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -72,76 +72,76 @@ - (void)setButtonAtIndex:(int)index { [self setUpPressed:NO]; [self setDownPressed:YES]; break; - + case 2: [self setDownPressed:NO]; [self setLeftPressed:YES]; break; - + case 3: [self setLeftPressed:NO]; [self setRightPressed:YES]; break; - + case 4: [self setRightPressed:NO]; [self setStartPressed:YES]; break; - + case 5: [self setStartPressed:NO]; [self setBackPressed:YES]; break; - + case 6: [self setBackPressed:NO]; [self setLeftStickPressed:YES]; break; - + case 7: [self setLeftStickPressed:NO]; [self setRightStickPressed:YES]; break; - + case 8: [self setRightStickPressed:NO]; [self setLbPressed:YES]; break; - + case 9: [self setLbPressed:NO]; [self setRbPressed:YES]; break; - + case 10: [self setRbPressed:NO]; [self setHomePressed:YES]; break; - + case 11: [self setHomePressed:NO]; [self setAPressed:YES]; break; - + case 12: [self setAPressed:NO]; [self setBPressed:YES]; break; - + case 13: [self setBPressed:NO]; [self setXPressed:YES]; break; - + case 14: [self setXPressed:NO]; [self setYPressed:YES]; break; - + case 15: [self setYPressed:NO]; break; - + default: break; } @@ -173,4 +173,4 @@ - (void)awakeFromNib { [[BindingTableView tableView] reloadData]; } -@end \ No newline at end of file +@end diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 369ce96a..4df857fe 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Pref360ControlPref.h - definition for the pref pane class - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index db9021ad..c6fc715c 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Pref360ControlPref.m - main source of the pref pane - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -47,12 +47,12 @@ static void callbackHandleDevice(void *param,io_iterator_t iterator) { io_service_t object = 0; BOOL update = NO; - + while ((object = IOIteratorNext(iterator))) { IOObjectRelease(object); update = YES; } - + if (update) [(__bridge Pref360ControlPref*)param handleDeviceChange]; } @@ -65,19 +65,19 @@ @implementation Pref360ControlPref @private // Internal info IOHIDElementCookie axis[6],buttons[15]; - + IOHIDDeviceInterface122 **device; IOHIDQueueInterface **hidQueue; FFDeviceObjectReference ffDevice; io_registry_entry_t registryEntry; - + int largeMotor, smallMotor; - + IONotificationPortRef notifyPort; CFRunLoopSourceRef notifySource; io_iterator_t onIteratorWired, offIteratorWired; io_iterator_t onIteratorWireless, offIteratorWireless; - + FFEFFECT *effect; FFCUSTOMFORCE *customforce; FFEffectObjectReference effectRef; @@ -97,7 +97,7 @@ - (void)updateLED:(int)ledIndex { FFEFFESCAPE escape = {0}; unsigned char c = ledIndex; - + if (ffDevice == 0) return; escape.dwSize = sizeof(escape); escape.dwCommand = 0x02; @@ -172,28 +172,28 @@ - (void)testMotorsLarge:(unsigned char)large small:(unsigned char)small - (void)axisChanged:(int)index newValue:(int)value { NSInteger tabIndex = [_tabView indexOfTabViewItem:[_tabView selectedTabViewItem]]; - + switch(index) { case 0: [_wholeController setLeftStickXPos:value]; [_leftStickAnalog setPositionX:value]; break; - + case 1: [_wholeController setLeftStickYPos:value]; [_leftStickAnalog setPositionY:value]; break; - + case 2: [_wholeController setRightStickXPos:value]; [_rightStickAnalog setPositionX:value]; break; - + case 3: [_wholeController setRightStickYPos:value]; [_rightStickAnalog setPositionY:value]; break; - + case 4: if (tabIndex == 0) { // Controller Test [_leftTrigger setVal:value]; @@ -201,7 +201,7 @@ - (void)axisChanged:(int)index newValue:(int)value [self testMotorsLarge:largeMotor small:smallMotor]; } break; - + case 5: if (tabIndex == 0) { [_rightTrigger setVal:value]; @@ -209,7 +209,7 @@ - (void)axisChanged:(int)index newValue:(int)value [self testMotorsLarge:largeMotor small:smallMotor]; } break; - + default: break; } @@ -220,69 +220,69 @@ - (void)buttonChanged:(int)index newValue:(int)value { BOOL b = (value != 0); NSInteger tabIndex = [_tabView indexOfTabViewItem:[_tabView selectedTabViewItem]]; - + if (tabIndex == 0) { // Controller Test switch (index) { case 0: [_wholeController setAPressed:b]; break; - + case 1: [_wholeController setBPressed:b]; break; - + case 2: [_wholeController setXPressed:b]; break; - + case 3: [_wholeController setYPressed:b]; break; - + case 4: [_wholeController setLbPressed:b]; break; - + case 5: [_wholeController setRbPressed:b]; break; - + case 6: [_wholeController setLeftStickPressed:b]; break; - + case 7: [_wholeController setRightStickPressed:b]; break; - + case 8: [_wholeController setStartPressed:b]; break; - + case 9: [_wholeController setBackPressed:b]; break; - + case 10: [_wholeController setHomePressed:b]; break; - + case 11: [_wholeController setUpPressed:b]; break; - + case 12: [_wholeController setDownPressed:b]; break; - + case 13: [_wholeController setLeftPressed:b]; break; - + case 14: [_wholeController setRightPressed:b]; break; - + default: break; } @@ -303,7 +303,7 @@ - (void)eventQueueFired:(void*)sender withResult:(IOReturn)result IOHIDEventStruct event; BOOL found = NO; int i; - + if (sender != hidQueue) return; while (result == kIOReturnSuccess) { result = (*hidQueue)->getNextEvent(hidQueue,&event,zeroTime,0); @@ -397,7 +397,7 @@ - (void)stopDevice [self testMotorsCleanUp]; if (hidQueue) { CFRunLoopSourceRef eventSource; - + (*hidQueue)->stop(hidQueue); eventSource=(*hidQueue)->getAsyncEventSource(hidQueue); if((eventSource!=NULL)&&CFRunLoopContainsSource(CFRunLoopGetCurrent(),eventSource,kCFRunLoopCommonModes)) @@ -422,7 +422,7 @@ - (void)startDevice long usage,usagePage; CFRunLoopSourceRef eventSource; IOReturn ret; - + [self resetDisplay]; if(([_deviceArray count]==0)||(i==-1)) { NSLog(@"No devices found? :( device count==%i, i==%i",(int)[_deviceArray count], i); @@ -430,20 +430,20 @@ - (void)startDevice } { DeviceItem *item = _deviceArray[i]; - + device = [item hidDevice]; ffDevice = [item ffDevice]; registryEntry = [item rawDevice]; } - + if((*device)->copyMatchingElements(device,NULL,&CFelements)!=kIOReturnSuccess) { NSLog(@"Can't get elements list"); // Make note of failure? return; } - + NSArray *elements = CFBridgingRelease(CFelements); - + for (NSDictionary *element in elements) { id object; // Get cookie @@ -549,7 +549,7 @@ - (void)startDevice if(dict) { CFBooleanRef boolValue; CFNumberRef intValue; - + if(CFDictionaryGetValueIfPresent(dict,CFSTR("InvertLeftX"),(void*)&boolValue)) { [_leftStickInvertX setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; [_leftStickInvertXAlt setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; @@ -567,7 +567,7 @@ - (void)startDevice } else NSLog(@"No value for RelativeLeft\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneLeft"),(void*)&intValue)) { UInt16 i; - + CFNumberGetValue(intValue,kCFNumberShortType,&i); [_leftStickDeadzone setIntValue:i]; [_leftStickDeadzoneAlt setIntValue:i]; @@ -593,14 +593,14 @@ - (void)startDevice } else NSLog(@"No value for RelativeRight\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneRight"),(void*)&intValue)) { UInt16 i; - + CFNumberGetValue(intValue,kCFNumberShortType,&i); [_rightStickDeadzone setIntValue:i]; [_rightStickDeadzoneAlt setIntValue:i]; [_rightDeadZone setVal:i]; [_rightStickAnalog setDeadzone:i]; } else NSLog(@"No value for DeadzoneRight\n"); - + if(CFDictionaryGetValueIfPresent(dict,CFSTR("ControllerType"),(void*)&intValue)) { NSNumber *num = (__bridge NSNumber *)intValue; controllerType = (ControllerType)[num integerValue]; @@ -609,7 +609,7 @@ - (void)startDevice NSNumber *num = (__bridge NSNumber *)intValue; [_rumbleOptions setState:[num integerValue]]; } else NSLog(@"No value for RumbleType\n"); - + if(CFDictionaryGetValueIfPresent(dict,CFSTR("BindingUp"),(void*)&intValue)) { NSNumber *num = (__bridge NSNumber *)intValue; [MyWhole360ControllerMapper mapping][0] = [num intValue]; @@ -670,11 +670,11 @@ - (void)startDevice NSNumber *num = (__bridge NSNumber *)intValue; [MyWhole360ControllerMapper mapping][14] = [num intValue]; } else NSLog(@"No value for BindingY\n"); - + if(CFDictionaryGetValueIfPresent(dict,CFSTR("SwapSticks"),(void*)&boolValue)) { [_swapSticks setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; } else NSLog(@"No value for SwapSticks\n"); - + if(CFDictionaryGetValueIfPresent(dict,CFSTR("Pretend360"),(void*)&boolValue)) { [_pretend360Button setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; } else NSLog(@"No value for Pretend360"); @@ -692,12 +692,12 @@ - (void)startDevice { int batteryLevel = -1; CFTypeRef prop; - + if (IOObjectConformsTo(registryEntry, "WirelessHIDDevice")) { prop = IORegistryEntryCreateCFProperty(registryEntry, CFSTR("BatteryLevel"), NULL, 0); if (prop != nil) { unsigned char level; - + if (CFNumberGetValue(prop, kCFNumberCharType, &level)) batteryLevel = level / 64; CFRelease(prop); @@ -711,7 +711,7 @@ - (void)startDevice [_batteryStatus setHidden:YES]; } } - + [_mappingTable reloadData]; // Allows the kext to be disabled when you connect a controller once @@ -736,7 +736,7 @@ - (void)updateDeviceList io_iterator_t iterator; io_object_t hidDevice; int count = 0; - + // Scrub old items [self stopDevice]; [self deleteDeviceList]; @@ -749,7 +749,7 @@ - (void)updateDeviceList [_deviceListAdvanced addItemWithTitle:NO_ITEMS]; return; } - + while ((hidDevice = IOIteratorNext(iterator))) { io_object_t parent = 0; IORegistryEntryGetParentEntry(hidDevice, kIOServicePlane, &parent); @@ -784,7 +784,7 @@ - (void)updateDeviceList - (void)didSelect { io_object_t object; - + // Get master port, for accessing I/O Kit IOMasterPort(MACH_PORT_NULL,&_masterPort); // Set up notification of USB device addition/removal @@ -868,7 +868,7 @@ - (IBAction)selectDevice:(id)sender [_deviceList selectItemAtIndex:[_deviceListAdvanced indexOfSelectedItem]]; [_deviceListBinding selectItemAtIndex:[_deviceListAdvanced indexOfSelectedItem]]; } - + [self startDevice]; } @@ -880,10 +880,10 @@ - (IBAction)changeSetting:(id)sender [_leftStickAnalog setNormalized:(BOOL)[_normalizeDeadzoneLeft state]]; [_wholeController setRightNormalized:(BOOL)[_normalizeDeadzoneRight state]]; [_rightStickAnalog setNormalized:(BOOL)[_normalizeDeadzoneRight state]]; - + // Sync settings between tabs NSInteger tabIndex = [_tabView indexOfTabViewItem:[_tabView selectedTabViewItem]]; - + if (tabIndex == 0) { // Controller Test [_leftLinkedAlt setState:[_leftLinked state]]; [_leftStickDeadzoneAlt setDoubleValue:[_leftStickDeadzone doubleValue]]; @@ -904,7 +904,7 @@ - (IBAction)changeSetting:(id)sender [_rightStickInvertX setState:[_rightStickInvertXAlt state]]; [_rightStickInvertY setState:[_rightStickInvertYAlt state]]; } - + // Create dictionary NSDictionary *dict = @{@"InvertLeftX": @((BOOL)([_leftStickInvertX state]==NSOnState)), @"InvertLeftY": @((BOOL)([_leftStickInvertY state]==NSOnState)), @@ -935,7 +935,7 @@ - (IBAction)changeSetting:(id)sender @"BindingY": @((UInt8)([MyWhole360ControllerMapper mapping][14])), @"SwapSticks": @((BOOL)([_swapSticks state]==NSOnState)), @"Pretend360": @((BOOL)([_pretend360Button state]==NSOnState))}; - + // Set property IORegistryEntrySetCFProperties(registryEntry, (__bridge CFTypeRef)(dict)); SetController(GetSerialNumber(registryEntry), dict); @@ -1114,7 +1114,7 @@ - (void)handleDeviceChange - (IBAction)powerOff:(id)sender { FFEFFESCAPE escape = {0}; - + if (ffDevice == 0) return; escape.dwSize=sizeof(escape); escape.dwCommand=0x03; diff --git a/Pref360Control/Pref360StyleKit.m b/Pref360Control/Pref360StyleKit.m index 92e32f49..0c09d056 100644 --- a/Pref360Control/Pref360StyleKit.m +++ b/Pref360Control/Pref360StyleKit.m @@ -791,14 +791,14 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress CGFloat rightDead = rightDeadzone * 15; const CGFloat max16 = 15; CGFloat maxVal = max16 - rightDead; - + if (rightStickPosition.x > 0) rightStickPosition.x = (fabs(rightStickPosition.x) * maxVal / max16) + rightDead; else if (rightStickPosition.x < 0) rightStickPosition.x = -((fabs(rightStickPosition.x) * maxVal / max16) + rightDead); else rightStickPosition.x = 0; - + if (rightStickPosition.y > 0) rightStickPosition.y = (fabs(rightStickPosition.y) * maxVal / max16) + rightDead; else if (rightStickPosition.y < 0) @@ -899,14 +899,14 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress CGFloat leftDead = leftDeadzone * 15; const CGFloat max16 = 15; CGFloat maxVal = max16 - leftDead; - + if (leftStickPosition.x > 0) leftStickPosition.x = (fabs(leftStickPosition.x) * maxVal / max16) + leftDead; else if (leftStickPosition.x < 0) leftStickPosition.x = -((fabs(leftStickPosition.x) * maxVal / max16) + leftDead); else leftStickPosition.x = 0; - + if (leftStickPosition.y > 0) leftStickPosition.y = (fabs(leftStickPosition.y) * maxVal / max16) + leftDead; else if (leftStickPosition.y < 0) @@ -998,8 +998,8 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress [NSGraphicsContext restoreGraphicsState]; } - - + + //// LEDs { //// Bezier Drawing @@ -1013,8 +1013,8 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress [bezierPath closePath]; [led1Color setFill]; [bezierPath fill]; - - + + //// Bezier 3 Drawing NSBezierPath* bezier3Path = NSBezierPath.bezierPath; [bezier3Path moveToPoint: NSMakePoint(235.47, 261.06)]; @@ -1025,8 +1025,8 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress [bezier3Path closePath]; [led2Color setFill]; [bezier3Path fill]; - - + + //// Bezier 2 Drawing NSBezierPath* bezier2Path = NSBezierPath.bezierPath; [bezier2Path moveToPoint: NSMakePoint(259.43, 231.1)]; @@ -1037,8 +1037,8 @@ + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPress [bezier2Path closePath]; [led4Color setFill]; [bezier2Path fill]; - - + + //// Bezier 4 Drawing NSBezierPath* bezier4Path = NSBezierPath.bezierPath; [bezier4Path moveToPoint: NSMakePoint(205.51, 231.1)]; diff --git a/Pref360Control/Resources/artworks.xcassets/AboutTemplate.imageset/Contents.json b/Pref360Control/Resources/artworks.xcassets/AboutTemplate.imageset/Contents.json index f02f1808..7c9a5abf 100644 --- a/Pref360Control/Resources/artworks.xcassets/AboutTemplate.imageset/Contents.json +++ b/Pref360Control/Resources/artworks.xcassets/AboutTemplate.imageset/Contents.json @@ -15,4 +15,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/Pref360Control/Resources/artworks.xcassets/PowerOffTemplate.imageset/Contents.json b/Pref360Control/Resources/artworks.xcassets/PowerOffTemplate.imageset/Contents.json index ed9a4937..b1f2d2bd 100644 --- a/Pref360Control/Resources/artworks.xcassets/PowerOffTemplate.imageset/Contents.json +++ b/Pref360Control/Resources/artworks.xcassets/PowerOffTemplate.imageset/Contents.json @@ -15,4 +15,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 980522c5..905e5fd3 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Wireless360Controller.cpp - main source of the standard wireless controller driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -34,7 +34,7 @@ OSDefineMetaClassAndStructors(Wireless360Controller, WirelessHIDDevice) static inline XBox360_SShort getAbsolute(XBox360_SShort value) { XBox360_SShort reverse; - + #ifdef __LITTLE_ENDIAN__ reverse=value; #elif __BIG_ENDIAN__ @@ -48,14 +48,14 @@ static inline XBox360_SShort getAbsolute(XBox360_SShort value) bool Wireless360Controller::init(OSDictionary *propTable) { bool res = super::init(propTable); - + // Default settings invertLeftX = invertLeftY = false; invertRightX = invertRightY = false; deadzoneLeft = deadzoneRight = 0; relativeLeft = relativeRight = false; readSettings(); - + // Done return res; } @@ -66,7 +66,7 @@ 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(); @@ -275,7 +275,7 @@ void Wireless360Controller::remapButtons(void *buffer) { XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; UInt16 new_buttons = 0; - + new_buttons |= ((report360->buttons & 1) == 1) << mapping[0]; new_buttons |= ((report360->buttons & 2) == 2) << mapping[1]; new_buttons |= ((report360->buttons & 4) == 4) << mapping[2]; @@ -291,16 +291,16 @@ void Wireless360Controller::remapButtons(void *buffer) new_buttons |= ((report360->buttons & 8192) == 8192) << mapping[12]; new_buttons |= ((report360->buttons & 16384) == 16384) << mapping[13]; new_buttons |= ((report360->buttons & 32768) == 32768) << mapping[14]; - + // IOLog("BUTTON PACKET - %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", mapping[0], mapping[1], mapping[2], mapping[3], mapping[4], mapping[5], mapping[6], mapping[7], mapping[8], mapping[9], mapping[10], mapping[11], mapping[12], mapping[13], mapping[14]); - + report360->buttons = new_buttons; } void Wireless360Controller::remapAxes(void *buffer) { XBOX360_IN_REPORT *report360 = (XBOX360_IN_REPORT*)buffer; - + XBOX360_HAT temp = report360->left; report360->left = report360->right; report360->right = temp; @@ -319,7 +319,7 @@ void Wireless360Controller::SetRumbleMotors(unsigned char large, unsigned char s { unsigned char buf[] = {0x00, 0x01, 0x0f, 0xc0, 0x00, large, small, 0x00, 0x00, 0x00, 0x00, 0x00}; WirelessDevice *device = OSDynamicCast(WirelessDevice, getProvider()); - + if (device != NULL) device->SendPacket(buf, sizeof(buf)); } @@ -327,11 +327,11 @@ void Wireless360Controller::SetRumbleMotors(unsigned char large, unsigned char s IOReturn Wireless360Controller::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) { char data[2]; - + // IOLog("setReport(%p, %d, %d)\n", report, reportType, options); if (report->readBytes(0, data, 2) < 2) return kIOReturnUnsupported; - + // Rumble if (data[0] == 0x00) { @@ -341,14 +341,14 @@ IOReturn Wireless360Controller::setReport(IOMemoryDescriptor *report, IOHIDRepor SetRumbleMotors(data[0], data[1]); return kIOReturnSuccess; } - + return super::setReport(report, reportType, options); } IOReturn Wireless360Controller::newReportDescriptor(IOMemoryDescriptor ** descriptor ) const { IOBufferMemoryDescriptor *buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, sizeof(ReportDescriptor)); - + if (buffer == NULL) return kIOReturnNoResources; buffer->writeBytes(0, ReportDescriptor, sizeof(ReportDescriptor)); @@ -360,7 +360,7 @@ IOReturn Wireless360Controller::newReportDescriptor(IOMemoryDescriptor ** descri IOReturn Wireless360Controller::setProperties(OSObject *properties) { OSDictionary *dictionary = OSDynamicCast(OSDictionary,properties); - + if(dictionary!=NULL) { setProperty(kDriverSettingKey,dictionary); readSettings(); diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h index f2f04cef..c108622c 100644 --- a/Wireless360Controller/Wireless360Controller.h +++ b/Wireless360Controller/Wireless360Controller.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + Wireless360Controller.h - declaration of the wireless controller driver class - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -32,7 +32,7 @@ class Wireless360Controller : public WirelessHIDDevice bool init(OSDictionary *propTable = NULL); void SetRumbleMotors(unsigned char large, unsigned char small); - + IOReturn setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options); IOReturn newReportDescriptor(IOMemoryDescriptor ** descriptor ) const; @@ -55,12 +55,12 @@ class Wireless360Controller : public WirelessHIDDevice short deadzoneLeft,deadzoneRight; bool relativeLeft,relativeRight; bool deadOffLeft, deadOffRight; - + UInt8 rumbleType; - + bool swapSticks; UInt8 mapping[15]; - + private: void fiddleReport(unsigned char *data, int length); void remapButtons(void *buffer); diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index ddad5101..0a3790f9 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessDevice.cpp - generic Wireless 360 device driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -97,7 +97,7 @@ OSNumber* WirelessDevice::newLocationIDNumber() const { OSNumber *owner; UInt32 location = 0; - + if (index == -1) return NULL; WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h index 1815ef34..348114f0 100644 --- a/WirelessGamingReceiver/WirelessDevice.h +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessDevice.h - declaration of the base wireless 360 device driver class - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -32,20 +32,20 @@ typedef void (*WirelessDeviceWatcher)(void *target, WirelessDevice *sender, void class WirelessDevice : public IOService { OSDeclareDefaultStructors(WirelessDevice); - + public: bool init(OSDictionary *dictionary = 0); // Controller interface bool IsDataAvailable(void); IOMemoryDescriptor* NextPacket(void); - + void SendPacket(const void *data, size_t length); - + void RegisterWatcher(void *target, WirelessDeviceWatcher function, void *parameter); OSNumber* newLocationIDNumber() const; - + private: friend class WirelessGamingReceiver; void SetIndex(int i); diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 141640f6..34c25aff 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessGamingReceiver.cpp - main source of the wireless receiver driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -39,7 +39,7 @@ typedef struct WGRREAD static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) { const IOUSBEndpointDescriptor *ed = pipe->GetEndpointDescriptor(); - + if (ed == NULL) return 0; else return ed->wMaxPacketSize; } @@ -52,7 +52,7 @@ bool WirelessGamingReceiver::start(IOService *provider) IOUSBFindEndpointRequest pipeRequest; IOUSBInterface *interface; int iConnection, iOther, i; - + if (!IOService::start(provider)) { // IOLog("start - superclass failed\n"); @@ -73,7 +73,7 @@ bool WirelessGamingReceiver::start(IOService *provider) // IOLog("start - device has no configurations!\n"); goto fail; } - + // Set configuration cd = device->GetFullConfigurationDescriptor(0); if (cd == NULL) @@ -82,7 +82,7 @@ bool WirelessGamingReceiver::start(IOService *provider) // IOLog("start - couldn't get configuration descriptor\n"); goto fail; } - + if (!device->open(this)) { device = NULL; @@ -94,7 +94,7 @@ bool WirelessGamingReceiver::start(IOService *provider) // IOLog("start - unable to set configuration\n"); goto fail; } - + for (i = 0; i < WIRELESS_CONNECTIONS; i++) { connections[i].controller = NULL; @@ -107,7 +107,7 @@ bool WirelessGamingReceiver::start(IOService *provider) connections[i].service = NULL; connections[i].controllerStarted = false; } - + pipeRequest.interval = 0; pipeRequest.maxPacketSize = 0; pipeRequest.type = kUSBInterrupt; @@ -149,7 +149,7 @@ bool WirelessGamingReceiver::start(IOService *provider) connections[iConnection].controllerOut->retain(); iConnection++; break; - + case 130: // It is a mystery if (!interface->open(this)) { @@ -177,17 +177,17 @@ bool WirelessGamingReceiver::start(IOService *provider) connections[iOther].otherOut->retain(); iOther++; break; - + default: // IOLog("start: Ignoring interface (protocol %d)\n", interface->GetInterfaceProtocol()); break; } } - + if (iConnection != iOther) IOLog("start - interface mismatch?\n"); connectionCount = iConnection; - + for (i = 0; i < connectionCount; i++) { connections[i].inputArray = OSArray::withCapacity(5); @@ -202,10 +202,10 @@ bool WirelessGamingReceiver::start(IOService *provider) goto fail; } } - + // IOLog("start: Transform and roll out (%d interfaces)\n", connectionCount); return true; - + fail: ReleaseAll(); return false; @@ -251,7 +251,7 @@ bool WirelessGamingReceiver::QueueRead(int index) IOUSBCompletion complete; IOReturn err; WGRREAD *data = (WGRREAD*)IOMalloc(sizeof(WGRREAD)); - + if (data == NULL) return false; data->index = index; @@ -265,14 +265,14 @@ bool WirelessGamingReceiver::QueueRead(int index) complete.target = this; complete.action = _ReadComplete; complete.parameter = data; - + err = connections[index].controllerIn->Read(data->buffer, 0, 0, data->buffer->getLength(), &complete); if (err == kIOReturnSuccess) return true; - + data->buffer->release(); IOFree(data, sizeof(WGRREAD)); - + // IOLog("read - failed to start (0x%.8x)\n", err); return false; } @@ -282,7 +282,7 @@ void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt { WGRREAD *data = (WGRREAD*)parameter; bool reread = true; - + switch (status) { case kIOReturnOverrun: @@ -292,7 +292,7 @@ void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt case kIOReturnSuccess: ProcessMessage(data->index, (unsigned char*)data->buffer->getBytesNoCopy(), (int)data->buffer->getLength() - bufferSizeRemaining); break; - + case kIOReturnNotResponding: // IOLog("read - kIOReturnNotResponding\n"); // fall through @@ -300,11 +300,11 @@ void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt reread = false; break; } - + int newIndex = data->index; data->buffer->release(); IOFree(data, sizeof(WGRREAD)); - + if (reread) QueueRead(newIndex); } @@ -315,7 +315,7 @@ bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 len IOBufferMemoryDescriptor *outBuffer; IOUSBCompletion complete; IOReturn err; - + outBuffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, length); if (outBuffer == NULL) { @@ -323,11 +323,11 @@ bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 len return false; } outBuffer->writeBytes(0, bytes, length); - + complete.target = this; complete.action = _WriteComplete; complete.parameter = outBuffer; - + err = connections[index].controllerOut->Write(outBuffer, 0, 0, length, &complete); if (err == kIOReturnSuccess) return true; @@ -428,7 +428,7 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data #ifdef PROTOCOL_DEBUG char s[1024]; int i; - + for (i = 0; i < length; i++) { s[(i * 2) + 0] = "0123456789ABCDEF"[(data[i] & 0xF0) >> 4]; @@ -469,7 +469,7 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data int i, j; IOMemoryDescriptor *data; char c; - + ready = false; j = connections[index].inputArray->getCount(); for (i = 0; !ready && (i < j); i++) @@ -492,7 +492,7 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data } return; } - + // Add anything else to the queue IOMemoryDescriptor *copy = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, length); copy->writeBytes(0, data, length); @@ -505,7 +505,7 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data if (!connections[index].controllerStarted) { char c; - + copy->readBytes(1, &c, 1); if (c == 0x0f) { @@ -562,7 +562,7 @@ bool WirelessGamingReceiver::IsDataQueued(int index) IOMemoryDescriptor* WirelessGamingReceiver::ReadBuffer(int index) { IOMemoryDescriptor *data; - + data = OSDynamicCast(IOMemoryDescriptor, connections[index].inputArray->getObject(0)); if (data != NULL) data->retain(); @@ -575,23 +575,23 @@ OSNumber* WirelessGamingReceiver::newLocationIDNumber() const { OSNumber *number; UInt32 location = 0; - + if (device) { if ((number = OSDynamicCast(OSNumber, device->getProperty("locationID")))) { location = number->unsigned32BitValue(); } - else + 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); } diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index 13135ab9..afb0e72d 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessGamingReceiver.h - declaration of the wireless receiver driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -36,11 +36,11 @@ typedef struct WIRELESS_CONNECTION // Controller IOUSBInterface *controller; IOUSBPipe *controllerIn, *controllerOut; - + // Mystery IOUSBInterface *other; IOUSBPipe *otherIn, *otherOut; - + // Runtime data OSArray *inputArray; WirelessDevice *service; @@ -59,31 +59,31 @@ class WirelessGamingReceiver : public IOService // For WirelessDevice to use OSNumber* newLocationIDNumber() const; - + private: friend class WirelessDevice; bool IsDataQueued(int index); IOMemoryDescriptor* ReadBuffer(int index); bool QueueWrite(int index, const void *bytes, UInt32 length); - + private: IOUSBDevice *device; WIRELESS_CONNECTION connections[WIRELESS_CONNECTIONS]; int connectionCount; - + void InstantiateService(int index); - + void ProcessMessage(int index, const unsigned char *data, int length); - + bool QueueRead(int index); void ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining); - + void WriteComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining); - + void ReleaseAll(void); bool didTerminate(IOService *provider, IOOptionBits options, bool *defer); - + static void _ReadComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining); static void _WriteComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining); }; diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index dd4e4374..9aa8a532 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessHIDDevice.cpp - generic wireless 360 device driver with HID support - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -37,7 +37,7 @@ const char weirdStart[] = {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, void WirelessHIDDevice::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) { WirelessHIDDevice *device = OSDynamicCast(WirelessHIDDevice, owner); - + // Automatic shutoff device->serialTimerCount++; if (device->serialTimerCount > POWEROFF_TIMEOUT) @@ -69,7 +69,7 @@ void WirelessHIDDevice::PowerOff(void) { static const unsigned char buf[] = {0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; WirelessDevice *device = OSDynamicCast(WirelessDevice, getProvider()); - + if (device != NULL) { device->SendPacket(buf, sizeof(buf)); @@ -84,7 +84,7 @@ IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportTyp if (report->readBytes(0, data, 2) < 2) return kIOReturnUnsupported; - + switch (data[0]) { case 0x01: // LED if ((data[1] != report->getLength()) || (data[1] != 0x03)) @@ -105,16 +105,16 @@ bool WirelessHIDDevice::handleStart(IOService *provider) { WirelessDevice *device; IOWorkLoop *workloop; - + if (!super::handleStart(provider)) goto fail; device = OSDynamicCast(WirelessDevice, provider); if (device == NULL) goto fail; - + serialTimerCount = 0; - + serialTimer = IOTimerEventSource::timerEventSource(this, ChatPadTimerActionWrapper); if (serialTimer == NULL) { @@ -127,15 +127,15 @@ bool WirelessHIDDevice::handleStart(IOService *provider) IOLog("start - failed to connect timer for chatpad\n"); goto fail; } - + device->RegisterWatcher(this, _receivedData, NULL); - + device->SendPacket(weirdStart, sizeof(weirdStart)); serialTimer->setTimeoutMS(1000); return true; - + fail: return false; } @@ -156,7 +156,7 @@ void WirelessHIDDevice::handleStop(IOService *provider) serialTimer->release(); serialTimer = NULL; } - + super::handleStop(provider); } @@ -167,7 +167,7 @@ void WirelessHIDDevice::receivedData(void) WirelessDevice *device = OSDynamicCast(WirelessDevice, getProvider()); if (device == NULL) return; - + while ((data = device->NextPacket()) != NULL) { receivedMessage(data); @@ -181,12 +181,12 @@ const char *HexData = "0123456789ABCDEF"; void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) { unsigned char buf[29]; - + if (data->getLength() != 29) return; - + data->readBytes(0, buf, 29); - + switch (buf[1]) { case 0x0f: // Initial info @@ -203,16 +203,16 @@ void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) serialString[8] = '\0'; IOLog("Got serial number: %s", serialString); break; - + case 0x01: // HID info update if (buf[3] == 0xf0) receivedHIDupdate(buf + 4, buf[5]); break; - + case 0x00: // Info update receivedUpdate(buf[3], buf + 4); break; - + default: break; } @@ -234,7 +234,7 @@ void WirelessHIDDevice::receivedUpdate(unsigned char type, unsigned char *data) } } break; - + default: break; } @@ -245,7 +245,7 @@ void WirelessHIDDevice::receivedHIDupdate(unsigned char *data, int length) { IOReturn err; IOMemoryDescriptor *report; - + serialTimerCount = 0; report = IOMemoryDescriptor::withAddress(data, length, kIODirectionNone); err = handleReport(report); diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index b2f3521f..24231f74 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + WirelessHIDDevice.h - declaration of generic wireless HID device - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify @@ -34,7 +34,7 @@ class WirelessHIDDevice : public IOHIDDevice void SetLEDs(int mode); void PowerOff(void); unsigned char GetBatteryLevel(void); - + IOReturn setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options); OSNumber* newLocationIDNumber() const; @@ -49,10 +49,10 @@ class WirelessHIDDevice : public IOHIDDevice private: static void _receivedData(void *target, WirelessDevice *sender, void *parameter); static void ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender); - + IOTimerEventSource *serialTimer; int serialTimerCount; - + unsigned char battery; char serialString[10]; }; diff --git a/WirelessGamingReceiver/devices.h b/WirelessGamingReceiver/devices.h index 81045194..ccaabcb3 100644 --- a/WirelessGamingReceiver/devices.h +++ b/WirelessGamingReceiver/devices.h @@ -1,9 +1,9 @@ /* MICE Xbox 360 Controller driver for Mac OS X Copyright (C) 2006-2013 Colin Munro - + devics.h - contains constants for the wireless driver - + This file is part of Xbox360Controller. Xbox360Controller is free software; you can redistribute it and/or modify From da095856abeb793203ffefdcb46a434273758126 Mon Sep 17 00:00:00 2001 From: Benjamin Surma Date: Thu, 31 Mar 2016 17:26:10 +0900 Subject: [PATCH 037/216] HORI Real Arcade Pro.EX Premium VLX Support http://www.hori.jp/products/multi/controller/rap_premium_vlx/360/ --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 5e50296f..e4b154a5 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1691,6 +1691,26 @@ idVendor 7085 + HORI Real Arcade Pro.EX Premium VLX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62726 + idVendor + 7085 + RazerAtrox CFBundleIdentifier From b87af7ce0076ddd2bfee76b04cd7d90f16d335e6 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sun, 3 Apr 2016 16:35:16 -0600 Subject: [PATCH 038/216] When computer wakes up, have the daemon reiterate the controllers. Should fix #248, #13 --- 360Daemon/360Daemon.m | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index a638de2e..264cdea3 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #import "ControlPrefs.h" #import "DaemonLEDs.h" @@ -43,6 +45,8 @@ static io_iterator_t onIteratorOther; static io_iterator_t offIteratorWired; static io_iterator_t offIteratorWireless; +static io_object_t powerNotifier; +static io_connect_t root_power_port; // a reference to the Root Power Domain IOService static BOOL foundWirelessReceiver; static DaemonLEDs *leds; @@ -247,12 +251,50 @@ static void callbackDisconnected(void *param, io_iterator_t iterator) } } +static void callbackPower(void *refCon, io_service_t service, natural_t messageType, void *messageArgument) +{ + switch (messageType) + { + case kIOMessageCanSystemSleep: + // we will allow idle sleep + IOAllowPowerChange(root_power_port, (long)messageArgument); + break; + + case kIOMessageSystemWillSleep: + IOAllowPowerChange(root_power_port, (long)messageArgument); + break; + + case kIOMessageSystemHasPoweredOn: + //System has finished waking up... + { + io_iterator_t newItr; + IOServiceGetMatchingServices(masterPort, IOServiceMatching(kIOUSBDeviceClassName), &newItr); + callbackConnected(NULL, newItr); + IOObjectRelease(newItr); + // Wired 360 devices + IOServiceGetMatchingServices(masterPort, IOServiceMatching("Xbox360ControllerClass"), &newItr); + callbackConnected(NULL, newItr); + IOObjectRelease(newItr); + // Wireless 360 devices + IOServiceGetMatchingServices(masterPort, IOServiceMatching("WirelessHIDDevice"), &newItr); + callbackConnected(NULL, newItr); + IOObjectRelease(newItr); + } + break; + + default: + break; + } +} + // Entry point int main (int argc, const char * argv[]) { @autoreleasepool { foundWirelessReceiver = NO; leds = [[DaemonLEDs alloc] init]; + // notification port allocated by IORegisterForSystemPower + IONotificationPortRef sleepNotifyPort; // Get master port, for accessing I/O Kit IOMasterPort(MACH_PORT_NULL,&masterPort); // Set up notification of USB device addition/removal @@ -273,6 +315,18 @@ int main (int argc, const char * argv[]) callbackConnected(NULL, onIteratorWireless); IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("WirelessHIDDevice"), callbackDisconnected, NULL, &offIteratorWireless); callbackDisconnected(NULL, offIteratorWireless); + // wake/sleep watching + root_power_port = IORegisterForSystemPower(NULL, &sleepNotifyPort, callbackPower, &powerNotifier); + if (root_power_port == 0) + { + printf("IORegisterForSystemPower failed\n"); + } + else + { + CFRunLoopAddSource(CFRunLoopGetCurrent(), + IONotificationPortGetRunLoopSource(sleepNotifyPort), kCFRunLoopCommonModes); + } + // Run loop CFRunLoopRun(); // Stop listening @@ -284,6 +338,14 @@ int main (int argc, const char * argv[]) CFRunLoopRemoveSource(CFRunLoopGetCurrent(), notifySource, kCFRunLoopCommonModes); CFRunLoopSourceInvalidate(notifySource); IONotificationPortDestroy(notifyPort); + if (root_power_port) { + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), + IONotificationPortGetRunLoopSource(sleepNotifyPort), + kCFRunLoopCommonModes); + IODeregisterForSystemPower(&powerNotifier); + IOServiceClose(root_power_port); + IONotificationPortDestroy(sleepNotifyPort); + } // End } return 0; From bad5cf1481a96821f370f3f0d3331cfc640f7b0b Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Sat, 23 Apr 2016 16:38:46 -0700 Subject: [PATCH 039/216] Change product string for an Xbox One pad pretending to be a 360 pad --- 360Controller/Controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 7191a909..176597c2 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -673,7 +673,7 @@ OSDefineMetaClassAndStructors(XboxOnePretend360Class, XboxOneControllerClass) OSString* XboxOnePretend360Class::newProductString() const { - return OSString::withCString("Xbox One Wired Controller (Xbox 360)"); + return OSString::withCString("Xbox 360 Wired Controller"); } OSNumber* XboxOnePretend360Class::newProductIDNumber() const From 243ed2e814ff3f8fb0b053ea92922583d79a1594 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Sat, 23 Apr 2016 22:46:39 -0700 Subject: [PATCH 040/216] Separate the device name from the name displayed in the preference pane --- Pref360Control/DeviceItem.h | 2 +- Pref360Control/DeviceItem.m | 11 ++++++++--- Pref360Control/Pref360ControlPref.m | 4 +--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index 817382a4..71f2556d 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -28,7 +28,7 @@ #include @interface DeviceItem : NSObject -@property (strong, readonly) NSString *name; +@property (strong, readonly) NSString *displayName; @property (readonly) io_service_t rawDevice; @property (readonly) FFDeviceObjectReference ffDevice; @property (readonly) IOHIDDeviceInterface122 **hidDevice; diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index 992b966d..dc2d7773 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -38,14 +38,13 @@ } @interface DeviceItem () -@property (strong, readwrite) NSString *name; +@property (strong, readwrite) NSString *deviceName; @property (readwrite) io_service_t rawDevice; @property (readwrite) FFDeviceObjectReference ffDevice; @property (readwrite) IOHIDDeviceInterface122 **hidDevice; @end @implementation DeviceItem -@synthesize name = deviceName; @synthesize rawDevice = deviceHandle; @synthesize ffDevice = forceFeedback; @synthesize hidDevice = interface; @@ -69,7 +68,7 @@ - (instancetype)initWithItemForDevice:(io_service_t)device forceFeedback = 0; FFCreateDevice(device, &forceFeedback); self.rawDevice = device; - self.name = GetDeviceName(device); + self.deviceName = GetDeviceName(device); } return self; } @@ -95,4 +94,10 @@ - (void)dealloc FFReleaseDevice(forceFeedback); } +- (NSString *)displayName { + if (self.deviceName == nil) + return @"Generic Controller"; + return self.deviceName; +} + @end diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index c6fc715c..33d01517 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -763,9 +763,7 @@ - (void)updateDeviceList DeviceItem *item = [DeviceItem allocateDeviceItemForDevice:hidDevice]; if (item == nil) continue; // Add to item - NSString *name = item.name; - if (name == nil) - name = @"Generic Controller"; + NSString *name = item.displayName; [_deviceList addItemWithTitle:[NSString stringWithFormat:@"%i: %@ (%@)", ++count, name, deviceWireless ? @"Wireless" : @"Wired"]]; [_deviceListBinding addItemWithTitle:[NSString stringWithFormat:@"%i: %@ (%@)", count, name, deviceWireless ? @"Wireless" : @"Wired"]]; [_deviceListAdvanced addItemWithTitle:[NSString stringWithFormat:@"%i: %@ (%@)", count, name, deviceWireless ? @"Wireless" : @"Wired"]]; From 5d7f7b48f3b6906b828bf199affe9fe1109fd0bf Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Mon, 25 Apr 2016 19:31:13 -0700 Subject: [PATCH 041/216] Fix remapped buttons not resetting --- Pref360Control/MyWhole360ControllerMapper.h | 3 ++- Pref360Control/MyWhole360ControllerMapper.m | 7 +++++++ Pref360Control/Pref360ControlPref.m | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Pref360Control/MyWhole360ControllerMapper.h b/Pref360Control/MyWhole360ControllerMapper.h index 4972f329..ee732a0b 100644 --- a/Pref360Control/MyWhole360ControllerMapper.h +++ b/Pref360Control/MyWhole360ControllerMapper.h @@ -14,7 +14,8 @@ @property BOOL isMapping; -- (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pref; +- (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pref; +- (void)resetWithOwner:(Pref360ControlPref *)pref; - (void)buttonPressedAtIndex:(int)index; + (UInt8 *)mapping; diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index dc9b7758..bf7a5160 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -156,7 +156,14 @@ - (void)resetMapping { } } +- (void)resetWithOwner:(Pref360ControlPref *)prefPref { + pref = prefPref; + [self reset]; +} + - (void)reset { + if (pref == nil) + NSLog(@"Unable to reset remapping (pref is nil)"); [super reset]; _isMapping = NO; [self resetMapping]; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index c6fc715c..58929140 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1125,12 +1125,12 @@ - (IBAction)startRemappingPressed:(id)sender { if (![_wholeControllerMapper isMapping]) [_wholeControllerMapper runMapperWithButton:_remappingButton andOwner:self]; else - [_wholeControllerMapper reset]; + [_wholeControllerMapper resetWithOwner:self]; } - (IBAction)resetRemappingPressed:(id)sender { [_remappingButton setState:NSOffState]; - [_wholeControllerMapper reset]; + [_wholeControllerMapper resetWithOwner:self]; } - (IBAction)pretend360Checked:(id)sender { From 19ef67a6aac7627f0e15e59093d87c74261bfa7b Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 00:33:56 -0700 Subject: [PATCH 042/216] Fix remapping for wireless 360 controllers --- .../Wireless360Controller.cpp | 24 ++++++++++++++++++- Wireless360Controller/Wireless360Controller.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 905e5fd3..67ccd6fe 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -55,6 +55,16 @@ bool Wireless360Controller::init(OSDictionary *propTable) deadzoneLeft = deadzoneRight = 0; relativeLeft = relativeRight = false; readSettings(); + // Bindings + noMapping = true; + for (int i = 0; i < 11; i++) + { + mapping[i] = i; + } + for (int i = 12; i < 16; i++) + { + mapping[i-1] = i; + } // Done return res; @@ -123,6 +133,17 @@ void Wireless360Controller::readSettings(void) 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", @@ -309,7 +330,8 @@ void Wireless360Controller::remapAxes(void *buffer) void Wireless360Controller::receivedHIDupdate(unsigned char *data, int length) { fiddleReport(data, length); -// remapButtons(data); + if (!noMapping) + remapButtons(data); if (swapSticks) remapAxes(data); super::receivedHIDupdate(data, length); diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h index c108622c..af38494e 100644 --- a/Wireless360Controller/Wireless360Controller.h +++ b/Wireless360Controller/Wireless360Controller.h @@ -60,6 +60,7 @@ class Wireless360Controller : public WirelessHIDDevice bool swapSticks; UInt8 mapping[15]; + bool noMapping = true; private: void fiddleReport(unsigned char *data, int length); From b69b1991737860e59258fdbfb4cefed921d5994f Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 15:05:06 -0700 Subject: [PATCH 043/216] Add `controllerType` property to `DeviceItem` --- Pref360Control/DeviceItem.h | 2 ++ Pref360Control/DeviceItem.m | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index 71f2556d..922c03d8 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -26,9 +26,11 @@ #include #include #include +#import "Pref360ControlPref.h" @interface DeviceItem : NSObject @property (strong, readonly) NSString *displayName; +@property (readonly) ControllerType controllerType; @property (readonly) io_service_t rawDevice; @property (readonly) FFDeviceObjectReference ffDevice; @property (readonly) IOHIDDeviceInterface122 **hidDevice; diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index dc2d7773..da86b9ad 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -37,14 +37,56 @@ return deviceName; } +static ControllerType GetControllerType(io_service_t device) +{ + io_service_t parent; + CFMutableDictionaryRef serviceProperties; + + // Check for the DeviceData dictionary in device + if (IORegistryEntryCreateCFProperties(device, &serviceProperties, kCFAllocatorDefault, kNilOptions) == KERN_SUCCESS) + { + NSDictionary *properties = CFBridgingRelease(serviceProperties); + NSDictionary *deviceData = properties[@"DeviceData"]; + + if (deviceData != nil) + { + NSNumber *controllerType = deviceData[@"ControllerType"]; + if (controllerType != nil) + return (ControllerType)[controllerType intValue]; + } + } + + // Check for the DeviceData dictionary in the device's parent + if (IORegistryEntryGetParentEntry(device, kIOServicePlane, &parent) == KERN_SUCCESS) + { + if(IORegistryEntryCreateCFProperties(parent, &serviceProperties, kCFAllocatorDefault, kNilOptions) == KERN_SUCCESS) + { + NSDictionary *properties = CFBridgingRelease(serviceProperties); + NSDictionary *deviceData = properties[@"DeviceData"]; + + if (deviceData != nil) + { + NSNumber *controllerType = deviceData[@"ControllerType"]; + if (controllerType != nil) + return (ControllerType)[controllerType intValue]; + } + } + } + + NSLog(@"Error: couldn't find ControllerType"); + return Xbox360Controller; +} + @interface DeviceItem () @property (strong, readwrite) NSString *deviceName; +@property (readwrite) ControllerType controllerType; @property (readwrite) io_service_t rawDevice; @property (readwrite) FFDeviceObjectReference ffDevice; @property (readwrite) IOHIDDeviceInterface122 **hidDevice; @end @implementation DeviceItem +@synthesize controllerType = controllerType; @synthesize rawDevice = deviceHandle; @synthesize ffDevice = forceFeedback; @synthesize hidDevice = interface; @@ -69,6 +111,7 @@ - (instancetype)initWithItemForDevice:(io_service_t)device FFCreateDevice(device, &forceFeedback); self.rawDevice = device; self.deviceName = GetDeviceName(device); + self.controllerType = GetControllerType(device); } return self; } From 7dab5495806d20238c18d85ef81f6ad32f291c44 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 15:07:38 -0700 Subject: [PATCH 044/216] Fix reading/writing of `ControllerType` in user preferences The `ControllerType` key in `/Library/Preferences/com.mice.driver.Xbox360Controller.devices.plist` was previously always set to 0 (`Xbox360Controller`) --- Pref360Control/Pref360ControlPref.m | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 33d01517..a2dca415 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -434,6 +434,7 @@ - (void)startDevice device = [item hidDevice]; ffDevice = [item ffDevice]; registryEntry = [item rawDevice]; + controllerType = [item controllerType]; } if((*device)->copyMatchingElements(device,NULL,&CFelements)!=kIOReturnSuccess) { @@ -603,7 +604,9 @@ - (void)startDevice if(CFDictionaryGetValueIfPresent(dict,CFSTR("ControllerType"),(void*)&intValue)) { NSNumber *num = (__bridge NSNumber *)intValue; - controllerType = (ControllerType)[num integerValue]; + ControllerType controllerTypePrefs = (ControllerType)[num integerValue]; + if (controllerTypePrefs != controllerType) + NSLog(@"ControllerType from prefs was %d, expected %d", (int)controllerTypePrefs, (int)controllerType); } else NSLog(@"No value for ControllerType\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("RumbleType"),(void*)&intValue)) { NSNumber *num = (__bridge NSNumber *)intValue; @@ -902,6 +905,15 @@ - (IBAction)changeSetting:(id)sender [_rightStickInvertX setState:[_rightStickInvertXAlt state]]; [_rightStickInvertY setState:[_rightStickInvertYAlt state]]; } + + BOOL pretend360 = ([_pretend360Button state] == NSOnState); + if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) + { + if (pretend360) + controllerType = XboxOnePretend360Controller; + else + controllerType = XboxOneController; + } // Create dictionary NSDictionary *dict = @{@"InvertLeftX": @((BOOL)([_leftStickInvertX state]==NSOnState)), @@ -932,7 +944,7 @@ - (IBAction)changeSetting:(id)sender @"BindingX": @((UInt8)([MyWhole360ControllerMapper mapping][13])), @"BindingY": @((UInt8)([MyWhole360ControllerMapper mapping][14])), @"SwapSticks": @((BOOL)([_swapSticks state]==NSOnState)), - @"Pretend360": @((BOOL)([_pretend360Button state]==NSOnState))}; + @"Pretend360": @((BOOL)pretend360)}; // Set property IORegistryEntrySetCFProperties(registryEntry, (__bridge CFTypeRef)(dict)); From 384350a9bd7849f450b1f84201bd9b1745d600fc Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 15:12:24 -0700 Subject: [PATCH 045/216] Change display name of Xbox One pad when pretending to be 360 pad --- Pref360Control/DeviceItem.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index da86b9ad..e408fd27 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -140,7 +140,10 @@ - (void)dealloc - (NSString *)displayName { if (self.deviceName == nil) return @"Generic Controller"; - return self.deviceName; + else if (self.controllerType == XboxOnePretend360Controller) + return @"Xbox One Controller (Xbox 360)"; + else + return self.deviceName; } @end From d8313004f155acebed4c3b714885970581abe5c8 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 17:53:47 -0700 Subject: [PATCH 046/216] Refactor `MyWhole360ControllerMapper` The logic for starting/stopping mapping has been pulled out into the new `startMapping`/`stopMapping` methods --- Pref360Control/MyWhole360ControllerMapper.m | 39 ++++++++++++--------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index bf7a5160..7305539b 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -24,14 +24,31 @@ + (UInt8 *)mapping return mapping; } +- (void)startMapping +{ + currentMappingIndex = 0; + _isMapping = YES; + [self setUpPressed:YES]; +} + +- (void)stopMapping +{ + [super reset]; + currentMappingIndex = 0; + _isMapping = NO; + if (remappingButton != nil) + [remappingButton setState:NSOffState]; + [pref changeSetting:nil]; + [[BindingTableView tableView] reloadData]; + [pref changeSetting:nil]; +} + - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)prefPref { pref = prefPref; remappingButton = button; // [self resetMapping]; // [pref changeSetting:nil]; - currentMappingIndex = 0; - _isMapping = YES; - [self setUpPressed:YES]; + [self startMapping]; } - (int)realignButtonToByte:(int)index { @@ -57,13 +74,8 @@ - (void)buttonPressedAtIndex:(int)index { mapping[currentMappingIndex] = [self realignButtonToByte:index]; currentMappingIndex++; [self setButtonAtIndex:currentMappingIndex]; - if (currentMappingIndex == 15) { - _isMapping = NO; - currentMappingIndex = 0; - [remappingButton setState:NSOffState]; - [[BindingTableView tableView] reloadData]; - [pref changeSetting:nil]; - } + if (currentMappingIndex == 15) + [self stopMapping]; } - (void)setButtonAtIndex:(int)index { @@ -164,13 +176,8 @@ - (void)resetWithOwner:(Pref360ControlPref *)prefPref { - (void)reset { if (pref == nil) NSLog(@"Unable to reset remapping (pref is nil)"); - [super reset]; - _isMapping = NO; [self resetMapping]; - [remappingButton setState:NSOffState]; - [pref changeSetting:nil]; - [[BindingTableView tableView] reloadData]; - [pref changeSetting:nil]; + [self stopMapping]; } - (void)awakeFromNib { From 15597c12a99e65dc79cb686d16db2a1363e42a39 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 17:59:49 -0700 Subject: [PATCH 047/216] Add `[MyWhole360Controller cancelRemappingWithButton:andOwner:]` method Currently just calls `[MyWhole360Controller resetWithOwner:]` --- Pref360Control/MyWhole360ControllerMapper.h | 1 + Pref360Control/MyWhole360ControllerMapper.m | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Pref360Control/MyWhole360ControllerMapper.h b/Pref360Control/MyWhole360ControllerMapper.h index ee732a0b..d8227adf 100644 --- a/Pref360Control/MyWhole360ControllerMapper.h +++ b/Pref360Control/MyWhole360ControllerMapper.h @@ -15,6 +15,7 @@ @property BOOL isMapping; - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pref; +- (void)cancelMappingWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pref; - (void)resetWithOwner:(Pref360ControlPref *)pref; - (void)buttonPressedAtIndex:(int)index; + (UInt8 *)mapping; diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 7305539b..556dbf98 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -51,6 +51,10 @@ - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pr [self startMapping]; } +- (void)cancelMappingWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)prefPref { + [self resetWithOwner:prefPref]; +} + - (int)realignButtonToByte:(int)index { if (index == 0) return 12; if (index == 1) return 13; From c0d7f78d8e080f2e85d78bffaab7bed62a26a138 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 18:00:49 -0700 Subject: [PATCH 048/216] Call `cancelMappingWithButton:andOwner:` when clicking "Cancel Remapping" --- Pref360Control/Pref360ControlPref.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 58929140..69b58793 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1125,7 +1125,7 @@ - (IBAction)startRemappingPressed:(id)sender { if (![_wholeControllerMapper isMapping]) [_wholeControllerMapper runMapperWithButton:_remappingButton andOwner:self]; else - [_wholeControllerMapper resetWithOwner:self]; + [_wholeControllerMapper cancelMappingWithButton:_remappingButton andOwner:self]; } - (IBAction)resetRemappingPressed:(id)sender { From 7e18fefa306d150e2f6ad0cbb732f29b2540dbe2 Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 18:06:04 -0700 Subject: [PATCH 049/216] Restore the previous button mapping when clicking "Cancel Remapping" --- Pref360Control/MyWhole360ControllerMapper.m | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 556dbf98..0084c5a3 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -18,6 +18,7 @@ @implementation MyWhole360ControllerMapper } static UInt8 mapping[15]; +static UInt8 previousMapping[15]; + (UInt8 *)mapping { @@ -43,16 +44,33 @@ - (void)stopMapping [pref changeSetting:nil]; } +- (void)saveCurrentMapping { + for (int i = 0; i < 15; i++) { + previousMapping[i] = mapping[i]; + } +} + +- (void)restorePreviousMapping { + for (int i = 0; i < 15; i++) { + mapping[i] = previousMapping[i]; + } +} + - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)prefPref { pref = prefPref; remappingButton = button; + [self saveCurrentMapping]; // [self resetMapping]; // [pref changeSetting:nil]; [self startMapping]; } - (void)cancelMappingWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)prefPref { - [self resetWithOwner:prefPref]; + pref = prefPref; + remappingButton = button; + + [self restorePreviousMapping]; + [self stopMapping]; } - (int)realignButtonToByte:(int)index { From d7f11ce5a18f6687d2413a28561ab7c13266f0cd Mon Sep 17 00:00:00 2001 From: Kyle Lacy Date: Tue, 26 Apr 2016 18:12:27 -0700 Subject: [PATCH 050/216] Reset button mappings before re-remapping buttons Fixes the issue where mapping A -> B, then trying to map B -> X, would actually result in mapping A -> X --- Pref360Control/MyWhole360ControllerMapper.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 0084c5a3..2a11c436 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -60,8 +60,8 @@ - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pr pref = prefPref; remappingButton = button; [self saveCurrentMapping]; -// [self resetMapping]; -// [pref changeSetting:nil]; + [self resetMapping]; + [pref changeSetting:nil]; [self startMapping]; } From 314bf4c39b6cf2b4042baf7693cf94cf93752266 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 26 Apr 2016 23:07:20 -0500 Subject: [PATCH 051/216] Fix RumbleType & 0.16 Prep --- 360Controller/_60Controller.cpp | 3 +- Install360Controller/Text/Welcome.rtf | 116 +++++++++++------- Pref360Control/Pref360ControlPref.m | 13 +- .../en.lproj/Pref360ControlPref.xib | 6 +- .../Wireless360Controller.cpp | 3 +- 5 files changed, 91 insertions(+), 50 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 8dec6789..c388cbe8 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -250,8 +250,7 @@ void Xbox360Peripheral::readSettings(void) 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")); + 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(); diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index eff1d13f..04c8d437 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf460 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -20,29 +20,63 @@ {\list\listtemplateid17\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid17} {\list\listtemplateid18\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid18} {\list\listtemplateid19\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid19} -{\list\listtemplateid20\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid20}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}} +{\list\listtemplateid20\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid20} +{\list\listtemplateid21\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid21} +{\list\listtemplateid22\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid22} +{\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.15 (beta 5) -\i unofficial -\i0 \ +\b0\fs24 \cf0 Version 0.16\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16: 04/26/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \'95 }New devices\ +{\listtext \'95 }The remapping tool is more robust\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0 +\b \cf0 {\listtext \'95 } +\b0 Settings load properly\ +\ls2\ilvl0 +\b {\listtext \'95 } +\b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ +\ls2\ilvl0 +\b {\listtext \'95 } +\b0 New rumble options for Xbox One controllers\ +\ls2\ilvl0 +\b {\listtext \'95 }OFFICIAL!\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ +Update 0.15 (beta 6): 04/09/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls3\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ +{\listtext \'95 }New Xbox 360 devices +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls4\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0 +\ls4\ilvl0 \b \cf0 {\listtext \'95 } \b0 Fix Xbox One rumble. \b \ @@ -52,15 +86,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls5\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0 +\ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls2\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls2\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -70,7 +104,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls6\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -78,7 +112,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls7\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -88,19 +122,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls8\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0 +\ls8\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls5\ilvl0 +\ls8\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls5\ilvl0 +\ls8\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls5\ilvl0 +\ls8\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -110,16 +144,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls9\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0 +\ls9\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls6\ilvl0 +\ls9\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls6\ilvl0 +\ls9\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -129,17 +163,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls10\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0 +\ls10\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls7\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls7\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -149,7 +183,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls11\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -158,7 +192,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls12\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -168,7 +202,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls13\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -180,7 +214,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls14\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -190,7 +224,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls15\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -202,7 +236,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls16\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -212,7 +246,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls17\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -223,7 +257,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls18\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -233,7 +267,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls19\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -244,7 +278,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls20\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -255,7 +289,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls21\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -266,7 +300,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls22\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -275,7 +309,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls23\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ @@ -288,4 +322,4 @@ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/Proj \b Update: \b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ \ -Ensure to read the following Read Me and License sections before installing!} +Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index c4dfca9a..96c236d1 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -88,8 +88,6 @@ -(void)awakeFromNib { [_aboutPopover setAppearance:NSPopoverAppearanceHUD]; [_rumbleOptions removeAllItems]; [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; - if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) - [_rumbleOptions addItemsWithTitles:@[@"Triggers Only", @"Both"]]; } // Set the pattern on the LEDs @@ -435,6 +433,17 @@ - (void)startDevice ffDevice = [item ffDevice]; registryEntry = [item rawDevice]; controllerType = [item controllerType]; + + if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) + { + [_rumbleOptions removeAllItems]; + [_rumbleOptions addItemsWithTitles:@[@"Default", @"None", @"Triggers Only", @"Both"]]; + } + else + { + [_rumbleOptions removeAllItems]; + [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; + } } if((*device)->copyMatchingElements(device,NULL,&CFelements)!=kIOReturnSuccess) { diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 12ec9d39..a81900e8 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -921,7 +921,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 67ccd6fe..b8f64691 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -98,8 +98,7 @@ void Wireless360Controller::readSettings(void) 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")); + 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(); From cceb7b06ed971b13e194033f27a842019d4c5900 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 14 May 2016 22:22:15 -0500 Subject: [PATCH 052/216] New controllers & minor PrefPane fixes --- 360Controller/Controller.h | 2 +- 360Controller/Info.plist | 40 +++++++++++++++++++ 360Controller/_60Controller.cpp | 18 +++++++-- Pref360Control/Pref360ControlPref.m | 3 +- .../en.lproj/Pref360ControlPref.xib | 5 +-- 5 files changed, 59 insertions(+), 9 deletions(-) diff --git a/360Controller/Controller.h b/360Controller/Controller.h index c6d9e79c..139059b5 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -93,7 +93,7 @@ class XboxOneControllerClass : public Xbox360ControllerClass protected: UInt8 lastData[20]; - UInt8 outCounter = 4; + UInt8 outCounter = 6; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); UInt16 convertButtonPacket(UInt16 buttons); diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e4b154a5..b9d736a1 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1291,6 +1291,26 @@ idVendor 1118 + MicrosoftXboxControllerS - 2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 648 + idVendor + 1118 + MicrosoftXboxOneController2013 CFBundleIdentifier @@ -1351,6 +1371,26 @@ idVendor 1118 + NaconGC100XF + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22000 + idVendor + 4553 + PDPAfterglow CFBundleIdentifier diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index c388cbe8..5d0d4643 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -524,14 +524,24 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { - UInt8 xoneInit1[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; - UInt8 xoneInit2[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; - UInt8 xoneInit3[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; - UInt8 xoneInit4[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; +// UInt8 xoneInit1[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; +// UInt8 xoneInit2[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; +// UInt8 xoneInit3[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; +// UInt8 xoneInit4[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; + UInt8 xoneInit1[] = { 0x04, 0x20, 0x01, 0x00 }; + UInt8 xoneInit2[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x98, 0x00 }; + UInt8 xoneInit3[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00 }; + UInt8 xoneInit4[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; + UInt8 xoneInit5[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; + UInt8 xoneInit6[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; + UInt8 xoneInit7[] = { 0x09, 0x00, 0x05, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; QueueWrite(&xoneInit1, sizeof(xoneInit1)); QueueWrite(&xoneInit2, sizeof(xoneInit2)); QueueWrite(&xoneInit3, sizeof(xoneInit3)); QueueWrite(&xoneInit4, sizeof(xoneInit4)); + QueueWrite(&xoneInit5, sizeof(xoneInit5)); + QueueWrite(&xoneInit6, sizeof(xoneInit6)); + QueueWrite(&xoneInit7, sizeof(xoneInit7)); } else { // Disable LED Xbox360_Prepare(led,outLed); diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 96c236d1..4bae4238 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -619,7 +619,8 @@ - (void)startDevice } else NSLog(@"No value for ControllerType\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("RumbleType"),(void*)&intValue)) { NSNumber *num = (__bridge NSNumber *)intValue; - [_rumbleOptions setState:[num integerValue]]; + [_rumbleOptions selectItemAtIndex:[num integerValue]]; +// [_rumbleOptions setState:[num integerValue]]; } else NSLog(@"No value for RumbleType\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("BindingUp"),(void*)&intValue)) { diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index a81900e8..6e097e3f 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -53,7 +53,6 @@ - From 94bef75b9042e51c964beafd8bdc5cc846533ff8 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 14 May 2016 22:28:31 -0500 Subject: [PATCH 053/216] Update README --- Readme.md | 271 ++++++++++++++++++++++++++---------------------------- 1 file changed, 131 insertions(+), 140 deletions(-) diff --git a/Readme.md b/Readme.md index beaf0cb6..160d9b18 100644 --- a/Readme.md +++ b/Readme.md @@ -1,140 +1,131 @@ -# XBox 360 Controller driver for Mac OS X - -## About ## - -This driver supports the Microsoft Xbox 360 controller, including access to -rumble motors and LEDs, on the Mac OS X platform. It includes a plugin for the -Apple Force Feedback Framework so some games will be able to activate them, -along with a Preference Pane with which allows you to test everything is -installed correctly. Both wired 360 controllers connected via USB, and wireless -360 controllers connected via the Wireless Gaming Receiver for Windows, are -supported. - -This project is a fork of the [Xbox360Controller project][1] originally created -by Colin Munro. - -[1]: http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller - - -## Installation ## - -See the [releases page][2] for the latest compiled and signed version of the -driver. Most users will want to install and run this. - -If you are interested in installing as a developer please see below. - -[2]: https://github.com/360Controller/360Controller/releases - - -## Usage ## - -The driver exposes a standard game pad with a number of standard controls, so -any game that supports gaming devices should work. In some cases this may need -an update from the manufacturer of the game or a patched version. The -Preference Pane uses the standard Mac OS X Frameworks for accessing HID devices -and accessing Force Feedback capabilities, so should be a good test that the -installation is functional. - -[List of working and non-working games.](https://github.com/360Controller/360Controller/wiki/Games) - - -## Developer info ## - -Anything below this probably doesn't affect end users, so you can stop reading -now if you just want to use the driver. - - -### Building ### - -You'll need the full xcode installed via the app store. The command line tools -are not enough. - -From the command line, run: `./build.sh` - -If you'd like to build the .pkg file, there is an installer project for -Packages. Download packages at -[http://s.sudre.free.fr/Software/Packages/about.html][3] -and the resulting dmg file will be copied to the build directory. - -[3]: http://s.sudre.free.fr/Software/Packages/about.html - -The distribution currently consists of 3 projects - one for the driver -(implemented in C++, as an I/O Kit C++ class), one for the force feedback -support plugin (implemented in C, as an I/O Kit COM plugin) and one for the -Preference Pane (implemented in Objective C as a preference pane plugin). -Ideally these 3 targets should be in the same project, but I've not worked on -this yet. - -To build, use the standard Xcode build for Deployment on each of the 3 -projects. Build Feedback360 before 360Controller, as the 360Controller project -includes a script to copy the Feedback360 bundle to the correct place in the -.kext to make it work. - -To debug the driver, `sudo cp -R 360Controller.kext /tmp/` to assign the -correct properties - note that the Force Feedback plugin only seems to be found -by OSX if the driver is in `/System/Library/Extensions` so I could only debug -it in place. - -To test the Preference Pane, just double-click the resulting file. - - -### Yosemite and signed drivers ### - -Since Yosemite (Mac OS X 10.10) all global kexts are required to be signed. -This means if you want to build the drivers and install locally, you need to -have a mac developer account. - -If you'd like to avoid paying apple for the developer account and want to -disable the signature checking, execute the following commands inside a -terminal: - -``` bash -sudo nvram boot-args="kext-dev-mode=1" -sudo kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions -``` - -In addition, you will need to disable System Integrity Protection. In order to -do this, you must boot into recovery mode. When starting the computer, hold -down `CMD + R`. This will get you into recovery mode. From there, simply open -the terminal using the utilities menu item, then enter this command: - -``` bash -csrutil disable -``` - -In order to undo these changes, within recovery mode run: - -``` bash -csrutil enable -``` - -And within the normal OS, reset the boot args using: - -``` bash -sudo nvram -d boot-args -``` - -This will clear all boot args, so if you have boot args already, you will have -to change your boot args an alterate way. - -Note that disabling driver signing is probably a bad idea unless you understand -the implications of running unsigned driver code. - - -### Debugging ### - -Most of the debugging I did was via printing out text. In 360Controller, you -can use IOLog(), and the output will appear in system.log. In Feedback360 -normal `fprintf(stderr,...)`, and the output will appear on the console of -whatever application is attempting to use Force Feedback. In Pref360Control, -`NSLog()` works as it's an Objective C program, and will output to the console -of the Preferences application. - - -## Licence ## - -Copyright (C) 2006-2013 Colin Munro - -This driver is licensed under the GNU Public License. A copy of this license is -included in the distribution file, please inspect it before using the binary or -source. +# Xbox Controller Driver for Mac OS X + +## About +This driver supports the Microsoft Xbox series of controllers including those for the original Xbox, Xbox 360, and Xbox One. Xbox 360 controllers work both wired and wirelessly, while Xbox One controllers only work wired for now. The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. + +Controller support includes ALL devices that work with an Xbox series piece of hardware. All wheels, fight sticks, and controllers should work. This includes things like the Xbox One Elite controller. If your hardware does not work with an Xbox console we cannot support it. Sorry. + +This project is a fork of the [Xbox360Controller project](http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller) originally created by Colin Munro. + +## Installation +See the [releases page](https://github.com/360Controller/360Controller/releases) for the latest compiled and signed version of the driver. Most users will want to run this installer. + +## Uninstallation +In order to uninstall the driver: navigate to the preference pane by opening your "System Preferences," navigating to the "Xbox 360 Controllers" pane, clicking on the "Advanced" tab and pressing the "Uninstall" button. This will prompt you to enter your password so that the uninstaller can remove all of the bundled software from your machine. + +## Usage +The driver exposes a standard game pad with a number of standard controls, so any game that supports gaming devices should work. In some cases, this may require an update from the developer of the game. The preference pane uses the standard Mac OS X frameworks for accessing HID devices in addition to access of Force Feedback capabilities. This means that the preference pane is a good indicator that the driver is functional for other programs. + +It is important to note that this driver does not work, and can never work, with Apple's "Game Controller Framework." This GCController framework corresponds to physical gamepads that have been offically reviewed by Apple and accepted into the mFi program. Due to the fact that we are not Microsoft, we cannot get their gamepad certified to be a GCController. This is an unfortunate oversight on Apple's part. If you would like to discuss this, please do so at [this location.](https://github.com/360Controller/360Controller/issues/55) + +Users have been maintaining a [partial list of working and non-working games.](https://github.com/360Controller/360Controller/wiki/Games) Please contribute your findings so that you can help others debug their controller issues. + +## My controller doesn't work! + +### I'm using a driver from the Tattiebogle website +The Tattiebogle driver is NOT the same driver as this Github project. We do NOT support that driver. Under NO circumstances will we support that driver. If you download the latest version of this driver from the [releases page](https://github.com/360Controller/360Controller/releases) we will do our best to help you out. This driver will install over the Tattiebogle driver. You don't have to worry about uninstalling the Tattiebogle driver first. + +### Original Xbox Controllers +Make an issue describing your problem. + +### Wired Xbox 360 Controllers +If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". + +### Wireless Xbox 360 Controllers +Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. + +### Wired Xbox One Controllers +If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". + +### Wireless Xbox One Controllers +Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. + +## Developer Info +Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. + +### Building + +##### Apple has recently changed how drivers work in Xcode 7. In order to build the driver, you will need Xcode 6.4 or earlier. +Additionally, to use the included build scripts, you will need to change your preferred Xcode installation using `xcode-select`. + +##### You must have a signing certificate to install a locally built driver. Alternatively, you can disable driver signing on your machine, however this is a major security hole and the decision should not be taken lightly. + +You will need a full installation of Xcode to build this project. The command line tools are not enough. + +The project consists of three main parts: The driver (implemented in C++, as an I/O Kit C++ class), the force feedback plugin (implemented in C, as an I/O Kit COM plugin) and the preference pane (implemented in Objective C as a preference pane plugin). To build, use the standard Xcode build for Deployment on each of the 3 projects. Build Feedback360 before 360Controller, as the 360Controller project includes a script to copy the Feedback360 bundle to the correct place in the .kext to make it work. + +To debug the driver, sudo cp -R 360Controller.kext /tmp/ to assign the correct properties - note that the Force Feedback plugin only seems to be found by OSX if the driver is in /System/Library/Extensions so it can only be debugged in place. Due to the fact that drivers are now stored in /Library/Extenions, this means that you must create a symlink between the location of the driver and /System/Library/Extensions so that the force feedback plugin can operate properly. + +### Building the .pkg + +In order to build the .pkg, you will need to install [Packages.app](http://s.sudre.free.fr/Software/Packages/about.html). + +#### If you don't have a signing certificate + +* Open `360 Driver.xcodeproj` using Xcode. +* Select the `360 Driver` project in the Navigator. +* Select the `360Daemon` target from the top right corner. +* Select the `Build Settings` tab from the top of the screen. +* In the `Code Signing` section, find `Code Signing Identity` section and expand it. +* In the `Release` section, change the selection to `Don't Code Sign`. +* Run `./build.sh` to build the .pkg. This .pkg can be found in the `Install360Controller` directory. + +#### If you have a signing certificate + +* Open `360 Driver.xcodeproj` using Xcode. +* Select the `360 Driver` project in the Navigator. +* Select the `360Daemon` target from the top right corner. +* Select the `Build Settings` tab from the top of the screen. +* In the `Code Signing` section, find `Code Signing Identity` section and expand it. +* In the `Release` section, change the selection to your `Developer ID Application` certificate. +* Run `./build.sh` to build the .pkg. This .pkg can be found in the `Install360Controller` directory. + +### Disabling signing requirements + +Since Yosemite (Mac OS X 10.10) all global kexts are required to be signed. This means if you want to build the drivers and install locally, you need a very specific signing certificate that Apple closely controls. If you want to disable the signing requirement from OS X, you will need to do several things. + +First, execute these commands in your terminal: +``` +sudo nvram boot-args="kext-dev-mode=1" +sudo kextcache -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions +``` + +Next, you must disable System Integrity Protection. To do this, boot into recovery mode by holding down `CMD + R` while the computer is starting. Once recovery mode has been loaded, open the terminal from the `Utilites` menu item. Execute the following command: +``` +csrutil disable +``` + +### Re-Enabling signing requirements + +From recovery mode, execute the following command: +``` +csrutil enable +``` + +Reboot into OS X like normal. You can reset the boot arguments by executing this command: +``` +sudo nvram -d boot-args +``` +This will remove ALL boot-args. If you have previously manipulated your boot-args, those changes will be erased as well! + +### Debugging the driver + +Debugging the driver depends on which part you intend to debug. For the 360Controller driver itself, it uses `IOLog` to output to the `system.log` which can be accessed using Console.app. Feedback360 uses `fprintf(stderr, ...)`, which should appear within the console of the program attempting to use force feedback. + +### Debugging the preference pane + +These instructions work for Xcode 6.4, the most recent version of Xcode that can still build the driver. Most of these instructions are pulled directly from [this blog post.](http://www.condition-alpha.com/blog/?p=1314) Please visit it for futher information. + +First, edit your build scheme for Pref360Control, and select the "Run" scheme, and make sure you are editing "Debug" (A). In the environment variables section, click on "+" to add a new environment variable (B). Name the new variable OBJC_DISABLE_GC, and set its value to YES. + +Next, click the little disclosure triangle for the run scheme to reveal its detailed settings. Then select pre-actions. Click the "+" at the bottom to add a run script action. Enter /bin/sh as the shell, make sure that your target is selected to provide build settings, and type a shell command line to install the newly compiled pref pane in your personal Library folder: + +```cp -Rf ${CONFIGURATION_BUILD_DIR}/Pref360Control.prefPane ~/Library/PreferencePanes``` + +Finally, select the run step, choose "other" from the executable drop-down menu, and select System Preferences in the Applications folder. Verify that "Debug executable" and "Automatically" are both checked. + +## Licence + +Copyright (C) 2006-2013 Colin Munro + +This driver is licensed under the GNU Public License. A copy of this license is included in the distribution file, please inspect it before using the binary or source. \ No newline at end of file From 51b2b0fd49c6e7cf9b505857fe46688902cc3609 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 15 May 2016 11:05:34 -0500 Subject: [PATCH 054/216] Add note about Pretend360 --- Readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Readme.md b/Readme.md index 160d9b18..52e3fc0a 100644 --- a/Readme.md +++ b/Readme.md @@ -40,6 +40,9 @@ If you have a third party controller, make an issue with the "Product ID" and "V ### Wireless Xbox One Controllers Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. +### My Xbox One controller doesn't work with a game! +It is entirely possible that the game doesn't work with controllers, but to get best compatibility from your Xbox One controllers you need to change a setting. First open up the preference pane, navigate to the "Advanced" tab, and check "Pretend to be an Xbox 360 Controller." + ## Developer Info Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. From e014cc027bc79d134ac859525ff56478e55369a7 Mon Sep 17 00:00:00 2001 From: Paul Crofts Date: Sun, 15 May 2016 13:02:49 -0700 Subject: [PATCH 055/216] Added afterglow gamepad --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index b9d736a1..f0abf071 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -20,7 +20,7 @@ ${CURRENT_PROJECT_VERSION} IOKitPersonalities - AfterglowGamepad1 + AfterglowGamepadForXbox360 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -40,6 +40,26 @@ idVendor 3695 + AfterglowGamepad1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64252 + idVendor + 9414 + AfterglowPrismaticOne CFBundleIdentifier From 491f0f50d0f96feeb63a1ded83d509822df2b43a Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 16 May 2016 19:39:46 -0500 Subject: [PATCH 056/216] Fix Pretend360 delayed rumble --- 360Controller/Controller.cpp | 6 +++--- 360Controller/Controller.h | 1 - 360Controller/_60Controller.h | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 176597c2..bd5964b0 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -607,7 +607,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor // IOLog("Xbox One Controller - setReport\n"); unsigned char data[4]; report->readBytes(0, &data, 4); - // IOLog("Attempting to send: %d %d %d %d\n",((unsigned char*)data)[0], ((unsigned char*)data)[1], ((unsigned char*)data)[2], ((unsigned char*)data)[3]); +// IOLog("Attempting to send: %d %d %d %d\n",((unsigned char*)data)[0], ((unsigned char*)data)[1], ((unsigned char*)data)[2], ((unsigned char*)data)[3]); UInt8 rumbleType; switch(data[0])//(header.command) { @@ -615,7 +615,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor XBOXONE_OUT_RUMBLE rumble; rumble.header.command = 0x09; rumble.header.reserved1 = 0x00; - rumble.header.counter = outCounter++; + rumble.header.counter = (GetOwner(this)->outCounter)++; rumble.header.size = 0x09; rumble.mode = 0x00; rumble.rumbleMask = 0x0F; @@ -650,7 +650,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor rumble.little = data[2]; rumble.big = data[3]; } - + GetOwner(this)->QueueWrite(&rumble,13); return kIOReturnSuccess; case 0x01: // Unsupported LED diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 139059b5..6efd2e70 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -93,7 +93,6 @@ class XboxOneControllerClass : public Xbox360ControllerClass protected: UInt8 lastData[20]; - UInt8 outCounter = 6; bool isXboxOneGuideButtonPressed; void reorderButtons(UInt16* buttons, UInt8 mapping[]); UInt16 convertButtonPacket(UInt16 buttons); diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index ddf7b902..39ec31d8 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -120,6 +120,7 @@ class Xbox360Peripheral : public IOService UInt8 mapping[15]; bool noMapping = true; bool pretend360; // Change VID and PID to MS 360 Controller + UInt8 outCounter = 6; // this is from the IORegistryEntry - no provider yet virtual bool init(OSDictionary *propTable); From b7368afe97d46c194375dde043ba8c6eabe2c5af Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 20 May 2016 08:58:23 -0500 Subject: [PATCH 057/216] Add device from #282 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index f0abf071..a83d7152 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -60,6 +60,26 @@ idVendor 9414 + AfterglowGamepad2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63751 + idVendor + 7085 + AfterglowPrismaticOne CFBundleIdentifier From 9fc95d07021707400eb7df11f8d04a27f8cfce8a Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Fri, 20 May 2016 13:48:34 -0600 Subject: [PATCH 058/216] Update and fix xib. --- .../en.lproj/Pref360ControlPref.xib | 115 ++++++++++-------- 1 file changed, 61 insertions(+), 54 deletions(-) diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 6e097e3f..550d7680 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,5 +1,5 @@ - + @@ -66,8 +66,8 @@ - - + + @@ -81,7 +81,7 @@ - + AfterglowGamepad3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64253 + idVendor + 9414 + AfterglowPrismaticOne CFBundleIdentifier From 2d6462d6d0a777b56b20299119a5403f880bf383 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 31 May 2016 15:18:11 -0500 Subject: [PATCH 060/216] Add device from #287 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c1ea7478..a2227359 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2412,6 +2412,26 @@ 3695 ThrustMasterFerrari458 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 23296 + idVendor + 9414 + + ThrustMasterFerrari458Italia CFBundleIdentifier com.mice.driver.Xbox360Controller From b74572a6954475b3f7649bb1f8dc5e0048c6679e Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 21 Jun 2016 18:28:09 -0500 Subject: [PATCH 061/216] Add device from #298 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index a2227359..9ea9fa80 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1831,6 +1831,26 @@ idVendor 5426 + RazerAtrox2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 20480 + idVendor + 9414 + RazerOnza CFBundleIdentifier From b3af27ad22b22564b8e166920d7a49afc82845bb Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 21 Jun 2016 18:31:13 -0500 Subject: [PATCH 062/216] Fix build instructions --- Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Readme.md b/Readme.md index 52e3fc0a..693c1950 100644 --- a/Readme.md +++ b/Readme.md @@ -71,6 +71,7 @@ In order to build the .pkg, you will need to install [Packages.app](http://s.sud * Select the `Build Settings` tab from the top of the screen. * In the `Code Signing` section, find `Code Signing Identity` section and expand it. * In the `Release` section, change the selection to `Don't Code Sign`. +* Set the code signing identity for `360Daemon`, `Feedback360`, `360Controller`, `DriverTool`, `Pref360Control`, `Wireless360Controller`, `WirelessGamingReceiver` and `Whole Driver`. * Run `./build.sh` to build the .pkg. This .pkg can be found in the `Install360Controller` directory. #### If you have a signing certificate @@ -81,6 +82,7 @@ In order to build the .pkg, you will need to install [Packages.app](http://s.sud * Select the `Build Settings` tab from the top of the screen. * In the `Code Signing` section, find `Code Signing Identity` section and expand it. * In the `Release` section, change the selection to your `Developer ID Application` certificate. +* Set the code signing identity for `360Daemon`, `Feedback360`, `360Controller`, `DriverTool`, `Pref360Control`, `Wireless360Controller`, `WirelessGamingReceiver` and `Whole Driver`. * Run `./build.sh` to build the .pkg. This .pkg can be found in the `Install360Controller` directory. ### Disabling signing requirements From fa8093e109309bc650b4012ddd49aa397f2bd24d Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 25 Jun 2016 09:29:17 -0500 Subject: [PATCH 063/216] Add device from #300 --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 9ea9fa80..8a84f106 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2151,7 +2151,27 @@ idVendor 3695 - RockCandyGamepadforXboxOne2016 + RockCandyGamepadforXboxOne2016a + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 837 + idVendor + 3695 + + RockCandyGamepadforXboxOne2016b CFBundleIdentifier com.mice.driver.Xbox360Controller From 23d9c97303e26b25a0aa0f1dde659d3a738012b5 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 25 Jun 2016 18:04:17 -0500 Subject: [PATCH 064/216] Remove plist entry I messed up from #219 --- 360Controller/Info.plist | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 8a84f106..9ea9fa80 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2151,27 +2151,7 @@ idVendor 3695 - RockCandyGamepadforXboxOne2016a - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 837 - idVendor - 3695 - - RockCandyGamepadforXboxOne2016b + RockCandyGamepadforXboxOne2016 CFBundleIdentifier com.mice.driver.Xbox360Controller From 29dc9c47b21eb4457fb7b0af3114a816a85ec02f Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 28 Jun 2016 08:12:58 -0500 Subject: [PATCH 065/216] Add device from #301 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 9ea9fa80..c762610c 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2111,6 +2111,26 @@ idVendor 3695 + RockCandyGamepadForXbox360 - 2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64254 + idVendor + 9414 + RockCandyGamepadforXboxOne2013 CFBundleIdentifier From d554b5e4e2c67ff186c35debc3b89cfa3ac6e7d6 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 4 Jul 2016 19:25:11 -0500 Subject: [PATCH 066/216] Add device from #304 --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c762610c..e481641f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -571,7 +571,7 @@ idVendor 3853 - HoriPadEX2Turbo + HoriPadEX2Turbo1 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -591,6 +591,26 @@ idVendor 7085 + HoriPadEX2Turbo2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21760 + idVendor + 9414 + HoriPadEXTurbo CFBundleIdentifier From ae0588998789cc3b8538534d4c0a57b24ab40887 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 6 Jul 2016 09:06:28 -0500 Subject: [PATCH 067/216] Resolve #305 --- Install360Controller/Text/Welcome.rtf | 101 ++++++++++-------- Pref360Control/Pref360ControlPref.h | 4 +- Pref360Control/Pref360ControlPref.m | 28 +++-- .../en.lproj/Pref360ControlPref.xib | 96 +++++++++++++++-- 4 files changed, 166 insertions(+), 63 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 04c8d437..0ef89bbb 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf460 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -23,40 +23,51 @@ {\list\listtemplateid20\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid20} {\list\listtemplateid21\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid21} {\list\listtemplateid22\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid22} -{\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}} +{\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23} +{\list\listtemplateid24\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid24}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16\ +\b0\fs24 \cf0 Version 0.16.1\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ -Update 0.16: 04/26/2016\ +Update 0.16.1: 07/06/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls1\ilvl0\cf0 {\listtext \'95 }New devices\ +{\listtext \'95 }Fixed "normalize" not staying checked +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ +Update 0.16: 04/26/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\ls3\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0 +\ls3\ilvl0 \b \cf0 {\listtext \'95 } \b0 Settings load properly\ -\ls2\ilvl0 +\ls3\ilvl0 \b {\listtext \'95 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls2\ilvl0 +\ls3\ilvl0 \b {\listtext \'95 } \b0 New rumble options for Xbox One controllers\ -\ls2\ilvl0 +\ls3\ilvl0 \b {\listtext \'95 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -65,7 +76,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ +\ls4\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ {\listtext \'95 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -74,9 +85,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls5\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0 +\ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Fix Xbox One rumble. \b \ @@ -86,15 +97,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls6\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0 +\ls6\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls5\ilvl0 +\ls6\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -104,7 +115,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls7\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -112,7 +123,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls8\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -122,19 +133,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls9\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0 +\ls9\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls8\ilvl0 +\ls9\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls8\ilvl0 +\ls9\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls8\ilvl0 +\ls9\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -144,16 +155,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls10\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0 +\ls10\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -163,17 +174,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls11\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0 +\ls11\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -183,7 +194,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls12\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -192,7 +203,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls13\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -202,7 +213,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls14\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -214,7 +225,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls15\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -224,7 +235,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls16\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -236,7 +247,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls17\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -246,7 +257,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls18\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -257,7 +268,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls19\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -267,7 +278,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls20\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -278,7 +289,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls21\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -289,7 +300,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls22\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -300,7 +311,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls23\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -309,7 +320,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls24\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 4df857fe..8bb06dfe 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -87,12 +87,12 @@ typedef NS_ENUM(NSUInteger, ControllerType) { @property (weak) IBOutlet NSSlider *leftStickDeadzoneAlt; @property (weak) IBOutlet NSButton *leftStickInvertXAlt; @property (weak) IBOutlet NSButton *leftStickInvertYAlt; +@property (weak) IBOutlet NSButton *leftStickNormalize; @property (weak) IBOutlet NSButton *rightLinkedAlt; @property (weak) IBOutlet NSSlider *rightStickDeadzoneAlt; @property (weak) IBOutlet NSButton *rightStickInvertXAlt; @property (weak) IBOutlet NSButton *rightStickInvertYAlt; -@property (weak) IBOutlet NSButton *normalizeDeadzoneLeft; -@property (weak) IBOutlet NSButton *normalizeDeadzoneRight; +@property (weak) IBOutlet NSButton *rightStickNormalize; @property (weak) IBOutlet NSButton *pretend360Button; // About Tab diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 4bae4238..a0cc278d 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -337,6 +337,7 @@ - (void)inputEnable:(BOOL)enable [_leftStickInvertYAlt setEnabled:enable]; [_leftLinked setEnabled:enable]; [_leftLinkedAlt setEnabled:enable]; + [_leftStickNormalize setEnabled:enable]; [_rightStickDeadzone setEnabled:enable]; [_rightStickDeadzoneAlt setEnabled:enable]; [_rightStickInvertX setEnabled:enable]; @@ -345,8 +346,7 @@ - (void)inputEnable:(BOOL)enable [_rightStickInvertYAlt setEnabled:enable]; [_rightLinked setEnabled:enable]; [_rightLinkedAlt setEnabled:enable]; - [_normalizeDeadzoneLeft setEnabled:enable]; - [_normalizeDeadzoneRight setEnabled:enable]; + [_rightStickNormalize setEnabled:enable]; [_rumbleOptions setEnabled:enable]; [_swapSticks setEnabled:enable]; [_pretend360Button setEnabled:enable]; @@ -575,6 +575,12 @@ - (void)startDevice [_leftDeadZone setLinked:enable]; [_leftStickAnalog setLinked:enable]; } else NSLog(@"No value for RelativeLeft\n"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadOffLeft"),(void*)&boolValue)) { + BOOL enable=CFBooleanGetValue(boolValue); + [_leftStickNormalize setState:enable]; + [_wholeController setLeftNormalized:enable]; + [_leftStickAnalog setNormalized:enable]; + } else NSLog(@"No value for DeadOffLeft\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneLeft"),(void*)&intValue)) { UInt16 i; @@ -601,6 +607,12 @@ - (void)startDevice [_wholeController setRightStickDeadzone:i]; [_rightStickAnalog setLinked:enable]; } else NSLog(@"No value for RelativeRight\n"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadOffRight"),(void*)&boolValue)) { + BOOL enable=CFBooleanGetValue(boolValue); + [_rightStickNormalize setState:enable]; + [_wholeController setRightNormalized:enable]; + [_rightStickAnalog setNormalized:enable]; + } else NSLog(@"No value for DeadOffRight\n"); if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneRight"),(void*)&intValue)) { UInt16 i; @@ -887,10 +899,10 @@ - (IBAction)selectDevice:(id)sender - (IBAction)changeSetting:(id)sender { // Send normalize to joysticks - [_wholeController setLeftNormalized:(BOOL)[_normalizeDeadzoneLeft state]]; - [_leftStickAnalog setNormalized:(BOOL)[_normalizeDeadzoneLeft state]]; - [_wholeController setRightNormalized:(BOOL)[_normalizeDeadzoneRight state]]; - [_rightStickAnalog setNormalized:(BOOL)[_normalizeDeadzoneRight state]]; + [_wholeController setLeftNormalized:(BOOL)[_leftStickNormalize state]]; + [_leftStickAnalog setNormalized:(BOOL)[_leftStickNormalize state]]; + [_wholeController setRightNormalized:(BOOL)[_rightStickNormalize state]]; + [_rightStickAnalog setNormalized:(BOOL)[_rightStickNormalize state]]; // Sync settings between tabs NSInteger tabIndex = [_tabView indexOfTabViewItem:[_tabView selectedTabViewItem]]; @@ -934,8 +946,8 @@ - (IBAction)changeSetting:(id)sender @"DeadzoneRight": @((UInt16)[_rightStickDeadzone doubleValue]), @"RelativeLeft": @((BOOL)([_leftLinked state]==NSOnState)), @"RelativeRight": @((BOOL)([_rightLinked state]==NSOnState)), - @"DeadOffLeft": @((BOOL)([_normalizeDeadzoneLeft state]==NSOnState)), - @"DeadOffRight": @((BOOL)([_normalizeDeadzoneRight state]==NSOnState)), + @"DeadOffLeft": @((BOOL)([_leftStickNormalize state]==NSOnState)), + @"DeadOffRight": @((BOOL)([_rightStickNormalize state]==NSOnState)), @"ControllerType": @((UInt8)(controllerType)), @"RumbleType": @((UInt8)([_rumbleOptions indexOfSelectedItem])), @"BindingUp": @((UInt8)([MyWhole360ControllerMapper mapping][0])), diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 550d7680..83dd2f99 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -26,6 +26,7 @@ + @@ -46,6 +47,7 @@ + @@ -68,6 +70,7 @@ + @@ -87,6 +90,7 @@ + @@ -101,6 +105,7 @@ + @@ -110,6 +115,7 @@ + @@ -134,6 +140,7 @@ + @@ -144,6 +151,7 @@ + @@ -154,6 +162,7 @@ + @@ -161,6 +170,7 @@ + @@ -168,9 +178,11 @@ + + @@ -243,6 +260,7 @@ + @@ -256,11 +274,13 @@ + + @@ -269,6 +289,7 @@ + @@ -286,6 +307,7 @@ + @@ -331,6 +356,7 @@ + @@ -354,6 +381,7 @@ + @@ -379,6 +407,7 @@ + @@ -388,6 +417,7 @@ + @@ -408,6 +438,7 @@ + @@ -601,6 +647,7 @@ + @@ -676,6 +729,7 @@ + @@ -789,11 +853,13 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -809,6 +875,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -820,6 +887,7 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -854,6 +924,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -869,15 +940,16 @@ Due to some internal limitations, you need to connect your device once to be abl - + + - + @@ -927,7 +999,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -1430,22 +1502,27 @@ This driver is licensed under the GNU Public License. A copy of this license is - + + + + + @@ -1453,6 +1530,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1463,6 +1541,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1479,6 +1558,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + From c08fb702d45d33f533a683aaa686906b9f9b35ac Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 9 Jul 2016 10:11:14 -0500 Subject: [PATCH 068/216] Changes for 0.16.2 --- 360Controller/_60Controller.cpp | 10 +- Install360Controller/Text/Welcome.rtf | 100 ++++++++++-------- .../en.lproj/Pref360ControlPref.xib | 2 +- 3 files changed, 58 insertions(+), 54 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 5d0d4643..4200d837 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -524,24 +524,18 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { -// UInt8 xoneInit1[] = { 0x05, 0x20, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; -// UInt8 xoneInit2[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; -// UInt8 xoneInit3[] = { 0x0a, 0x20, 0x02, 0x03, 0x00, 0x01, 0x14 }; -// UInt8 xoneInit4[] = { 0x09, 0x00, 0x03, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; + UInt8 xoneInit0[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; UInt8 xoneInit1[] = { 0x04, 0x20, 0x01, 0x00 }; UInt8 xoneInit2[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x98, 0x00 }; UInt8 xoneInit3[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00 }; UInt8 xoneInit4[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; UInt8 xoneInit5[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; - UInt8 xoneInit6[] = { 0x0a, 0x20, 0x04, 0x03, 0x00, 0x01, 0x14 }; - UInt8 xoneInit7[] = { 0x09, 0x00, 0x05, 0x09, 0x00, 0x0f, 0x00, 0x00, 0x1d, 0x1d, 0xff, 0x00, 0x00 }; + QueueWrite(&xoneInit0, sizeof(xoneInit0)); QueueWrite(&xoneInit1, sizeof(xoneInit1)); QueueWrite(&xoneInit2, sizeof(xoneInit2)); QueueWrite(&xoneInit3, sizeof(xoneInit3)); QueueWrite(&xoneInit4, sizeof(xoneInit4)); QueueWrite(&xoneInit5, sizeof(xoneInit5)); - QueueWrite(&xoneInit6, sizeof(xoneInit6)); - QueueWrite(&xoneInit7, sizeof(xoneInit7)); } else { // Disable LED Xbox360_Prepare(led,outLed); diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 0ef89bbb..60ba2afd 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -24,26 +24,36 @@ {\list\listtemplateid21\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid21} {\list\listtemplateid22\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid22} {\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23} -{\list\listtemplateid24\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid24}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}} +{\list\listtemplateid24\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid24} +{\list\listtemplateid25\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid25}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.1\ +\b0\fs24 \cf0 Version 0.16.2\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16.2: 07/09/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.1: 07/06/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls2\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -53,21 +63,21 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls3\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\ls4\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0 +\ls4\ilvl0 \b \cf0 {\listtext \'95 } \b0 Settings load properly\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 } \b0 New rumble options for Xbox One controllers\ -\ls3\ilvl0 +\ls4\ilvl0 \b {\listtext \'95 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -76,7 +86,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ +\ls5\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ {\listtext \'95 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -85,9 +95,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls6\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0 +\ls6\ilvl0 \b \cf0 {\listtext \'95 } \b0 Fix Xbox One rumble. \b \ @@ -97,15 +107,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls7\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0 +\ls7\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls6\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls6\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -115,7 +125,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls8\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -123,7 +133,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls9\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -133,19 +143,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls10\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0 +\ls10\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -155,16 +165,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls11\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0 +\ls11\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -174,17 +184,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls12\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0 +\ls12\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls11\ilvl0 +\ls12\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls11\ilvl0 +\ls12\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -194,7 +204,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls13\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -203,7 +213,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls14\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -213,7 +223,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls15\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -225,7 +235,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls16\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -235,7 +245,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls17\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -247,7 +257,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls18\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -257,7 +267,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls19\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -268,7 +278,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls20\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -278,7 +288,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls21\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -289,7 +299,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls22\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -300,7 +310,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls23\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -311,7 +321,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls24\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -320,7 +330,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls25\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 83dd2f99..14de014a 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -999,7 +999,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + From 0355d4e4bf8bbeca9077dbe8befa8596254e2ce6 Mon Sep 17 00:00:00 2001 From: Eliote Date: Sat, 9 Jul 2016 22:45:01 -0300 Subject: [PATCH 069/216] Added PDPEASports device --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e481641f..429e7b18 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -20,7 +20,7 @@ ${CURRENT_PROJECT_VERSION} IOKitPersonalities - AfterglowGamepadForXbox360 + AfterglowGamepadForXbox360 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -2611,6 +2611,26 @@ idVendor 9414 + PDPEASports + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 305 + idVendor + 3695 + NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From c8f0f0123735ff660f6795724d1277f0c26f9ab5 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 9 Jul 2016 21:12:22 -0500 Subject: [PATCH 070/216] Alphabetize controller from #311 --- 360Controller/Info.plist | 42 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 429e7b18..5632f15f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -20,7 +20,7 @@ ${CURRENT_PROJECT_VERSION} IOKitPersonalities - AfterglowGamepadForXbox360 + AfterglowGamepadForXbox360 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -1531,6 +1531,26 @@ idVendor 3695 + PDPEASports + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 305 + idVendor + 3695 + PDPMarvelXboxOneController CFBundleIdentifier @@ -2611,26 +2631,6 @@ idVendor 9414 - PDPEASports - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 305 - idVendor - 3695 - NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From a89dbb4a6418517bf9869374a038383e3ee2e2bb Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 11 Jul 2016 14:08:25 -0500 Subject: [PATCH 071/216] Use xpad xone init --- 360Controller/_60Controller.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 4200d837..eea3abb9 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -524,18 +524,11 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { - UInt8 xoneInit0[] = { 0x05, 0x20, 0x01, 0x01, 0x00 }; - UInt8 xoneInit1[] = { 0x04, 0x20, 0x01, 0x00 }; - UInt8 xoneInit2[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x98, 0x00 }; - UInt8 xoneInit3[] = { 0x01, 0x20, 0x02, 0x09, 0x00, 0x04, 0x20, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00 }; - UInt8 xoneInit4[] = { 0x05, 0x20, 0x02, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x53 }; - UInt8 xoneInit5[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; +#if 1 + UInt8 xoneInit0[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x80, 0x00 }; + UInt8 xoneInit1[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; QueueWrite(&xoneInit0, sizeof(xoneInit0)); QueueWrite(&xoneInit1, sizeof(xoneInit1)); - QueueWrite(&xoneInit2, sizeof(xoneInit2)); - QueueWrite(&xoneInit3, sizeof(xoneInit3)); - QueueWrite(&xoneInit4, sizeof(xoneInit4)); - QueueWrite(&xoneInit5, sizeof(xoneInit5)); } else { // Disable LED Xbox360_Prepare(led,outLed); From f9a3a14b673cd6f4859722a5fe82d5a5ffe3a3ed Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 11 Jul 2016 14:10:00 -0500 Subject: [PATCH 072/216] Add device from #314 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 5632f15f..178648ab 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1531,6 +1531,26 @@ idVendor 3695 + PDPAfterglowV3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 769 + idVendor + 4779 + PDPEASports CFBundleIdentifier From b37563239a8f8625e1308c7ed28491319f3702ec Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 11 Jul 2016 14:10:51 -0500 Subject: [PATCH 073/216] Remove #if 1 --- 360Controller/_60Controller.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index eea3abb9..153beec7 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -524,7 +524,6 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { -#if 1 UInt8 xoneInit0[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x80, 0x00 }; UInt8 xoneInit1[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; QueueWrite(&xoneInit0, sizeof(xoneInit0)); From 281e448fdcf15aae57a1066f8f32bd99911ba9ef Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 14 Jul 2016 11:10:29 -0500 Subject: [PATCH 074/216] Changes for 0.16.3 --- Install360Controller/Text/Welcome.rtf | 104 ++++++++++-------- .../en.lproj/Pref360ControlPref.xib | 10 +- 2 files changed, 63 insertions(+), 51 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 60ba2afd..5030b6fa 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -25,26 +25,38 @@ {\list\listtemplateid22\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid22} {\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23} {\list\listtemplateid24\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid24} -{\list\listtemplateid25\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid25}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}} +{\list\listtemplateid25\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid25} +{\list\listtemplateid26\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid26}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.2\ +\b0\fs24 \cf0 Version 0.16.3\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16.3: 07/14/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \'95 }Actually resolves issue with Xbox One controller initialization\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Third party Xbox One controllers still don't work, though +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.2: 07/09/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization +\ls2\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -53,7 +65,7 @@ Update 0.16.1: 07/06/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls3\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -63,21 +75,21 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls4\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\ls5\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0 +\ls5\ilvl0 \b \cf0 {\listtext \'95 } \b0 Settings load properly\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 } \b0 New rumble options for Xbox One controllers\ -\ls4\ilvl0 +\ls5\ilvl0 \b {\listtext \'95 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -86,7 +98,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ +\ls6\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ {\listtext \'95 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -95,9 +107,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls7\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0 +\ls7\ilvl0 \b \cf0 {\listtext \'95 } \b0 Fix Xbox One rumble. \b \ @@ -107,15 +119,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls8\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0 +\ls8\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls7\ilvl0 +\ls8\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls7\ilvl0 +\ls8\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -125,7 +137,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls9\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -133,7 +145,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls10\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -143,19 +155,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls11\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0 +\ls11\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -165,16 +177,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls12\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0 +\ls12\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls11\ilvl0 +\ls12\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls11\ilvl0 +\ls12\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -184,17 +196,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls13\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0 +\ls13\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls12\ilvl0 +\ls13\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls12\ilvl0 +\ls13\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -204,7 +216,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls14\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -213,7 +225,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls15\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -223,7 +235,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls16\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -235,7 +247,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls17\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -245,7 +257,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls18\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -257,7 +269,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls19\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -267,7 +279,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls20\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -278,7 +290,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls21\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -288,7 +300,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls22\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -299,7 +311,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls23\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -310,7 +322,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls24\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -321,7 +333,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls25\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -330,7 +342,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls25\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls26\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 14de014a..ad928bef 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -941,11 +941,11 @@ Due to some internal limitations, you need to connect your device once to be abl - + - + @@ -999,7 +999,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -1515,8 +1515,8 @@ This driver is licensed under the GNU Public License. A copy of this license is - - + + From e4ea85ca4d5ab83b016452c5bd4cb1a4dd2c1ca9 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 18 Jul 2016 18:19:43 -0500 Subject: [PATCH 075/216] Add device from #318 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 178648ab..39b0cc57 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1091,6 +1091,26 @@ idVendor 7085 + MadCatzFightStickTES+ + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61506 + idVendor + 7085 + MadCatzGamepad CFBundleIdentifier From 117a204d57eaa3cf141cadc9e221ac3ccdc48729 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 20 Jul 2016 17:53:31 -0500 Subject: [PATCH 076/216] Add device from #322 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 39b0cc57..0571ba88 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1111,6 +1111,26 @@ idVendor 7085 + MadCatzMLGFightStickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61502 + idVendor + 7085 + MadCatzGamepad CFBundleIdentifier From ef93af9c268eeca204d7e3e674af99c009557247 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Thu, 21 Jul 2016 10:30:01 -0500 Subject: [PATCH 077/216] Add device from #323 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 0571ba88..2b7620fc 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1551,6 +1551,26 @@ idVendor 3695 + PDPAfterglowAX.1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63744 + idVendor + 3695 + PDPAfterglowV2 CFBundleIdentifier From e3764afc79f169417dfa1d16bc451fcb7fb08e0a Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 26 Jul 2016 23:18:22 -0500 Subject: [PATCH 078/216] Fix VID and PID instructions --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 693c1950..c0c2894a 100644 --- a/Readme.md +++ b/Readme.md @@ -29,13 +29,13 @@ The Tattiebogle driver is NOT the same driver as this Github project. We do NOT Make an issue describing your problem. ### Wired Xbox 360 Controllers -If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". ### Wireless Xbox 360 Controllers Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. ### Wired Xbox One Controllers -If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". ### Wireless Xbox One Controllers Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. From 1c443c6f40b0505a750dbf3234f5696b756a05c8 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 3 Aug 2016 13:55:24 -0500 Subject: [PATCH 079/216] Add device from #291 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 2b7620fc..3bac16c0 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1471,6 +1471,26 @@ idVendor 1118 + MicrosoftXboxOneController2016 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 746 + idVendor + 1118 + MicrosoftXboxOneControllerElite CFBundleIdentifier From a1c09b560dba5f97878deecb8ac642711328777a Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 5 Aug 2016 13:37:55 -0500 Subject: [PATCH 080/216] Add device from #332 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 3bac16c0..71dee3f0 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -671,6 +671,26 @@ idVendor 3853 + HoriRAPVX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 27 + idVendor + 3853 + HoriRAPVXSA CFBundleIdentifier From b431e4d86d1ce3659d5a8aa403258f0eb141d6c9 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 7 Aug 2016 11:38:43 -0500 Subject: [PATCH 081/216] Add device from #333 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 71dee3f0..1197b906 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1751,6 +1751,26 @@ idVendor 3695 + PDPXboxOneArcadeStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 348 + idVendor + 3695 + PowerAAirflow CFBundleIdentifier From 4b8cc19d9c47610ac1dc2020041bce77bad49882 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 8 Aug 2016 13:11:22 -0500 Subject: [PATCH 082/216] Add device from #335 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 1197b906..3900719f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1791,6 +1791,26 @@ idVendor 5604 + PowerAFUS1ONTournament + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21399 + idVendor + 9414 + PowerAMiniProEXGreen CFBundleIdentifier From a0e59a1243483b222908e7a7087cc6b962de02f2 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 9 Aug 2016 10:14:05 -0500 Subject: [PATCH 083/216] Add Pretend360 option for Xbox 360 controllers --- 360Controller/Controller.cpp | 24 +++++ 360Controller/Controller.h | 11 +++ 360Controller/_60Controller.cpp | 19 ++++ 360Controller/_60Controller.h | 3 +- Pref360Control/DeviceItem.m | 4 +- Pref360Control/Pref360ControlPref.h | 3 +- .../en.lproj/Pref360ControlPref.xib | 92 ++----------------- 7 files changed, 67 insertions(+), 89 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index bd5964b0..975a2100 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -265,6 +265,30 @@ void Xbox360ControllerClass::remapAxes(void *buffer) } +#pragma mark - XboxOnePretend360Class + +/* + * Xbox 360 controller. + * Fake PID and VID of Xbox 360 controller + */ + +OSDefineMetaClassAndStructors(Xbox360Pretend360Class, Xbox360ControllerClass) + +OSString* Xbox360Pretend360Class::newProductString() const +{ + return OSString::withCString("Xbox 360 Wired Controller"); +} + +OSNumber* Xbox360Pretend360Class::newProductIDNumber() const +{ + return OSNumber::withNumber(654,16); +} + +OSNumber* Xbox360Pretend360Class::newVendorIDNumber() const +{ + return OSNumber::withNumber(1118,16); +} + #pragma mark - XboxOriginalControllerClass /* diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 6efd2e70..db24d4af 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -63,6 +63,17 @@ class Xbox360ControllerClass : public IOHIDDevice }; +class Xbox360Pretend360Class : public Xbox360ControllerClass +{ + OSDeclareDefaultStructors(Xbox360Pretend360Class) + +public: + virtual OSString* newProductString() const; + virtual OSNumber* newProductIDNumber() const; + virtual OSNumber* newVendorIDNumber() const; +}; + + class XboxOriginalControllerClass : public Xbox360ControllerClass { OSDeclareDefaultStructors(XboxOriginalControllerClass) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 153beec7..d525bacb 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -900,6 +900,23 @@ void Xbox360Peripheral::MakeSettingsChanges() PadConnect(); } } + + if (controllerType == Xbox360) + { + if (pretend360) + { + controllerType = Xbox360Pretend360; + PadConnect(); + } + } + else if (controllerType == Xbox360Pretend360) + { + if (!pretend360) + { + controllerType == Xbox360; + PadConnect(); + } + } noMapping = true; UInt8 normalMapping[15] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15 }; @@ -956,6 +973,8 @@ void Xbox360Peripheral::PadConnect(void) padHandler = new XboxOneControllerClass; } else if (controllerType == XboxOnePretend360) { padHandler = new XboxOnePretend360Class; + } else if (controllerType == Xbox360Pretend360) { + padHandler = new Xbox360Pretend360Class; } else { padHandler = new Xbox360ControllerClass; } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 39ec31d8..b94554b9 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -79,7 +79,8 @@ class Xbox360Peripheral : public IOService Xbox360 = 0, XboxOriginal = 1, XboxOne = 2, - XboxOnePretend360 = 3 + XboxOnePretend360 = 3, + Xbox360Pretend360 = 4, } CONTROLLER_TYPE; IOUSBDevice *device; diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index e408fd27..646a49f8 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -140,8 +140,8 @@ - (void)dealloc - (NSString *)displayName { if (self.deviceName == nil) return @"Generic Controller"; - else if (self.controllerType == XboxOnePretend360Controller) - return @"Xbox One Controller (Xbox 360)"; + else if (self.controllerType == XboxOnePretend360Controller || self.controllerType == Xbox360Pretend360Controller) + return [self.deviceName stringByAppendingString:@" (Xbox 360)"]; else return self.deviceName; } diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 8bb06dfe..e7096000 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -41,7 +41,8 @@ typedef NS_ENUM(NSUInteger, ControllerType) { Xbox360Controller = 0, XboxOriginalController = 1, XboxOneController = 2, - XboxOnePretend360Controller = 3 + XboxOnePretend360Controller = 3, + Xbox360Pretend360Controller = 4 } controllerType; @interface Pref360ControlPref : NSPreferencePane diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index ad928bef..b4e2dd82 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -70,7 +70,6 @@ - @@ -90,7 +89,6 @@ - @@ -105,7 +103,6 @@ - @@ -115,7 +112,6 @@ - @@ -140,7 +136,6 @@ - @@ -151,7 +146,6 @@ - @@ -162,7 +156,6 @@ - @@ -170,7 +163,6 @@ - @@ -178,11 +170,9 @@ - - @@ -260,7 +245,6 @@ - @@ -274,13 +258,11 @@ - - @@ -289,7 +271,6 @@ - @@ -307,7 +288,6 @@ - @@ -356,7 +333,6 @@ - @@ -381,7 +356,6 @@ - @@ -407,7 +381,6 @@ - @@ -417,7 +390,6 @@ - @@ -438,7 +410,6 @@ - @@ -647,7 +603,6 @@ - @@ -729,7 +678,6 @@ - @@ -853,13 +791,11 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -875,11 +811,10 @@ Due to some internal limitations, you need to connect your device once to be abl - - + @@ -887,7 +822,6 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -924,7 +856,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -940,14 +871,13 @@ Due to some internal limitations, you need to connect your device once to be abl - + - + - @@ -1506,23 +1436,18 @@ This driver is licensed under the GNU Public License. A copy of this license is - - - - @@ -1530,7 +1455,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1541,7 +1465,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1558,7 +1481,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - From 9206f68419991a62d288eded7b805f60fe58c591 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 9 Aug 2016 10:20:21 -0500 Subject: [PATCH 084/216] Update README to reflect new Pretend360 options README will be slightly incorrect until a new build is promoted. But with 3rd party Xbox One and Bluetooth looming, I'd rather not promote at this moment. --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index c0c2894a..9948ef35 100644 --- a/Readme.md +++ b/Readme.md @@ -40,8 +40,8 @@ If you have a third party controller, make an issue with the "Product ID" and "V ### Wireless Xbox One Controllers Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. -### My Xbox One controller doesn't work with a game! -It is entirely possible that the game doesn't work with controllers, but to get best compatibility from your Xbox One controllers you need to change a setting. First open up the preference pane, navigate to the "Advanced" tab, and check "Pretend to be an Xbox 360 Controller." +### My controller doesn't work with a game! +We cannot fix game specific issues. This driver does its absolute best to put out a standardized format for games to use. If they don't take advantage of that, there is **ABSOLUTELY NOTHING** we can do. The best we can do for you is give you the "Pretend to be an Xbox 360 Controller" option in the "Advanced" tab. This will make any wired Xbox 360 or wired Xbox One controller appear to games as if it were an official Microsoft Xbox 360 Controller. That way if the game is only looking for Xbox 360 controllers and isn't looking for other devices like third party Xbox 360 controllers or Xbox One controllers, you should be able to trick the game. If you experience an issue with a game that this toggle does not fix, we cannot help you, sorry. That is just the nature of drivers. ## Developer Info Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. From d671a84fb1f6eeae22670c09583977d25c837b38 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 10 Aug 2016 14:09:08 -0500 Subject: [PATCH 085/216] Fix typo --- 360Controller/_60Controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index d525bacb..d2298f4f 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -913,7 +913,7 @@ void Xbox360Peripheral::MakeSettingsChanges() { if (!pretend360) { - controllerType == Xbox360; + controllerType = Xbox360; PadConnect(); } } From 84e92df09bbd517a56c5b9bfaffbfff2e0604df3 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Wed, 10 Aug 2016 22:43:22 -0500 Subject: [PATCH 086/216] Add table of contents, mention bluetooth --- Readme.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 9948ef35..dad3cc64 100644 --- a/Readme.md +++ b/Readme.md @@ -1,5 +1,28 @@ # Xbox Controller Driver for Mac OS X +## Table of Contents +1. [About](#about) +2. [Installation](#installation) +3. [Uninstallation](#uninstallation) +4. [Usage](#usage) +5. [My controller doesn't work!](#my-controller-doesnt-work) +1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) +2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) +3. [Original Xbox Controllers](#original-xbox-controllers) +4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) +5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) +6. [Wired Xbox One Controllers](#wired-xbox-one-controllers) +7. [Wireless Xbox One Controllers](#wireless-xbox-one-controllers) +8. [Wireless Xbox One Controllers (Bluetooth)](#wireless-xbox-one-controllers-bluetooth) +6. [Developer Info](#developer-info) +1. [Building](#building) +2. [Building the .pkg](#building-the-pkg) +3. [Disabling signing requirements](#disabling-signing-requirements) +4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) +5. [Debugging the driver](#debugging-the-driver) +6. [Debugging the preference pane](#debugging-the-preference-pane) +7. [Licence](#licence) + ## About This driver supports the Microsoft Xbox series of controllers including those for the original Xbox, Xbox 360, and Xbox One. Xbox 360 controllers work both wired and wirelessly, while Xbox One controllers only work wired for now. The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. @@ -25,6 +48,9 @@ Users have been maintaining a [partial list of working and non-working games.](h ### I'm using a driver from the Tattiebogle website The Tattiebogle driver is NOT the same driver as this Github project. We do NOT support that driver. Under NO circumstances will we support that driver. If you download the latest version of this driver from the [releases page](https://github.com/360Controller/360Controller/releases) we will do our best to help you out. This driver will install over the Tattiebogle driver. You don't have to worry about uninstalling the Tattiebogle driver first. +### My controller doesn't work with a game! +We cannot fix game specific issues. This driver does its absolute best to put out a standardized format for games to use. If they don't take advantage of that, there is **ABSOLUTELY NOTHING** we can do. The best we can do for you is give you the "Pretend to be an Xbox 360 Controller" option in the "Advanced" tab. This will make any wired Xbox 360 or wired Xbox One controller appear to games as if it were an official Microsoft Xbox 360 Controller. That way if the game is only looking for Xbox 360 controllers and isn't looking for other devices like third party Xbox 360 controllers or Xbox One controllers, you should be able to trick the game. If you experience an issue with a game that this toggle does not fix, we cannot help you, sorry. That is just the nature of drivers. + ### Original Xbox Controllers Make an issue describing your problem. @@ -40,8 +66,8 @@ If you have a third party controller, make an issue with the "Product ID" and "V ### Wireless Xbox One Controllers Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. -### My controller doesn't work with a game! -We cannot fix game specific issues. This driver does its absolute best to put out a standardized format for games to use. If they don't take advantage of that, there is **ABSOLUTELY NOTHING** we can do. The best we can do for you is give you the "Pretend to be an Xbox 360 Controller" option in the "Advanced" tab. This will make any wired Xbox 360 or wired Xbox One controller appear to games as if it were an official Microsoft Xbox 360 Controller. That way if the game is only looking for Xbox 360 controllers and isn't looking for other devices like third party Xbox 360 controllers or Xbox One controllers, you should be able to trick the game. If you experience an issue with a game that this toggle does not fix, we cannot help you, sorry. That is just the nature of drivers. +### Wireless Xbox One Controllers (Bluetooth) +The Xbox One controller works with OS X automatically when connected over Bluetooth. Only specific Xbox One controllers have Bluetooth capability. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. ## Developer Info Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. From eced6b6ce5fb2430bea16f59378683a324d6b14e Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Wed, 10 Aug 2016 22:45:56 -0500 Subject: [PATCH 087/216] Git is good Aka: "WHY?" the Musical. --- Readme.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Readme.md b/Readme.md index dad3cc64..a46636c0 100644 --- a/Readme.md +++ b/Readme.md @@ -6,21 +6,21 @@ 3. [Uninstallation](#uninstallation) 4. [Usage](#usage) 5. [My controller doesn't work!](#my-controller-doesnt-work) -1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) -2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) -3. [Original Xbox Controllers](#original-xbox-controllers) -4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) -5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) -6. [Wired Xbox One Controllers](#wired-xbox-one-controllers) -7. [Wireless Xbox One Controllers](#wireless-xbox-one-controllers) -8. [Wireless Xbox One Controllers (Bluetooth)](#wireless-xbox-one-controllers-bluetooth) + 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) + 2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) + 3. [Original Xbox Controllers](#original-xbox-controllers) + 4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) + 5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) + 6. [Wired Xbox One Controllers](#wired-xbox-one-controllers) + 7. [Wireless Xbox One Controllers](#wireless-xbox-one-controllers) + 8. [Wireless Xbox One Controllers (Bluetooth)](#wireless-xbox-one-controllers-bluetooth) 6. [Developer Info](#developer-info) -1. [Building](#building) -2. [Building the .pkg](#building-the-pkg) -3. [Disabling signing requirements](#disabling-signing-requirements) -4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) -5. [Debugging the driver](#debugging-the-driver) -6. [Debugging the preference pane](#debugging-the-preference-pane) + 1. [Building](#building) + 2. [Building the .pkg](#building-the-pkg) + 3. [Disabling signing requirements](#disabling-signing-requirements) + 4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) + 5. [Debugging the driver](#debugging-the-driver) + 6. [Debugging the preference pane](#debugging-the-preference-pane) 7. [Licence](#licence) ## About @@ -159,4 +159,4 @@ Finally, select the run step, choose "other" from the executable drop-down menu, Copyright (C) 2006-2013 Colin Munro -This driver is licensed under the GNU Public License. A copy of this license is included in the distribution file, please inspect it before using the binary or source. \ No newline at end of file +This driver is licensed under the GNU Public License. A copy of this license is included in the distribution file, please inspect it before using the binary or source. From 5dcfa9518846823fea45ebbce8a6f6c1a3e202af Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 14 Aug 2016 16:10:00 -0500 Subject: [PATCH 088/216] Add percentage for battery levels --- Pref360Control/MyBatteryMonitor.h | 1 + Pref360Control/MyBatteryMonitor.m | 7 ++++++- Pref360Control/Pref360ControlPref.m | 6 +++++- Pref360Control/Pref360StyleKit.h | 2 +- Pref360Control/Pref360StyleKit.m | 19 ++++++++++++++++++- 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Pref360Control/MyBatteryMonitor.h b/Pref360Control/MyBatteryMonitor.h index e46a4070..87013dba 100644 --- a/Pref360Control/MyBatteryMonitor.h +++ b/Pref360Control/MyBatteryMonitor.h @@ -10,5 +10,6 @@ @interface MyBatteryMonitor : NSView @property (nonatomic) int bars; +@property (nonatomic) int percentage; @end diff --git a/Pref360Control/MyBatteryMonitor.m b/Pref360Control/MyBatteryMonitor.m index 37c48e3c..2d8884fd 100644 --- a/Pref360Control/MyBatteryMonitor.m +++ b/Pref360Control/MyBatteryMonitor.m @@ -15,10 +15,15 @@ - (void)setBars:(int)value { [self setNeedsDisplay:YES]; } +- (void)setPercentage:(int)value { + _percentage = value; + [self setNeedsDisplay:YES]; +} + - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; - [Pref360StyleKit drawBatteryMonitorWithBars:_bars]; + [Pref360StyleKit drawBatteryMonitorWithBars:_bars andPercentage:_percentage]; } @end diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index a0cc278d..387ac083 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -716,6 +716,7 @@ - (void)startDevice // Battery level? { int batteryLevel = -1; + int batteryPercentage = -1; CFTypeRef prop; if (IOObjectConformsTo(registryEntry, "WirelessHIDDevice")) { @@ -723,14 +724,17 @@ - (void)startDevice if (prop != nil) { unsigned char level; - if (CFNumberGetValue(prop, kCFNumberCharType, &level)) + if (CFNumberGetValue(prop, kCFNumberCharType, &level)) { batteryLevel = level / 64; + batteryPercentage = level * 100 / 255.0f + 0.5f; + } CFRelease(prop); } [_powerOff setHidden:NO]; } if ( batteryLevel >= 0) { [_batteryStatus setBars:batteryLevel]; + [_batteryStatus setPercentage:batteryPercentage]; [_batteryStatus setHidden:NO]; } else { [_batteryStatus setHidden:YES]; diff --git a/Pref360Control/Pref360StyleKit.h b/Pref360Control/Pref360StyleKit.h index 1b1cf9b9..b85a5727 100644 --- a/Pref360Control/Pref360StyleKit.h +++ b/Pref360Control/Pref360StyleKit.h @@ -17,7 +17,7 @@ // Drawing Methods + (void)drawX360ControllerWithControllerNumber: (CGFloat)controllerNumber aPressed: (BOOL)aPressed bPressed: (BOOL)bPressed xPressed: (BOOL)xPressed yPressed: (BOOL)yPressed leftPressed: (BOOL)leftPressed upPressed: (BOOL)upPressed rightPressed: (BOOL)rightPressed downPressed: (BOOL)downPressed backPressed: (BOOL)backPressed startPressed: (BOOL)startPressed lbPressed: (BOOL)lbPressed rbPressed: (BOOL)rbPressed homePressed: (BOOL)homePressed leftStickPressed: (BOOL)leftStickPressed rightStickPressed: (BOOL)rightStickPressed leftStick: (NSPoint)leftStick rightStick: (NSPoint)rightStick leftStickDeadzone: (CGFloat)leftDeadzone rightStickDeadzone: (CGFloat)rightDeadzone isLeftNormalized: (BOOL)leftNormalized isRightNormalized: (BOOL)rightNormalized; + (void)drawTriggerMetterWithIntensity: (CGFloat)intensity triggerTitle: (NSString*)triggerTitle; -+ (void)drawBatteryMonitorWithBars: (CGFloat)bars; ++ (void)drawBatteryMonitorWithBars: (CGFloat)bars andPercentage: (int)percentage; + (void)drawDeadZoneViewerWithValue: (CGFloat)value linked: (BOOL)linked; @end diff --git a/Pref360Control/Pref360StyleKit.m b/Pref360Control/Pref360StyleKit.m index 0c09d056..c09356b8 100644 --- a/Pref360Control/Pref360StyleKit.m +++ b/Pref360Control/Pref360StyleKit.m @@ -1182,7 +1182,7 @@ + (void)drawTriggerMetterWithIntensity: (CGFloat)intensity triggerTitle: (NSStri [ovalPath stroke]; } -+ (void)drawBatteryMonitorWithBars: (CGFloat)bars ++ (void)drawBatteryMonitorWithBars: (CGFloat)bars andPercentage: (int)percentage { //// Color Declarations NSColor* buttonB = [NSColor colorWithCalibratedRed: 1 green: 0.094 blue: 0.072 alpha: 1]; @@ -1243,6 +1243,23 @@ + (void)drawBatteryMonitorWithBars: (CGFloat)bars NSBezierPath* rectangle5Path = [NSBezierPath bezierPathWithRoundedRect: NSMakeRect(36, 6, 5, 9) xRadius: 1 yRadius: 1]; [batteryColor setFill]; [rectangle5Path fill]; + + + //// Battery Text + NSRect batteryTextBoundingRect = NSMakeRect(1, 1, 36, 19); + + NSMutableParagraphStyle* batteryTextStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy; + batteryTextStyle.alignment = NSCenterTextAlignment; + + NSDictionary* batteryTextFontAttributes = @{NSFontAttributeName: [NSFont boldSystemFontOfSize: NSFont.systemFontSize], NSForegroundColorAttributeName: NSColor.whiteColor, NSParagraphStyleAttributeName: batteryTextStyle, NSStrokeColorAttributeName: NSColor.blackColor, NSStrokeWidthAttributeName: @-6.0 }; + + NSString* percentageString = [NSString stringWithFormat:@"%d%%", percentage]; + CGFloat batteryTextHeight = NSHeight([percentageString boundingRectWithSize: batteryTextBoundingRect.size options: NSStringDrawingUsesLineFragmentOrigin attributes: batteryTextFontAttributes]); + NSRect batteryTextRect = NSMakeRect(NSMinX(batteryTextBoundingRect), NSMinY(batteryTextBoundingRect) + (NSHeight(batteryTextBoundingRect) - batteryTextHeight) / 2, NSWidth(batteryTextBoundingRect), batteryTextHeight); + [NSGraphicsContext saveGraphicsState]; + NSRectClip(batteryTextRect); + [percentageString drawInRect: NSOffsetRect(batteryTextRect, 0, 1) withAttributes: batteryTextFontAttributes]; + [NSGraphicsContext restoreGraphicsState]; } + (void)drawDeadZoneViewerWithValue: (CGFloat)value linked: (BOOL)linked From 63a31f7b5ec8e8f8db16430cf9b54f4ed2447e1d Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 16 Aug 2016 17:30:20 -0500 Subject: [PATCH 089/216] Silence constraint complaints --- Pref360Control/Pref360ControlPref.m | 12 + .../en.lproj/Pref360ControlPref.xib | 253 +++++++++++------- 2 files changed, 167 insertions(+), 98 deletions(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 387ac083..3925be59 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -35,6 +35,18 @@ #define NO_ITEMS @"No devices found" +@interface NSLayoutConstraint (Description) + +@end + +@implementation NSLayoutConstraint (Description) + +-(NSString *)description { + return [NSString stringWithFormat:@"id: %@, constant: %f", self.identifier, self.constant]; +} + +@end + // Passes a C callback back to the Objective C class static void CallbackFunction(void *target,IOReturn result,void *refCon,void *sender) { diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index b4e2dd82..27f49962 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,16 +1,15 @@ - + - + - @@ -28,11 +27,7 @@ - - - - @@ -70,6 +65,7 @@ + @@ -85,10 +81,7 @@ + @@ -112,6 +106,7 @@ + @@ -132,47 +127,33 @@ - - - - + - - - - + - - - - + - - - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -207,6 +197,7 @@ + @@ -245,24 +239,27 @@ + - - - - - - - - - - + + + + + + + + + + + + @@ -271,6 +268,7 @@ + @@ -288,6 +286,7 @@ + @@ -333,6 +335,7 @@ + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -390,6 +396,7 @@ + @@ -410,6 +417,7 @@ + @@ -603,6 +626,7 @@ + @@ -678,6 +708,7 @@ + @@ -791,11 +832,13 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -811,6 +854,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -822,6 +866,7 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -856,6 +903,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -878,8 +926,9 @@ Due to some internal limitations, you need to connect your device once to be abl + - + @@ -1432,22 +1481,27 @@ This driver is licensed under the GNU Public License. A copy of this license is - + + + + + @@ -1455,6 +1509,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1465,22 +1520,24 @@ This driver is licensed under the GNU Public License. A copy of this license is + - - - - - - - - - + + + + + + + + + + From 5f56f8b44677df1e3e62d6471442a64e95e30441 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sat, 20 Aug 2016 14:54:38 -0500 Subject: [PATCH 090/216] Add devices from #340 --- 360Controller/Info.plist | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 3900719f..07d1bdc4 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -671,6 +671,46 @@ idVendor 3853 + HoriRAPVKai360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21774 + idVendor + 9414 + + HoriRAPVKaiXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 120 + idVendor + 3853 + HoriRAPVX CFBundleIdentifier From e296d8542f4424cb72fdfae051f8a0511a191a82 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 21 Aug 2016 09:27:59 -0700 Subject: [PATCH 091/216] Add Racing Wheel Support (#342) --- 360Controller/Controller.cpp | 67 +++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 975a2100..41652d1b 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -475,6 +475,30 @@ typedef struct { UInt8 unknown2[7]; } PACKED XBOXONE_IN_FIGHTSTICK_REPORT; +typedef struct { + XBOXONE_HEADER header; + UInt16 buttons; + union { + UInt16 steering; // leftX + SInt16 leftX; + }; + union { + UInt8 accelerator; + UInt8 trigR; + }; + UInt8 unknown1; + union { + UInt8 brake; + UInt8 trigL; + }; + UInt8 unknown2; + union { + UInt8 clutch; + UInt8 leftY; + }; + UInt8 unknown3[8]; +} PACKED XBOXONE_IN_WHEEL_REPORT; + typedef struct { XBOXONE_HEADER header; UInt16 buttons; @@ -574,14 +598,28 @@ void XboxOneControllerClass::convertFromXboxOne(void *buffer, UInt8 packetSize) { if ((0x80 & reportXone->true_trigR) == 0x80) { trigL = 255; } if ((0x40 & reportXone->true_trigR) == 0x40) { trigR = 255; } + + left = reportXone->left; + right = reportXone->right; + } + else if (packetSize == 0x11) // Racing Wheel + { + XBOXONE_IN_WHEEL_REPORT *wheelReport=(XBOXONE_IN_WHEEL_REPORT*)buffer; + + trigR = wheelReport->accelerator; + trigL = wheelReport->brake; + left.x = wheelReport->steering - 32768; // UInt16 -> SInt16 + left.y = wheelReport->clutch * 128; // Clutch is 0-255. Upconvert to half signed 16 range. (0 - 32640) + right = {}; } - else + else // Traditional Controllers { trigL = (reportXone->trigL / 1023.0) * 255; trigR = (reportXone->trigR / 1023.0) * 255; + + left = reportXone->left; + right = reportXone->right; } - left = reportXone->left; - right = reportXone->right; report360->buttons = convertButtonPacket(reportXone->buttons); report360->trigL = trigL; @@ -606,19 +644,16 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I } else if (report->header.command==0x20) { - if (report->header.size==0x0e || report->header.size==0x1d || report->header.size==0x1a) - { - convertFromXboxOne(report, report->header.size); - XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; - if (!(GetOwner(this)->noMapping)) - remapButtons(report360); - GetOwner(this)->fiddleReport(report360->left, report360->right); - - if (GetOwner(this)->swapSticks) - remapAxes(report360); - - memcpy(lastData, report360, sizeof(XBOX360_IN_REPORT)); - } + convertFromXboxOne(report, report->header.size); + XBOX360_IN_REPORT *report360=(XBOX360_IN_REPORT*)report; + if (!(GetOwner(this)->noMapping)) + remapButtons(report360); + GetOwner(this)->fiddleReport(report360->left, report360->right); + + if (GetOwner(this)->swapSticks) + remapAxes(report360); + + memcpy(lastData, report360, sizeof(XBOX360_IN_REPORT)); } } } From f35260cfd36c7297313369a91fdd05deee6290f0 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 26 Aug 2016 14:29:11 -0500 Subject: [PATCH 092/216] Make disable/enable more stable --- Pref360Control/Pref360ControlPref.m | 8 +- .../en.lproj/Pref360ControlPref.xib | 112 +++--------------- 2 files changed, 20 insertions(+), 100 deletions(-) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 3925be59..9bd6bfb5 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -754,10 +754,6 @@ - (void)startDevice } [_mappingTable reloadData]; - - // Allows the kext to be disabled when you connect a controller once - // FIXME: Allow disabling the driver at any time. - [self.enableDriverCheckBox setEnabled:YES]; } // Clear out the device lists @@ -852,7 +848,9 @@ - (void)didSelect int result = system("kextstat | grep com.mice.driver.Xbox360Controller"); NSLog(@"Result of kextstat = %d", result); if (result == 0) { - [self.enableDriverCheckBox setEnabled:YES]; + [self.enableDriverCheckBox setState:NSOnState]; + } else { + [self.enableDriverCheckBox setState:NSOffState]; } } diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 27f49962..62c38856 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -65,7 +65,6 @@ - @@ -81,7 +80,6 @@ - @@ -104,9 +101,8 @@ - + - @@ -122,38 +118,32 @@ - + - + - - + - - - @@ -253,22 +237,19 @@ - - + - - + - @@ -284,9 +265,8 @@ - - + @@ -303,7 +283,6 @@ - @@ -335,7 +312,6 @@ - @@ -359,7 +334,6 @@ - @@ -386,7 +360,6 @@ - @@ -396,7 +369,6 @@ - @@ -417,7 +389,6 @@ - @@ -626,7 +582,6 @@ - @@ -708,7 +657,6 @@ - @@ -832,13 +770,11 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -854,7 +790,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -866,7 +801,6 @@ Due to some internal limitations, you need to connect your device once to be abl - - @@ -903,7 +835,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -926,7 +857,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -1485,23 +1415,18 @@ This driver is licensed under the GNU Public License. A copy of this license is - - - - @@ -1509,7 +1434,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1520,7 +1444,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1537,7 +1460,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - From e95d714f8ea06c64e4c46724770293723ee8076f Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 28 Aug 2016 13:50:37 -0500 Subject: [PATCH 093/216] Setup for 0.16.4 --- Install360Controller/Text/Welcome.rtf | 114 ++++++++++-------- Pref360Control/Pref360ControlPref.m | 2 +- .../en.lproj/Pref360ControlPref.xib | 98 +++++++++++++-- 3 files changed, 156 insertions(+), 58 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 5030b6fa..a82c5b62 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -26,26 +26,46 @@ {\list\listtemplateid23\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid23} {\list\listtemplateid24\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid24} {\list\listtemplateid25\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid25} -{\list\listtemplateid26\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid26}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}} +{\list\listtemplateid26\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid26} +{\list\listtemplateid27\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid27} +{\list\listtemplateid28\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid28}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.3\ +\b0\fs24 \cf0 Version 0.16.4\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16.4: 08/28/2016\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Tons of new devices including the wired version of the new Xbox One controller\ + \'95 Third party Xbox 360 controllers can pretend to be Microsoft ones for better game compatibility\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \'95 }Wireless controllers show a raw battery percentage value now\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Preference pane doesn't complain about constraints in the Console anymore\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Xbox One racing wheel support\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Enable/disable feature is more stable +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.3: 07/14/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }Actually resolves issue with Xbox One controller initialization\ +\ls3\ilvl0\cf0 {\listtext \'95 }Actually resolves issue with Xbox One controller initialization\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Third party Xbox One controllers still don't work, though \b \ @@ -56,7 +76,7 @@ Update 0.16.2: 07/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization +\ls4\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -65,7 +85,7 @@ Update 0.16.1: 07/06/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls5\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -75,21 +95,21 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }New devices\ +\ls6\ilvl0\cf0 {\listtext \'95 }New devices\ {\listtext \'95 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\ls7\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0 +\ls7\ilvl0 \b \cf0 {\listtext \'95 } \b0 Settings load properly\ -\ls5\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls5\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 } \b0 New rumble options for Xbox One controllers\ -\ls5\ilvl0 +\ls7\ilvl0 \b {\listtext \'95 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -98,7 +118,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ +\ls8\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ {\listtext \'95 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -107,9 +127,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls9\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0 +\ls9\ilvl0 \b \cf0 {\listtext \'95 } \b0 Fix Xbox One rumble. \b \ @@ -119,15 +139,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls10\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0 +\ls10\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added various new Xbox 360 controllers.\ -\ls8\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls8\ilvl0 +\ls10\ilvl0 \b {\listtext \'95 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -137,7 +157,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls11\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -145,7 +165,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ +\ls12\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ {\listtext \'95 }Swappable sticks\ {\listtext \'95 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -155,19 +175,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls13\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0 +\ls13\ilvl0 \b \cf0 {\listtext \'95 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls11\ilvl0 +\ls13\ilvl0 \b {\listtext \'95 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls11\ilvl0 +\ls13\ilvl0 \b {\listtext \'95 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls11\ilvl0 +\ls13\ilvl0 \b {\listtext \'95 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -177,16 +197,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls14\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0 +\ls14\ilvl0 \b \cf0 {\listtext \'95 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls12\ilvl0 +\ls14\ilvl0 \b {\listtext \'95 } \b0 Bug fixes for some devices\ {\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls12\ilvl0 +\ls14\ilvl0 \b {\listtext \'95 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -196,17 +216,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls15\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \'95 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0 +\ls15\ilvl0 \b \cf0 {\listtext \'95 } \b0 Better handling of feedback effects\ {\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls13\ilvl0 +\ls15\ilvl0 \b {\listtext \'95 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls13\ilvl0 +\ls15\ilvl0 \b {\listtext \'95 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -216,7 +236,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls16\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -225,7 +245,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ +\ls17\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ {\listtext \'95 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -235,7 +255,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls18\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \'95 }Improvement to ChatPad support\ {\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \'95 }Updated Info.plist with many common devices\ @@ -247,7 +267,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ +\ls19\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \'95 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -257,7 +277,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls20\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ {\listtext \'95 }New product IDs for Wireless Gaming Receiver\ {\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -269,7 +289,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls21\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ {\listtext \'95 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -279,7 +299,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls22\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ {\listtext \'95 }Fix for Snow Leopard\ {\listtext \'95 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -290,7 +310,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls23\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ {\listtext \'95 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -300,7 +320,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls24\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }Daemon providing persistent settings and LED setting\ {\listtext \'95 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -311,7 +331,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls25\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ {\listtext \'95 }New increased compatibility with games\ {\listtext \'95 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -322,7 +342,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls26\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -333,7 +353,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls25\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls27\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -342,7 +362,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls26\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls28\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ {\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'95 }Alternative deadzone mode\ diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 9bd6bfb5..ef402ebe 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -846,7 +846,7 @@ - (void)didSelect // TEMP: Enable the "enable driver" checkbox if the kext is loaded in the memory int result = system("kextstat | grep com.mice.driver.Xbox360Controller"); - NSLog(@"Result of kextstat = %d", result); +// NSLog(@"Result of kextstat = %d", result); if (result == 0) { [self.enableDriverCheckBox setState:NSOnState]; } else { diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 62c38856..24acdeeb 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,9 @@ - + - + @@ -65,6 +65,7 @@ + @@ -80,6 +81,7 @@ + @@ -103,6 +106,7 @@ + @@ -123,27 +127,33 @@ + + + + + @@ -224,6 +239,7 @@ + @@ -237,11 +253,13 @@ + + @@ -250,6 +268,7 @@ + @@ -267,6 +286,7 @@ + @@ -312,6 +335,7 @@ + @@ -334,6 +359,7 @@ + @@ -360,6 +386,7 @@ + @@ -369,6 +396,7 @@ + @@ -389,6 +417,7 @@ + @@ -582,6 +626,7 @@ + @@ -657,6 +708,7 @@ + @@ -770,11 +832,13 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -790,6 +854,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -801,6 +866,7 @@ Due to some internal limitations, you need to connect your device once to be abl + + @@ -835,6 +903,7 @@ Due to some internal limitations, you need to connect your device once to be abl + @@ -850,15 +919,16 @@ Due to some internal limitations, you need to connect your device once to be abl - + - + + - + @@ -908,7 +978,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -1411,22 +1481,27 @@ This driver is licensed under the GNU Public License. A copy of this license is - + + + - + + + @@ -1434,6 +1509,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1444,6 +1520,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + @@ -1460,6 +1537,7 @@ This driver is licensed under the GNU Public License. A copy of this license is + From 42267d006fe567f0098e3d993f4f42a84b2a0bf2 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 1 Sep 2016 10:45:51 -0500 Subject: [PATCH 094/216] Add issues regarding 10.11 This is referring to third party Xbox One issues with 10.11+. Also update all mentions of "OS X" to "macOS" --- Readme.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index a46636c0..fcae64ce 100644 --- a/Readme.md +++ b/Readme.md @@ -1,4 +1,4 @@ -# Xbox Controller Driver for Mac OS X +# Xbox Controller Driver for macOS ## Table of Contents 1. [About](#about) @@ -37,7 +37,7 @@ See the [releases page](https://github.com/360Controller/360Controller/releases) In order to uninstall the driver: navigate to the preference pane by opening your "System Preferences," navigating to the "Xbox 360 Controllers" pane, clicking on the "Advanced" tab and pressing the "Uninstall" button. This will prompt you to enter your password so that the uninstaller can remove all of the bundled software from your machine. ## Usage -The driver exposes a standard game pad with a number of standard controls, so any game that supports gaming devices should work. In some cases, this may require an update from the developer of the game. The preference pane uses the standard Mac OS X frameworks for accessing HID devices in addition to access of Force Feedback capabilities. This means that the preference pane is a good indicator that the driver is functional for other programs. +The driver exposes a standard game pad with a number of standard controls, so any game that supports gaming devices should work. In some cases, this may require an update from the developer of the game. The preference pane uses the standard macOS frameworks for accessing HID devices in addition to access of Force Feedback capabilities. This means that the preference pane is a good indicator that the driver is functional for other programs. It is important to note that this driver does not work, and can never work, with Apple's "Game Controller Framework." This GCController framework corresponds to physical gamepads that have been offically reviewed by Apple and accepted into the mFi program. Due to the fact that we are not Microsoft, we cannot get their gamepad certified to be a GCController. This is an unfortunate oversight on Apple's part. If you would like to discuss this, please do so at [this location.](https://github.com/360Controller/360Controller/issues/55) @@ -60,14 +60,15 @@ If you have a third party controller, make an issue with the "Product ID" and "V ### Wireless Xbox 360 Controllers Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. -### Wired Xbox One Controllers -If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +### Wired Xbox One +If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. +If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". ### Wireless Xbox One Controllers Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. ### Wireless Xbox One Controllers (Bluetooth) -The Xbox One controller works with OS X automatically when connected over Bluetooth. Only specific Xbox One controllers have Bluetooth capability. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. +The Xbox One controller works with macOS automatically when connected over Bluetooth. Only specific Xbox One controllers have Bluetooth capability. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. ## Developer Info Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. @@ -113,7 +114,7 @@ In order to build the .pkg, you will need to install [Packages.app](http://s.sud ### Disabling signing requirements -Since Yosemite (Mac OS X 10.10) all global kexts are required to be signed. This means if you want to build the drivers and install locally, you need a very specific signing certificate that Apple closely controls. If you want to disable the signing requirement from OS X, you will need to do several things. +Since Yosemite (macOS 10.10) all global kexts are required to be signed. This means if you want to build the drivers and install locally, you need a very specific signing certificate that Apple closely controls. If you want to disable the signing requirement from macOS, you will need to do several things. First, execute these commands in your terminal: ``` @@ -133,7 +134,7 @@ From recovery mode, execute the following command: csrutil enable ``` -Reboot into OS X like normal. You can reset the boot arguments by executing this command: +Reboot into macOS like normal. You can reset the boot arguments by executing this command: ``` sudo nvram -d boot-args ``` From 4bd2ac5e88cebd9eafe176b64640c1935a39e23d Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 4 Sep 2016 23:41:13 -0500 Subject: [PATCH 095/216] Add device from #349 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 07d1bdc4..c9d47cbd 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1571,6 +1571,26 @@ idVendor 1118 + MKKlassicFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 771 + idVendor + 4779 + NaconGC100XF CFBundleIdentifier From ed2e04322cd69958f98618811ebdbcac1798f551 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 5 Sep 2016 22:19:08 -0500 Subject: [PATCH 096/216] Add device from #350 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c9d47cbd..65cbb4e8 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1791,6 +1791,26 @@ idVendor 7085 + PDPXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1281 + idVendor + 3695 + PDPXboxOne CFBundleIdentifier From 199707a8256a2a70bd5f3cab6a5b7c21e6b8f379 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Fri, 9 Sep 2016 12:16:42 -0500 Subject: [PATCH 097/216] Add device from #353 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 65cbb4e8..4413a8b9 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -771,6 +771,26 @@ idVendor 7085 + HoriUnnamed2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 654 + idVendor + 7085 + HoriUnnamedBlueSolo CFBundleIdentifier From c6b3ae62ab89c524d9cf778a97cd4b09e93c6e37 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Fri, 9 Sep 2016 23:23:20 -0500 Subject: [PATCH 098/216] Fix incorrect header --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index fcae64ce..9aa734f5 100644 --- a/Readme.md +++ b/Readme.md @@ -60,7 +60,7 @@ If you have a third party controller, make an issue with the "Product ID" and "V ### Wireless Xbox 360 Controllers Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. -### Wired Xbox One +### Wired Xbox One Controllers If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". From b280aa74ad44ca72d6fe3182bb1dc24f3ad76377 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 15 Sep 2016 14:19:46 -0500 Subject: [PATCH 099/216] Add more debugging tips to the README Hopefully this will prevent more issues like #354 where the controller works and the issue is entirely PEBKAC. --- Readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Readme.md b/Readme.md index 9aa734f5..209b4036 100644 --- a/Readme.md +++ b/Readme.md @@ -55,12 +55,15 @@ We cannot fix game specific issues. This driver does its absolute best to put ou Make an issue describing your problem. ### Wired Xbox 360 Controllers +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". ### Wireless Xbox 360 Controllers +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. ### Wired Xbox One Controllers +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". From aed1dcd1f09fbc4a80b38a71a3a078c28444e0ee Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 20 Oct 2016 21:35:51 -0500 Subject: [PATCH 100/216] Add device from #371 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 4413a8b9..0830f400 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -891,6 +891,26 @@ idVendor 1133 + LogitechDriveFx + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51875 + idVendor + 1133 + LogitechF310 CFBundleIdentifier From ca9725c86bc5e22e4580bd30ab797f1f6cde8ef7 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Wed, 26 Oct 2016 20:26:52 -0500 Subject: [PATCH 101/216] Add notes about charge cables --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 209b4036..b70d65b4 100644 --- a/Readme.md +++ b/Readme.md @@ -65,6 +65,7 @@ Remember that wireless controllers must be connected using a wireless adapter. P ### Wired Xbox One Controllers Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. +If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". ### Wireless Xbox One Controllers From ef0a2c8853d8de57e97b7ef38b8770ffb491ad14 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 30 Oct 2016 16:08:18 -0500 Subject: [PATCH 102/216] Add device from #377 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 0830f400..e5dc9521 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -100,6 +100,26 @@ idVendor 9414 + AfterglowGamepad4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 742 + idVendor + 1118 + AfterglowPrismaticOne CFBundleIdentifier From 8397fdd83550a35bdf84d5d92b1cf2d04f93c595 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 20 Nov 2016 22:15:02 -0600 Subject: [PATCH 103/216] Add device from #388 --- 360Controller/Info.plist | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e5dc9521..e6d3bc5e 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1871,7 +1871,7 @@ idVendor 3695 - PDPXboxOne + PDPXboxOne1 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -1891,6 +1891,26 @@ idVendor 3695 + PDPXboxOne2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 354 + idVendor + 3695 + PDPXboxOneArcadeStick CFBundleIdentifier From 11d7de62dd177caa6b8763c80dc168469b741164 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 22 Nov 2016 22:08:36 -0600 Subject: [PATCH 104/216] Ad device from #389 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e6d3bc5e..170f948e 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1911,6 +1911,26 @@ idVendor 3695 + PDPXboxOne3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22042 + idVendor + 9414 + PDPXboxOneArcadeStick CFBundleIdentifier From be643defbe6feb867584db3428c0e7e451732b29 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Sun, 4 Dec 2016 15:49:22 -0600 Subject: [PATCH 105/216] Add device from #398 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 170f948e..fba9cd70 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1931,6 +1931,26 @@ idVendor 9414 + PDPXboxOne4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 353 + idVendor + 3695 + PDPXboxOneArcadeStick CFBundleIdentifier From e110cfa91ce60601f31521cfb4bb753a27c21557 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 19 Feb 2017 16:51:03 -0600 Subject: [PATCH 106/216] Add extra custom build instructions Since work is dead on this driver, might as well add some extra instructions so people can carry on. --- Readme.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index b70d65b4..041e6e03 100644 --- a/Readme.md +++ b/Readme.md @@ -14,14 +14,15 @@ 6. [Wired Xbox One Controllers](#wired-xbox-one-controllers) 7. [Wireless Xbox One Controllers](#wireless-xbox-one-controllers) 8. [Wireless Xbox One Controllers (Bluetooth)](#wireless-xbox-one-controllers-bluetooth) -6. [Developer Info](#developer-info) +6. [Adding Third Party Controllers](#adding-third-party-controllers) +7. [Developer Info](#developer-info) 1. [Building](#building) 2. [Building the .pkg](#building-the-pkg) 3. [Disabling signing requirements](#disabling-signing-requirements) 4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) 5. [Debugging the driver](#debugging-the-driver) 6. [Debugging the preference pane](#debugging-the-preference-pane) -7. [Licence](#licence) +8. [Licence](#licence) ## About This driver supports the Microsoft Xbox series of controllers including those for the original Xbox, Xbox 360, and Xbox One. Xbox 360 controllers work both wired and wirelessly, while Xbox One controllers only work wired for now. The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. @@ -74,6 +75,9 @@ Wireless Xbox One controllers are currently not supported. Please be patient as ### Wireless Xbox One Controllers (Bluetooth) The Xbox One controller works with macOS automatically when connected over Bluetooth. Only specific Xbox One controllers have Bluetooth capability. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. +## Adding Third Party Controllers +First, [disable signing requirements](#disabling-signing-requirements) so that you can run your custom build with your third party controller added. Then edit `360Controller/360Controller/Info.plist`. Add your controller following the pattern of pre-existing controllers by adding your vendor and product IDs to a new entry. After this, follow the information in the [building](#building) section, following the "If you don't have a signing certificate" path to build your new .kext. Then, place your shiny new `360Controller.kext` in to `/Library/Extensions` over the old one. You may need to take ownership of the driver in order for it to operate properly. You can do this with `sudo chown -R root:wheel /Library/Extensions/360Controller.kext`. Then, to make sure everything went according to plan, run `sudo kextutil /Library/Extensions/360Controller.kext`. This will load your kext into the OS and you should be able to use your controller. Once you reboot, your custom driver should be loaded automatically. + ## Developer Info Drivers inherently modify the core operating system kernel. Using the driver as a developer can lead to dangerous kernel panics that can cause data loss or other permanent damage to your computer. Be very careful about how you use this information. We are not responsible for anything this driver does to your computer, or any loss it may incur. Normal users will never have to worry about the developer section of this README. From d97584f72e11392cb62073310fdf3f172e1a72b8 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 13:57:02 -0500 Subject: [PATCH 107/216] Add device #448 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index fba9cd70..a73080fa 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -671,6 +671,26 @@ idVendor 3853 + HoriPadUltimate + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 144 + idVendor + 3853 + HoriRAPHayabusaXboxOne CFBundleIdentifier From 0fa345277cea81dbe985f0f1ca9a9db57c289f79 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 13:59:59 -0500 Subject: [PATCH 108/216] Add device #446 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index a73080fa..9f884d43 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1851,6 +1851,26 @@ idVendor 7085 + PDPTitanfall2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 357 + idVendor + 3695 + PDPVersusPad CFBundleIdentifier From e790b7b4775a1eedd771be8c0778fc1d7c59f439 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 14:03:54 -0500 Subject: [PATCH 109/216] Add device #445 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 9f884d43..f3d9681a 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -20,6 +20,26 @@ ${CURRENT_PROJECT_VERSION} IOKitPersonalities + AplayController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64251 + idVendor + 9414 + AfterglowGamepadForXbox360 CFBundleIdentifier From 14937169a9cf8733e91dee1e5a3cc3349f384d8d Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 14:19:09 -0500 Subject: [PATCH 110/216] Add device from #435 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index f3d9681a..3371a665 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -311,6 +311,26 @@ idVendor 1118 + Controller3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 307 + idVendor + 3695 + Counterfeit360Controller1 CFBundleIdentifier From 4933ef77c1d18d81b093078d4eb34c645864f269 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 14:24:56 -0500 Subject: [PATCH 111/216] Add device #431 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 3371a665..9955aa34 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1831,6 +1831,26 @@ idVendor 4779 + PDPBattlefieldOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 356 + idVendor + 3695 + PDPEASports CFBundleIdentifier From fff101ea0993e6f7f240f5e349f382b296de486e Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 14:33:27 -0500 Subject: [PATCH 112/216] Add device #425 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 9955aa34..53473d91 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -331,6 +331,26 @@ idVendor 3695 + Controller4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63233 + idVendor + 3695 + Counterfeit360Controller1 CFBundleIdentifier From 9f5cc6abfbc466cd44b6e1d5a888030387c088db Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 14:35:50 -0500 Subject: [PATCH 113/216] Add device #424 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 53473d91..f1ca0d97 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -371,6 +371,26 @@ idVendor 3695 + Counterfeit360Controller2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62721 + idVendor + 3695 + DOA4Stick CFBundleIdentifier From dbbd4a714a22eed89481b7114242f8a9d9789b55 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 16:27:32 -0500 Subject: [PATCH 114/216] Add device #411 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index f1ca0d97..07e17266 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2091,6 +2091,26 @@ idVendor 3695 + PDPXboxOne5 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 355 + idVendor + 3695 + PDPXboxOneArcadeStick CFBundleIdentifier From 812ba032255d3e047fcf77516590e35668c8c1a4 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 17 Apr 2017 18:05:16 -0500 Subject: [PATCH 115/216] Add devices #407 --- 360Controller/Info.plist | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 07e17266..36f70ebd 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -411,6 +411,46 @@ idVendor 3853 + FUSIONXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22042 + idVendor + 9414 + + FUSIONProXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21786 + idVendor + 9414 + GEMPADEX CFBundleIdentifier From f2e70762d045f677204a17edc9407c8b7f23a9db Mon Sep 17 00:00:00 2001 From: nkronlage Date: Mon, 17 Apr 2017 18:40:30 -0500 Subject: [PATCH 116/216] Update Readme.md's supported controllers (#392) Resolves #391 --- Readme.md | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/Readme.md b/Readme.md index 041e6e03..01c8948b 100644 --- a/Readme.md +++ b/Readme.md @@ -25,7 +25,20 @@ 8. [Licence](#licence) ## About -This driver supports the Microsoft Xbox series of controllers including those for the original Xbox, Xbox 360, and Xbox One. Xbox 360 controllers work both wired and wirelessly, while Xbox One controllers only work wired for now. The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. +This driver supports the Microsoft Xbox series of controllers including: + +1. Original Xbox + - Original Xbox controllers are supported by using a USB adapter. + +2. Xbox 360 + - Wired Xbox 360 controllers are supported directly. + - Wireless Xbox 360 controllers are supported with the Xbox 360 Wireless Gaming Receiver. Using a "Play and Charge" kit is not supported. + +3. Xbox One + - Xbox One controllers are supported when connected with a micro USB cable. Using the controller with the Wireless Adapter is not currently supported. + - Bluetooth capable Xbox One controllers (released after August 2016) are natively supported by macOS without the use of this driver. However, installing this driver will enable force feedback (which is not natively supported) and allow you to plug the controller in via USB. + +The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. Controller support includes ALL devices that work with an Xbox series piece of hardware. All wheels, fight sticks, and controllers should work. This includes things like the Xbox One Elite controller. If your hardware does not work with an Xbox console we cannot support it. Sorry. @@ -63,17 +76,17 @@ If you have a third party controller, make an issue with the "Product ID" and "V Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. -### Wired Xbox One Controllers +### Xbox One Controllers connected with USB Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". -### Wireless Xbox One Controllers -Wireless Xbox One controllers are currently not supported. Please be patient as we figure out this complicated protocol. +### Xbox One Controllers connected with Wireless Adapter +Xbox One controllers connected with the Wireless Adapter are currently not supported. Please be patient as we figure out this complicated protocol. -### Wireless Xbox One Controllers (Bluetooth) -The Xbox One controller works with macOS automatically when connected over Bluetooth. Only specific Xbox One controllers have Bluetooth capability. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. +### Xbox One Controllers connected with Bluetooth +The Xbox One controller works with macOS automatically when connected over Bluetooth. Only specific Xbox One controllers released after August 2016 have Bluetooth capability. See [Microsoft's support page](https://support.xbox.com/en-US/xbox-on-windows/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues-windows-10) for determining if your controller supports Bluetooth. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. ## Adding Third Party Controllers First, [disable signing requirements](#disabling-signing-requirements) so that you can run your custom build with your third party controller added. Then edit `360Controller/360Controller/Info.plist`. Add your controller following the pattern of pre-existing controllers by adding your vendor and product IDs to a new entry. After this, follow the information in the [building](#building) section, following the "If you don't have a signing certificate" path to build your new .kext. Then, place your shiny new `360Controller.kext` in to `/Library/Extensions` over the old one. You may need to take ownership of the driver in order for it to operate properly. You can do this with `sudo chown -R root:wheel /Library/Extensions/360Controller.kext`. Then, to make sure everything went according to plan, run `sudo kextutil /Library/Extensions/360Controller.kext`. This will load your kext into the OS and you should be able to use your controller. Once you reboot, your custom driver should be loaded automatically. From f21f65ecca0e9d66b9b292a7df903e5ad385c58b Mon Sep 17 00:00:00 2001 From: Kevin Eaves Date: Mon, 17 Apr 2017 16:41:36 -0700 Subject: [PATCH 117/216] Change occurrences of XBox to Xbox (#288) --- 360Controller/ControlStruct.h | 26 ++++++++-------- 360Controller/Controller.cpp | 30 +++++++++---------- 360Controller/_60Controller.cpp | 4 +-- 360Daemon/360Daemon.m | 10 +++---- 360Daemon/en.lproj/Localizable.strings | 4 +-- Install360Controller/Text/Readme.rtf | 2 +- Install360Controller/Text/Welcome.rtf | 4 +-- Pref360Control/DeviceItem.m | 10 +++---- Pref360Control/DeviceLister.m | 4 +-- Pref360Control/Info.plist | 2 +- Pref360Control/MyWhole360ControllerMapper.m | 2 +- Pref360Control/Pref360ControlPref.m | 4 +-- .../en.lproj/Pref360ControlPref.xib | 2 +- .../Wireless360Controller.cpp | 6 ++-- 14 files changed, 55 insertions(+), 55 deletions(-) diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index cfd7228b..68f4026f 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -23,9 +23,9 @@ #ifndef __CONTROLSTRUCT_H__ #define __CONTROLSTRUCT_H__ -typedef UInt8 XBox360_Byte; -typedef UInt16 XBox360_Short; -typedef SInt16 XBox360_SShort; +typedef UInt8 Xbox360_Byte; +typedef UInt16 Xbox360_Short; +typedef SInt16 Xbox360_SShort; #define Xbox360_Prepare(x,t) {memset(&x,0,sizeof(x));x.header.command=t;x.header.size=sizeof(x);} @@ -33,36 +33,36 @@ typedef SInt16 XBox360_SShort; // Common structure format typedef struct XBOX360_PACKET { - XBox360_Byte command; - XBox360_Byte size; + Xbox360_Byte command; + Xbox360_Byte size; } PACKED XBOX360_PACKET; // Analog stick format typedef struct XBOX360_HAT { - XBox360_SShort x,y; + Xbox360_SShort x,y; } PACKED XBOX360_HAT; // Structure describing the report had back from the controller typedef struct XBOX360_IN_REPORT { XBOX360_PACKET header; - XBox360_Short buttons; - XBox360_Byte trigL,trigR; + Xbox360_Short buttons; + Xbox360_Byte trigL,trigR; XBOX360_HAT left,right; - XBox360_Byte reserved[6]; + Xbox360_Byte reserved[6]; } PACKED XBOX360_IN_REPORT; // Structure describing the command to change LED status typedef struct XBOX360_OUT_LED { XBOX360_PACKET header; - XBox360_Byte pattern; + Xbox360_Byte pattern; } PACKED XBOX360_OUT_LED; // Structure describing the command to change rumble motor status typedef struct XBOX360_OUT_RUMBLE { XBOX360_PACKET header; - XBox360_Byte reserved1; - XBox360_Byte big,little; - XBox360_Byte reserved[3]; + Xbox360_Byte reserved1; + Xbox360_Byte big,little; + Xbox360_Byte reserved[3]; } PACKED XBOX360_OUT_RUMBLE; // Enumeration of command types diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 41652d1b..4028961b 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -298,20 +298,20 @@ OSNumber* Xbox360Pretend360Class::newVendorIDNumber() const typedef struct { XBOX360_PACKET header; - XBox360_Byte buttons; - XBox360_Byte reserved1; - XBox360_Byte a, b, x, y, black, white; - XBox360_Byte trigL,trigR; - XBox360_Short xL,yL; - XBox360_Short xR,yR; + Xbox360_Byte buttons; + Xbox360_Byte reserved1; + Xbox360_Byte a, b, x, y, black, white; + Xbox360_Byte trigL,trigR; + Xbox360_Short xL,yL; + Xbox360_Short xR,yR; } PACKED XBOX_IN_REPORT; typedef struct { XBOX360_PACKET header; - XBox360_Byte reserved1; - XBox360_Byte left; - XBox360_Byte reserved2; - XBox360_Byte right; + Xbox360_Byte reserved1; + Xbox360_Byte left; + Xbox360_Byte reserved2; + Xbox360_Byte right; } PACKED XBOX_OUT_RUMBLE; @@ -342,9 +342,9 @@ static void logData(UInt8 *data, int len) { IOLog("\n"); } -// This converts XBox original controller report into XBox360 form +// This converts Xbox original controller report into Xbox360 form // See https://github.com/Grumbel/xboxdrv/blob/master/src/controller/xbox_controller.cpp -static void convertFromXBoxOriginal(UInt8 *data) { +static void convertFromXboxOriginal(UInt8 *data) { if (data[0] != 0x00 || data[1] != 0x14) { IOLog("Unknown report command %d, length %d\n", (int)data[0], (int)data[1]); return; @@ -352,7 +352,7 @@ static void convertFromXBoxOriginal(UInt8 *data) { XBOX360_IN_REPORT report; Xbox360_Prepare (report, 0); XBOX_IN_REPORT *in = (XBOX_IN_REPORT*)data; - XBox360_Short buttons = in->buttons; + Xbox360_Short buttons = in->buttons; if (in->a) buttons |= 1 << 12; // a if (in->b) buttons |= 1 << 13; // b if (in->x) buttons |= 1 << 14; // x @@ -376,7 +376,7 @@ IOReturn XboxOriginalControllerClass::handleReport(IOMemoryDescriptor * descript descriptor->readBytes(0, data, sizeof(XBOX360_IN_REPORT)); const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)data; if ((report->header.command==inReport) && (report->header.size==sizeof(XBOX360_IN_REPORT))) { - convertFromXBoxOriginal(data); + convertFromXboxOriginal(data); if (memcmp(data, lastData, sizeof(XBOX360_IN_REPORT)) == 0) { repeatCount ++; // drop triplicate reports @@ -709,7 +709,7 @@ IOReturn XboxOneControllerClass::setReport(IOMemoryDescriptor *report,IOHIDRepor rumble.little = data[2]; rumble.big = data[3]; } - + GetOwner(this)->QueueWrite(&rumble,13); return kIOReturnSuccess; case 0x01: // Unsupported LED diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index d2298f4f..b6bf7285 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -690,9 +690,9 @@ IOReturn Xbox360Peripheral::message(UInt32 type,IOService *provider,void *argume } // This returns the abs() value of a short, swapping it if necessary -static inline XBox360_SShort getAbsolute(XBox360_SShort value) +static inline Xbox360_SShort getAbsolute(Xbox360_SShort value) { - XBox360_SShort reverse; + Xbox360_SShort reverse; #ifdef __LITTLE_ENDIAN__ reverse=value; diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 264cdea3..7b284b43 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -59,7 +59,7 @@ }; NSString *alertStrings[] = { - @"You have attached a Microsoft Play & Charge cable for your XBox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!", + @"You have attached a Microsoft Play & Charge cable for your Xbox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!", }; static void releaseAlert(void) @@ -84,7 +84,7 @@ static void ShowAlert(NSInteger index) { SInt32 error; NSArray *checkBoxes = @[NSLocalizedString(CHECK_SHOWAGAIN, nil)]; - NSDictionary *dictionary = @{(NSString*)kCFUserNotificationAlertHeaderKey: NSLocalizedString(@"XBox 360 Controller Driver", nil), + NSDictionary *dictionary = @{(NSString*)kCFUserNotificationAlertHeaderKey: NSLocalizedString(@"Xbox 360 Controller Driver", nil), (NSString*)kCFUserNotificationAlertMessageKey: NSLocalizedString(alertStrings[index], nil), (NSString*)kCFUserNotificationCheckBoxTitlesKey: checkBoxes, (NSString*)kCFUserNotificationIconURLKey: [[NSBundle mainBundle] URLForImageResource:@"Alert"]}; @@ -259,11 +259,11 @@ static void callbackPower(void *refCon, io_service_t service, natural_t messageT // we will allow idle sleep IOAllowPowerChange(root_power_port, (long)messageArgument); break; - + case kIOMessageSystemWillSleep: IOAllowPowerChange(root_power_port, (long)messageArgument); break; - + case kIOMessageSystemHasPoweredOn: //System has finished waking up... { @@ -281,7 +281,7 @@ static void callbackPower(void *refCon, io_service_t service, natural_t messageT IOObjectRelease(newItr); } break; - + default: break; } diff --git a/360Daemon/en.lproj/Localizable.strings b/360Daemon/en.lproj/Localizable.strings index 864e6ed7..bdfcc203 100644 --- a/360Daemon/en.lproj/Localizable.strings +++ b/360Daemon/en.lproj/Localizable.strings @@ -7,5 +7,5 @@ */ "Do not show this message again" = "Do not show this message again"; -"You have attached a Microsoft Play & Charge cable for your XBox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!" = "You have attached a Microsoft Play & Charge cable for your XBox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!"; -"XBox 360 Controller Driver" = "XBox 360 Controller Driver"; +"You have attached a Microsoft Play & Charge cable for your Xbox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!" = "You have attached a Microsoft Play & Charge cable for your Xbox 360 Wireless Controller. While this cable will allow you to charge your wireless controller, you will require the Microsoft Wireless Gaming Receiver for Windows to use your wireless controller in Mac OS X!"; +"Xbox 360 Controller Driver" = "Xbox 360 Controller Driver"; diff --git a/Install360Controller/Text/Readme.rtf b/Install360Controller/Text/Readme.rtf index 0bbb51b4..03a79ef6 100644 --- a/Install360Controller/Text/Readme.rtf +++ b/Install360Controller/Text/Readme.rtf @@ -5,7 +5,7 @@ \deftab720 \pard\pardeftab720\sb240\sa283 -\f0\b\fs42 \cf0 XBox 360 Controller Driver\ +\f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\pardeftab720\sb200\sa120 \fs36 \cf0 About\ diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index a82c5b62..3587a0a9 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -33,13 +33,13 @@ \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\f0\b\fs42 \cf0 XBox 360 Controller Driver\ +\f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b0\fs24 \cf0 Version 0.16.4\ Copyright (C) 2005-2013 Colin Munro\ \ -Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ +Welcome to the installer for the Xbox 360 Controller driver for Mac OS X.\ \b \ Update 0.16.4: 08/28/2016\ diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index 646a49f8..f4ad470a 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -41,13 +41,13 @@ static ControllerType GetControllerType(io_service_t device) { io_service_t parent; CFMutableDictionaryRef serviceProperties; - + // Check for the DeviceData dictionary in device if (IORegistryEntryCreateCFProperties(device, &serviceProperties, kCFAllocatorDefault, kNilOptions) == KERN_SUCCESS) { NSDictionary *properties = CFBridgingRelease(serviceProperties); NSDictionary *deviceData = properties[@"DeviceData"]; - + if (deviceData != nil) { NSNumber *controllerType = deviceData[@"ControllerType"]; @@ -55,7 +55,7 @@ static ControllerType GetControllerType(io_service_t device) return (ControllerType)[controllerType intValue]; } } - + // Check for the DeviceData dictionary in the device's parent if (IORegistryEntryGetParentEntry(device, kIOServicePlane, &parent) == KERN_SUCCESS) { @@ -63,7 +63,7 @@ static ControllerType GetControllerType(io_service_t device) { NSDictionary *properties = CFBridgingRelease(serviceProperties); NSDictionary *deviceData = properties[@"DeviceData"]; - + if (deviceData != nil) { NSNumber *controllerType = deviceData[@"ControllerType"]; @@ -72,7 +72,7 @@ static ControllerType GetControllerType(io_service_t device) } } } - + NSLog(@"Error: couldn't find ControllerType"); return Xbox360Controller; } diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index 0117650f..5e781985 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -104,7 +104,7 @@ static id GetDeviceValue(io_service_t device, NSString *key) }; // Detect if an IO service object is a Microsoft controller by running through and checking some things -static BOOL IsXBox360Controller(io_service_t device) +static BOOL IsXbox360Controller(io_service_t device) { IOUSBDeviceInterface **interface = GetDeviceInterface(device); IOUSBFindInterfaceRequest iRq; @@ -284,7 +284,7 @@ - (NSString*)readIOKit { while ((object = IOIteratorNext(iterator)) != 0) { - if (IsXBox360Controller(object)) + if (IsXbox360Controller(object)) { NSNumber *vendorValue, *productValue; UInt16 vendor,product; diff --git a/Pref360Control/Info.plist b/Pref360Control/Info.plist index 1d69d937..440af5a3 100644 --- a/Pref360Control/Info.plist +++ b/Pref360Control/Info.plist @@ -11,7 +11,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - XBox 360 Controllers + Xbox 360 Controllers CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/Pref360Control/MyWhole360ControllerMapper.m b/Pref360Control/MyWhole360ControllerMapper.m index 2a11c436..0c8b8bb9 100644 --- a/Pref360Control/MyWhole360ControllerMapper.m +++ b/Pref360Control/MyWhole360ControllerMapper.m @@ -68,7 +68,7 @@ - (void)runMapperWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)pr - (void)cancelMappingWithButton:(NSButton *)button andOwner:(Pref360ControlPref *)prefPref { pref = prefPref; remappingButton = button; - + [self restorePreviousMapping]; [self stopMapping]; } diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index ef402ebe..acc6ef4a 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -445,7 +445,7 @@ - (void)startDevice ffDevice = [item ffDevice]; registryEntry = [item rawDevice]; controllerType = [item controllerType]; - + if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) { [_rumbleOptions removeAllItems]; @@ -941,7 +941,7 @@ - (IBAction)changeSetting:(id)sender [_rightStickInvertX setState:[_rightStickInvertXAlt state]]; [_rightStickInvertY setState:[_rightStickInvertYAlt state]]; } - + BOOL pretend360 = ([_pretend360Button state] == NSOnState); if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) { diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 24acdeeb..b740d8d4 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -932,7 +932,7 @@ Due to some internal limitations, you need to connect your device once to be abl - XBox 360 Controller Driver + Xbox 360 Controller Driver diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index b8f64691..2de079fc 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -31,9 +31,9 @@ OSDefineMetaClassAndStructors(Wireless360Controller, WirelessHIDDevice) #define super WirelessHIDDevice -static inline XBox360_SShort getAbsolute(XBox360_SShort value) +static inline Xbox360_SShort getAbsolute(Xbox360_SShort value) { - XBox360_SShort reverse; + Xbox360_SShort reverse; #ifdef __LITTLE_ENDIAN__ reverse=value; @@ -132,7 +132,7 @@ void Wireless360Controller::readSettings(void) 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++) From 9916348ac984bd5afb9bc32ff64c3e4a5c193838 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 18 Apr 2017 09:17:32 -0500 Subject: [PATCH 118/216] Make changes for 0.16.5 --- Install360Controller/Text/Welcome.rtf | 11 ++++++++++- Pref360Control/en.lproj/Pref360ControlPref.xib | 12 ++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 3587a0a9..816993ae 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -36,12 +36,21 @@ \f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.4\ +\b0\fs24 \cf0 Version 0.16.5\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the Xbox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16.5: 04/18/2017\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 New devices +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.4: 08/28/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index b740d8d4..83dafcb3 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,5 +1,5 @@ - + @@ -88,7 +88,7 @@ - + @@ -919,7 +919,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -928,7 +928,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -978,7 +978,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -1481,7 +1481,7 @@ This driver is licensed under the GNU Public License. A copy of this license is - + From bb76d6b8f3eace4f3b922adcf9b6d55d5e06d423 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 7 May 2017 12:44:41 -0500 Subject: [PATCH 119/216] Improve README clarity Make it a bit more obvious that the Bluetooth Xbox One controller does not connect automatically. --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 01c8948b..298bdcb3 100644 --- a/Readme.md +++ b/Readme.md @@ -86,7 +86,7 @@ If you have a third party controller that isn't recognized by the preference pan Xbox One controllers connected with the Wireless Adapter are currently not supported. Please be patient as we figure out this complicated protocol. ### Xbox One Controllers connected with Bluetooth -The Xbox One controller works with macOS automatically when connected over Bluetooth. Only specific Xbox One controllers released after August 2016 have Bluetooth capability. See [Microsoft's support page](https://support.xbox.com/en-US/xbox-on-windows/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues-windows-10) for determining if your controller supports Bluetooth. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. +The Xbox One controller works with macOS automatically when connected over Bluetooth via System Preferences. Only specific Xbox One controllers released after August 2016 have Bluetooth capability. See [Microsoft's support page](https://support.xbox.com/en-US/xbox-on-windows/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues-windows-10) for determining if your controller supports Bluetooth. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. ## Adding Third Party Controllers First, [disable signing requirements](#disabling-signing-requirements) so that you can run your custom build with your third party controller added. Then edit `360Controller/360Controller/Info.plist`. Add your controller following the pattern of pre-existing controllers by adding your vendor and product IDs to a new entry. After this, follow the information in the [building](#building) section, following the "If you don't have a signing certificate" path to build your new .kext. Then, place your shiny new `360Controller.kext` in to `/Library/Extensions` over the old one. You may need to take ownership of the driver in order for it to operate properly. You can do this with `sudo chown -R root:wheel /Library/Extensions/360Controller.kext`. Then, to make sure everything went according to plan, run `sudo kextutil /Library/Extensions/360Controller.kext`. This will load your kext into the OS and you should be able to use your controller. Once you reboot, your custom driver should be loaded automatically. From 8d18caddc8747c2a11cb0236503671c53b6175a5 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 10 Aug 2016 11:58:58 -0600 Subject: [PATCH 120/216] Initial work on making the Bluetooth controller vibrate when connected via Bluetooth. --- 360 Driver.xcodeproj/project.pbxproj | 100 +++++++++++++++++++++++++++ XboxOneBluetooth/Info.plist | 56 +++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 XboxOneBluetooth/Info.plist diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index f53d0823..3f47e68a 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -227,6 +227,8 @@ 55750C08190AFB5B0047FF41 /* DaemonLEDs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DaemonLEDs.m; sourceTree = ""; usesTabs = 1; }; 55852E2018D6B5580009BF55 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 55A2B8DB18C116E2006829A2 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 55ACBFE01D5B9E2E00E4F677 /* XboxOneBluetooth.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XboxOneBluetooth.kext; sourceTree = BUILT_PRODUCTS_DIR; }; + 55ACBFE41D5B9E2F00E4F677 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55B13FC018C51DD400ACD9AC /* Feedback360.exp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.exports; path = Feedback360.exp; sourceTree = ""; }; 55B636B418C104DB00CE933D /* 360Daemon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 360Daemon.app; sourceTree = BUILT_PRODUCTS_DIR; }; 55B636B718C104DB00CE933D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -468,6 +470,14 @@ name = Resources; sourceTree = ""; }; + 55ACBFE11D5B9E2E00E4F677 /* XboxOneBluetooth */ = { + isa = PBXGroup; + children = ( + 55ACBFE41D5B9E2F00E4F677 /* Info.plist */, + ); + path = XboxOneBluetooth; + sourceTree = ""; + }; 55B636AB18C104DB00CE933D = { isa = PBXGroup; children = ( @@ -479,6 +489,7 @@ 55B6376A18C10A5400CE933D /* DriverTool */, 55B6378118C10B0B00CE933D /* Pref360Control */, 551CDFFE196EFD0A000869B6 /* Distribution */, + 55ACBFE11D5B9E2E00E4F677 /* XboxOneBluetooth */, 55B636B618C104DB00CE933D /* Frameworks */, 55B636B518C104DB00CE933D /* Products */, ); @@ -496,6 +507,7 @@ 55B637E818C10D5000CE933D /* Wireless360Controller.kext */, 55B6380E18C10E8700CE933D /* WirelessGamingReceiver.kext */, 55FE3CA118D7B77800D69E84 /* testhaptic */, + 55ACBFE01D5B9E2E00E4F677 /* XboxOneBluetooth.kext */, ); name = Products; sourceTree = ""; @@ -666,6 +678,13 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 55ACBFDD1D5B9E2E00E4F677 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55B6370318C1057100CE933D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -720,6 +739,22 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55ACBFE71D5B9E2F00E4F677 /* Build configuration list for PBXNativeTarget "XboxOneBluetooth" */; + buildPhases = ( + 55ACBFDD1D5B9E2E00E4F677 /* Headers */, + 55ACBFDE1D5B9E2E00E4F677 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = XboxOneBluetooth; + productName = XboxOneBluetooth; + productReference = 55ACBFE01D5B9E2E00E4F677 /* XboxOneBluetooth.kext */; + productType = "com.apple.product-type.kernel-extension"; + }; 55B636B318C104DB00CE933D /* 360Daemon */ = { isa = PBXNativeTarget; buildConfigurationList = 55B636E518C104DB00CE933D /* Build configuration list for PBXNativeTarget "360Daemon" */; @@ -872,6 +907,11 @@ attributes = { LastUpgradeCheck = 0610; ORGANIZATIONNAME = GitHub; + TargetAttributes = { + 55ACBFDF1D5B9E2E00E4F677 = { + CreatedOnToolsVersion = 7.3.1; + }; + }; }; buildConfigurationList = 55B636AF18C104DB00CE933D /* Build configuration list for PBXProject "360 Driver" */; compatibilityVersion = "Xcode 3.2"; @@ -895,12 +935,20 @@ 55B6370618C1057100CE933D /* 360Controller */, 55B637E718C10D5000CE933D /* Wireless360Controller */, 55B6380D18C10E8700CE933D /* WirelessGamingReceiver */, + 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */, 55FE3CA018D7B77800D69E84 /* testhaptic */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 55ACBFDE1D5B9E2E00E4F677 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55B636B218C104DB00CE933D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1165,6 +1213,50 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 55ACBFE51D5B9E2F00E4F677 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "-"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = XboxOneBluetooth/Info.plist; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULE_NAME = com.mice.driver.XboxOneBluetooth; + MODULE_START = XboxOneBluetooth_start; + MODULE_STOP = XboxOneBluetooth_stop; + MODULE_VERSION = 1.0.0d1; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XboxOneBluetooth; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = kext; + }; + name = Debug; + }; + 55ACBFE61D5B9E2F00E4F677 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = XboxOneBluetooth/Info.plist; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULE_NAME = com.mice.driver.XboxOneBluetooth; + MODULE_START = XboxOneBluetooth_start; + MODULE_STOP = XboxOneBluetooth_stop; + MODULE_VERSION = 1.0.0d1; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XboxOneBluetooth; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = kext; + }; + name = Release; + }; 55B636E318C104DB00CE933D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1490,6 +1582,14 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 55ACBFE71D5B9E2F00E4F677 /* Build configuration list for PBXNativeTarget "XboxOneBluetooth" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55ACBFE51D5B9E2F00E4F677 /* Debug */, + 55ACBFE61D5B9E2F00E4F677 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; 55B636AF18C104DB00CE933D /* Build configuration list for PBXProject "360 Driver" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/XboxOneBluetooth/Info.plist b/XboxOneBluetooth/Info.plist new file mode 100644 index 00000000..88da1480 --- /dev/null +++ b/XboxOneBluetooth/Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + KEXT + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + IOKitPersonalities + + XboxOneBluetooth + + CFBundleIdentifier + com.apple.driver.IOBluetoothHIDDriver + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + IOBluetoothHIDDriver + IOProviderClass + IOBluetoothL2CAPChannel + ProductID + 736 + VendorID + 1118 + + + NSHumanReadableCopyright + Copyright © 2016 GitHub. All rights reserved. + OSBundleLibraries + + com.apple.driver.IOBluetoothHIDDriver + 4.1.7f2 + com.apple.iokit.IOHIDFamily + 1.8.1 + com.apple.kpi.iokit + 12.5 + com.apple.kpi.libkern + 12.5 + + + From 475a3e5151e32d281f0ca7f40585b2b98f7691c0 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 10 Aug 2016 12:02:36 -0600 Subject: [PATCH 121/216] Install the Codeless Bluetooth Kext. --- 360 Driver.xcodeproj/project.pbxproj | 13 +++++++++++++ .../Install360Controller.pkgproj | 16 ++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index 3f47e68a..e6dc51eb 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ buildPhases = ( ); dependencies = ( + 55ACBFE91D5BA33A00E4F677 /* PBXTargetDependency */, 55B6383D18C10FA200CE933D /* PBXTargetDependency */, 55B6383F18C10FA200CE933D /* PBXTargetDependency */, 55B6384118C10FA200CE933D /* PBXTargetDependency */, @@ -110,6 +111,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 55ACBFE81D5BA33A00E4F677 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55B636AC18C104DB00CE933D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55ACBFDF1D5B9E2E00E4F677; + remoteInfo = XboxOneBluetooth; + }; 55B6374D18C1097D00CE933D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 55B636AC18C104DB00CE933D /* Project object */; @@ -1095,6 +1103,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 55ACBFE91D5BA33A00E4F677 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */; + targetProxy = 55ACBFE81D5BA33A00E4F677 /* PBXContainerItemProxy */; + }; 55B6374E18C1097D00CE933D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 55B6371E18C108A500CE933D /* Feedback360 */; diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj index 5cf658b8..3323b2ca 100644 --- a/Install360Controller/Install360Controller.pkgproj +++ b/Install360Controller/Install360Controller.pkgproj @@ -150,6 +150,22 @@ UID 0 + + CHILDREN + + GID + 0 + PATH + ../build/Release/XboxOneBluetooth.kext + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + CHILDREN From 8e2d36845b64dc72a42d883c962540a09bb88f08 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 10 Aug 2016 12:19:36 -0600 Subject: [PATCH 122/216] Simple hack to get the feedback plug-in to accept the Bluetooth gamepad. --- Feedback360/Feedback360.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Feedback360/Feedback360.cpp b/Feedback360/Feedback360.cpp index 32efbf28..7b0212cc 100644 --- a/Feedback360/Feedback360.cpp +++ b/Feedback360/Feedback360.cpp @@ -162,7 +162,8 @@ IOReturn Feedback360::Probe(CFDictionaryRef propertyTable, io_service_t service, { if ((service==0) || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) - && (!IOObjectConformsTo(service,"Wireless360Controller")))) return kIOReturnBadArgument; + && (!IOObjectConformsTo(service,"Wireless360Controller")) + && (!IOObjectConformsTo(hidDevice, "IOBluetoothHIDDriver")))) return kIOReturnBadArgument; return FF_OK; } @@ -498,7 +499,8 @@ HRESULT Feedback360::InitializeTerminate(NumVersion APIversion, io_object_t hidD // From probe if( (hidDevice==0) || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) - && (!IOObjectConformsTo(hidDevice,"Wireless360Controller"))) ) + && (!IOObjectConformsTo(hidDevice,"Wireless360Controller")) + && (!IOObjectConformsTo(hidDevice, "IOBluetoothHIDDriver"))) ) { // fprintf(stderr,"Feedback: Invalid device\n"); return FFERR_INVALIDPARAM; From 1bb6d2cbcaffc0bdfa79f3d362b63f415814763a Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Mon, 15 Aug 2016 09:55:01 -0600 Subject: [PATCH 123/216] Fix copy-and-paste error spotted by @FranticRain. --- 360 Driver.xcodeproj/project.pbxproj | 3 +-- Feedback360/Feedback360.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index e6dc51eb..f417cf40 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -1231,7 +1231,6 @@ buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_WARN_UNREACHABLE_CODE = YES; - CODE_SIGN_IDENTITY = "-"; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -1253,7 +1252,6 @@ buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_WARN_UNREACHABLE_CODE = YES; - CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -1602,6 +1600,7 @@ 55ACBFE61D5B9E2F00E4F677 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 55B636AF18C104DB00CE933D /* Build configuration list for PBXProject "360 Driver" */ = { isa = XCConfigurationList; diff --git a/Feedback360/Feedback360.cpp b/Feedback360/Feedback360.cpp index 7b0212cc..7ba0007b 100644 --- a/Feedback360/Feedback360.cpp +++ b/Feedback360/Feedback360.cpp @@ -163,7 +163,7 @@ IOReturn Feedback360::Probe(CFDictionaryRef propertyTable, io_service_t service, if ((service==0) || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) && (!IOObjectConformsTo(service,"Wireless360Controller")) - && (!IOObjectConformsTo(hidDevice, "IOBluetoothHIDDriver")))) return kIOReturnBadArgument; + && (!IOObjectConformsTo(service, "IOBluetoothHIDDriver")))) return kIOReturnBadArgument; return FF_OK; } From 6650353b7785be74eaa87325d31d2bc9766f0cc2 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 16 Aug 2016 16:21:09 -0500 Subject: [PATCH 124/216] Add XboxOneBluetooth.kext to uninstaller --- Pref360Control/Pref360ControlPref.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index acc6ef4a..22b15a57 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1122,6 +1122,7 @@ - (IBAction)willPerformUninstallation:(id)sender rm -rf /Library/Extensions/360Controller.kext\n\ rm -rf /Library/Extensions/Wireless360Controller.kext\n\ rm -rf /Library/Extensions/WirelessGamingReceiver.kext\n\ + rm -rf /Library/Extensions/XboxOneBluetooth.kext\n\ rm -rf /Library/PreferencePanes/Pref360Control.prefPane\n\ pkgutil --forget com.mice.pkg.Xbox360controller\ \" with administrator privileges"; From e4e4a57092e9a65eee96ac83f6418d261bcf08b5 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Tue, 27 Sep 2016 14:30:59 -0600 Subject: [PATCH 125/216] Add missing IOCFPlugInTypes. --- XboxOneBluetooth/Info.plist | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/XboxOneBluetooth/Info.plist b/XboxOneBluetooth/Info.plist index 88da1480..8788a1fb 100644 --- a/XboxOneBluetooth/Info.plist +++ b/XboxOneBluetooth/Info.plist @@ -28,6 +28,10 @@ F4545CE5-BF5B-11D6-A4BB-0003933E3E3E 360Controller.kext/Contents/PlugIns/Feedback360.plugin + FA12FA38-6F1A-11D4-BA0C-0005028F18D5 + IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin + 7DDEECA8-A7B4-11DA-8A0E-0014519758EF + IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin IOClass IOBluetoothHIDDriver From 114b0a324d0b6155a2845ce9491d00bfe84977c4 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Thu, 29 Sep 2016 14:45:05 -0600 Subject: [PATCH 126/216] Actually have the Bluetooth controller stay connected. Force feedback isn't working, though. --- XboxOneBluetooth/Info.plist | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/XboxOneBluetooth/Info.plist b/XboxOneBluetooth/Info.plist index 8788a1fb..b722b1a9 100644 --- a/XboxOneBluetooth/Info.plist +++ b/XboxOneBluetooth/Info.plist @@ -28,15 +28,15 @@ F4545CE5-BF5B-11D6-A4BB-0003933E3E3E 360Controller.kext/Contents/PlugIns/Feedback360.plugin - FA12FA38-6F1A-11D4-BA0C-0005028F18D5 - IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin - 7DDEECA8-A7B4-11DA-8A0E-0014519758EF - IOHIDFamily.kext/Contents/PlugIns/IOHIDLib.plugin IOClass IOBluetoothHIDDriver + IOProbeScore + 200 IOProviderClass IOBluetoothL2CAPChannel + PSM + 17 ProductID 736 VendorID From f59efa6a11b42a6b98cb674344cebc194a1730e6 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 20 Sep 2017 14:56:05 -0600 Subject: [PATCH 127/216] Initial work on the Xbox One BT Force Feedback driver. --- 360 Driver.xcodeproj/project.pbxproj | 169 ++++++ XBOBTFF/FFDriver.cpp | 771 +++++++++++++++++++++++++++ XBOBTFF/FFDriver.h | 131 +++++ XBOBTFF/FeedbackXBOEffect.cpp | 261 +++++++++ XBOBTFF/FeedbackXBOEffect.hpp | 69 +++ XBOBTFF/Info.plist | 38 ++ XBOBTFF/XBoxOneBTHID.h | 38 ++ XBOBTFF/main.c | 188 +++++++ XboxOneBluetooth/Info.plist | 2 +- 9 files changed, 1666 insertions(+), 1 deletion(-) create mode 100644 XBOBTFF/FFDriver.cpp create mode 100644 XBOBTFF/FFDriver.h create mode 100644 XBOBTFF/FeedbackXBOEffect.cpp create mode 100644 XBOBTFF/FeedbackXBOEffect.hpp create mode 100644 XBOBTFF/Info.plist create mode 100644 XBOBTFF/XBoxOneBTHID.h create mode 100644 XBOBTFF/main.c diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index f417cf40..ee670d77 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -44,6 +44,12 @@ 55699CD61971D96E00C40A31 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55699CD51971D96E00C40A31 /* Images.xcassets */; }; 55699CD71971DA8100C40A31 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 55699CD51971D96E00C40A31 /* Images.xcassets */; }; 55750C09190AFB5B0047FF41 /* DaemonLEDs.m in Sources */ = {isa = PBXBuildFile; fileRef = 55750C08190AFB5B0047FF41 /* DaemonLEDs.m */; }; + 5579514B1F7300EE001880D1 /* XBOBTFF.plugin in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5579513E1F73006F001880D1 /* XBOBTFF.plugin */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5579514C1F7301F9001880D1 /* FFDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 557951451F7300C9001880D1 /* FFDriver.cpp */; }; + 5579514D1F73021A001880D1 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B6375818C109E600CE933D /* ForceFeedback.framework */; }; + 557951501F73037B001880D1 /* FeedbackXBOEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5579514E1F73037B001880D1 /* FeedbackXBOEffect.cpp */; }; + 557951511F730CA3001880D1 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 553BDB43196DF3BA00D1F569 /* IOKit.framework */; }; + 557951521F730CAF001880D1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B6372018C108A500CE933D /* CoreFoundation.framework */; }; 55852E1F18D6B5580009BF55 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55852E2118D6B5580009BF55 /* Localizable.strings */; }; 55A2B8D518C116BD006829A2 /* 360Daemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B637C718C10CB400CE933D /* 360Daemon.m */; }; 55A2B8D818C116E0006829A2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55A2B8DA18C116E0006829A2 /* Localizable.strings */; }; @@ -111,6 +117,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 557951491F7300E4001880D1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 55B636AC18C104DB00CE933D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5579513D1F73006F001880D1; + remoteInfo = XBOBTFF; + }; 55ACBFE81D5BA33A00E4F677 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 55B636AC18C104DB00CE933D /* Project object */; @@ -177,6 +190,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 557951481F7300DC001880D1 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 5579514B1F7300EE001880D1 /* XBOBTFF.plugin in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55A2B8DC18C11A21006829A2 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 8; @@ -233,6 +256,14 @@ 55699CD51971D96E00C40A31 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 55750C07190AFB5B0047FF41 /* DaemonLEDs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DaemonLEDs.h; sourceTree = ""; usesTabs = 1; }; 55750C08190AFB5B0047FF41 /* DaemonLEDs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DaemonLEDs.m; sourceTree = ""; usesTabs = 1; }; + 5579513E1F73006F001880D1 /* XBOBTFF.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XBOBTFF.plugin; sourceTree = BUILT_PRODUCTS_DIR; }; + 557951401F73006F001880D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 557951441F7300C9001880D1 /* FFDriver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FFDriver.h; sourceTree = ""; }; + 557951451F7300C9001880D1 /* FFDriver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FFDriver.cpp; sourceTree = ""; }; + 557951461F7300CA001880D1 /* XBoxOneBTHID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XBoxOneBTHID.h; sourceTree = ""; }; + 557951471F7300CA001880D1 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; + 5579514E1F73037B001880D1 /* FeedbackXBOEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FeedbackXBOEffect.cpp; sourceTree = ""; }; + 5579514F1F73037B001880D1 /* FeedbackXBOEffect.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = FeedbackXBOEffect.hpp; sourceTree = ""; }; 55852E2018D6B5580009BF55 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 55A2B8DB18C116E2006829A2 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 55ACBFE01D5B9E2E00E4F677 /* XboxOneBluetooth.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XboxOneBluetooth.kext; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -324,6 +355,16 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 5579513B1F73006F001880D1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 557951521F730CAF001880D1 /* CoreFoundation.framework in Frameworks */, + 557951511F730CA3001880D1 /* IOKit.framework in Frameworks */, + 5579514D1F73021A001880D1 /* ForceFeedback.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55B636B118C104DB00CE933D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -428,6 +469,21 @@ path = Text; sourceTree = ""; }; + 5579513F1F73006F001880D1 /* XBOBTFF */ = { + isa = PBXGroup; + children = ( + 557951441F7300C9001880D1 /* FFDriver.h */, + 557951451F7300C9001880D1 /* FFDriver.cpp */, + 557951471F7300CA001880D1 /* main.c */, + 557951461F7300CA001880D1 /* XBoxOneBTHID.h */, + 5579514F1F73037B001880D1 /* FeedbackXBOEffect.hpp */, + 5579514E1F73037B001880D1 /* FeedbackXBOEffect.cpp */, + 557951401F73006F001880D1 /* Info.plist */, + ); + path = XBOBTFF; + sourceTree = ""; + usesTabs = 1; + }; 55A2B8E018C11C7E006829A2 /* Resources */ = { isa = PBXGroup; children = ( @@ -498,6 +554,7 @@ 55B6378118C10B0B00CE933D /* Pref360Control */, 551CDFFE196EFD0A000869B6 /* Distribution */, 55ACBFE11D5B9E2E00E4F677 /* XboxOneBluetooth */, + 5579513F1F73006F001880D1 /* XBOBTFF */, 55B636B618C104DB00CE933D /* Frameworks */, 55B636B518C104DB00CE933D /* Products */, ); @@ -516,6 +573,7 @@ 55B6380E18C10E8700CE933D /* WirelessGamingReceiver.kext */, 55FE3CA118D7B77800D69E84 /* testhaptic */, 55ACBFE01D5B9E2E00E4F677 /* XboxOneBluetooth.kext */, + 5579513E1F73006F001880D1 /* XBOBTFF.plugin */, ); name = Products; sourceTree = ""; @@ -747,16 +805,35 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 5579513D1F73006F001880D1 /* XBOBTFF */ = { + isa = PBXNativeTarget; + buildConfigurationList = 557951431F73006F001880D1 /* Build configuration list for PBXNativeTarget "XBOBTFF" */; + buildPhases = ( + 5579513A1F73006F001880D1 /* Sources */, + 5579513B1F73006F001880D1 /* Frameworks */, + 5579513C1F73006F001880D1 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = XBOBTFF; + productName = XBOBTFF; + productReference = 5579513E1F73006F001880D1 /* XBOBTFF.plugin */; + productType = "com.apple.product-type.bundle"; + }; 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */ = { isa = PBXNativeTarget; buildConfigurationList = 55ACBFE71D5B9E2F00E4F677 /* Build configuration list for PBXNativeTarget "XboxOneBluetooth" */; buildPhases = ( 55ACBFDD1D5B9E2E00E4F677 /* Headers */, 55ACBFDE1D5B9E2E00E4F677 /* Resources */, + 557951481F7300DC001880D1 /* CopyFiles */, ); buildRules = ( ); dependencies = ( + 5579514A1F7300E4001880D1 /* PBXTargetDependency */, ); name = XboxOneBluetooth; productName = XboxOneBluetooth; @@ -916,6 +993,9 @@ LastUpgradeCheck = 0610; ORGANIZATIONNAME = GitHub; TargetAttributes = { + 5579513D1F73006F001880D1 = { + CreatedOnToolsVersion = 9.0; + }; 55ACBFDF1D5B9E2E00E4F677 = { CreatedOnToolsVersion = 7.3.1; }; @@ -945,11 +1025,19 @@ 55B6380D18C10E8700CE933D /* WirelessGamingReceiver */, 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */, 55FE3CA018D7B77800D69E84 /* testhaptic */, + 5579513D1F73006F001880D1 /* XBOBTFF */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 5579513C1F73006F001880D1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55ACBFDE1D5B9E2E00E4F677 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1016,6 +1104,15 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 5579513A1F73006F001880D1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5579514C1F7301F9001880D1 /* FFDriver.cpp in Sources */, + 557951501F73037B001880D1 /* FeedbackXBOEffect.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 55B636B018C104DB00CE933D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1103,6 +1200,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 5579514A1F7300E4001880D1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5579513D1F73006F001880D1 /* XBOBTFF */; + targetProxy = 557951491F7300E4001880D1 /* PBXContainerItemProxy */; + }; 55ACBFE91D5BA33A00E4F677 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */; @@ -1226,6 +1328,63 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 557951411F73006F001880D1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + COMBINE_HIDPI_IMAGES = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = XBOBTFF/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XBOBTFF; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = plugin; + }; + name = Debug; + }; + 557951421F73006F001880D1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = XBOBTFF/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XBOBTFF; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = plugin; + }; + name = Release; + }; 55ACBFE51D5B9E2F00E4F677 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1288,6 +1447,7 @@ COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.0.0d15; DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -1593,6 +1753,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 557951431F73006F001880D1 /* Build configuration list for PBXNativeTarget "XBOBTFF" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 557951411F73006F001880D1 /* Debug */, + 557951421F73006F001880D1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 55ACBFE71D5B9E2F00E4F677 /* Build configuration list for PBXNativeTarget "XboxOneBluetooth" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp new file mode 100644 index 00000000..48908421 --- /dev/null +++ b/XBOBTFF/FFDriver.cpp @@ -0,0 +1,771 @@ +// +// FFDriver.c +// XBoxBTFFPlug +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 C.W. Betts. All rights reserved. +// + +#include +#include +#include "FFDriver.h" +#include "XBoxOneBTHID.h" +#include +#include +using std::max; +using std::min; + +static bool goodProbe(io_service_t theService) +{ + return false; +} + +#define LoopGranularity 10000 // Microseconds + +double CurrentTimeUsingMach() +{ + static mach_timebase_info_data_t info = {0}; + if (!info.denom) + { + if (mach_timebase_info(&info) != KERN_SUCCESS) + { + //Generally it can't fail here. Look at XNU sources //FIXME + info.denom = 0; + return -1.0; + } + } + + uint64_t start = mach_absolute_time(); + + uint64_t nanos = start * info.numer / info.denom; + return (double)nanos / NSEC_PER_SEC; +} + +static IOCFPlugInInterface functionMap360_IOCFPlugInInterface = { + // Padding required for COM + NULL, + // IUnknown + &FeedbackXBOBT::sQueryInterface, + &FeedbackXBOBT::sAddRef, + &FeedbackXBOBT::sRelease, + // IOCFPlugInInterface + 1,0, // Version + &FeedbackXBOBT::sProbe, + &FeedbackXBOBT::sStart, + &FeedbackXBOBT::sStop +}; + + +static IOForceFeedbackDeviceInterface functionMap360_IOForceFeedbackDeviceInterface = { + // Padding required for COM + NULL, + // IUnknown + &FeedbackXBOBT::sQueryInterface, + &FeedbackXBOBT::sAddRef, + &FeedbackXBOBT::sRelease, + // IOForceFeedbackDevice + &FeedbackXBOBT::sGetVersion, + &FeedbackXBOBT::sInitializeTerminate, + &FeedbackXBOBT::sDestroyEffect, + &FeedbackXBOBT::sDownloadEffect, + &FeedbackXBOBT::sEscape, + &FeedbackXBOBT::sGetEffectStatus, + &FeedbackXBOBT::sGetForceFeedbackCapabilities, + &FeedbackXBOBT::sGetForceFeedbackState, + &FeedbackXBOBT::sSendForceFeedbackCommand, + &FeedbackXBOBT::sSetProperty, + &FeedbackXBOBT::sStartEffect, + &FeedbackXBOBT::sStopEffect +}; + +FeedbackXBOBT::FeedbackXBOBT() : fRefCount(1), EffectIndex(1), Stopped(true), +Paused(false), PausedTime(0), LastTime(0), Gain(10000), PrvLeftLevel(0), +PrvRightLevel(0), Actuator(true), Manual(false) +{ + EffectList = FeedbackXBOEffectVector(); + + iIOCFPlugInInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOCFPlugInInterface; + iIOCFPlugInInterface.obj = this; + + iIOForceFeedbackDeviceInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOForceFeedbackDeviceInterface; + iIOForceFeedbackDeviceInterface.obj = this; + + FactoryID = BTFFPLUGINTERFACE; + CFRetain(FactoryID); + CFPlugInAddInstanceForFactory(FactoryID); +} + +FeedbackXBOBT::~FeedbackXBOBT() +{ + CFPlugInRemoveInstanceForFactory(FactoryID); + CFRelease(FactoryID); +} + +HRESULT FeedbackXBOBT::QueryInterface(REFIID iid, LPVOID *ppv) +{ + CFUUIDRef interface = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); + + if(CFEqual(interface, kIOForceFeedbackDeviceInterfaceID)) + *ppv = &this->iIOForceFeedbackDeviceInterface; + // IUnknown || IOCFPlugInInterface + else if(CFEqual(interface, IUnknownUUID) || CFEqual(interface, kIOCFPlugInInterfaceID)) + *ppv = &this->iIOCFPlugInInterface; + else + *ppv = NULL; + + // Done + CFRelease(interface); + if ((*ppv) == NULL) return E_NOINTERFACE; + else { + this->iIOCFPlugInInterface.pseudoVTable->AddRef(*ppv); + } + return FF_OK; +} + +ULONG FeedbackXBOBT::AddRef() +{ + return ++fRefCount; +} + +ULONG FeedbackXBOBT::Release() +{ + ULONG returnValue = fRefCount - 1; + if(returnValue > 0) { + fRefCount = returnValue; + } else if(returnValue == 0) { + fRefCount = returnValue; + delete this; + } else { + returnValue = 0; + } + return returnValue; +} + +void** FeedbackXBOBT::Alloc(void) +{ + FeedbackXBOBT *me = new FeedbackXBOBT(); + if (!me) { + return NULL; + } + return (void **)(&me->iIOCFPlugInInterface.pseudoVTable); +} + +IOReturn FeedbackXBOBT::Probe(CFDictionaryRef propertyTable, io_service_t service, SInt32 *order) +{ + if (service == 0) { + return kIOReturnBadArgument; + } + if (goodProbe(service)) { + return 0; + } else { + return kIOReturnBadArgument; + } +} + +IOReturn FeedbackXBOBT::Start(CFDictionaryRef propertyTable,io_service_t service) +{ + return FF_OK; +} + +IOReturn FeedbackXBOBT::Stop(void) +{ + return FF_OK; +} + +HRESULT FeedbackXBOBT::SetProperty(FFProperty property, void *value) +{ + if(property != FFPROP_FFGAIN) { + return FFERR_UNSUPPORTED; + } + + UInt32 NewGain = *((UInt32*)value); + __block HRESULT Result = FF_OK; + + dispatch_sync(Queue, ^{ + if (1 <= NewGain && NewGain <= 10000) + { + Gain = NewGain; + } else { + Gain = max((UInt32)1, min(NewGain, (UInt32)10000)); + Result = FF_TRUNCATED; + } + }); + + return Result; +} + +HRESULT FeedbackXBOBT::StartEffect(FFEffectDownloadID EffectHandle, FFEffectStartFlag Mode, UInt32 Count) +{ + dispatch_sync(Queue, ^{ + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + if (effectIterator->Handle == EffectHandle) + { + effectIterator->Status = FFEGES_PLAYING; + effectIterator->PlayCount = Count; + effectIterator->StartTime = CurrentTimeUsingMach(); + Stopped = false; + } else { + if (Mode & FFES_SOLO) { + effectIterator->Status = NULL; + } + } + } + }); + return FF_OK; +} + +HRESULT FeedbackXBOBT::StopEffect(UInt32 EffectHandle) +{ + dispatch_sync(Queue, ^{ + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + if (effectIterator->Handle == EffectHandle) + { + effectIterator->Status = NULL; + break; + } + } + }); + return FF_OK; +} + +HRESULT FeedbackXBOBT::DownloadEffect(CFUUIDRef EffectType, FFEffectDownloadID *EffectHandle, FFEFFECT *DiEffect, FFEffectParameterFlag Flags) +{ + __block HRESULT Result = FF_OK; + + if (Flags & FFEP_NODOWNLOAD) + { + return FF_OK; + } + + dispatch_sync(Queue, ^{ + FeedbackXBOEffect *Effect = NULL; + if (*EffectHandle == 0) { + EffectList.push_back(FeedbackXBOEffect(EffectIndex++)); + Effect = &(EffectList.back()); + *EffectHandle = Effect->Handle; + } else { + for (LONG Index = 0; Index < EffectList.size(); Index++) { + if (EffectList[Index].Handle == *EffectHandle) { + Effect = &(EffectList[Index]); + break; + } + } + } + + if (Effect == NULL || Result == -1) { + Result = FFERR_INTERNAL; + } + else { + Effect->Type = EffectType; + Effect->DiEffect.dwFlags = DiEffect->dwFlags; + + if( Flags & FFEP_DURATION ) + { + Effect->DiEffect.dwDuration = DiEffect->dwDuration; + } + + if( Flags & FFEP_SAMPLEPERIOD ) + { + Effect->DiEffect.dwSamplePeriod = DiEffect->dwSamplePeriod; + } + + if( Flags & FFEP_GAIN ) + { + Effect->DiEffect.dwGain = DiEffect->dwGain; + } + + if( Flags & FFEP_TRIGGERBUTTON ) + { + Effect->DiEffect.dwTriggerButton = DiEffect->dwTriggerButton; + } + + if( Flags & FFEP_TRIGGERREPEATINTERVAL ) + { + Effect->DiEffect.dwTriggerRepeatInterval = DiEffect->dwTriggerRepeatInterval; + } + + if( Flags & FFEP_AXES ) + { + Effect->DiEffect.cAxes = DiEffect->cAxes; + Effect->DiEffect.rgdwAxes = NULL; + } + + if( Flags & FFEP_DIRECTION ) + { + Effect->DiEffect.cAxes = DiEffect->cAxes; + Effect->DiEffect.rglDirection = NULL; + } + + if( ( Flags & FFEP_ENVELOPE ) && DiEffect->lpEnvelope != NULL ) + { + memcpy( &Effect->DiEnvelope, DiEffect->lpEnvelope, sizeof( FFENVELOPE ) ); + if( Effect->DiEffect.dwDuration - Effect->DiEnvelope.dwFadeTime + < Effect->DiEnvelope.dwAttackTime ) + { + Effect->DiEnvelope.dwFadeTime = Effect->DiEnvelope.dwAttackTime; + } + Effect->DiEffect.lpEnvelope = &Effect->DiEnvelope; + } + + Effect->DiEffect.cbTypeSpecificParams = DiEffect->cbTypeSpecificParams; + + if( Flags & FFEP_TYPESPECIFICPARAMS ) + { + if(CFEqual(EffectType, kFFEffectType_CustomForce_ID)) { + memcpy( + &Effect->DiCustomForce + ,DiEffect->lpvTypeSpecificParams + ,DiEffect->cbTypeSpecificParams ); + Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiCustomForce; + } + + else if(CFEqual(EffectType, kFFEffectType_ConstantForce_ID)) { + memcpy( + &Effect->DiConstantForce + ,DiEffect->lpvTypeSpecificParams + ,DiEffect->cbTypeSpecificParams ); + Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiConstantForce; + } + else if(CFEqual(EffectType, kFFEffectType_Square_ID) || CFEqual(EffectType, kFFEffectType_Sine_ID) || CFEqual(EffectType, kFFEffectType_Triangle_ID) || CFEqual(EffectType, kFFEffectType_SawtoothUp_ID) || CFEqual(EffectType, kFFEffectType_SawtoothDown_ID) ) { + memcpy( + &Effect->DiPeriodic + ,DiEffect->lpvTypeSpecificParams + ,DiEffect->cbTypeSpecificParams ); + Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiPeriodic; + } + else if(CFEqual(EffectType, kFFEffectType_RampForce_ID)) { + memcpy( + &Effect->DiRampforce + ,DiEffect->lpvTypeSpecificParams + ,DiEffect->cbTypeSpecificParams ); + Effect->DiEffect.lpvTypeSpecificParams = &Effect->DiRampforce; + } + } + + if( Flags & FFEP_STARTDELAY ) + { + Effect->DiEffect.dwStartDelay = DiEffect->dwStartDelay; + } + + if( Flags & FFEP_START ) + { + Effect->Status = FFEGES_PLAYING; + Effect->PlayCount = 1; + Effect->StartTime = CurrentTimeUsingMach(); + } + + if( Flags & FFEP_NORESTART ) + { + ; + } + Result = FF_OK; + } + }); + return Result; +} + +HRESULT FeedbackXBOBT::GetForceFeedbackState(ForceFeedbackDeviceState *DeviceState) +{ + if (DeviceState->dwSize != sizeof(FFDEVICESTATE)) + { + return FFERR_INVALIDPARAM; + } + + dispatch_sync(Queue, ^{ + DeviceState->dwState = NULL; + if( EffectList.size() == 0 ) + { + DeviceState->dwState |= FFGFFS_EMPTY; + } + if( Stopped == true ) + { + DeviceState->dwState |= FFGFFS_STOPPED; + } + if( Paused == true ) + { + DeviceState->dwState |= FFGFFS_PAUSED; + } + if (Actuator == true) + { + DeviceState->dwState |= FFGFFS_ACTUATORSON; + } else { + DeviceState->dwState |= FFGFFS_ACTUATORSOFF; + } + DeviceState->dwState |= FFGFFS_POWERON; + DeviceState->dwState |= FFGFFS_SAFETYSWITCHOFF; + DeviceState->dwState |= FFGFFS_USERFFSWITCHON; + + DeviceState->dwLoad = 0; + }); + + return FF_OK; +} + +HRESULT FeedbackXBOBT::GetForceFeedbackCapabilities(FFCAPABILITIES *capabilities) +{ + capabilities->ffSpecVer.majorRev=kFFPlugInAPIMajorRev; + capabilities->ffSpecVer.minorAndBugRev=kFFPlugInAPIMinorAndBugRev; + capabilities->ffSpecVer.stage=kFFPlugInAPIStage; + capabilities->ffSpecVer.nonRelRev=kFFPlugInAPINonRelRev; + capabilities->supportedEffects=FFCAP_ET_CUSTOMFORCE|FFCAP_ET_CONSTANTFORCE|FFCAP_ET_RAMPFORCE|FFCAP_ET_SQUARE|FFCAP_ET_SINE|FFCAP_ET_TRIANGLE|FFCAP_ET_SAWTOOTHUP|FFCAP_ET_SAWTOOTHDOWN; + capabilities->emulatedEffects=0; + capabilities->subType=FFCAP_ST_VIBRATION; + capabilities->numFfAxes=4; + capabilities->ffAxes[0]=FFJOFS_X; + capabilities->ffAxes[1]=FFJOFS_Y; + capabilities->ffAxes[2]=FFJOFS_Z; + capabilities->ffAxes[3]=FFJOFS_RZ; + capabilities->storageCapacity=256; + capabilities->playbackCapacity=1; + capabilities->driverVer.majorRev=FeedbackDriverVersionMajor; + capabilities->driverVer.minorAndBugRev=FeedbackDriverVersionMinor; + capabilities->driverVer.stage=FeedbackDriverVersionStage; + capabilities->driverVer.nonRelRev=FeedbackDriverVersionNonRelRev; + capabilities->firmwareVer.majorRev=1; + capabilities->firmwareVer.minorAndBugRev=0; + capabilities->firmwareVer.stage=developStage; + capabilities->firmwareVer.nonRelRev=0; + capabilities->hardwareVer.majorRev=1; + capabilities->hardwareVer.minorAndBugRev=0; + capabilities->hardwareVer.stage=developStage; + capabilities->hardwareVer.nonRelRev=0; + return FF_OK; +} + +HRESULT FeedbackXBOBT::SendForceFeedbackCommand(FFCommandFlag state) +{ + __block HRESULT Result = FF_OK; + + dispatch_sync(Queue, ^{ + switch (state) { + case FFSFFC_RESET: + EffectList.clear(); + Stopped = true; + Paused = false; + break; + + case FFSFFC_STOPALL: + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + effectIterator->Status = NULL; + } + Stopped = true; + Paused = false; + break; + + case FFSFFC_PAUSE: + Paused = true; + PausedTime = CurrentTimeUsingMach(); + break; + + case FFSFFC_CONTINUE: + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + effectIterator->StartTime += ( CurrentTimeUsingMach() - PausedTime ); + } + Paused = false; + break; + + case FFSFFC_SETACTUATORSON: + Actuator = true; + break; + + case FFSFFC_SETACTUATORSOFF: + Actuator = false; + break; + + default: + Result = FFERR_INVALIDPARAM; + break; + } + }); + //return Result; + return FF_OK; +} + +HRESULT FeedbackXBOBT::InitializeTerminate(NumVersion APIversion, io_object_t hidDevice, boolean_t begin) +{ + if(begin) { + if (APIversion.majorRev != kFFPlugInAPIMajorRev) + { + // fprintf(stderr,"Feedback: Invalid version\n"); + return FFERR_INVALIDPARAM; + } + // From probe + if( (hidDevice==0) + || !goodProbe(hidDevice) ) + { + // fprintf(stderr,"Feedback: Invalid device\n"); + return FFERR_INVALIDPARAM; + } + this->device = IOHIDDeviceCreate(kCFAllocatorDefault, hidDevice); + if(!this->device) { + // fprintf(stderr,"Feedback: Failed to initialise\n"); + return FFERR_NOINTERFACE; + } + Queue = dispatch_queue_create("com.mice.driver.FeedbackXBOBT", NULL); + Timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, Queue); + dispatch_source_set_timer(Timer, dispatch_walltime(NULL, 0), LoopGranularity*1000, 10); + dispatch_set_context(Timer, this); + dispatch_source_set_event_handler_f(Timer, EffectProc); + dispatch_resume(Timer); + } + else { + dispatch_sync(Queue, ^{ + dispatch_source_cancel(Timer); + SetForce(0, 0, 0, 0); + IOHIDDeviceClose(this->device, 0); + CFRelease(this->device); + }); + + } + return FF_OK; +} + +HRESULT FeedbackXBOBT::DestroyEffect(FFEffectDownloadID EffectHandle) +{ + __block HRESULT Result = FF_OK; + dispatch_sync(Queue, ^{ + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + if (effectIterator->Handle == EffectHandle) + { + EffectList.erase(effectIterator); + break; + } + } + }); + return Result; +} + +HRESULT FeedbackXBOBT::Escape(FFEffectDownloadID downloadID, FFEFFESCAPE *escape) +{ + if (downloadID!=0) return FFERR_UNSUPPORTED; + if (escape->dwSize < sizeof(FFEFFESCAPE)) return FFERR_INVALIDPARAM; + escape->cbOutBuffer=0; + switch (escape->dwCommand) { +#if 0 + case 0x00: // Control motors + if(escape->cbInBuffer!=1) return FFERR_INVALIDPARAM; + dispatch_sync(Queue, ^{ + Manual=((unsigned char*)escape->lpvInBuffer)[0]!=0x00; + }); + break; + + case 0x01: // Set motors + if (escape->cbInBuffer!=2) return FFERR_INVALIDPARAM; + dispatch_sync(Queue, ^{ + if(Manual) { + unsigned char *data=(unsigned char *)escape->lpvInBuffer; + unsigned char buf[]={0x00,0x04,data[0],data[1]}; + Device_Send(&this->device,buf,sizeof(buf)); + } + }); + break; + + case 0x02: // Set LED + if (escape->cbInBuffer!=1) return FFERR_INVALIDPARAM; + { + dispatch_sync(Queue, ^{ + unsigned char *data=(unsigned char *)escape->lpvInBuffer; + unsigned char buf[]={0x01,0x03,data[0]}; + Device_Send(&this->device,buf,sizeof(buf)); + }); + } + break; + + case 0x03: // Power off + { + dispatch_sync(Queue, ^{ + unsigned char buf[] = {0x02, 0x02}; + Device_Send(&this->device, buf, sizeof(buf)); + }); + } + break; +#endif + default: + fprintf(stderr, "XboxOneBTController FF plugin: Unknown escape (%i)\n", (int)escape->dwCommand); + return FFERR_UNSUPPORTED; + } + return FF_OK; +} + +void FeedbackXBOBT::SetForce(LONG LeftLevel, LONG RightLevel, LONG ltLevel, LONG rtLevel) +{ + //fprintf(stderr, "LS: %d; RS: %d\n", (unsigned char)MIN( 255, LeftLevel * Gain / 10000 ), (unsigned char)MIN( 255, RightLevel * Gain / 10000 )); + XboxOneBluetoothReport_t report = {0}; + report.reportID = 0x03; + report.activationMask = 0x0f; + report.ltMagnitude = (unsigned char)min(SCALE_MAX, ltLevel * (LONG)Gain / 10000 ); + report.rtMagnitude = (unsigned char)min(SCALE_MAX, rtLevel * (LONG)Gain / 10000 ); + report.leftMagnitude = (unsigned char)min(SCALE_MAX, LeftLevel * (LONG)Gain / 10000 ); + report.rightMagnitude = (unsigned char)min(SCALE_MAX, RightLevel * (LONG)Gain / 10000 ); + report.duration = 0x7f; + + if (!Manual) { + IOHIDDeviceSetReport(device, kIOHIDReportTypeOutput, report.reportID, (const uint8_t*)&report, sizeof(XboxOneBluetoothReport_t)); + } +} + +void FeedbackXBOBT::EffectProc( void *params ) +{ + FeedbackXBOBT *cThis = (FeedbackXBOBT *)params; + + LONG LeftLevel = 0; + LONG RightLevel = 0; + LONG Gain = cThis->Gain; + LONG CalcResult = 0; + + if (cThis->Actuator == true) + { + for (FeedbackXBOEffectIterator effectIterator = cThis->EffectList.begin(); effectIterator != cThis->EffectList.end(); ++effectIterator) + { + if(((CurrentTimeUsingMach() - cThis->LastTime)*1000*1000) >= effectIterator->DiEffect.dwSamplePeriod) { + CalcResult = effectIterator->Calc(&LeftLevel, &RightLevel); + } + } + } + + if ((cThis->PrvLeftLevel != LeftLevel || cThis->PrvRightLevel != RightLevel) && (CalcResult != -1)) + { + //fprintf(stderr, "PL: %d, PR: %d; L: %d, R: %d; \n", cThis->PrvLeftLevel, cThis->PrvRightLevel, LeftLevel, RightLevel); + cThis->SetForce((unsigned char)min(SCALE_MAX, LeftLevel * Gain / 10000),(unsigned char)min(SCALE_MAX, RightLevel * Gain / 10000 ), 0, 0); + + cThis->PrvLeftLevel = LeftLevel; + cThis->PrvRightLevel = RightLevel; + } +} + +HRESULT FeedbackXBOBT::GetEffectStatus(FFEffectDownloadID EffectHandle, FFEffectStatusFlag *Status) +{ + dispatch_sync(Queue, ^{ + for (FeedbackXBOEffectIterator effectIterator = EffectList.begin() ; effectIterator != EffectList.end(); ++effectIterator) + { + if (effectIterator->Handle == EffectHandle) + { + *Status = effectIterator->Status; + break; + } + } + }); + return FF_OK; +} + +HRESULT FeedbackXBOBT::GetVersion(ForceFeedbackVersion *version) +{ + version->apiVersion.majorRev = kFFPlugInAPIMajorRev; + version->apiVersion.minorAndBugRev = kFFPlugInAPIMinorAndBugRev; + version->apiVersion.stage = kFFPlugInAPIStage; + version->apiVersion.nonRelRev = kFFPlugInAPINonRelRev; + version->plugInVersion.majorRev = FeedbackDriverVersionMajor; + version->plugInVersion.minorAndBugRev = FeedbackDriverVersionMinor; + version->plugInVersion.stage = FeedbackDriverVersionStage; + version->plugInVersion.nonRelRev = FeedbackDriverVersionNonRelRev; + return FF_OK; +} + +// static c->c++ glue functions +HRESULT FeedbackXBOBT::sQueryInterface(void *self, REFIID iid, LPVOID *ppv) +{ + FeedbackXBOBT *obj = ((Xbox360InterfaceMap *)self)->obj; + return obj->QueryInterface(iid, ppv); +} + +ULONG FeedbackXBOBT::sAddRef(void *self) +{ + FeedbackXBOBT *obj = ( (Xbox360InterfaceMap *) self)->obj; + return obj->AddRef(); +} + +ULONG FeedbackXBOBT::sRelease(void *self) +{ + FeedbackXBOBT *obj = ( (Xbox360InterfaceMap *) self)->obj; + return obj->Release(); +} + +IOReturn FeedbackXBOBT::sProbe(void *self, CFDictionaryRef propertyTable, io_service_t service, SInt32 *order) +{ + return getThis(self)->Probe(propertyTable, service, order); +} + +IOReturn FeedbackXBOBT::sStart(void *self, CFDictionaryRef propertyTable, io_service_t service) +{ + return getThis(self)->Start(propertyTable, service); +} + +IOReturn FeedbackXBOBT::sStop(void *self) +{ + return getThis(self)->Stop(); +} + +HRESULT FeedbackXBOBT::sGetVersion(void * self, ForceFeedbackVersion * version) +{ + return FeedbackXBOBT::getThis(self)->GetVersion(version); +} + +HRESULT FeedbackXBOBT::sInitializeTerminate(void * self, NumVersion forceFeedbackAPIVersion, io_object_t hidDevice, boolean_t begin) +{ + return FeedbackXBOBT::getThis(self)->InitializeTerminate(forceFeedbackAPIVersion, hidDevice, begin); +} + +HRESULT FeedbackXBOBT::sDestroyEffect(void * self, FFEffectDownloadID downloadID) +{ + return FeedbackXBOBT::getThis(self)->DestroyEffect(downloadID); +} + +HRESULT FeedbackXBOBT::sDownloadEffect(void * self, CFUUIDRef effectType, FFEffectDownloadID *pDownloadID, FFEFFECT * pEffect, FFEffectParameterFlag flags) +{ + return FeedbackXBOBT::getThis(self)->DownloadEffect(effectType, pDownloadID, pEffect, flags); +} + +HRESULT FeedbackXBOBT::sEscape(void * self, FFEffectDownloadID downloadID, FFEFFESCAPE * pEscape) +{ + return FeedbackXBOBT::getThis(self)->Escape(downloadID, pEscape); +} + +HRESULT FeedbackXBOBT::sGetEffectStatus(void * self, FFEffectDownloadID downloadID, FFEffectStatusFlag * pStatusCode) +{ + return FeedbackXBOBT::getThis(self)->GetEffectStatus(downloadID, pStatusCode); +} + +HRESULT FeedbackXBOBT::sGetForceFeedbackState(void * self, ForceFeedbackDeviceState * pDeviceState) +{ + return FeedbackXBOBT::getThis(self)->GetForceFeedbackState(pDeviceState); +} + +HRESULT FeedbackXBOBT::sGetForceFeedbackCapabilities(void * self, FFCAPABILITIES * capabilities) +{ + return FeedbackXBOBT::getThis(self)->GetForceFeedbackCapabilities(capabilities); +} + +HRESULT FeedbackXBOBT::sSendForceFeedbackCommand(void * self, FFCommandFlag state) +{ + return FeedbackXBOBT::getThis(self)->SendForceFeedbackCommand(state); +} + +HRESULT FeedbackXBOBT::sSetProperty(void * self, FFProperty property, void * pValue) +{ + return FeedbackXBOBT::getThis(self)->SetProperty(property, pValue); +} + +HRESULT FeedbackXBOBT::sStartEffect(void * self, FFEffectDownloadID downloadID, FFEffectStartFlag mode, UInt32 iterations) +{ + return FeedbackXBOBT::getThis(self)->StartEffect(downloadID, mode, iterations); +} + +HRESULT FeedbackXBOBT::sStopEffect(void * self, UInt32 downloadID) +{ + return FeedbackXBOBT::getThis(self)->StopEffect(downloadID); +} + +// External factory function +void* FeedbackXBOBTFactory(CFAllocatorRef allocator, CFUUIDRef typeID) +{ + void* result = NULL; + if (CFEqual(typeID, kIOForceFeedbackLibTypeID)) + result = (void*)FeedbackXBOBT::Alloc(); + return result; +} + diff --git a/XBOBTFF/FFDriver.h b/XBOBTFF/FFDriver.h new file mode 100644 index 00000000..22e90b1d --- /dev/null +++ b/XBOBTFF/FFDriver.h @@ -0,0 +1,131 @@ +// +// FFDriver.h +// XBoxBTFFPlug +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 C.W. Betts. All rights reserved. +// + +#ifndef FFDriver_h +#define FFDriver_h + +#include +#include +#include +#include +#include +#include "FeedbackXBOEffect.hpp" + +// 0F793F56-8C17-4BA0-9201-D52FEC6C2702 +#define BTFFPLUGINTERFACE CFUUIDGetConstantUUIDWithBytes(kCFAllocatorSystemDefault, 0x0F, 0x79, 0x3F, 0x56, 0x8C, 0x17, 0x4B, 0xA0, 0x92, 0x01, 0xD5, 0x2F, 0xEC, 0x6C, 0x27, 0x02) + +#define FeedbackDriverVersionMajor 1 +#define FeedbackDriverVersionMinor 0 +#define FeedbackDriverVersionStage developStage +#define FeedbackDriverVersionNonRelRev 0 + +class FeedbackXBOBT : IUnknown +{ +public: + // constructor/destructor + FeedbackXBOBT(void); + virtual ~FeedbackXBOBT(void); + +private: + //disable copy constructor + FeedbackXBOBT(FeedbackXBOBT &src); + void operator = (FeedbackXBOBT &src); + + UInt32 fRefCount; + + typedef struct _Xbox360InterfaceMap + { + IUnknownVTbl *pseudoVTable; + FeedbackXBOBT *obj; + } Xbox360InterfaceMap; + + // IOCFPlugin interfacing variables and functions +public: + static void** Alloc(void); + + // static functions called by the ForceFeedback API + static HRESULT sQueryInterface(void *self, REFIID iid, LPVOID *ppv); + static ULONG sAddRef(void *self); + static ULONG sRelease(void *self); + + static IOReturn sProbe ( void * self, CFDictionaryRef propertyTable, io_service_t service, SInt32 * order ); + static IOReturn sStart ( void * self, CFDictionaryRef propertyTable, io_service_t service ); + static IOReturn sStop ( void * self ); + + static HRESULT sGetVersion(void * interface, ForceFeedbackVersion * version); + static HRESULT sInitializeTerminate(void * interface, NumVersion forceFeedbackAPIVersion, io_object_t hidDevice, boolean_t begin ); + static HRESULT sDestroyEffect(void * interface, FFEffectDownloadID downloadID ); + static HRESULT sDownloadEffect( void * interface, CFUUIDRef effectType, FFEffectDownloadID *pDownloadID, FFEFFECT * pEffect, FFEffectParameterFlag flags ); + static HRESULT sEscape( void * interface, FFEffectDownloadID downloadID, FFEFFESCAPE * pEscape ); + static HRESULT sGetEffectStatus( void * interface, FFEffectDownloadID downloadID, FFEffectStatusFlag * pStatusCode ); + static HRESULT sGetForceFeedbackState( void * interface, ForceFeedbackDeviceState * pDeviceState ); + static HRESULT sGetForceFeedbackCapabilities( void * interface, FFCAPABILITIES *capabilities ); + static HRESULT sSendForceFeedbackCommand( void * interface, FFCommandFlag state ); + static HRESULT sSetProperty( void * interface, FFProperty property, void * pValue ); + static HRESULT sStartEffect( void * interface, FFEffectDownloadID downloadID, FFEffectStartFlag mode, UInt32 iterations ); + static HRESULT sStopEffect( void * interface, UInt32 downloadID ); + + virtual HRESULT QueryInterface(REFIID iid, LPVOID* ppv); + virtual ULONG AddRef(void); + virtual ULONG Release(void); + +private: + typedef std::vector FeedbackXBOEffectVector; + typedef FeedbackXBOEffectVector::iterator FeedbackXBOEffectIterator; + // helper function + static inline FeedbackXBOBT *getThis (void *self) { return (FeedbackXBOBT *) ((Xbox360InterfaceMap *) self)->obj; } + + // interfacing + Xbox360InterfaceMap iIOCFPlugInInterface; + Xbox360InterfaceMap iIOForceFeedbackDeviceInterface; + IOHIDDeviceRef device; + + // GCD queue and timer + dispatch_queue_t Queue; + dispatch_source_t Timer; + + // effects handling + FeedbackXBOEffectVector EffectList; + UInt32 EffectIndex; + + DWORD Gain; + bool Actuator; + + LONG PrvLeftLevel, PrvRightLevel; + bool Stopped; + bool Paused; + bool Manual; + double LastTime; + double PausedTime; + CFUUIDRef FactoryID; + + void SetForce(LONG LeftLevel, LONG RightLevel, LONG ltLevel, LONG rtLevel); + + // event loop func + static void EffectProc( void *params ); + + // actual member functions ultimately called by the FF API (through the static functions) + virtual IOReturn Probe ( CFDictionaryRef propertyTable, io_service_t service, SInt32 * order ); + virtual IOReturn Start ( CFDictionaryRef propertyTable, io_service_t service ); + virtual IOReturn Stop ( void ); + + virtual HRESULT GetVersion(ForceFeedbackVersion * version); + virtual HRESULT InitializeTerminate(NumVersion forceFeedbackAPIVersion, io_object_t hidDevice, boolean_t begin); + virtual HRESULT DestroyEffect(FFEffectDownloadID downloadID); + virtual HRESULT DownloadEffect(CFUUIDRef effectType, FFEffectDownloadID *pDownloadID, FFEFFECT * pEffect, FFEffectParameterFlag flags); + virtual HRESULT Escape(FFEffectDownloadID downloadID, FFEFFESCAPE * pEscape); + virtual HRESULT GetEffectStatus(FFEffectDownloadID downloadID, FFEffectStatusFlag * pStatusCode); + virtual HRESULT GetForceFeedbackState(ForceFeedbackDeviceState * pDeviceState); + virtual HRESULT GetForceFeedbackCapabilities(FFCAPABILITIES *capabilities); + virtual HRESULT SendForceFeedbackCommand(FFCommandFlag state); + virtual HRESULT SetProperty(FFProperty property, void * pValue); + virtual HRESULT StartEffect(FFEffectDownloadID downloadID, FFEffectStartFlag mode, UInt32 iterations); + virtual HRESULT StopEffect(UInt32 downloadID); +}; + +#endif /* FFDriver_h */ diff --git a/XBOBTFF/FeedbackXBOEffect.cpp b/XBOBTFF/FeedbackXBOEffect.cpp new file mode 100644 index 00000000..0a388692 --- /dev/null +++ b/XBOBTFF/FeedbackXBOEffect.cpp @@ -0,0 +1,261 @@ +// +// FeedbackXBOEffect.cpp +// XBOBTFF +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 GitHub. All rights reserved. +// + +#include "FeedbackXBOEffect.hpp" + +using std::max; +using std::min; + +//---------------------------------------------------------------------------------------------- +// CEffect +//---------------------------------------------------------------------------------------------- +FeedbackXBOEffect::FeedbackXBOEffect() : Type(NULL), Status(0), PlayCount(0), +StartTime(0), Index(0), LastTime(0), Handle(0), DiEffect({0}), DiEnvelope({0}), +DiCustomForce({0}), DiConstantForce({0}), DiPeriodic({0}), DiRampforce({0}) +{ + +} + +FeedbackXBOEffect::FeedbackXBOEffect(FFEffectDownloadID theHand) : FeedbackXBOEffect() +{ + Handle = theHand; +} + +FeedbackXBOEffect::FeedbackXBOEffect(const FeedbackXBOEffect &src) : Type(src.Type), +Handle(src.Handle), Status(src.Status), PlayCount(src.PlayCount), +StartTime(src.StartTime), Index(src.Index), LastTime(src.LastTime) +{ + memcpy(&DiEffect, &src.DiEffect, sizeof(FFEFFECT)); + memcpy(&DiEnvelope, &src.DiEnvelope, sizeof(FFENVELOPE)); + memcpy(&DiCustomForce, &src.DiCustomForce, sizeof(FFCUSTOMFORCE)); + memcpy(&DiConstantForce, &src.DiConstantForce, sizeof(FFCONSTANTFORCE)); + memcpy(&DiPeriodic, &src.DiPeriodic, sizeof(FFPERIODIC)); + memcpy(&DiRampforce, &src.DiRampforce, sizeof(FFRAMPFORCE)); +} + +//---------------------------------------------------------------------------------------------- +// Calc +//---------------------------------------------------------------------------------------------- +LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel) +{ + CFTimeInterval Duration = 0; + if(DiEffect.dwDuration != FF_INFINITE) { + Duration = max(1., DiEffect.dwDuration / 1000.) / 1000.; + } else { + Duration = DBL_MAX; + } + double BeginTime = StartTime + ( DiEffect.dwStartDelay / 1000. / 1000.); + double EndTime = DBL_MAX; + if (PlayCount != -1) + { + EndTime = BeginTime + Duration * PlayCount; + } + double CurrentTime = CurrentTimeUsingMach(); + + if (Status == FFEGES_PLAYING && BeginTime <= CurrentTime && CurrentTime <= EndTime) + { + // Used for force calculation + LONG NormalLevel; + LONG WorkLeftLevel; + LONG WorkRightLevel; + + // Used for envelope calculation + LONG NormalRate; + LONG AttackLevel; + LONG FadeLevel; + + CalcEnvelope((ULONG)(Duration*1000) + ,(ULONG)(fmod(CurrentTime - BeginTime, Duration)*1000) + ,&NormalRate + ,&AttackLevel + ,&FadeLevel); + + // CustomForce allows setting each channel separately + if(CFEqual(Type, kFFEffectType_CustomForce_ID)) { + if((CurrentTimeUsingMach() - LastTime)*1000*1000 < DiCustomForce.dwSamplePeriod) { + return -1; + } + else { + WorkLeftLevel = ((DiCustomForce.rglForceData[2*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRightLevel = ((DiCustomForce.rglForceData[2*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + //fprintf(stderr, "L:%d; R:%d\n", WorkLeftLevel, WorkRightLevel); + Index = (Index + 1) % (DiCustomForce.cSamples/2); + LastTime = CurrentTimeUsingMach(); + } + } + // Regular commands treat controller as a single output (both channels are together as one) + else { + CalcForce( + (ULONG)(Duration*1000) + ,(ULONG)(fmod(CurrentTime - BeginTime, Duration)*1000) + ,NormalRate + ,AttackLevel + ,FadeLevel + ,&NormalLevel ); + //fprintf(stderr, "DeltaT %f\n", CurrentTime - BeginTime); + //fprintf(stderr, "Duration %f; NormalRate: %d; AttackLevel: %d; FadeLevel: %d\n", Duration, NormalRate, AttackLevel, FadeLevel); + + WorkLeftLevel = (NormalLevel > 0) ? NormalLevel : -NormalLevel; + WorkRightLevel = (NormalLevel > 0) ? NormalLevel : -NormalLevel; + } + WorkLeftLevel = min( SCALE_MAX, WorkLeftLevel * SCALE_MAX / 10000 ); + WorkRightLevel = min( SCALE_MAX, WorkRightLevel * SCALE_MAX / 10000 ); + + *LeftLevel = *LeftLevel + WorkLeftLevel; + *RightLevel = *RightLevel + WorkRightLevel; + } + return 0; +} + +//---------------------------------------------------------------------------------------------- +// CalcEnvelope +//---------------------------------------------------------------------------------------------- +void FeedbackXBOEffect::CalcEnvelope(ULONG Duration, ULONG CurrentPos, LONG *NormalRate, LONG *AttackLevel, LONG *FadeLevel) +{ + if( ( DiEffect.dwFlags & FFEP_ENVELOPE ) && DiEffect.lpEnvelope != NULL ) + { + // Calculate attack factor + LONG AttackRate = 0; + ULONG AttackTime = max( (DWORD)1, DiEnvelope.dwAttackTime / 1000 ); + if (CurrentPos < AttackTime) + { + AttackRate = ( AttackTime - CurrentPos ) * 100 / AttackTime; + } + + // Calculate fade factor + LONG FadeRate = 0; + ULONG FadeTime = max( (DWORD)1, DiEnvelope.dwFadeTime / 1000 ); + ULONG FadePos = Duration - FadeTime; + if (FadePos < CurrentPos) + { + FadeRate = ( CurrentPos - FadePos ) * 100 / FadeTime; + } + + *NormalRate = 100 - AttackRate - FadeRate; + *AttackLevel = DiEnvelope.dwAttackLevel * AttackRate; + *FadeLevel = DiEnvelope.dwFadeLevel * FadeRate; + } else { + *NormalRate = 100; + *AttackLevel = 0; + *FadeLevel = 0; + } +} + +void FeedbackXBOEffect::CalcForce(ULONG Duration, ULONG CurrentPos, LONG NormalRate, LONG AttackLevel, LONG FadeLevel, LONG * NormalLevel) +{ + LONG Magnitude = 0; + LONG Period; + LONG R; + LONG Rate; + + if (CFEqual(Type, kFFEffectType_ConstantForce_ID)) { + Magnitude = DiConstantForce.lMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + } + else if (CFEqual(Type, kFFEffectType_Square_ID)) { + Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) ); + R = ( CurrentPos%Period) * 360 / Period; + R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360; + + Magnitude = DiPeriodic.dwMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + + if (180 <= R) + { + Magnitude = Magnitude * -1; + } + + Magnitude = Magnitude + DiPeriodic.lOffset; + } + else if (CFEqual(Type, kFFEffectType_Sine_ID)) { + Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) ); + R = (CurrentPos%Period) * 360 / Period; + R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360; + + Magnitude = DiPeriodic.dwMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + + Magnitude = ( int)( Magnitude * sin( R * M_PI / 180.0 ) ); + + Magnitude = Magnitude + DiPeriodic.lOffset; + } + else if (CFEqual(Type, kFFEffectType_Triangle_ID)) { + Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) ); + R = (CurrentPos%Period) * 360 / Period; + R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360; + + Magnitude = DiPeriodic.dwMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + + if (0 <= R && R < 90) + { + Magnitude = -Magnitude * ( 90 - R ) / 90; + } + if (90 <= R && R < 180) + { + Magnitude = Magnitude * ( R - 90 ) / 90; + } + if (180 <= R && R < 270) + { + Magnitude = Magnitude * ( 90 - ( R - 180 ) ) / 90; + } + if (270 <= R && R < 360) + { + Magnitude = -Magnitude * ( R - 270 ) / 90; + } + + Magnitude = Magnitude + DiPeriodic.lOffset; + } + else if(CFEqual(Type, kFFEffectType_SawtoothUp_ID)) { + Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) ); + R = (CurrentPos%Period) * 360 / Period; + R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360; + + Magnitude = DiPeriodic.dwMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + + if (0 <= R && R < 180) + { + Magnitude = -Magnitude * ( 180 - R ) / 180; + } + if (180 <= R && R < 360) + { + Magnitude = Magnitude * ( R - 180 ) / 180; + } + + Magnitude = Magnitude + DiPeriodic.lOffset; + } + else if (CFEqual(Type, kFFEffectType_SawtoothDown_ID)) { + Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) ); + R = (CurrentPos%Period) * 360 / Period; + R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360; + + Magnitude = DiPeriodic.dwMagnitude; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + if( 0 <= R && R < 180 ) + { + Magnitude = Magnitude * ( 180 - R ) / 180; + } + if( 180 <= R && R < 360 ) + { + Magnitude = -Magnitude * ( R - 180 ) / 180; + } + + Magnitude = Magnitude + DiPeriodic.lOffset; + } + else if (CFEqual(Type, kFFEffectType_RampForce_ID)) { + Rate = ( Duration - CurrentPos ) * 100 + / Duration;//MAX( 1, DiEffect.dwDuration / 1000 ); + + Magnitude = ( DiRampforce.lStart * Rate + + DiRampforce.lEnd * ( 100 - Rate ) ) / 100; + Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100; + } + + *NormalLevel = Magnitude * (LONG)DiEffect.dwGain / 10000; +} diff --git a/XBOBTFF/FeedbackXBOEffect.hpp b/XBOBTFF/FeedbackXBOEffect.hpp new file mode 100644 index 00000000..a5fdb6f3 --- /dev/null +++ b/XBOBTFF/FeedbackXBOEffect.hpp @@ -0,0 +1,69 @@ +// +// FeedbackXBOEffect.hpp +// XBOBTFF +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 GitHub. All rights reserved. +// + +#ifndef FeedbackXBOEffect_hpp +#define FeedbackXBOEffect_hpp + +#include +#include +#include +#include + +//---------------------------------------------------------------------------------------------- +// Effects +//---------------------------------------------------------------------------------------------- + +#define CONSTANT_FORCE 0x00 +#define RAMP_FORCE 0x01 +#define SQUARE 0x02 +#define SINE 0x03 +#define TRIANGLE 0x04 +#define SAWTOOTH_UP 0x05 +#define SAWTOOTH_DOWN 0x06 +#define SPRING 0x07 +#define DAMPER 0x08 +#define INERTIA 0x09 +#define FRICTION 0x0A +#define CUSTOM_FORCE 0x0B + +#define SCALE_MAX (LONG)101 + +double CurrentTimeUsingMach(); + +class FeedbackXBOEffect +{ +public: + FeedbackXBOEffect(FFEffectDownloadID theHand); + FeedbackXBOEffect(const FeedbackXBOEffect &src); + + LONG Calc(LONG *LeftLevel, LONG *RightLevel); + + CFUUIDRef Type; + FFEffectDownloadID Handle; + + FFEFFECT DiEffect; + FFENVELOPE DiEnvelope; + FFCONSTANTFORCE DiConstantForce; + FFCUSTOMFORCE DiCustomForce; + FFPERIODIC DiPeriodic; + FFRAMPFORCE DiRampforce; + + DWORD Status; + DWORD PlayCount; + double StartTime; + + double LastTime; + DWORD Index; + +private: + FeedbackXBOEffect(); + void CalcEnvelope(ULONG Duration, ULONG CurrentPos, LONG *NormalRate, LONG *AttackLevel, LONG *FadeLevel); + void CalcForce(ULONG Duration, ULONG CurrentPos, LONG NormalRate, LONG AttackLevel, LONG FadeLevel, LONG * NormalLevel); +}; + +#endif /* FeedbackXBOEffect_hpp */ diff --git a/XBOBTFF/Info.plist b/XBOBTFF/Info.plist new file mode 100644 index 00000000..90635f96 --- /dev/null +++ b/XBOBTFF/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + CFPlugInFactories + + 0F793F56-8C17-4BA0-9201-D52FEC6C2702 + FeedbackXBOBTFactory + + CFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + + 0F793F56-8C17-4BA0-9201-D52FEC6C2702 + + + NSHumanReadableCopyright + Copyright © 2017 C.W. Betts. All rights reserved. + NSPrincipalClass + + + diff --git a/XBOBTFF/XBoxOneBTHID.h b/XBOBTFF/XBoxOneBTHID.h new file mode 100644 index 00000000..5ea1f812 --- /dev/null +++ b/XBOBTFF/XBoxOneBTHID.h @@ -0,0 +1,38 @@ +// +// XBoxOneBTHID.h +// XBoxBTFF +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 C.W. Betts. All rights reserved. +// + +#ifndef XBoxOneBTHID_h +#define XBoxOneBTHID_h + +#include +#include + +#pragma pack(push, 1) + +typedef CF_OPTIONS(uint8_t, XBOBTActivationMask) { + XBOBTActivationMaskRightRumble = 1 << 0, + XBOBTActivationMaskLeftRumble = 1 << 1, + XBOBTActivationMaskRTRumble = 1 << 2, + XBOBTActivationMaskLTRumble = 1 << 3, +}; + +struct XboxOneBluetoothReport_t { + uint8_t reportID; //!< 0x03 + XBOBTActivationMask activationMask; + uint8_t ltMagnitude; //!< 0x00 to 0x65, 0x65 is default + uint8_t rtMagnitude; + uint8_t leftMagnitude; + uint8_t rightMagnitude; + uint8_t duration; //!< time in ms, 255 = 2.55s + uint8_t startDelay; + uint8_t loopCount; +}; + +#pragma pack(pop) + +#endif /* XBoxOneBTHID_h */ diff --git a/XBOBTFF/main.c b/XBOBTFF/main.c new file mode 100644 index 00000000..e56f9b8b --- /dev/null +++ b/XBOBTFF/main.c @@ -0,0 +1,188 @@ +// +// main.c +// XBoxBTFFPlug +// +// Created by C.W. Betts on 9/20/17. +// Copyright © 2017 C.W. Betts. All rights reserved. +// + +#include "FFDriver.h" +#include + +// ----------------------------------------------------------------------------- +// typedefs +// ----------------------------------------------------------------------------- + +// The layout for an instance of MetaDataImporterPlugIn +typedef struct __MetadataImporterPluginType { + void *conduitInterface; + CFUUIDRef factoryID; + UInt32 refCount; +} MDImportPlug; + +// ----------------------------------------------------------------------------- +// prototypes +// ----------------------------------------------------------------------------- +// Forward declaration for the IUnknown implementation. +// + +static MDImportPlug *AllocMetadataImporterPluginType(CFUUIDRef inFactoryID); +static void DeallocMetadataImporterPluginType(MDImportPlug *thisInstance); +static HRESULT MetadataImporterQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv); +extern void *FeedbackXBOBTFactory(CFAllocatorRef allocator,CFUUIDRef typeID) __attribute__((visibility ("default"))); +static ULONG MetadataImporterPluginAddRef(void *thisInstance); +static ULONG MetadataImporterPluginRelease(void *thisInstance); + +// ----------------------------------------------------------------------------- +// testInterfaceFtbl definition +// ----------------------------------------------------------------------------- +// The TestInterface function table. +// + +static IOForceFeedbackDeviceInterface testInterfaceFtbl = { + NULL, + MetadataImporterQueryInterface, + MetadataImporterPluginAddRef, + MetadataImporterPluginRelease, + BTFFGetVersion, + BTFFInitializeTerminate, + BTFFDestroyEffect, + BTFFDownloadEffect, + BTFFEscape, + BTFFGetEffectStatus, + BTFFGetForceFeedbackCapabilities, + BTFFGetForceFeedbackState, + BTFFSendForceFeedbackCommand, + BTFFSetProperty, + BTFFStartEffect, + BTFFStopEffect +}; + +// ----------------------------------------------------------------------------- +// AllocMetadataImporterPluginType +// ----------------------------------------------------------------------------- +// Utility function that allocates a new instance. +// You can do some initial setup for the importer here if you wish +// like allocating globals etc... +// +static MDImportPlug *AllocMetadataImporterPluginType(CFUUIDRef inFactoryID) +{ + MDImportPlug *theNewInstance = (MDImportPlug *)calloc(sizeof(MDImportPlug), 1); + + /* Point to the function table */ + theNewInstance->conduitInterface = &testInterfaceFtbl; + + /* Retain and keep an open instance refcount for each factory. */ + theNewInstance->factoryID = CFRetain(inFactoryID); + CFPlugInAddInstanceForFactory(inFactoryID); + + /* This function returns the IUnknown interface so set the refCount to one. */ + theNewInstance->refCount = 1; + return theNewInstance; +} + +// ----------------------------------------------------------------------------- +// DeallocMetadataImporterPluginType +// ----------------------------------------------------------------------------- +// Utility function that deallocates the instance when +// the refCount goes to zero. +// In the current implementation importer interfaces are never deallocated +// but implement this as this might change in the future +// +static void DeallocMetadataImporterPluginType(MDImportPlug *thisInstance) +{ + CFUUIDRef theFactoryID = thisInstance->factoryID; + + free(thisInstance); + if (theFactoryID) { + CFPlugInRemoveInstanceForFactory(theFactoryID); + CFRelease(theFactoryID); + } +} + +// ----------------------------------------------------------------------------- +// MetadataImporterQueryInterface +// ----------------------------------------------------------------------------- +// Implementation of the IUnknown QueryInterface function. +// +static HRESULT MetadataImporterQueryInterface(void *thisInstance, REFIID iid, LPVOID *ppv) +{ + CFUUIDRef interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); + + if (CFEqual(interfaceID, kIOForceFeedbackDeviceInterfaceID)) { + /* If the right interface was requested, bump the ref count, + * set the ppv parameter equal to the instance, and + * return good status. + */ + ((MDImportPlug*)thisInstance)->conduitInterface = &testInterfaceFtbl; + ((IOForceFeedbackDeviceInterface *)((MDImportPlug*)thisInstance)->conduitInterface)->AddRef(thisInstance); + *ppv = thisInstance; + CFRelease(interfaceID); + return S_OK; + } else if (CFEqual(interfaceID, IUnknownUUID)) { + /* If the IUnknown interface was requested, same as above. */ + ((MDImportPlug*)thisInstance)->conduitInterface = &testInterfaceFtbl; + ((IOForceFeedbackDeviceInterface *)((MDImportPlug*)thisInstance)->conduitInterface)->AddRef(thisInstance); + *ppv = thisInstance; + CFRelease(interfaceID); + return S_OK; + } else { + /* Requested interface unknown, bail with error. */ + *ppv = NULL; + CFRelease(interfaceID); + return E_NOINTERFACE; + } +} + +// ----------------------------------------------------------------------------- +// MetadataImporterPluginAddRef +// ----------------------------------------------------------------------------- +// Implementation of reference counting for this type. Whenever an interface +// is requested, bump the refCount for the instance. NOTE: returning the +// refcount is a convention but is not required so don't rely on it. +// +static ULONG MetadataImporterPluginAddRef(void *thisInstance) +{ + return ++((MDImportPlug*)thisInstance)->refCount; +} + +// ----------------------------------------------------------------------------- +// MetadataImporterPluginRelease +// ----------------------------------------------------------------------------- +// When an interface is released, decrement the refCount. +// If the refCount goes to zero, deallocate the instance. +// +static ULONG MetadataImporterPluginRelease(void *thisInstance) +{ + ((MDImportPlug*)thisInstance)->refCount -= 1; + if (((MDImportPlug*)thisInstance)->refCount == 0) { + DeallocMetadataImporterPluginType((MDImportPlug*)thisInstance); + return 0; + } else { + return ((MDImportPlug*)thisInstance)->refCount; + } +} + +// ----------------------------------------------------------------------------- +// PPMetadataImporterPluginFactory +// ----------------------------------------------------------------------------- +// Implementation of the factory function for this type. +// +void *FeedbackXBOBTFactory(CFAllocatorRef allocator, CFUUIDRef typeID) +{ + MDImportPlug *result; + CFUUIDRef uuid; + + /* If correct type is being requested, allocate an + * instance of TestType and return the IUnknown interface. + */ + + if (CFEqual(typeID, kIOForceFeedbackLibTypeID)) { + uuid = BTFFPLUGINTERFACE; + result = AllocMetadataImporterPluginType(uuid); + CFRelease(uuid); + return result; + } + /* If the requested type is incorrect, return NULL. */ + return NULL; +} diff --git a/XboxOneBluetooth/Info.plist b/XboxOneBluetooth/Info.plist index b722b1a9..8c702eb1 100644 --- a/XboxOneBluetooth/Info.plist +++ b/XboxOneBluetooth/Info.plist @@ -27,7 +27,7 @@ IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin + XboxOneBluetooth.kext/Contents/PlugIns/XBOBTFF.plugin IOClass IOBluetoothHIDDriver From ccf7ffd8b60bcf7e7cc427be9d00c4297317c772 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 20 Sep 2017 17:29:25 -0600 Subject: [PATCH 128/216] More work stuff. --- XBOBTFF/FFDriver.cpp | 6 ++++-- XBOBTFF/FeedbackXBOEffect.cpp | 22 ++++++++++++++++------ XBOBTFF/FeedbackXBOEffect.hpp | 26 +++++++++++++------------- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp index 48908421..6e4fcfa4 100644 --- a/XBOBTFF/FFDriver.cpp +++ b/XBOBTFF/FFDriver.cpp @@ -615,6 +615,8 @@ void FeedbackXBOBT::EffectProc( void *params ) LONG LeftLevel = 0; LONG RightLevel = 0; + LONG ltLevel = 0; + LONG rtLevel = 0; LONG Gain = cThis->Gain; LONG CalcResult = 0; @@ -623,7 +625,7 @@ void FeedbackXBOBT::EffectProc( void *params ) for (FeedbackXBOEffectIterator effectIterator = cThis->EffectList.begin(); effectIterator != cThis->EffectList.end(); ++effectIterator) { if(((CurrentTimeUsingMach() - cThis->LastTime)*1000*1000) >= effectIterator->DiEffect.dwSamplePeriod) { - CalcResult = effectIterator->Calc(&LeftLevel, &RightLevel); + CalcResult = effectIterator->Calc(&LeftLevel, &RightLevel, <Level, &rtLevel); } } } @@ -631,7 +633,7 @@ void FeedbackXBOBT::EffectProc( void *params ) if ((cThis->PrvLeftLevel != LeftLevel || cThis->PrvRightLevel != RightLevel) && (CalcResult != -1)) { //fprintf(stderr, "PL: %d, PR: %d; L: %d, R: %d; \n", cThis->PrvLeftLevel, cThis->PrvRightLevel, LeftLevel, RightLevel); - cThis->SetForce((unsigned char)min(SCALE_MAX, LeftLevel * Gain / 10000),(unsigned char)min(SCALE_MAX, RightLevel * Gain / 10000 ), 0, 0); + cThis->SetForce((unsigned char)min(SCALE_MAX, LeftLevel * Gain / 10000),(unsigned char)min(SCALE_MAX, RightLevel * Gain / 10000 ), (unsigned char)min(SCALE_MAX, ltLevel * Gain / 10000), (unsigned char)min(SCALE_MAX, rtLevel * Gain / 10000)); cThis->PrvLeftLevel = LeftLevel; cThis->PrvRightLevel = RightLevel; diff --git a/XBOBTFF/FeedbackXBOEffect.cpp b/XBOBTFF/FeedbackXBOEffect.cpp index 0a388692..bf3cf1e3 100644 --- a/XBOBTFF/FeedbackXBOEffect.cpp +++ b/XBOBTFF/FeedbackXBOEffect.cpp @@ -41,7 +41,7 @@ StartTime(src.StartTime), Index(src.Index), LastTime(src.LastTime) //---------------------------------------------------------------------------------------------- // Calc //---------------------------------------------------------------------------------------------- -LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel) +LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel, LONG *ltLevel, LONG *rtLevel) { CFTimeInterval Duration = 0; if(DiEffect.dwDuration != FF_INFINITE) { @@ -63,7 +63,9 @@ LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel) LONG NormalLevel; LONG WorkLeftLevel; LONG WorkRightLevel; - + LONG WorkLTLevel; + LONG WorkRTLevel; + // Used for envelope calculation LONG NormalRate; LONG AttackLevel; @@ -81,10 +83,12 @@ LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel) return -1; } else { - WorkLeftLevel = ((DiCustomForce.rglForceData[2*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; - WorkRightLevel = ((DiCustomForce.rglForceData[2*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkLeftLevel = ((DiCustomForce.rglForceData[4*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRightLevel = ((DiCustomForce.rglForceData[4*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkLTLevel = ((DiCustomForce.rglForceData[4*Index + 2] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRTLevel = ((DiCustomForce.rglForceData[4*Index + 3] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; //fprintf(stderr, "L:%d; R:%d\n", WorkLeftLevel, WorkRightLevel); - Index = (Index + 1) % (DiCustomForce.cSamples/2); + Index = (Index + 1) % (DiCustomForce.cSamples/4); LastTime = CurrentTimeUsingMach(); } } @@ -102,12 +106,18 @@ LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel) WorkLeftLevel = (NormalLevel > 0) ? NormalLevel : -NormalLevel; WorkRightLevel = (NormalLevel > 0) ? NormalLevel : -NormalLevel; + WorkLTLevel = 0; + WorkRTLevel = 0; } WorkLeftLevel = min( SCALE_MAX, WorkLeftLevel * SCALE_MAX / 10000 ); WorkRightLevel = min( SCALE_MAX, WorkRightLevel * SCALE_MAX / 10000 ); - + WorkLTLevel = min( SCALE_MAX, WorkLTLevel * SCALE_MAX / 10000 ); + WorkRTLevel = min( SCALE_MAX, WorkRTLevel * SCALE_MAX / 10000 ); + *LeftLevel = *LeftLevel + WorkLeftLevel; *RightLevel = *RightLevel + WorkRightLevel; + *ltLevel = *ltLevel + WorkLTLevel; + *rtLevel = *rtLevel + WorkRTLevel; } return 0; } diff --git a/XBOBTFF/FeedbackXBOEffect.hpp b/XBOBTFF/FeedbackXBOEffect.hpp index a5fdb6f3..96974a8c 100644 --- a/XBOBTFF/FeedbackXBOEffect.hpp +++ b/XBOBTFF/FeedbackXBOEffect.hpp @@ -18,18 +18,18 @@ // Effects //---------------------------------------------------------------------------------------------- -#define CONSTANT_FORCE 0x00 -#define RAMP_FORCE 0x01 -#define SQUARE 0x02 -#define SINE 0x03 -#define TRIANGLE 0x04 -#define SAWTOOTH_UP 0x05 -#define SAWTOOTH_DOWN 0x06 -#define SPRING 0x07 -#define DAMPER 0x08 -#define INERTIA 0x09 -#define FRICTION 0x0A -#define CUSTOM_FORCE 0x0B +#define CONSTANT_FORCE 0x00 +#define RAMP_FORCE 0x01 +#define SQUARE 0x02 +#define SINE 0x03 +#define TRIANGLE 0x04 +#define SAWTOOTH_UP 0x05 +#define SAWTOOTH_DOWN 0x06 +#define SPRING 0x07 +#define DAMPER 0x08 +#define INERTIA 0x09 +#define FRICTION 0x0A +#define CUSTOM_FORCE 0x0B #define SCALE_MAX (LONG)101 @@ -41,7 +41,7 @@ class FeedbackXBOEffect FeedbackXBOEffect(FFEffectDownloadID theHand); FeedbackXBOEffect(const FeedbackXBOEffect &src); - LONG Calc(LONG *LeftLevel, LONG *RightLevel); + LONG Calc(LONG *LeftLevel, LONG *RightLevel, LONG *ltLevel, LONG *rtLevel); CFUUIDRef Type; FFEffectDownloadID Handle; From 3d46b56116324796d1ed77f0c13a44866fd43c66 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 20 Sep 2017 17:43:35 -0600 Subject: [PATCH 129/216] implement goodProbe. --- XBOBTFF/FFDriver.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp index 6e4fcfa4..6ffaaaab 100644 --- a/XBOBTFF/FFDriver.cpp +++ b/XBOBTFF/FFDriver.cpp @@ -17,7 +17,28 @@ using std::min; static bool goodProbe(io_service_t theService) { - return false; + if (!IOObjectConformsTo(theService, kIOHIDDeviceKey)) { + return false; + } + CFMutableDictionaryRef dict; + + IORegistryEntryCreateCFProperties(theService, &dict, kCFAllocatorDefault, 0); + CFTypeRef aNum = CFDictionaryGetValue(dict, CFSTR(kIOHIDProductIDKey)); + int tmpNum; + ::CFNumberGetValue((CFNumberRef)aNum, kCFNumberIntType, &tmpNum); + if (tmpNum != 765) { + CFRelease(dict); + return false; + } + aNum = CFDictionaryGetValue(dict, CFSTR(kIOHIDVendorIDKey)); + ::CFNumberGetValue((CFNumberRef)aNum, kCFNumberIntType, &tmpNum); + if (tmpNum != 1118) { + CFRelease(dict); + return false; + } + + CFRelease(dict); + return true; } #define LoopGranularity 10000 // Microseconds From d0787dc5cf110322825414c006972b9cb1e20628 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 20 Sep 2017 18:03:55 -0600 Subject: [PATCH 130/216] Oops, forgot to remove a file. --- 360 Driver.xcodeproj/project.pbxproj | 2 - XBOBTFF/main.c | 188 --------------------------- 2 files changed, 190 deletions(-) delete mode 100644 XBOBTFF/main.c diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index ee670d77..70360452 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -261,7 +261,6 @@ 557951441F7300C9001880D1 /* FFDriver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FFDriver.h; sourceTree = ""; }; 557951451F7300C9001880D1 /* FFDriver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FFDriver.cpp; sourceTree = ""; }; 557951461F7300CA001880D1 /* XBoxOneBTHID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XBoxOneBTHID.h; sourceTree = ""; }; - 557951471F7300CA001880D1 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; 5579514E1F73037B001880D1 /* FeedbackXBOEffect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FeedbackXBOEffect.cpp; sourceTree = ""; }; 5579514F1F73037B001880D1 /* FeedbackXBOEffect.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = FeedbackXBOEffect.hpp; sourceTree = ""; }; 55852E2018D6B5580009BF55 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; @@ -474,7 +473,6 @@ children = ( 557951441F7300C9001880D1 /* FFDriver.h */, 557951451F7300C9001880D1 /* FFDriver.cpp */, - 557951471F7300CA001880D1 /* main.c */, 557951461F7300CA001880D1 /* XBoxOneBTHID.h */, 5579514F1F73037B001880D1 /* FeedbackXBOEffect.hpp */, 5579514E1F73037B001880D1 /* FeedbackXBOEffect.cpp */, diff --git a/XBOBTFF/main.c b/XBOBTFF/main.c deleted file mode 100644 index e56f9b8b..00000000 --- a/XBOBTFF/main.c +++ /dev/null @@ -1,188 +0,0 @@ -// -// main.c -// XBoxBTFFPlug -// -// Created by C.W. Betts on 9/20/17. -// Copyright © 2017 C.W. Betts. All rights reserved. -// - -#include "FFDriver.h" -#include - -// ----------------------------------------------------------------------------- -// typedefs -// ----------------------------------------------------------------------------- - -// The layout for an instance of MetaDataImporterPlugIn -typedef struct __MetadataImporterPluginType { - void *conduitInterface; - CFUUIDRef factoryID; - UInt32 refCount; -} MDImportPlug; - -// ----------------------------------------------------------------------------- -// prototypes -// ----------------------------------------------------------------------------- -// Forward declaration for the IUnknown implementation. -// - -static MDImportPlug *AllocMetadataImporterPluginType(CFUUIDRef inFactoryID); -static void DeallocMetadataImporterPluginType(MDImportPlug *thisInstance); -static HRESULT MetadataImporterQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv); -extern void *FeedbackXBOBTFactory(CFAllocatorRef allocator,CFUUIDRef typeID) __attribute__((visibility ("default"))); -static ULONG MetadataImporterPluginAddRef(void *thisInstance); -static ULONG MetadataImporterPluginRelease(void *thisInstance); - -// ----------------------------------------------------------------------------- -// testInterfaceFtbl definition -// ----------------------------------------------------------------------------- -// The TestInterface function table. -// - -static IOForceFeedbackDeviceInterface testInterfaceFtbl = { - NULL, - MetadataImporterQueryInterface, - MetadataImporterPluginAddRef, - MetadataImporterPluginRelease, - BTFFGetVersion, - BTFFInitializeTerminate, - BTFFDestroyEffect, - BTFFDownloadEffect, - BTFFEscape, - BTFFGetEffectStatus, - BTFFGetForceFeedbackCapabilities, - BTFFGetForceFeedbackState, - BTFFSendForceFeedbackCommand, - BTFFSetProperty, - BTFFStartEffect, - BTFFStopEffect -}; - -// ----------------------------------------------------------------------------- -// AllocMetadataImporterPluginType -// ----------------------------------------------------------------------------- -// Utility function that allocates a new instance. -// You can do some initial setup for the importer here if you wish -// like allocating globals etc... -// -static MDImportPlug *AllocMetadataImporterPluginType(CFUUIDRef inFactoryID) -{ - MDImportPlug *theNewInstance = (MDImportPlug *)calloc(sizeof(MDImportPlug), 1); - - /* Point to the function table */ - theNewInstance->conduitInterface = &testInterfaceFtbl; - - /* Retain and keep an open instance refcount for each factory. */ - theNewInstance->factoryID = CFRetain(inFactoryID); - CFPlugInAddInstanceForFactory(inFactoryID); - - /* This function returns the IUnknown interface so set the refCount to one. */ - theNewInstance->refCount = 1; - return theNewInstance; -} - -// ----------------------------------------------------------------------------- -// DeallocMetadataImporterPluginType -// ----------------------------------------------------------------------------- -// Utility function that deallocates the instance when -// the refCount goes to zero. -// In the current implementation importer interfaces are never deallocated -// but implement this as this might change in the future -// -static void DeallocMetadataImporterPluginType(MDImportPlug *thisInstance) -{ - CFUUIDRef theFactoryID = thisInstance->factoryID; - - free(thisInstance); - if (theFactoryID) { - CFPlugInRemoveInstanceForFactory(theFactoryID); - CFRelease(theFactoryID); - } -} - -// ----------------------------------------------------------------------------- -// MetadataImporterQueryInterface -// ----------------------------------------------------------------------------- -// Implementation of the IUnknown QueryInterface function. -// -static HRESULT MetadataImporterQueryInterface(void *thisInstance, REFIID iid, LPVOID *ppv) -{ - CFUUIDRef interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, iid); - - if (CFEqual(interfaceID, kIOForceFeedbackDeviceInterfaceID)) { - /* If the right interface was requested, bump the ref count, - * set the ppv parameter equal to the instance, and - * return good status. - */ - ((MDImportPlug*)thisInstance)->conduitInterface = &testInterfaceFtbl; - ((IOForceFeedbackDeviceInterface *)((MDImportPlug*)thisInstance)->conduitInterface)->AddRef(thisInstance); - *ppv = thisInstance; - CFRelease(interfaceID); - return S_OK; - } else if (CFEqual(interfaceID, IUnknownUUID)) { - /* If the IUnknown interface was requested, same as above. */ - ((MDImportPlug*)thisInstance)->conduitInterface = &testInterfaceFtbl; - ((IOForceFeedbackDeviceInterface *)((MDImportPlug*)thisInstance)->conduitInterface)->AddRef(thisInstance); - *ppv = thisInstance; - CFRelease(interfaceID); - return S_OK; - } else { - /* Requested interface unknown, bail with error. */ - *ppv = NULL; - CFRelease(interfaceID); - return E_NOINTERFACE; - } -} - -// ----------------------------------------------------------------------------- -// MetadataImporterPluginAddRef -// ----------------------------------------------------------------------------- -// Implementation of reference counting for this type. Whenever an interface -// is requested, bump the refCount for the instance. NOTE: returning the -// refcount is a convention but is not required so don't rely on it. -// -static ULONG MetadataImporterPluginAddRef(void *thisInstance) -{ - return ++((MDImportPlug*)thisInstance)->refCount; -} - -// ----------------------------------------------------------------------------- -// MetadataImporterPluginRelease -// ----------------------------------------------------------------------------- -// When an interface is released, decrement the refCount. -// If the refCount goes to zero, deallocate the instance. -// -static ULONG MetadataImporterPluginRelease(void *thisInstance) -{ - ((MDImportPlug*)thisInstance)->refCount -= 1; - if (((MDImportPlug*)thisInstance)->refCount == 0) { - DeallocMetadataImporterPluginType((MDImportPlug*)thisInstance); - return 0; - } else { - return ((MDImportPlug*)thisInstance)->refCount; - } -} - -// ----------------------------------------------------------------------------- -// PPMetadataImporterPluginFactory -// ----------------------------------------------------------------------------- -// Implementation of the factory function for this type. -// -void *FeedbackXBOBTFactory(CFAllocatorRef allocator, CFUUIDRef typeID) -{ - MDImportPlug *result; - CFUUIDRef uuid; - - /* If correct type is being requested, allocate an - * instance of TestType and return the IUnknown interface. - */ - - if (CFEqual(typeID, kIOForceFeedbackLibTypeID)) { - uuid = BTFFPLUGINTERFACE; - result = AllocMetadataImporterPluginType(uuid); - CFRelease(uuid); - return result; - } - /* If the requested type is incorrect, return NULL. */ - return NULL; -} From dda5b160dda5c2274686201ffed96abd39c08fb8 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 20 Sep 2017 19:20:56 -0600 Subject: [PATCH 131/216] XBOBT feedback now loads. Doesn't do anything, though. --- XBOBTFF/FFDriver.cpp | 2 +- XBOBTFF/Info.plist | 10 ++++++---- XboxOneBluetooth/Info.plist | 8 +++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp index 6ffaaaab..bce41d86 100644 --- a/XBOBTFF/FFDriver.cpp +++ b/XBOBTFF/FFDriver.cpp @@ -784,7 +784,7 @@ HRESULT FeedbackXBOBT::sStopEffect(void * self, UInt32 downloadID) } // External factory function -void* FeedbackXBOBTFactory(CFAllocatorRef allocator, CFUUIDRef typeID) +extern "C" void* FeedbackXBOBTFactory(CFAllocatorRef allocator, CFUUIDRef typeID) { void* result = NULL; if (CFEqual(typeID, kIOForceFeedbackLibTypeID)) diff --git a/XBOBTFF/Info.plist b/XBOBTFF/Info.plist index 90635f96..a86914e6 100644 --- a/XBOBTFF/Info.plist +++ b/XBOBTFF/Info.plist @@ -12,12 +12,16 @@ 6.0 CFBundleName $(PRODUCT_NAME) + CFBundleSignature + ???? CFBundlePackageType BNDL CFBundleShortVersionString - 1.0 + $(CURRENT_PROJECT_VERSION) CFBundleVersion - 1 + ${CURRENT_PROJECT_VERSION} + CFPlugInDynamicRegistration + CFPlugInFactories 0F793F56-8C17-4BA0-9201-D52FEC6C2702 @@ -32,7 +36,5 @@ NSHumanReadableCopyright Copyright © 2017 C.W. Betts. All rights reserved. - NSPrincipalClass - diff --git a/XboxOneBluetooth/Info.plist b/XboxOneBluetooth/Info.plist index 8c702eb1..e02350a1 100644 --- a/XboxOneBluetooth/Info.plist +++ b/XboxOneBluetooth/Info.plist @@ -13,11 +13,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.0 + $(CURRENT_PROJECT_VERSION) CFBundleSignature ???? CFBundleVersion - 1 + ${CURRENT_PROJECT_VERSION} IOKitPersonalities XboxOneBluetooth @@ -37,8 +37,10 @@ IOBluetoothL2CAPChannel PSM 17 + IOKitDebug + 65535 ProductID - 736 + 765 VendorID 1118 From 640392a605b4285b0df0cab40c43c424d4e2cfe5 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 23 Sep 2017 19:15:06 -0600 Subject: [PATCH 132/216] Actually open the device. --- XBOBTFF/FFDriver.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp index bce41d86..0f4f7a84 100644 --- a/XBOBTFF/FFDriver.cpp +++ b/XBOBTFF/FFDriver.cpp @@ -526,6 +526,7 @@ HRESULT FeedbackXBOBT::InitializeTerminate(NumVersion APIversion, io_object_t hi // fprintf(stderr,"Feedback: Failed to initialise\n"); return FFERR_NOINTERFACE; } + IOHIDDeviceOpen(this->device, 0); Queue = dispatch_queue_create("com.mice.driver.FeedbackXBOBT", NULL); Timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, Queue); dispatch_source_set_timer(Timer, dispatch_walltime(NULL, 0), LoopGranularity*1000, 10); @@ -624,9 +625,13 @@ void FeedbackXBOBT::SetForce(LONG LeftLevel, LONG RightLevel, LONG ltLevel, LONG report.leftMagnitude = (unsigned char)min(SCALE_MAX, LeftLevel * (LONG)Gain / 10000 ); report.rightMagnitude = (unsigned char)min(SCALE_MAX, RightLevel * (LONG)Gain / 10000 ); report.duration = 0x7f; + report.loopCount = 10; if (!Manual) { - IOHIDDeviceSetReport(device, kIOHIDReportTypeOutput, report.reportID, (const uint8_t*)&report, sizeof(XboxOneBluetoothReport_t)); + IOReturn retVal = IOHIDDeviceSetReport(device, kIOHIDReportTypeOutput, report.reportID, (const uint8_t*)&report, sizeof(XboxOneBluetoothReport_t)); + if (retVal != 0) { + printf("IOHIDDeviceSetReport returned %d (system %d, subsystem %d, code %d)\n", retVal, err_get_system(retVal), err_get_sub(retVal), err_get_code(retVal)); + } } } From 74aa6bcd57321235991fc470133742c8d156cf38 Mon Sep 17 00:00:00 2001 From: Walter Sonius Date: Sun, 24 Sep 2017 19:31:42 +0200 Subject: [PATCH 133/216] Add 3rd party XBOX Logitech Thunderpad id This is the official Logitech THUNDERPAD first generation XBOX 3rd party controller with USB wiring adapter, tested succesfull on OSX 10.12.6. P/N:863230-0000 M/N: G-X3B9 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 36f70ebd..362335c6 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -571,6 +571,26 @@ idVendor 1133 + LogitechTHUNDERPAD + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51848 + idVendor + 1133 + GuitarHero CFBundleIdentifier From d8e9dbbd9087192f1061a09cb1b6106ddc28242c Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sun, 24 Sep 2017 11:54:23 -0600 Subject: [PATCH 134/216] Most current games only recognize two channels for custom force. Fall-back to old behavior (only rumble the right and left motor) if we get sent that. rename some structs. --- XBOBTFF/FFDriver.cpp | 14 +++++++------- XBOBTFF/FFDriver.h | 8 ++++---- XBOBTFF/FeedbackXBOEffect.cpp | 24 +++++++++++++++++------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/XBOBTFF/FFDriver.cpp b/XBOBTFF/FFDriver.cpp index 0f4f7a84..32f5fbe7 100644 --- a/XBOBTFF/FFDriver.cpp +++ b/XBOBTFF/FFDriver.cpp @@ -62,7 +62,7 @@ double CurrentTimeUsingMach() return (double)nanos / NSEC_PER_SEC; } -static IOCFPlugInInterface functionMap360_IOCFPlugInInterface = { +static IOCFPlugInInterface functionMapXBOBT_IOCFPlugInInterface = { // Padding required for COM NULL, // IUnknown @@ -77,7 +77,7 @@ static IOCFPlugInInterface functionMap360_IOCFPlugInInterface = { }; -static IOForceFeedbackDeviceInterface functionMap360_IOForceFeedbackDeviceInterface = { +static IOForceFeedbackDeviceInterface functionMapXBOBT_IOForceFeedbackDeviceInterface = { // Padding required for COM NULL, // IUnknown @@ -105,10 +105,10 @@ PrvRightLevel(0), Actuator(true), Manual(false) { EffectList = FeedbackXBOEffectVector(); - iIOCFPlugInInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOCFPlugInInterface; + iIOCFPlugInInterface.pseudoVTable = (IUnknownVTbl *) &functionMapXBOBT_IOCFPlugInInterface; iIOCFPlugInInterface.obj = this; - iIOForceFeedbackDeviceInterface.pseudoVTable = (IUnknownVTbl *) &functionMap360_IOForceFeedbackDeviceInterface; + iIOForceFeedbackDeviceInterface.pseudoVTable = (IUnknownVTbl *) &functionMapXBOBT_IOForceFeedbackDeviceInterface; iIOForceFeedbackDeviceInterface.obj = this; FactoryID = BTFFPLUGINTERFACE; @@ -697,19 +697,19 @@ HRESULT FeedbackXBOBT::GetVersion(ForceFeedbackVersion *version) // static c->c++ glue functions HRESULT FeedbackXBOBT::sQueryInterface(void *self, REFIID iid, LPVOID *ppv) { - FeedbackXBOBT *obj = ((Xbox360InterfaceMap *)self)->obj; + FeedbackXBOBT *obj = ((XboxOneBTInterfaceMap *)self)->obj; return obj->QueryInterface(iid, ppv); } ULONG FeedbackXBOBT::sAddRef(void *self) { - FeedbackXBOBT *obj = ( (Xbox360InterfaceMap *) self)->obj; + FeedbackXBOBT *obj = ( (XboxOneBTInterfaceMap *) self)->obj; return obj->AddRef(); } ULONG FeedbackXBOBT::sRelease(void *self) { - FeedbackXBOBT *obj = ( (Xbox360InterfaceMap *) self)->obj; + FeedbackXBOBT *obj = ( (XboxOneBTInterfaceMap *) self)->obj; return obj->Release(); } diff --git a/XBOBTFF/FFDriver.h b/XBOBTFF/FFDriver.h index 22e90b1d..ac7a5361 100644 --- a/XBOBTFF/FFDriver.h +++ b/XBOBTFF/FFDriver.h @@ -42,7 +42,7 @@ class FeedbackXBOBT : IUnknown { IUnknownVTbl *pseudoVTable; FeedbackXBOBT *obj; - } Xbox360InterfaceMap; + } XboxOneBTInterfaceMap; // IOCFPlugin interfacing variables and functions public: @@ -78,11 +78,11 @@ class FeedbackXBOBT : IUnknown typedef std::vector FeedbackXBOEffectVector; typedef FeedbackXBOEffectVector::iterator FeedbackXBOEffectIterator; // helper function - static inline FeedbackXBOBT *getThis (void *self) { return (FeedbackXBOBT *) ((Xbox360InterfaceMap *) self)->obj; } + static inline FeedbackXBOBT *getThis (void *self) { return (FeedbackXBOBT *) ((XboxOneBTInterfaceMap *) self)->obj; } // interfacing - Xbox360InterfaceMap iIOCFPlugInInterface; - Xbox360InterfaceMap iIOForceFeedbackDeviceInterface; + XboxOneBTInterfaceMap iIOCFPlugInInterface; + XboxOneBTInterfaceMap iIOForceFeedbackDeviceInterface; IOHIDDeviceRef device; // GCD queue and timer diff --git a/XBOBTFF/FeedbackXBOEffect.cpp b/XBOBTFF/FeedbackXBOEffect.cpp index bf3cf1e3..ddb0b138 100644 --- a/XBOBTFF/FeedbackXBOEffect.cpp +++ b/XBOBTFF/FeedbackXBOEffect.cpp @@ -83,13 +83,23 @@ LONG FeedbackXBOEffect::Calc(LONG *LeftLevel, LONG *RightLevel, LONG *ltLevel, L return -1; } else { - WorkLeftLevel = ((DiCustomForce.rglForceData[4*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; - WorkRightLevel = ((DiCustomForce.rglForceData[4*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; - WorkLTLevel = ((DiCustomForce.rglForceData[4*Index + 2] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; - WorkRTLevel = ((DiCustomForce.rglForceData[4*Index + 3] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; - //fprintf(stderr, "L:%d; R:%d\n", WorkLeftLevel, WorkRightLevel); - Index = (Index + 1) % (DiCustomForce.cSamples/4); - LastTime = CurrentTimeUsingMach(); + if (DiCustomForce.cChannels == 2) { + WorkLeftLevel = ((DiCustomForce.rglForceData[2*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRightLevel = ((DiCustomForce.rglForceData[2*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkLTLevel = 0; + WorkRTLevel = 0; + //fprintf(stderr, "L:%d; R:%d\n", WorkLeftLevel, WorkRightLevel); + Index = (Index + 1) % (DiCustomForce.cSamples/2); + LastTime = CurrentTimeUsingMach(); + } else { + WorkLeftLevel = ((DiCustomForce.rglForceData[4*Index] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRightLevel = ((DiCustomForce.rglForceData[4*Index + 1] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkLTLevel = ((DiCustomForce.rglForceData[4*Index + 2] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + WorkRTLevel = ((DiCustomForce.rglForceData[4*Index + 3] * NormalRate + AttackLevel + FadeLevel) / 100) * DiEffect.dwGain / 10000; + //fprintf(stderr, "L:%d; R:%d\n", WorkLeftLevel, WorkRightLevel); + Index = (Index + 1) % (DiCustomForce.cSamples/4); + LastTime = CurrentTimeUsingMach(); + } } } // Regular commands treat controller as a single output (both channels are together as one) From 8ed852101c444629d5cc5dad5a3cf3278d2ea699 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Fri, 29 Sep 2017 14:08:11 -0600 Subject: [PATCH 135/216] minor sorting --- 360 Driver.xcodeproj/project.pbxproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index 70360452..6b70ce6e 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -1021,9 +1021,9 @@ 55B6370618C1057100CE933D /* 360Controller */, 55B637E718C10D5000CE933D /* Wireless360Controller */, 55B6380D18C10E8700CE933D /* WirelessGamingReceiver */, + 5579513D1F73006F001880D1 /* XBOBTFF */, 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */, 55FE3CA018D7B77800D69E84 /* testhaptic */, - 5579513D1F73006F001880D1 /* XBOBTFF */, ); }; /* End PBXProject section */ @@ -1347,6 +1347,7 @@ INFOPLIST_FILE = XBOBTFF/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XBOBTFF; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; From 1482a8348bbc157325f212968d0dc63d2569f1bd Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Fri, 29 Sep 2017 14:23:26 -0600 Subject: [PATCH 136/216] Remove old changes that do nothing now. --- Feedback360/Feedback360.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Feedback360/Feedback360.cpp b/Feedback360/Feedback360.cpp index 7ba0007b..32efbf28 100644 --- a/Feedback360/Feedback360.cpp +++ b/Feedback360/Feedback360.cpp @@ -162,8 +162,7 @@ IOReturn Feedback360::Probe(CFDictionaryRef propertyTable, io_service_t service, { if ((service==0) || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) - && (!IOObjectConformsTo(service,"Wireless360Controller")) - && (!IOObjectConformsTo(service, "IOBluetoothHIDDriver")))) return kIOReturnBadArgument; + && (!IOObjectConformsTo(service,"Wireless360Controller")))) return kIOReturnBadArgument; return FF_OK; } @@ -499,8 +498,7 @@ HRESULT Feedback360::InitializeTerminate(NumVersion APIversion, io_object_t hidD // From probe if( (hidDevice==0) || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) - && (!IOObjectConformsTo(hidDevice,"Wireless360Controller")) - && (!IOObjectConformsTo(hidDevice, "IOBluetoothHIDDriver"))) ) + && (!IOObjectConformsTo(hidDevice,"Wireless360Controller"))) ) { // fprintf(stderr,"Feedback: Invalid device\n"); return FFERR_INVALIDPARAM; From b43742ea681ca091e188bcba89ee19149e20c75d Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 14 Mar 2018 23:43:42 -0600 Subject: [PATCH 137/216] Add CFBundleShortVersionString to the plists. Fix deployment target for the Bluetooth feedback target. --- 360 Driver.xcodeproj/project.pbxproj | 3 +- 360Controller/Info.plist | 402 ++++++++++++++------------- Feedback360/Info.plist | 2 + Wireless360Controller/Info.plist | 2 + WirelessGamingReceiver/Info.plist | 26 +- 5 files changed, 221 insertions(+), 214 deletions(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index 6b70ce6e..d6c7b06f 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -1393,7 +1393,6 @@ ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = XboxOneBluetooth/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.11; MODULE_NAME = com.mice.driver.XboxOneBluetooth; MODULE_START = XboxOneBluetooth_start; MODULE_STOP = XboxOneBluetooth_stop; @@ -1414,7 +1413,6 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = XboxOneBluetooth/Info.plist; - MACOSX_DEPLOYMENT_TARGET = 10.11; MODULE_NAME = com.mice.driver.XboxOneBluetooth; MODULE_START = XboxOneBluetooth_start; MODULE_STOP = XboxOneBluetooth_stop; @@ -1574,6 +1572,7 @@ EXPORTED_SYMBOLS_FILE = Feedback360/Feedback360.exp; INFOPLIST_FILE = Feedback360/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; WRAPPER_EXTENSION = plugin; diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 362335c6..48fc321f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -14,52 +14,54 @@ ${PRODUCT_NAME} CFBundlePackageType KEXT + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} IOKitPersonalities - AplayController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64251 - idVendor - 9414 - - AfterglowGamepadForXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1043 - idVendor - 3695 - + AplayController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64251 + idVendor + 9414 + + AfterglowGamepadForXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1043 + idVendor + 3695 + AfterglowGamepad1 CFBundleIdentifier @@ -411,26 +413,26 @@ idVendor 3853 - FUSIONXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 22042 - idVendor - 9414 - + FUSIONXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22042 + idVendor + 9414 + FUSIONProXboxOne CFBundleIdentifier @@ -571,26 +573,26 @@ idVendor 1133 - LogitechTHUNDERPAD - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 51848 - idVendor - 1133 - + LogitechTHUNDERPAD + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51848 + idVendor + 1133 + GuitarHero CFBundleIdentifier @@ -1391,26 +1393,26 @@ idVendor 7085 - MadCatzMLGFightStickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61502 - idVendor - 7085 - + MadCatzMLGFightStickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61502 + idVendor + 7085 + MadCatzGamepad CFBundleIdentifier @@ -1791,26 +1793,26 @@ idVendor 1118 - MKKlassicFightStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 771 - idVendor - 4779 - + MKKlassicFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 771 + idVendor + 4779 + NaconGC100XF CFBundleIdentifier @@ -1871,26 +1873,26 @@ idVendor 3695 - PDPAfterglowAX.1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63744 - idVendor - 3695 - + PDPAfterglowAX.1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63744 + idVendor + 3695 + PDPAfterglowV2 CFBundleIdentifier @@ -1991,26 +1993,26 @@ idVendor 3695 - PDPTron - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63747 - idVendor - 7085 - + PDPTron + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63747 + idVendor + 7085 + PDPTitanfall2 CFBundleIdentifier @@ -2411,26 +2413,26 @@ idVendor 7085 - HORI Real Arcade Pro.EX Premium VLX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62726 - idVendor - 7085 - + HORI Real Arcade Pro.EX Premium VLX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62726 + idVendor + 7085 + RazerAtrox CFBundleIdentifier @@ -3031,26 +3033,26 @@ idVendor 5769 - TrustPredator - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 3 - idVendor - 2064 - + TrustPredator + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 3 + idVendor + 2064 + TSZPelican CFBundleIdentifier diff --git a/Feedback360/Info.plist b/Feedback360/Info.plist index 5e1ff4a5..920aa069 100644 --- a/Feedback360/Info.plist +++ b/Feedback360/Info.plist @@ -14,6 +14,8 @@ ${PRODUCT_NAME} CFBundlePackageType BNDL + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) CFBundleSignature ???? CFBundleVersion diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index 1072cefb..ba65557c 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -14,6 +14,8 @@ ${PRODUCT_NAME} CFBundlePackageType KEXT + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) CFBundleSignature ???? CFBundleVersion diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 03c5a228..1ceded25 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -14,6 +14,8 @@ ${PRODUCT_NAME} CFBundlePackageType KEXT + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) CFBundleSignature ???? CFBundleVersion @@ -28,12 +30,12 @@ 1817 idVendor 1118 - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice WirelessGamingReceiverForWindowsAlternate @@ -43,12 +45,12 @@ 657 idVendor 1118 - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice OSBundleCompatibleVersion From 4f72533d6e1f991451748092c513c5bfdbfd9c02 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 14 Mar 2018 23:45:32 -0600 Subject: [PATCH 138/216] Poke the plists. Only the order of the entries of the files were changed: Nothing was added or deleted. --- 360Controller/Info.plist | 400 +++++++++++++++--------------- WirelessGamingReceiver/Info.plist | 24 +- 2 files changed, 212 insertions(+), 212 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 48fc321f..75358af7 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -22,46 +22,6 @@ ${CURRENT_PROJECT_VERSION} IOKitPersonalities - AplayController - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 64251 - idVendor - 9414 - - AfterglowGamepadForXbox360 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1043 - idVendor - 3695 - AfterglowGamepad1 CFBundleIdentifier @@ -142,6 +102,26 @@ idVendor 1118 + AfterglowGamepadForXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1043 + idVendor + 3695 + AfterglowPrismaticOne CFBundleIdentifier @@ -162,6 +142,26 @@ idVendor 3695 + AplayController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64251 + idVendor + 9414 + ArcadeGameStick CFBundleIdentifier @@ -413,26 +413,6 @@ idVendor 3853 - FUSIONXboxOne - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 22042 - idVendor - 9414 - FUSIONProXboxOne CFBundleIdentifier @@ -453,6 +433,26 @@ idVendor 9414 + FUSIONXboxOne + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 22042 + idVendor + 9414 + GEMPADEX CFBundleIdentifier @@ -573,26 +573,6 @@ idVendor 1133 - LogitechTHUNDERPAD - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 51848 - idVendor - 1133 - GuitarHero CFBundleIdentifier @@ -613,6 +593,26 @@ idVendor 5168 + HORI Real Arcade Pro.EX Premium VLX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 62726 + idVendor + 7085 + HoriEX2 CFBundleIdentifier @@ -1173,6 +1173,46 @@ idVendor 1133 + LogitechTHUNDERPAD + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 51848 + idVendor + 1133 + + MKKlassicFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 771 + idVendor + 4779 + MLGGamePadforXbox360 CFBundleIdentifier @@ -1393,26 +1433,6 @@ idVendor 7085 - MadCatzMLGFightStickTE - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 61502 - idVendor - 7085 - MadCatzGamepad CFBundleIdentifier @@ -1473,6 +1493,26 @@ idVendor 7085 + MadCatzMLGFightStickTE + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61502 + idVendor + 7085 + MadCatzMicroConGamepad CFBundleIdentifier @@ -1793,26 +1833,6 @@ idVendor 1118 - MKKlassicFightStick - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 771 - idVendor - 4779 - NaconGC100XF CFBundleIdentifier @@ -1853,6 +1873,26 @@ idVendor 7085 + PDPAfterglowAX.1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63744 + idVendor + 3695 + PDPAfterglowAX1 CFBundleIdentifier @@ -1873,26 +1913,6 @@ idVendor 3695 - PDPAfterglowAX.1 - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63744 - idVendor - 3695 - PDPAfterglowV2 CFBundleIdentifier @@ -1993,26 +2013,6 @@ idVendor 3695 - PDPTron - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 63747 - idVendor - 7085 - PDPTitanfall2 CFBundleIdentifier @@ -2033,6 +2033,26 @@ idVendor 3695 + PDPTron + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 63747 + idVendor + 7085 + PDPVersusPad CFBundleIdentifier @@ -2413,26 +2433,6 @@ idVendor 7085 - HORI Real Arcade Pro.EX Premium VLX - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 62726 - idVendor - 7085 - RazerAtrox CFBundleIdentifier @@ -3033,26 +3033,6 @@ idVendor 5769 - TrustPredator - - CFBundleIdentifier - com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Xbox360Peripheral - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 3 - idVendor - 2064 - TSZPelican CFBundleIdentifier @@ -3153,6 +3133,26 @@ idVendor 9414 + TrustPredator + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 3 + idVendor + 2064 + XB360MortalKombatFightStick CFBundleIdentifier diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 1ceded25..3fd4f8f2 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -26,31 +26,31 @@ CFBundleIdentifier com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice idProduct 1817 idVendor 1118 - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice WirelessGamingReceiverForWindowsAlternate CFBundleIdentifier com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice idProduct 657 idVendor 1118 - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice OSBundleCompatibleVersion From aeeb2431cf10bab9736ebf9458c4b0472253c6b1 Mon Sep 17 00:00:00 2001 From: Alex Werner Date: Sun, 18 Mar 2018 23:24:47 +0100 Subject: [PATCH 139/216] Feat : Added support for Stealth Series Phantom --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 75358af7..bd88b388 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2013,6 +2013,26 @@ idVendor 3695 + PDPStealthPhantomBlack + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 676 + idVendor + 3695 + PDPTitanfall2 CFBundleIdentifier From 6e53d8cf4208deeea4235dc21620622712e09cb3 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Mon, 2 Apr 2018 16:13:08 -0500 Subject: [PATCH 140/216] Fix issues with README linking --- Readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 298bdcb3..14c4383e 100644 --- a/Readme.md +++ b/Readme.md @@ -11,9 +11,9 @@ 3. [Original Xbox Controllers](#original-xbox-controllers) 4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) 5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) - 6. [Wired Xbox One Controllers](#wired-xbox-one-controllers) - 7. [Wireless Xbox One Controllers](#wireless-xbox-one-controllers) - 8. [Wireless Xbox One Controllers (Bluetooth)](#wireless-xbox-one-controllers-bluetooth) + 6. [Xbox One Controllers connected with USB](#xbox-one-controllers-connected-with-usb) + 7. [Xbox One Controllers connected with Wireless Adapter](#xbox-one-controllers-connected-with-wireless-adapter) + 8. [Xbox One Controllers connected with Bluetooth](#xbox-one-controllers-connected-with-bluetooth) 6. [Adding Third Party Controllers](#adding-third-party-controllers) 7. [Developer Info](#developer-info) 1. [Building](#building) From 0f932abb07c97f16175c841138346f337bf9db31 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Mon, 2 Apr 2018 18:28:59 -0500 Subject: [PATCH 141/216] Add comments about PDP/PowerA incompatibility #533 --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 14c4383e..bdb5bf81 100644 --- a/Readme.md +++ b/Readme.md @@ -81,6 +81,7 @@ Always check your controller with the preference pane found at: `Apple Menu -> S If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +**At this time, PDP and PowerA controllers are unsupported by this driver as of macOS 10.11+ thanks to a rewrite of the macOS USB kernel. We cannot resolve this issue. It is a bug in Apple's core OS code.** ### Xbox One Controllers connected with Wireless Adapter Xbox One controllers connected with the Wireless Adapter are currently not supported. Please be patient as we figure out this complicated protocol. From b4a656e9a385d5b4e91815feb6aebccbc08fec72 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Tue, 3 Apr 2018 09:15:01 +0900 Subject: [PATCH 142/216] Add support for HORI RAP V Hayabusa for Nintendo Switch (NSW-006) (#616) --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index bd88b388..a29f1493 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -853,6 +853,26 @@ idVendor 3853 + HoriRAPVHayabusaSwitch + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 216 + idVendor + 3853 + HoriRAPVKai360 CFBundleIdentifier From 32e1fffb05677810efed7f8d38d46203ebbff5e9 Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 2 Apr 2018 20:22:55 -0500 Subject: [PATCH 143/216] Add init packet from #514 --- 360Controller/_60Controller.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index b6bf7285..f257a868 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -526,8 +526,11 @@ bool Xbox360Peripheral::start(IOService *provider) if (controllerType == XboxOne || controllerType == XboxOnePretend360) { UInt8 xoneInit0[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x80, 0x00 }; UInt8 xoneInit1[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; + UInt8 xoneInit2[] = { 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00 }; QueueWrite(&xoneInit0, sizeof(xoneInit0)); QueueWrite(&xoneInit1, sizeof(xoneInit1)); + QueueWrite(&xoneInit2, sizeof(xoneInit2)); } else { // Disable LED Xbox360_Prepare(led,outLed); From a1a3c59adbce949c3b56d11e0075892f408e734a Mon Sep 17 00:00:00 2001 From: FranticRain Date: Mon, 2 Apr 2018 20:26:28 -0500 Subject: [PATCH 144/216] Fixes to potentially resolve Sierra issues --- 360Controller/Info.plist | 20 ++++++++++++++++++++ Install360Controller/Scripts/finish.sh | 5 +++-- build.sh | 8 ++++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index a29f1493..6962c42f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -673,6 +673,26 @@ idVendor 9414 + HoriFightingCommander + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 197 + idVendor + 3853 + HoriFightingStickEX2 CFBundleIdentifier diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh index d172e1e3..224c5e6a 100644 --- a/Install360Controller/Scripts/finish.sh +++ b/Install360Controller/Scripts/finish.sh @@ -1,10 +1,11 @@ #!/bin/sh #This is to fix a bug in Yosemite. -/bin/ln -s /Library/Extensions/360Controller.kext /System/Library/Extensions/ +# /bin/ln -s /Library/Extensions/360Controller.kext /System/Library/Extensions/ -/usr/bin/touch /System/Library/Extensions +# /usr/bin/touch /System/Library/Extensions /usr/bin/touch /Library/Extensions +/usr/bin/touch /Library/Preferences/com.mice.driver.Xbox360Controller.devices.plist /bin/launchctl load -w /Library/LaunchDaemons/com.mice.360Daemon.plist exit 0 diff --git a/build.sh b/build.sh index fa1bda8b..2e0e7c09 100755 --- a/build.sh +++ b/build.sh @@ -21,15 +21,15 @@ xcrun lipo -info build/Release/360Controller.kext/Contents/PlugIns/Feedback360.p xcrun lipo -info build/Release/360Daemon.app/Contents/MacOS/360Daemon xcrun lipo -info build/Release/Pref360Control.prefPane/Contents/MacOS/Pref360Control xcrun lipo -info build/Release/Pref360Control.prefPane/Contents/Resources/DriverTool -xcrun lipo -info build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver -xcrun lipo -info build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller +# xcrun lipo -info build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver +# xcrun lipo -info build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller echo "** File signatures **" xcrun spctl -a -v build/Release/360Controller.kext xcrun spctl -a -v build/Release/360Controller.kext/Contents/PlugIns/Feedback360.plugin xcrun spctl -a -v build/Release/360Daemon.app/Contents/MacOS/360Daemon xcrun spctl -a -v build/Release/Pref360Control.prefPane xcrun spctl -a -v build/Release/Pref360Control.prefPane/Contents/Resources/DriverTool -xcrun spctl -a -v build/Release/WirelessGamingReceiver.kext -xcrun spctl -a -v build/Release/Wireless360Controller.kext +# xcrun spctl -a -v build/Release/WirelessGamingReceiver.kext +# xcrun spctl -a -v build/Release/Wireless360Controller.kext xcrun spctl -a -v --type install Install360Controller/build/Install360Controller.pkg echo "*** DONE ***" From 7e52ddf134e73ef8303e6a25c903415d6192b06b Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 3 Apr 2018 10:29:19 -0500 Subject: [PATCH 145/216] Add backlog of devices Resolves #619 #613 #583 #579 #578 #574 #567 #564 #562 #552 #521 #517 #515 #511 #508 #495 #492 #489 #487 #478 #470 --- 360Controller/Info.plist | 342 +++++++++++++++++++++++++++++- WirelessGamingReceiver/Info.plist | 15 ++ 2 files changed, 356 insertions(+), 1 deletion(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 6962c42f..64c24495 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -142,7 +142,27 @@ idVendor 3695 - AplayController + AtplayController1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 64250 + idVendor + 9414 + + AtplayController2 CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -222,6 +242,26 @@ idVendor 5604 + BD&AAirFloController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21251 + idVendor + 9414 + BigBenController CFBundleIdentifier @@ -242,6 +282,46 @@ idVendor 5227 + BrookNEOGEOConverter + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2036 + idVendor + 3090 + + BrookPS2Converter + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2289 + idVendor + 3090 + ChatPadKeyboardEvents CFBundleIdentifier @@ -693,6 +773,26 @@ idVendor 3853 + HoriFightingCommander2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21776 + idVendor + 9414 + HoriFightingStickEX2 CFBundleIdentifier @@ -853,6 +953,26 @@ idVendor 3853 + HoriRAP4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 140 + idVendor + 3853 + HoriRAPHayabusaXboxOne CFBundleIdentifier @@ -973,6 +1093,26 @@ idVendor 7085 + HoriRAPVXSA2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21761 + idVendor + 9414 + HoriUnnamed CFBundleIdentifier @@ -1033,6 +1173,26 @@ idVendor 7085 + HyperkinX91 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 5768 + idVendor + 11812 + IonDrumRocker CFBundleIdentifier @@ -1533,6 +1693,26 @@ idVendor 7085 + MadCatzMC2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61472 + idVendor + 7085 + MadCatzMLGFightStickTE CFBundleIdentifier @@ -2253,6 +2433,46 @@ idVendor 3695 + PDPXboxOne6 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 683 + idVendor + 3695 + + PDPXboxOne7 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 352 + idVendor + 3695 + PDPXboxOneArcadeStick CFBundleIdentifier @@ -2273,6 +2493,86 @@ idVendor 3695 + PDPXboxOneFallout4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 347 + idVendor + 3695 + + PDPXboxOnePhantomBlack + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 685 + idVendor + 3695 + + PDPXboxOneRavenBlack + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 679 + idVendor + 3695 + + PDPXboxOneRevenantBlue + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 678 + idVendor + 3695 + PowerAAirflow CFBundleIdentifier @@ -3113,6 +3413,26 @@ idVendor 3695 + ThrustmasterFerrari430 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46683 + idVendor + 1103 + ThrustMasterFerrari458 CFBundleIdentifier @@ -3153,6 +3473,26 @@ idVendor 9414 + ThrustMasterFerrari458Spider + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46705 + idVendor + 1103 + ThrustMasterGPXGamepad CFBundleIdentifier diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 3fd4f8f2..41114472 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -52,6 +52,21 @@ idVendor 1118 + WirelessGamingReceiverForWindowsAlternateAlternate + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 681 + idVendor + 1118 + OSBundleCompatibleVersion 1.0.0d1 From 51d953d48b5c04d3749682b5ecbcc4d347b5b0f9 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 3 Apr 2018 10:40:09 -0500 Subject: [PATCH 146/216] Fix issues with sub-items in TOC --- Readme.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Readme.md b/Readme.md index bdb5bf81..5c4c3e56 100644 --- a/Readme.md +++ b/Readme.md @@ -6,22 +6,22 @@ 3. [Uninstallation](#uninstallation) 4. [Usage](#usage) 5. [My controller doesn't work!](#my-controller-doesnt-work) - 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) - 2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) - 3. [Original Xbox Controllers](#original-xbox-controllers) - 4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) - 5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) - 6. [Xbox One Controllers connected with USB](#xbox-one-controllers-connected-with-usb) - 7. [Xbox One Controllers connected with Wireless Adapter](#xbox-one-controllers-connected-with-wireless-adapter) - 8. [Xbox One Controllers connected with Bluetooth](#xbox-one-controllers-connected-with-bluetooth) + 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) + 2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) + 3. [Original Xbox Controllers](#original-xbox-controllers) + 4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) + 5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) + 6. [Xbox One Controllers connected with USB](#xbox-one-controllers-connected-with-usb) + 7. [Xbox One Controllers connected with Wireless Adapter](#xbox-one-controllers-connected-with-wireless-adapter) + 8. [Xbox One Controllers connected with Bluetooth](#xbox-one-controllers-connected-with-bluetooth) 6. [Adding Third Party Controllers](#adding-third-party-controllers) 7. [Developer Info](#developer-info) - 1. [Building](#building) - 2. [Building the .pkg](#building-the-pkg) - 3. [Disabling signing requirements](#disabling-signing-requirements) - 4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) - 5. [Debugging the driver](#debugging-the-driver) - 6. [Debugging the preference pane](#debugging-the-preference-pane) + 1. [Building](#building) + 2. [Building the .pkg](#building-the-pkg) + 3. [Disabling signing requirements](#disabling-signing-requirements) + 4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) + 5. [Debugging the driver](#debugging-the-driver) + 6. [Debugging the preference pane](#debugging-the-preference-pane) 8. [Licence](#licence) ## About From e19295b97c7bf043044c3c66448d11770e60279a Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 3 Apr 2018 14:03:07 -0500 Subject: [PATCH 147/216] Updates for 0.16.6 --- Install360Controller/Text/Welcome.rtf | 217 ++++++----- .../en.lproj/Pref360ControlPref.xib | 349 ++++++------------ 2 files changed, 241 insertions(+), 325 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 816993ae..8460b209 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,6 +1,7 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2} {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid3} @@ -28,20 +29,38 @@ {\list\listtemplateid25\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid25} {\list\listtemplateid26\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid26} {\list\listtemplateid27\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid27} -{\list\listtemplateid28\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid28}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}} +{\list\listtemplateid28\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid28} +{\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid29}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.5\ +\b0\fs24 \cf0 Version 0.16.6\ Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the Xbox 360 Controller driver for Mac OS X.\ \b \ +Update 0.16.6: 04/03/2018\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 + +\b \cf0 \'95 REMOVE XBOX 360 WIRELESS DRIVER +\b0 \ + \'95 Enhancements for Bluetooth Xbox One S controllers\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ +\ls1\ilvl0 +\b {\listtext \uc0\u8226 } +\b0 New devices +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.5: 04/18/2017\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 @@ -59,11 +78,11 @@ Update 0.16.4: 08/28/2016\ \cf0 \'95 Tons of new devices including the wired version of the new Xbox One controller\ \'95 Third party Xbox 360 controllers can pretend to be Microsoft ones for better game compatibility\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \'95 }Wireless controllers show a raw battery percentage value now\ +\ls2\ilvl0\cf0 {\listtext \uc0\u8226 }Wireless controllers show a raw battery percentage value now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Preference pane doesn't complain about constraints in the Console anymore\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \'95 }Xbox One racing wheel support\ +\ls3\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Enable/disable feature is more stable \b \ @@ -74,7 +93,7 @@ Update 0.16.3: 07/14/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \'95 }Actually resolves issue with Xbox One controller initialization\ +\ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Third party Xbox One controllers still don't work, though \b \ @@ -85,7 +104,7 @@ Update 0.16.2: 07/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \'95 }Potentially resolves issue with Xbox One controller initialization +\ls5\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -94,8 +113,8 @@ Update 0.16.1: 07/06/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \'95 }New devices\ -{\listtext \'95 }Fixed "normalize" not staying checked +\ls6\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +{\listtext \uc0\u8226 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -104,22 +123,22 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \'95 }New devices\ -{\listtext \'95 }The remapping tool is more robust\ +\ls7\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +{\listtext \uc0\u8226 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \'95 }Remapping works on wireless 360 controllers\ +\ls8\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0 -\b \cf0 {\listtext \'95 } +\ls8\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Settings load properly\ -\ls7\ilvl0 -\b {\listtext \'95 } +\ls8\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls7\ilvl0 -\b {\listtext \'95 } +\ls8\ilvl0 +\b {\listtext \uc0\u8226 } \b0 New rumble options for Xbox One controllers\ -\ls7\ilvl0 -\b {\listtext \'95 }OFFICIAL!\ +\ls8\ilvl0 +\b {\listtext \uc0\u8226 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.15 (beta 6): 04/09/2016\ @@ -127,8 +146,8 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \'95 }New wired Xbox One devices\ -{\listtext \'95 }New Xbox 360 devices +\ls9\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ +{\listtext \uc0\u8226 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -136,10 +155,10 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \'95 }Fixed Xbox One Elite implementation.\ +\ls10\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0 -\b \cf0 {\listtext \'95 } +\ls10\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Fix Xbox One rumble. \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -148,16 +167,16 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \'95 }Added fix for Rock Candy Xbox One controllers.\ +\ls11\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0 -\b \cf0 {\listtext \'95 } +\ls11\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Added various new Xbox 360 controllers.\ -\ls10\ilvl0 -\b {\listtext \'95 } +\ls11\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls10\ilvl0 -\b {\listtext \'95 } +\ls11\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Added support for the Xbox One Elite controller. \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -166,7 +185,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \'95 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls12\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -174,9 +193,9 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \'95 }New Xbox One Controller (2015 model) Support\ -{\listtext \'95 }Swappable sticks\ -{\listtext \'95 }A few more devices\ +\ls13\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ +{\listtext \uc0\u8226 }Swappable sticks\ +{\listtext \uc0\u8226 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -184,20 +203,20 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \'95 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ -{\listtext \'95 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ +\ls14\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +{\listtext \uc0\u8226 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0 -\b \cf0 {\listtext \'95 } +\ls14\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls13\ilvl0 -\b {\listtext \'95 } +\ls14\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls13\ilvl0 -\b {\listtext \'95 } +\ls14\ilvl0 +\b {\listtext \uc0\u8226 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls13\ilvl0 -\b {\listtext \'95 } +\ls14\ilvl0 +\b {\listtext \uc0\u8226 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -206,17 +225,17 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \'95 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls15\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0 -\b \cf0 {\listtext \'95 } +\ls15\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls14\ilvl0 -\b {\listtext \'95 } +\ls15\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Bug fixes for some devices\ -{\listtext \'95 }Fixed the compilation of 32bit code.\ -\ls14\ilvl0 -\b {\listtext \'95 } +{\listtext \uc0\u8226 }Fixed the compilation of 32bit code.\ +\ls15\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Original Xbox's Controller Support with Force Feedback \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -225,18 +244,18 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \'95 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ -{\listtext \'95 }General code readability improvements\ +\ls16\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +{\listtext \uc0\u8226 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0 -\b \cf0 {\listtext \'95 } +\ls16\ilvl0 +\b \cf0 {\listtext \uc0\u8226 } \b0 Better handling of feedback effects\ -{\listtext \'95 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls15\ilvl0 -\b {\listtext \'95 } +{\listtext \uc0\u8226 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ +\ls16\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls15\ilvl0 -\b {\listtext \'95 } +\ls16\ilvl0 +\b {\listtext \uc0\u8226 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -245,7 +264,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \'95 }Fix for kernel panics when Android File Transfer is also installed\ +\ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -254,8 +273,8 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \'95 }Near-total rewrite of the Feedback component\ -{\listtext \'95 }Bug fixes in the preference pane\ +\ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ +{\listtext \uc0\u8226 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -264,10 +283,10 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \'95 }Fix that prevents non-ChatPad-compatible controllers from working\ -{\listtext \'95 }Improvement to ChatPad support\ -{\listtext \'95 }Improvement to wireless support (automatic and manual power-off)\ -{\listtext \'95 }Updated Info.plist with many common devices\ +\ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ +{\listtext \uc0\u8226 }Improvement to ChatPad support\ +{\listtext \uc0\u8226 }Improvement to wireless support (automatic and manual power-off)\ +{\listtext \uc0\u8226 }Updated Info.plist with many common devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -276,8 +295,8 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \'95 }Temporary Lion fix (thanks to "codeman38")\ -{\listtext \'95 }Adjustment to the automatic device match function\ +\ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ +{\listtext \uc0\u8226 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -286,10 +305,10 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ -{\listtext \'95 }New product IDs for Wireless Gaming Receiver\ -{\listtext \'95 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ -{\listtext \'95 }Fix the incompatibility with Bioshock introduced with ChatPad support\ +\ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ +{\listtext \uc0\u8226 }New product IDs for Wireless Gaming Receiver\ +{\listtext \uc0\u8226 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ +{\listtext \uc0\u8226 }Fix the incompatibility with Bioshock introduced with ChatPad support\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -298,8 +317,8 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ -{\listtext \'95 }ChatPad support in wired controller\ +\ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ +{\listtext \uc0\u8226 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -308,9 +327,9 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ -{\listtext \'95 }Fix for Snow Leopard\ -{\listtext \'95 }Minor bugfixes\ +\ls23\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ +{\listtext \uc0\u8226 }Fix for Snow Leopard\ +{\listtext \uc0\u8226 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -319,8 +338,8 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ -{\listtext \'95 }Extra controller IDs\ +\ls24\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ +{\listtext \uc0\u8226 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -329,9 +348,9 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ -{\listtext \'95 }Daemon providing persistent settings and LED setting\ -{\listtext \'95 }Bugfix to support Halo\ +\ls25\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +{\listtext \uc0\u8226 }Daemon providing persistent settings and LED setting\ +{\listtext \uc0\u8226 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -340,9 +359,9 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls25\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ -{\listtext \'95 }New increased compatibility with games\ -{\listtext \'95 }Support for the Guitar Hero controller\ +\ls26\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +{\listtext \uc0\u8226 }New increased compatibility with games\ +{\listtext \uc0\u8226 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -351,9 +370,9 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls26\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ -{\listtext \'95 }Driver for the above to use the Wireless 360 Controller\ -{\listtext \'95 }Updates to the Preference Pane to support the Wireless 360 Controller\ +\ls27\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +{\listtext \uc0\u8226 }Driver for the above to use the Wireless 360 Controller\ +{\listtext \uc0\u8226 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -362,7 +381,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls27\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls28\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -371,11 +390,11 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls28\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ -{\listtext \'95 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ -{\listtext \'95 }Preference Pane now correctly detects devices being connected/disconnected\ -{\listtext \'95 }Alternative deadzone mode\ -{\listtext \'95 }D-pad moved from pointer to plain joypad buttons, for better support in games\ +\ls29\ilvl0\cf0 {\listtext \uc0\u8226 }Universal binaries, for Intel Mac support\ +{\listtext \uc0\u8226 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ +{\listtext \uc0\u8226 }Preference Pane now correctly detects devices being connected/disconnected\ +{\listtext \uc0\u8226 }Alternative deadzone mode\ +{\listtext \uc0\u8226 }D-pad moved from pointer to plain joypad buttons, for better support in games\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver}} for information on this software. Consider donating or buying via the Amazon associate links to support development of this driver!\ diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 83dafcb3..ceb3511b 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,9 +1,10 @@ - - + + - - + + + @@ -58,14 +59,13 @@ - + - + - @@ -79,12 +79,8 @@ - - @@ -268,7 +246,6 @@ - @@ -286,7 +263,6 @@ - + - + - - - - + @@ -335,7 +308,6 @@ - - - - - - - - - - - + + + + + + + + + + - - - @@ -386,7 +354,6 @@ - @@ -396,7 +363,6 @@ - @@ -417,7 +383,6 @@ - - - - + + @@ -624,9 +573,8 @@ - - - - + + @@ -706,9 +646,8 @@ - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + - + - - - + + - - - @@ -903,7 +815,6 @@ Due to some internal limitations, you need to connect your device once to be abl - @@ -913,20 +824,19 @@ Due to some internal limitations, you need to connect your device once to be abl - + - + - - + + - @@ -1481,37 +1391,26 @@ This driver is licensed under the GNU Public License. A copy of this license is - - - - - - - + - - - - - + + + + - - - @@ -1520,7 +1419,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - @@ -1537,7 +1435,6 @@ This driver is licensed under the GNU Public License. A copy of this license is - From 7949f78d842cdb175fb63e3a163bb32188f60f4c Mon Sep 17 00:00:00 2001 From: FranticRain Date: Tue, 3 Apr 2018 14:04:20 -0500 Subject: [PATCH 148/216] Update preference pane for 0.16.6 --- Pref360Control/en.lproj/Pref360ControlPref.xib | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index ceb3511b..b2a353de 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -835,7 +835,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -888,7 +888,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -1398,7 +1398,7 @@ This driver is licensed under the GNU Public License. A copy of this license is - - + From 11b6c71bad195ccbe475e08b2effc94865106844 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 17 May 2018 12:31:05 -0500 Subject: [PATCH 155/216] Force makedmg.sh to HFS+ Should actually fix #635 --- Install360Controller/makedmg.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Install360Controller/makedmg.sh b/Install360Controller/makedmg.sh index bc5b95a2..19d33422 100755 --- a/Install360Controller/makedmg.sh +++ b/Install360Controller/makedmg.sh @@ -1,2 +1,2 @@ #!/bin/sh -hdiutil create -volname 360ControllerInstall -srcfolder ./build -ov -format UDZO 360ControllerInstall.dmg +hdiutil create -volname 360ControllerInstall -srcfolder ./build -ov -fs HFS+ -format UDZO 360ControllerInstall.dmg From 1fd272a873dd50f1bd52fa381fcda03385793500 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 27 May 2018 23:24:30 -0500 Subject: [PATCH 156/216] Update installation instructions Hopefully this makes things more clear for those in the future. Resolves #683 --- Readme.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 5c4c3e56..8f507bcb 100644 --- a/Readme.md +++ b/Readme.md @@ -45,7 +45,11 @@ Controller support includes ALL devices that work with an Xbox series piece of h This project is a fork of the [Xbox360Controller project](http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller) originally created by Colin Munro. ## Installation -See the [releases page](https://github.com/360Controller/360Controller/releases) for the latest compiled and signed version of the driver. Most users will want to run this installer. +See the [releases page](https://github.com/360Controller/360Controller/releases) for the latest compiled and signed version of the driver. Most users will want to run this installer. If you are using macOS 10.13.4 or later, then you will have to allow the signing certificate of "Drew Mills" in order for the software to run. Usually, the installer will prompt you to complete this process: +![System prompt: System Extension Blocked](https://imgur.com/zXM5JlU.png) +You can either click "Open Security Preferences" to quickly fix this. If you didn't see this prompt, you can navigate to the same window using the Apple menu in the top left hand corner of your screen, navigating the "System Preferences" and then clicking on "Security & Privacy." This will open up the following page. All you need to do is click the "Allow" button near the bottom right. +![Security & Privacy Preference Pane displaying prompt to user: System software from user "Drew Mills" was blocked from loading](https://imgur.com/HrL77Ii.png) +This prompt has been known to have issues with software or hardware that interferes with mouse movement. If you are using software that impacts the movement of your mouse, or are using a special interface device, such as a Wacom tablet, please using a standard input device, such as a mouse, to click this button. This is a security feature of macOS and is out of our control. ## Uninstallation In order to uninstall the driver: navigate to the preference pane by opening your "System Preferences," navigating to the "Xbox 360 Controllers" pane, clicking on the "Advanced" tab and pressing the "Uninstall" button. This will prompt you to enter your password so that the uninstaller can remove all of the bundled software from your machine. From a997473104c347947df79d1a0298c640c63b9146 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 27 May 2018 23:30:48 -0500 Subject: [PATCH 157/216] Update current status of Wireless 360 support --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 8f507bcb..4b867842 100644 --- a/Readme.md +++ b/Readme.md @@ -32,7 +32,7 @@ This driver supports the Microsoft Xbox series of controllers including: 2. Xbox 360 - Wired Xbox 360 controllers are supported directly. - - Wireless Xbox 360 controllers are supported with the Xbox 360 Wireless Gaming Receiver. Using a "Play and Charge" kit is not supported. + - **As of macOS 10.11, Wireless Xbox 360 controller support causes kernel panics. This issue cannot be resolved with minor changes to the driver, and requires that the driver be re-written from scratch to resolve the issue. Due to an excess of caution, we have disabled Wireless Xbox 360 controller support as of 0.16.6. If you want to use a wireless controller, download 0.16.15 or earlier and disable the driver before the computer enters a "sleep" state in order to prevent kernel panics. Alternatively, you can revert to a macOS version before 10.11 to avoid this issue.** Wireless Xbox 360 controllers are supported with the Xbox 360 Wireless Gaming Receiver. Using a "Play and Charge" kit is not supported. 3. Xbox One - Xbox One controllers are supported when connected with a micro USB cable. Using the controller with the Wireless Adapter is not currently supported. From 0cc1f747fb53d20e89018ffdcfac03d98715c416 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 27 May 2018 23:54:01 -0500 Subject: [PATCH 158/216] Create issue_template.md Hopefully reduces the amount of low quality issues --- .github/issue_template.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/issue_template.md diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 00000000..655dde68 --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,20 @@ +### Type of Controller +Replace this text with: Original Xbox, Xbox 360, Xbox One, All or N/A + +### Connection Method +Replace this text with: Wired, Wireless Adapter, Bluetooth, N/A or more specific method if applicable + +### Device Name and Info +(If you don't know this information, please refer to the README for how to find it. Enter N/A if not applicable) +>Device Name: +
Product ID: +
Vendor ID: + +### Response of Controller +Replace this text with information on how the physical controller reacts. Does the guide button light up? Does it vibrate? Etc. + +### Response in Preference Pane +Replace this text with information about the controller's reaction in the preference pane. Does the controller appear in the preference pane? Do all of the buttons, joysticks, and triggers act as expected? + +### Detailed Explaination of Issue +Replace this text with a detailed explaination of your issue. Simply saying "it doesn't work" is a quick way to ensure that your issue is never fixed. Without detailed information on your specific issue, we cannot fix your issue. Including as much information as possible in this section increases the likelyhood of getting your issue quickly and effectively resolved. From 9906724dd5b72e60e8738e5cab97206d130cbc46 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Mon, 28 May 2018 00:07:00 -0500 Subject: [PATCH 159/216] Improve README to reflect new issue template --- Readme.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Readme.md b/Readme.md index 4b867842..087bcb33 100644 --- a/Readme.md +++ b/Readme.md @@ -8,12 +8,13 @@ 5. [My controller doesn't work!](#my-controller-doesnt-work) 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) 2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) - 3. [Original Xbox Controllers](#original-xbox-controllers) - 4. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) - 5. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) - 6. [Xbox One Controllers connected with USB](#xbox-one-controllers-connected-with-usb) - 7. [Xbox One Controllers connected with Wireless Adapter](#xbox-one-controllers-connected-with-wireless-adapter) - 8. [Xbox One Controllers connected with Bluetooth](#xbox-one-controllers-connected-with-bluetooth) + 3. [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) + 4. [Original Xbox Controllers](#original-xbox-controllers) + 5. [Wired Xbox 360 Controllers](#wired-xbox-360-controllers) + 6. [Wireless Xbox 360 Controllers](#wireless-xbox-360-controllers) + 7. [Xbox One Controllers connected with USB](#xbox-one-controllers-connected-with-usb) + 8. [Xbox One Controllers connected with Wireless Adapter](#xbox-one-controllers-connected-with-wireless-adapter) + 9. [Xbox One Controllers connected with Bluetooth](#xbox-one-controllers-connected-with-bluetooth) 6. [Adding Third Party Controllers](#adding-third-party-controllers) 7. [Developer Info](#developer-info) 1. [Building](#building) @@ -69,22 +70,26 @@ The Tattiebogle driver is NOT the same driver as this Github project. We do NOT ### My controller doesn't work with a game! We cannot fix game specific issues. This driver does its absolute best to put out a standardized format for games to use. If they don't take advantage of that, there is **ABSOLUTELY NOTHING** we can do. The best we can do for you is give you the "Pretend to be an Xbox 360 Controller" option in the "Advanced" tab. This will make any wired Xbox 360 or wired Xbox One controller appear to games as if it were an official Microsoft Xbox 360 Controller. That way if the game is only looking for Xbox 360 controllers and isn't looking for other devices like third party Xbox 360 controllers or Xbox One controllers, you should be able to trick the game. If you experience an issue with a game that this toggle does not fix, we cannot help you, sorry. That is just the nature of drivers. +### How do I find my Vendor ID and Product ID? +Navigate to the Apple menu at the top left corner of your screen. Select the `About This Mac` option. This will open a new window, where you need to select `System Report...` in the `Overview` tab. This will open another new window. On the left hand side of this window, there will be a number of options. Select `USB`. It will be somewhere near the bottom of the `Hardware` section. This will show you the USB device tree. Find and click on the entry that corresponds to your controller. This will provide you with the information needed at the bottom of the window. If you cannot find your device, make sure that all devices are properly connected to the computer. Try different cables if the controller still is not found. + ### Original Xbox Controllers Make an issue describing your problem. ### Wired Xbox 360 Controllers Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. -If you have a third party controller, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. ### Wireless Xbox 360 Controllers +**CURRENTLY UNSUPPORTED** Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. ### Xbox One Controllers connected with USB Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. -If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. If you revert to macOS 10.10 or earlier, these controllers will work. +If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. This is specifically found in controllers from PDP and PowerA. If you revert to macOS 10.10 or earlier, these controllers will work. If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. -If you have a third party controller that isn't recognized by the preference pane, make an issue with the "Product ID" and "Vendor ID" of the controller. These can be found by accessing the Apple menu, selecting "About this Mac", and then selecting "System Report..." on the "Overview" tab. On the left hand side of the new window, select the "USB" option under "Hardware". If the controller is plugged in, there should be an entry in this window called "Controller". +If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. **At this time, PDP and PowerA controllers are unsupported by this driver as of macOS 10.11+ thanks to a rewrite of the macOS USB kernel. We cannot resolve this issue. It is a bug in Apple's core OS code.** ### Xbox One Controllers connected with Wireless Adapter From 0c1fac572682d689520f81e2a662b3b421fd4139 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Mon, 28 May 2018 00:11:37 -0500 Subject: [PATCH 160/216] Improve readability Adding some extra formatting to the README to make it slightly easier to read with better paragraph formation. --- Readme.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index 087bcb33..e4935748 100644 --- a/Readme.md +++ b/Readme.md @@ -77,19 +77,19 @@ Navigate to the Apple menu at the top left corner of your screen. Select the `Ab Make an issue describing your problem. ### Wired Xbox 360 Controllers -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. ### Wireless Xbox 360 Controllers **CURRENTLY UNSUPPORTED** -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. ### Xbox One Controllers connected with USB -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. -If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. This is specifically found in controllers from PDP and PowerA. If you revert to macOS 10.10 or earlier, these controllers will work. -If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. -If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. This is specifically found in controllers from PDP and PowerA. If you revert to macOS 10.10 or earlier, these controllers will work. +If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. +If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. **At this time, PDP and PowerA controllers are unsupported by this driver as of macOS 10.11+ thanks to a rewrite of the macOS USB kernel. We cannot resolve this issue. It is a bug in Apple's core OS code.** ### Xbox One Controllers connected with Wireless Adapter @@ -115,7 +115,7 @@ You will need a full installation of Xcode to build this project. The command li The project consists of three main parts: The driver (implemented in C++, as an I/O Kit C++ class), the force feedback plugin (implemented in C, as an I/O Kit COM plugin) and the preference pane (implemented in Objective C as a preference pane plugin). To build, use the standard Xcode build for Deployment on each of the 3 projects. Build Feedback360 before 360Controller, as the 360Controller project includes a script to copy the Feedback360 bundle to the correct place in the .kext to make it work. -To debug the driver, sudo cp -R 360Controller.kext /tmp/ to assign the correct properties - note that the Force Feedback plugin only seems to be found by OSX if the driver is in /System/Library/Extensions so it can only be debugged in place. Due to the fact that drivers are now stored in /Library/Extenions, this means that you must create a symlink between the location of the driver and /System/Library/Extensions so that the force feedback plugin can operate properly. +To debug the driver, `sudo cp -R 360Controller.kext /tmp/` to assign the correct properties - note that the Force Feedback plugin only seems to be found by OSX if the driver is in /System/Library/Extensions so it can only be debugged in place. Due to the fact that drivers are now stored in /Library/Extenions, this means that you must create a symlink between the location of the driver and /System/Library/Extensions so that the force feedback plugin can operate properly. ### Building the .pkg From 3b0516342bd12cfc7538c396f0166667a151e8f4 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Mon, 28 May 2018 00:12:48 -0500 Subject: [PATCH 161/216] Move issue_template to be more visible --- .github/issue_template.md => issue_template.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/issue_template.md => issue_template.md (100%) diff --git a/.github/issue_template.md b/issue_template.md similarity index 100% rename from .github/issue_template.md rename to issue_template.md From a2ae138d5e2e8d0974fae761db29fe5597ec7b47 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 29 May 2018 10:26:14 -0500 Subject: [PATCH 162/216] Add MagicKeys to README Trying to keep a fairly comprehensive list of software that interferes with that dang "accept" button. --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index e4935748..ee0f8189 100644 --- a/Readme.md +++ b/Readme.md @@ -50,7 +50,7 @@ See the [releases page](https://github.com/360Controller/360Controller/releases) ![System prompt: System Extension Blocked](https://imgur.com/zXM5JlU.png) You can either click "Open Security Preferences" to quickly fix this. If you didn't see this prompt, you can navigate to the same window using the Apple menu in the top left hand corner of your screen, navigating the "System Preferences" and then clicking on "Security & Privacy." This will open up the following page. All you need to do is click the "Allow" button near the bottom right. ![Security & Privacy Preference Pane displaying prompt to user: System software from user "Drew Mills" was blocked from loading](https://imgur.com/HrL77Ii.png) -This prompt has been known to have issues with software or hardware that interferes with mouse movement. If you are using software that impacts the movement of your mouse, or are using a special interface device, such as a Wacom tablet, please using a standard input device, such as a mouse, to click this button. This is a security feature of macOS and is out of our control. +This prompt has been known to have issues with software or hardware that interferes with mouse movement. If you are using software that impacts the movement of your mouse, such as MagicKeys, or are using a special interface device, such as a Wacom tablet, please using a standard input device, such as a mouse, to click this button. This is a security feature of macOS and is out of our control. ## Uninstallation In order to uninstall the driver: navigate to the preference pane by opening your "System Preferences," navigating to the "Xbox 360 Controllers" pane, clicking on the "Advanced" tab and pressing the "Uninstall" button. This will prompt you to enter your password so that the uninstaller can remove all of the bundled software from your machine. From c3f594ab26beb2e3d966b2c2aee9ca5c6768e926 Mon Sep 17 00:00:00 2001 From: KAMiKAZOW Date: Thu, 31 May 2018 17:50:22 +0200 Subject: [PATCH 163/216] Update insteller texts (#687) --- Install360Controller/Text/Readme.rtf | 6 +++--- Install360Controller/Text/Welcome.rtf | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Install360Controller/Text/Readme.rtf b/Install360Controller/Text/Readme.rtf index 03a79ef6..2fe80874 100644 --- a/Install360Controller/Text/Readme.rtf +++ b/Install360Controller/Text/Readme.rtf @@ -12,8 +12,8 @@ \pard\pardeftab720\sa283 \b0\fs24 \cf0 This driver supports the -\b Microsoft Xbox 360 controller, Original Xbox Controller, Xbox One Controller -\b0 and various licensed third party controllers from brands like Hori, MadCatz, Logitech, etc. Including access to rumble motors and LEDs, on the Mac OS X platform. It includes a plugin for the Apple Force Feedback Framework so some games will be able to activate them, along with a Preference Pane with which allows you to test everything is installed correctly. Both wire controllers connected via USB, and wireless 360 controllers connected via the Wireless Gaming Receiver for Windows, are supported.\ +\b Microsoft Xbox 360 controller, Original Xbox Controller, Xbox One Controller +\b0 , and various licensed third party controllers from brands like Hori, MadCatz, Logitech, etc. Including access to rumble motors and LEDs, on the macOS platform. It includes a plugin for the Apple Force Feedback Framework so some games will be able to activate them, along with a Preference Pane with which allows you to test everything is installed correctly. Both wire controllers connected via USB and Bluetooth Xbox One S controllers. Wireless 360 controllers, connected via the Wireless Gaming Receiver for Windows, are NOT supported.\ This project is a fork of the {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt \cf2 \ul \ulc0 Xbox360Controller project}} originally created by Colin Munro, and includes hard work from {\field{\*\fldinst{HYPERLINK "https://github.com/d235j/"}}{\fldrslt d235j}} (who forked the project and fixed Force Feedback), {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane"}}{\fldrslt C.W. Betts}} (dozens of improvements and fixes!), {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}} (Xbox One Controller support and other improvements), {\field{\*\fldinst{HYPERLINK "https://github.com/kasbert"}}{\fldrslt kasbert}} (Original Xbox Controller Support), {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}} (User Interface overhaul), {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}} (kext sign and some scripts) and others (please forgive us if we forgot to include someone).\ \pard\pardeftab720\sb200\sa120 @@ -27,7 +27,7 @@ If you are interested in installing as a developer please see below.\ \b\fs36 \cf0 Usage\ \pard\pardeftab720\sa283 -\b0\fs24 \cf0 The driver exposes a standard game pad with a number of standard controls, so any game that supports gaming devices should work. In some cases this may need an update from the manufacturer of the game or a patched version. The Preference Pane uses the standard Mac OS X Frameworks for accessing HID devices and accessing Force Feedback capabilities, so should be a good test that the installation is functional.\ +\b0\fs24 \cf0 The driver exposes a standard game pad with a number of standard controls, so any game that supports gaming devices should work. In some cases this may need an update from the manufacturer of the game or a patched version. The Preference Pane uses the standard macOS Frameworks for accessing HID devices and accessing Force Feedback capabilities, so should be a good test that the installation is functional.\ \pard\pardeftab720\sb200\sa120 \b\fs36 \cf0 Developer info\ diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 17f23435..392d838e 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -40,9 +40,10 @@ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b0\fs24 \cf0 Version 0.16.7\ -Copyright (C) 2005-2013 Colin Munro\ +Copyright \'a9 2005\'962013 Colin Munro\ +Copyright \'a9 2013\'962018 {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/graphs/contributors"}}{\fldrslt 360Controller contributors}}\ \ -Welcome to the installer for the Xbox 360 Controller driver for Mac OS X.\ +Welcome to the installer for the Xbox 360 Controller driver for macOS.\ \b \ Update 0.16.7: 05/16/2018\ @@ -62,7 +63,7 @@ Update 0.16.6: 04/03/2018\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\b \cf0 \'95 REMOVE XBOX 360 WIRELESS DRIVER +\b \cf0 \'95 REMOVED XBOX 360 WIRELESS DRIVER \b0 \ \'95 Enhancements for Bluetooth Xbox One S controllers\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 From 848187f2dfb36afea4ccd74bb2752a8fa864f99b Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 31 May 2018 23:22:49 -0500 Subject: [PATCH 164/216] Collection of fixes for long standing bugs (#688) * Resolve Xbox One Guide button stick Applies to 2016 Xbox One Controllers Applies to Xbox One S Controllers * Remove trailing spaces from .gitignore * Add xcconfig * Clean up some build settings * Update project to use xcconfig for debug builds * Fix issues with wired controller force feedback * Add note about Unity mappings * Remove trailing whitespace from README * Re-add Chatpad Code * Update instructions for debugging PrefPane * Resolve settings issues Settings no longer stored in /Library/Preferences Now stored in ~/Library/Preferences/ByHost Settings should now be stored per-user, and should no longer have issues with failure to be retained. * Fix rumble options Rumble options now correctly show up for Xbox One controller * Remove buggy naming scheme * Add some Xbox One LED packet information * Modify Xbox One init packets * Fix typo in Xbox One LED spec * Text changes for 0.16.8 * Fix source of retain --- .gitignore | 7 +- 360 Driver.xcodeproj/project.pbxproj | 174 ++++++++++++++++-- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + 360Controller/Controller.cpp | 48 +++++ 360Controller/_60Controller.cpp | 15 +- 360Controller/_60Controller.h | 1 + 360Daemon/ControlPrefs.m | 16 +- .../Install360Controller.pkgproj | 81 ++++++-- Install360Controller/Scripts/finish.sh | 6 +- Install360Controller/Text/Welcome.rtf | 119 ++++++------ Pref360Control/DeviceItem.m | 2 - Pref360Control/Pref360ControlPref.m | 24 +-- .../en.lproj/Pref360ControlPref.xib | 8 +- Readme.md | 46 +++-- build.sh | 9 +- 15 files changed, 419 insertions(+), 145 deletions(-) create mode 100644 360 Driver.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/.gitignore b/.gitignore index 07868758..cf1bc2ef 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ # ######################### +# Xcode configuration files used for storing developer information +*.xcconfig + ##### # OS X temporary files that should never be committed # @@ -31,7 +34,7 @@ *.swp # *.lock - this is used and abused by many editors for many different things. -# For the main ones I use (e.g. Eclipse), it should be excluded +# For the main ones I use (e.g. Eclipse), it should be excluded # from source-control, but YMMV *.lock @@ -43,7 +46,7 @@ #### # Xcode temporary files that should never be committed -# +# # NB: NIB/XIB files still exist even on Storyboard projects, so we want this... *~.nib diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index d6c7b06f..b402765d 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -58,8 +58,6 @@ 55B636C218C104DB00CE933D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55B636C018C104DB00CE933D /* InfoPlist.strings */; }; 55B6371618C1058E00CE933D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55B636F918C1054F00CE933D /* InfoPlist.strings */; }; 55B6371718C105B800CE933D /* _60Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B636EF18C1054F00CE933D /* _60Controller.cpp */; }; - 55B6371818C105B800CE933D /* ChatPad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B636F118C1054F00CE933D /* ChatPad.cpp */; }; - 55B6371918C105B800CE933D /* chatpadkeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B636F418C1054F00CE933D /* chatpadkeys.cpp */; }; 55B6371A18C105B800CE933D /* Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B636F618C1054F00CE933D /* Controller.cpp */; }; 55B6372118C108A500CE933D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B6372018C108A500CE933D /* CoreFoundation.framework */; }; 55B6373C18C108D200CE933D /* devlink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B6372D18C108D200CE933D /* devlink.cpp */; }; @@ -67,9 +65,6 @@ 55B6373E18C108D200CE933D /* Feedback360.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B6373118C108D200CE933D /* Feedback360.cpp */; }; 55B6373F18C108D200CE933D /* Feedback360Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B6373618C108D200CE933D /* Feedback360Effect.cpp */; }; 55B6374F18C1098D00CE933D /* _60Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F018C1054F00CE933D /* _60Controller.h */; }; - 55B6375018C1098D00CE933D /* ChatPad.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F218C1054F00CE933D /* ChatPad.h */; }; - 55B6375118C1098D00CE933D /* chatpadhid.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F318C1054F00CE933D /* chatpadhid.h */; }; - 55B6375218C1098D00CE933D /* chatpadkeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F518C1054F00CE933D /* chatpadkeys.h */; }; 55B6375318C1098D00CE933D /* Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F718C1054F00CE933D /* Controller.h */; }; 55B6375418C1098D00CE933D /* ControlStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636F818C1054F00CE933D /* ControlStruct.h */; }; 55B6375518C1098D00CE933D /* xbox360hid.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B636FD18C1054F00CE933D /* xbox360hid.h */; }; @@ -110,6 +105,11 @@ 55FE3CAD18D7B7B600D69E84 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55FE3CAC18D7B7B600D69E84 /* SDL2.framework */; }; 5B943BE11A83EC6600E77A79 /* MyAnalogStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B943BDF1A83EC6600E77A79 /* MyAnalogStick.h */; }; 5B943BE21A83EC6600E77A79 /* MyAnalogStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B943BE01A83EC6600E77A79 /* MyAnalogStick.m */; }; + 62035D1620C04F7D003E70C1 /* chatpadkeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 62035D1120C04F7D003E70C1 /* chatpadkeys.h */; }; + 62035D1720C04F7D003E70C1 /* chatpadkeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62035D1220C04F7D003E70C1 /* chatpadkeys.cpp */; }; + 62035D1820C04F7D003E70C1 /* chatpadhid.h in Headers */ = {isa = PBXBuildFile; fileRef = 62035D1320C04F7D003E70C1 /* chatpadhid.h */; }; + 62035D1920C04F7D003E70C1 /* ChatPad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62035D1420C04F7D003E70C1 /* ChatPad.cpp */; }; + 62035D1A20C04F7D003E70C1 /* ChatPad.h in Headers */ = {isa = PBXBuildFile; fileRef = 62035D1520C04F7D003E70C1 /* ChatPad.h */; }; 622A73C21A7C339000784C02 /* MyWhole360ControllerMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 622A73C01A7C339000784C02 /* MyWhole360ControllerMapper.h */; }; 622A73C31A7C339000784C02 /* MyWhole360ControllerMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */; }; 622A73CE1A7C879300784C02 /* BindingTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 622A73CC1A7C879300784C02 /* BindingTableView.h */; }; @@ -278,11 +278,6 @@ 55B636C518C104DB00CE933D /* 360DaemonApp-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "360DaemonApp-Prefix.pch"; sourceTree = ""; }; 55B636EF18C1054F00CE933D /* _60Controller.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = _60Controller.cpp; sourceTree = ""; }; 55B636F018C1054F00CE933D /* _60Controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _60Controller.h; sourceTree = ""; }; - 55B636F118C1054F00CE933D /* ChatPad.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ChatPad.cpp; sourceTree = ""; }; - 55B636F218C1054F00CE933D /* ChatPad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChatPad.h; sourceTree = ""; }; - 55B636F318C1054F00CE933D /* chatpadhid.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chatpadhid.h; sourceTree = ""; }; - 55B636F418C1054F00CE933D /* chatpadkeys.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = chatpadkeys.cpp; sourceTree = ""; usesTabs = 1; }; - 55B636F518C1054F00CE933D /* chatpadkeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chatpadkeys.h; sourceTree = ""; }; 55B636F618C1054F00CE933D /* Controller.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Controller.cpp; sourceTree = ""; }; 55B636F718C1054F00CE933D /* Controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = ""; }; 55B636F818C1054F00CE933D /* ControlStruct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ControlStruct.h; sourceTree = ""; }; @@ -347,10 +342,16 @@ 55FE3CAC18D7B7B600D69E84 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; 5B943BDF1A83EC6600E77A79 /* MyAnalogStick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyAnalogStick.h; sourceTree = ""; }; 5B943BE01A83EC6600E77A79 /* MyAnalogStick.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyAnalogStick.m; sourceTree = ""; }; + 62035D1120C04F7D003E70C1 /* chatpadkeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chatpadkeys.h; sourceTree = ""; }; + 62035D1220C04F7D003E70C1 /* chatpadkeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chatpadkeys.cpp; sourceTree = ""; }; + 62035D1320C04F7D003E70C1 /* chatpadhid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chatpadhid.h; sourceTree = ""; }; + 62035D1420C04F7D003E70C1 /* ChatPad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChatPad.cpp; sourceTree = ""; }; + 62035D1520C04F7D003E70C1 /* ChatPad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatPad.h; sourceTree = ""; }; 622A73C01A7C339000784C02 /* MyWhole360ControllerMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyWhole360ControllerMapper.h; sourceTree = ""; }; 622A73C11A7C339000784C02 /* MyWhole360ControllerMapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyWhole360ControllerMapper.m; sourceTree = ""; }; 622A73CC1A7C879300784C02 /* BindingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BindingTableView.h; sourceTree = ""; }; 622A73CD1A7C879300784C02 /* BindingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BindingTableView.m; sourceTree = ""; }; + 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DeveloperSettings.xcconfig; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -440,6 +441,7 @@ 551CDFFE196EFD0A000869B6 /* Distribution */ = { isa = PBXGroup; children = ( + 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */, 551CDFFF196EFD34000869B6 /* Install360Controller.pkgproj */, 551CE000196EFD34000869B6 /* Scripts */, 551CE003196EFD34000869B6 /* Text */, @@ -635,11 +637,11 @@ children = ( 55B636F018C1054F00CE933D /* _60Controller.h */, 55B636EF18C1054F00CE933D /* _60Controller.cpp */, - 55B636F218C1054F00CE933D /* ChatPad.h */, - 55B636F118C1054F00CE933D /* ChatPad.cpp */, - 55B636F318C1054F00CE933D /* chatpadhid.h */, - 55B636F518C1054F00CE933D /* chatpadkeys.h */, - 55B636F418C1054F00CE933D /* chatpadkeys.cpp */, + 62035D1520C04F7D003E70C1 /* ChatPad.h */, + 62035D1420C04F7D003E70C1 /* ChatPad.cpp */, + 62035D1320C04F7D003E70C1 /* chatpadhid.h */, + 62035D1120C04F7D003E70C1 /* chatpadkeys.h */, + 62035D1220C04F7D003E70C1 /* chatpadkeys.cpp */, 55B636F718C1054F00CE933D /* Controller.h */, 55B636F618C1054F00CE933D /* Controller.cpp */, 55B636F818C1054F00CE933D /* ControlStruct.h */, @@ -753,12 +755,12 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 55B6375218C1098D00CE933D /* chatpadkeys.h in Headers */, 55B6375318C1098D00CE933D /* Controller.h in Headers */, 55B6375518C1098D00CE933D /* xbox360hid.h in Headers */, - 55B6375018C1098D00CE933D /* ChatPad.h in Headers */, - 55B6375118C1098D00CE933D /* chatpadhid.h in Headers */, + 62035D1620C04F7D003E70C1 /* chatpadkeys.h in Headers */, + 62035D1A20C04F7D003E70C1 /* ChatPad.h in Headers */, 55B6374F18C1098D00CE933D /* _60Controller.h in Headers */, + 62035D1820C04F7D003E70C1 /* chatpadhid.h in Headers */, 55B6375418C1098D00CE933D /* ControlStruct.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -993,9 +995,49 @@ TargetAttributes = { 5579513D1F73006F001880D1 = { CreatedOnToolsVersion = 9.0; + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; }; 55ACBFDF1D5B9E2E00E4F677 = { CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B636B318C104DB00CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6370618C1057100CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6371E18C108A500CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6375F18C10A3200CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6377C18C10B0B00CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B637E718C10D5000CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6380D18C10E8700CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55B6383818C10F8E00CE933D = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; + }; + 55FE3CA018D7B77800D69E84 = { + DevelopmentTeam = G947KKM5RL; + ProvisioningStyle = Manual; }; }; }; @@ -1125,9 +1167,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 55B6371918C105B800CE933D /* chatpadkeys.cpp in Sources */, + 62035D1720C04F7D003E70C1 /* chatpadkeys.cpp in Sources */, + 62035D1920C04F7D003E70C1 /* ChatPad.cpp in Sources */, 55B6371718C105B800CE933D /* _60Controller.cpp in Sources */, - 55B6371818C105B800CE933D /* ChatPad.cpp in Sources */, 55B6371A18C105B800CE933D /* Controller.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1328,6 +1370,7 @@ /* Begin XCBuildConfiguration section */ 557951411F73006F001880D1 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -1341,6 +1384,8 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -1350,6 +1395,8 @@ ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XBOBTFF; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; WRAPPER_EXTENSION = plugin; }; @@ -1357,6 +1404,7 @@ }; 557951421F73006F001880D1 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; @@ -1370,6 +1418,8 @@ CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -1379,6 +1429,8 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XBOBTFF; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; WRAPPER_EXTENSION = plugin; }; @@ -1386,9 +1438,12 @@ }; 55ACBFE51D5B9E2F00E4F677 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -1400,15 +1455,19 @@ MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XboxOneBluetooth; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Debug; }; 55ACBFE61D5B9E2F00E4F677 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_WARN_UNREACHABLE_CODE = YES; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -1420,12 +1479,14 @@ MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.mice.driver.XboxOneBluetooth; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Release; }; 55B636E318C104DB00CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1474,6 +1535,7 @@ }; 55B636E418C104DB00CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; @@ -1515,65 +1577,85 @@ }; 55B636E618C104DB00CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = 360Control; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "360Daemon/360DaemonApp-Prefix.pch"; INFOPLIST_FILE = "360Daemon/360DaemonApp-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Application Support/MICE"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = app; }; name = Debug; }; 55B636E718C104DB00CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = 360Control; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "360Daemon/360DaemonApp-Prefix.pch"; INFOPLIST_FILE = "360Daemon/360DaemonApp-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Application Support/MICE"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = app; }; name = Release; }; 55B6371418C1057100CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = 360Controller/Info.plist; MODULE_NAME = com.mice.driver.Xbox360Controller; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Debug; }; 55B6371518C1057100CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = 360Controller/Info.plist; MODULE_NAME = com.mice.driver.Xbox360Controller; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Release; }; 55B6372A18C108A500CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; EXPORTED_SYMBOLS_FILE = Feedback360/Feedback360.exp; INFOPLIST_FILE = Feedback360/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; WRAPPER_EXTENSION = plugin; }; @@ -1581,14 +1663,18 @@ }; 55B6372B18C108A500CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; EXPORTED_SYMBOLS_FILE = Feedback360/Feedback360.exp; INFOPLIST_FILE = Feedback360/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; WRAPPER_EXTENSION = plugin; }; @@ -1596,20 +1682,27 @@ }; 55B6376818C10A3200CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = DriverTool/DriverTool_Prefix.pch; INFOPLIST_FILE = DriverTool/Info.plist; MACH_O_TYPE = mh_execute; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; }; name = Debug; }; 55B6376918C10A3200CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = YES; DEAD_CODE_STRIPPING = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -1617,14 +1710,18 @@ INFOPLIST_FILE = DriverTool/Info.plist; MACH_O_TYPE = mh_execute; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; SKIP_INSTALL = YES; }; name = Release; }; 55B6379118C10B0B00CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = 360Control; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; DEPLOYMENT_LOCATION = NO; DSTROOT = /; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -1636,14 +1733,18 @@ INFOPLIST_FILE = Pref360Control/Info.plist; INSTALL_PATH = "${LOCAL_LIBRARY_DIR}/PreferencePanes"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = prefPane; }; name = Debug; }; 55B6379218C10B0B00CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = 360Control; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEPLOYMENT_LOCATION = NO; DSTROOT = /; @@ -1656,75 +1757,103 @@ INFOPLIST_FILE = Pref360Control/Info.plist; INSTALL_PATH = "${LOCAL_LIBRARY_DIR}/PreferencePanes"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = prefPane; }; name = Release; }; 55B637F418C10D5000CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = Wireless360Controller/Info.plist; MODULE_NAME = com.mice.driver.Wireless360Controller; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Debug; }; 55B637F518C10D5000CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = Wireless360Controller/Info.plist; MODULE_NAME = com.mice.driver.Wireless360Controller; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Release; }; 55B6381A18C10E9500CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = WirelessGamingReceiver/Info.plist; MODULE_NAME = com.mice.driver.WirelessGamingReceiver; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Debug; }; 55B6381B18C10E9500CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "compiler-default"; + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; INFOPLIST_FILE = WirelessGamingReceiver/Info.plist; MODULE_NAME = com.mice.driver.WirelessGamingReceiver; MODULE_VERSION = "${CURRENT_PROJECT_VERSION}"; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; WRAPPER_EXTENSION = kext; }; name = Release; }; 55B6383A18C10F8E00CE933D /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; + CODE_SIGN_STYLE = Manual; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; }; name = Debug; }; 55B6383B18C10F8E00CE933D /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; + CODE_SIGN_STYLE = Manual; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; }; name = Release; }; 55FE3CA818D7B77800D69E84 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(LOCAL_LIBRARY_DIR)/Frameworks", @@ -1732,12 +1861,16 @@ GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LD_RUNPATH_SEARCH_PATHS = /Library/Frameworks; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; }; name = Debug; }; 55FE3CA918D7B77800D69E84 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 62DD3D4920C044980073EC19 /* DeveloperSettings.xcconfig */; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(LOCAL_LIBRARY_DIR)/Frameworks", @@ -1745,6 +1878,7 @@ GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LD_RUNPATH_SEARCH_PATHS = /Library/Frameworks; PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.10; }; name = Release; }; diff --git a/360 Driver.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/360 Driver.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/360 Driver.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 4028961b..67867f64 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -516,6 +516,12 @@ typedef struct { UInt8 dummy; } PACKED XBOXONE_IN_GUIDE_REPORT; +typedef struct { + XBOXONE_HEADER header; + UInt8 data[4]; + UInt8 zero[5]; +} PACKED XBOXONE_OUT_GUIDE_REPORT; + typedef struct { XBOXONE_HEADER header; UInt8 mode; // So far always 0x00 @@ -527,6 +533,13 @@ typedef struct { UInt8 extra; } PACKED XBOXONE_OUT_RUMBLE; +typedef struct { + XBOXONE_HEADER header; // 0x0a 0x20 0x04 0x03 + UInt8 zero; + UInt8 command; + UInt8 brightness; // 0x00 - 0x20 +} PACKED XBOXONE_OUT_LED; + typedef enum { XONE_SYNC = 0x0001, // Bit 00 XONE_MENU = 0x0004, // Bit 02 @@ -553,6 +566,25 @@ typedef enum { XONE_PADDLE_PRESET_NUM = 0x0010, // Bit 04 } GAMEPAD_XONE_ELITE_PADDLE; +typedef enum { + XONE_LED_OFF_1 = 0x00, + XONE_LED_SOLID = 0x01, + XONE_LED_BLINK_FAST = 0x02, + XONE_LED_BLINK_SLOW = 0x03, + XONE_LED_BLINK_VERY_SLOW = 0x04, + XONE_LED_SOLD_1 = 0x05, + XONE_LED_SOLD_2 = 0x06, + XONE_LED_SOLD_3 = 0x07, + XONE_LED_PHASE_SLOW = 0x08, + XONE_LED_PHASE_FAST = 0x09, + XONE_LED_REBOOT_1 = 0x0a, + XONE_LED_OFF = 0x0b, + XONE_LED_FLICKER = 0x0c, + XONE_LED_SOLID_4 = 0x0d, + XONE_LED_SOLID_5 = 0x0e, + XONE_LED_REBOOT_2 = 0x0f, +} LED_XONE; + OSDefineMetaClassAndStructors(XboxOneControllerClass, Xbox360ControllerClass) OSString* XboxOneControllerClass::newProductString() const @@ -637,6 +669,22 @@ IOReturn XboxOneControllerClass::handleReport(IOMemoryDescriptor * descriptor, I if ((report->header.command==0x07) && (report->header.size==(sizeof(XBOXONE_IN_GUIDE_REPORT)-4))) { XBOXONE_IN_GUIDE_REPORT *guideReport=(XBOXONE_IN_GUIDE_REPORT*)report; + + if (guideReport->header.reserved1 == 0x30) // 2016 Controller + { + XBOXONE_OUT_GUIDE_REPORT outReport = {}; + outReport.header.command = 0x01; + outReport.header.reserved1 = 0x20; + outReport.header.counter = guideReport->header.counter; + outReport.header.size = 0x09; + outReport.data[0] = 0x00; + outReport.data[1] = 0x07; + outReport.data[2] = 0x20; + outReport.data[3] = 0x02; + + GetOwner(this)->QueueWrite(&outReport, 13); + } + isXboxOneGuideButtonPressed = (bool)guideReport->state; XBOX360_IN_REPORT *oldReport = (XBOX360_IN_REPORT*)lastData; oldReport->buttons ^= (-isXboxOneGuideButtonPressed ^ oldReport->buttons) & (1 << GetOwner(this)->mapping[10]); diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index f257a868..0d451a59 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -524,13 +524,16 @@ bool Xbox360Peripheral::start(IOService *provider) if (!QueueRead()) goto fail; if (controllerType == XboxOne || controllerType == XboxOnePretend360) { - UInt8 xoneInit0[] = { 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x80, 0x00 }; - UInt8 xoneInit1[] = { 0x05, 0x20, 0x03, 0x01, 0x00 }; + UInt8 xoneInit0[] = { 0x01, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x00, 0x00, 0x00, 0x80, 0x00 }; + UInt8 xoneInit1[] = { 0x05, 0x20, 0x00, 0x01, 0x00 }; UInt8 xoneInit2[] = { 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, + 0x1D, 0x1D, 0xFF, 0x00, 0x00 }; + UInt8 xoneInit3[] = { 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; QueueWrite(&xoneInit0, sizeof(xoneInit0)); QueueWrite(&xoneInit1, sizeof(xoneInit1)); QueueWrite(&xoneInit2, sizeof(xoneInit2)); + QueueWrite(&xoneInit3, sizeof(xoneInit3)); } else { // Disable LED Xbox360_Prepare(led,outLed); @@ -612,9 +615,17 @@ bool Xbox360Peripheral::QueueWrite(const void *bytes,UInt32 length) } } +bool Xbox360Peripheral::willTerminate(IOService *provider, IOOptionBits options) +{ + ReleaseAll(); + + return super::willTerminate(provider, options); +} + void Xbox360Peripheral::stop(IOService *provider) { ReleaseAll(); + super::stop(provider); } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index b94554b9..cccf9c11 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -128,6 +128,7 @@ class Xbox360Peripheral : public IOService virtual void free(void); bool start(IOService *provider); + bool willTerminate(IOService *provider, IOOptionBits options); void stop(IOService *provider); // IOKit methods. These methods are defines in diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 918245c2..a69ed673 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -45,15 +45,15 @@ BOOL AlertDisabled(NSInteger index) void SetController(NSString *serial, NSDictionary *data) { - CFPreferencesSetValue((__bridge CFStringRef)serial, (__bridge CFPropertyListRef)(data), DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSetValue((__bridge CFStringRef)serial, (__bridge CFPropertyListRef)(data), DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); } NSDictionary* GetController(NSString *serial) { CFPropertyListRef value; - CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - value = CFPreferencesCopyValue((__bridge CFStringRef)serial, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + value = CFPreferencesCopyValue((__bridge CFStringRef)serial, DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); return CFBridgingRelease(value); } @@ -75,8 +75,8 @@ void SetKnownDevices(NSDictionary *devices) { // Setting the dictionary should work? NSData *data = [NSKeyedArchiver archivedDataWithRootObject:devices]; - CFPreferencesSetValue((CFStringRef)D_KNOWNDEV, (__bridge CFPropertyListRef)(data), DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSetValue((CFStringRef)D_KNOWNDEV, (__bridge CFPropertyListRef)(data), DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); } NSDictionary* GetKnownDevices(void) @@ -84,8 +84,8 @@ void SetKnownDevices(NSDictionary *devices) CFPropertyListRef value; NSData *data; - CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - value = CFPreferencesCopyValue((CFStringRef)D_KNOWNDEV, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + value = CFPreferencesCopyValue((CFStringRef)D_KNOWNDEV, DOM_CONTROLLERS, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); data = CFBridgingRelease(value); if (data == nil) return nil; diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj index 3323b2ca..89bf4938 100644 --- a/Install360Controller/Install360Controller.pkgproj +++ b/Install360Controller/Install360Controller.pkgproj @@ -5,6 +5,10 @@ PACKAGES + MUST-CLOSE-APPLICATION-ITEMS + + MUST-CLOSE-APPLICATIONS + PACKAGE_FILES DEFAULT_INSTALL_LOCATION @@ -313,6 +317,18 @@ CHILDREN + BUNDLE_CAN_DOWNGRADE + + BUNDLE_POSTINSTALL_PATH + + PATH_TYPE + 0 + + BUNDLE_PREINSTALL_PATH + + PATH_TYPE + 0 + CHILDREN GID @@ -384,7 +400,7 @@ PATH_TYPE 0 PERMISSIONS - 493 + 1005 TYPE 1 UID @@ -486,6 +502,22 @@ UID 0 + + CHILDREN + + GID + 0 + PATH + Automator + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + GID 0 @@ -599,8 +631,14 @@ PAYLOAD_TYPE 0 + SHOW_INVISIBLE + + SPLIT_FORKS + + TREAT_MISSING_FILES_AS_WARNING + VERSION - 2 + 5 PACKAGE_SCRIPTS @@ -627,15 +665,29 @@ 1 CONCLUSION_ACTION 2 + FOLLOW_SYMBOLIC_LINKS + IDENTIFIER com.mice.pkg.Xbox360controller + LOCATION + 0 NAME Install360Controller OVERWRITE_PERMISSIONS + PAYLOAD_SIZE + -1 + REFERENCE_PATH + + RELOCATABLE + + USE_HFS+_COMPRESSION + VERSION - 0.15 + 0.16 + TYPE + 0 UUID 95C3DB03-4C99-4A29-AEC7-C73B3D9F6A04 @@ -661,6 +713,8 @@ PROJECT_PRESENTATION + BACKGROUND + INSTALLATION TYPE HIERARCHIES @@ -697,8 +751,6 @@ - INSTALLATION TYPE - 0 MODE 1 @@ -780,8 +832,6 @@ LICENSE - KEYWORDS - LOCALIZATIONS @@ -862,10 +912,6 @@ - POSTINSTALL_PATH - - PREINSTALL_PATH - RESOURCES ROOT_VOLUME_ONLY @@ -873,8 +919,6 @@ PROJECT_SETTINGS - ADVANCED_OPTIONS - BUILD_FORMAT 0 BUILD_PATH @@ -884,13 +928,6 @@ PATH_TYPE 1 - CERTIFICATE - - NAME - Developer ID Application: Rodrigo Rocha (CDMF3S9CTN) - PATH - /Users/Rodrigo/Library/Keychains/login.keychain - EXCLUDED_FILES @@ -1061,6 +1098,10 @@ NAME Install360Controller + PAYLOAD_ONLY + + TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING + TYPE diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh index 224c5e6a..ed1fa640 100644 --- a/Install360Controller/Scripts/finish.sh +++ b/Install360Controller/Scripts/finish.sh @@ -1,11 +1,11 @@ #!/bin/sh #This is to fix a bug in Yosemite. -# /bin/ln -s /Library/Extensions/360Controller.kext /System/Library/Extensions/ +/bin/ln -s /Library/Extensions/360Controller.kext /System/Library/Extensions/ -# /usr/bin/touch /System/Library/Extensions +/usr/bin/touch /System/Library/Extensions /usr/bin/touch /Library/Extensions -/usr/bin/touch /Library/Preferences/com.mice.driver.Xbox360Controller.devices.plist + /bin/launchctl load -w /Library/LaunchDaemons/com.mice.360Daemon.plist exit 0 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 392d838e..18d268cc 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -31,21 +31,36 @@ {\list\listtemplateid27\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid27} {\list\listtemplateid28\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid28} {\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid29} -{\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid30}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}} +{\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid30} +{\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid3001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid31}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.7\ +\b0\fs24 \cf0 Version 0.16.8\ Copyright \'a9 2005\'962013 Colin Munro\ Copyright \'a9 2013\'962018 {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/graphs/contributors"}}{\fldrslt 360Controller contributors}}\ \ Welcome to the installer for the Xbox 360 Controller driver for macOS.\ \b \ +Update 0.16.8: 05/31/2018\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Fixes for Xbox One guide button issues\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes force feedback issues present since 0.16.6\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Issues involving settings failing to be saved should be resolved\ + \'95 Appropriate rumble options should now be visible for Xbox One controllers in the preference pane +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.7: 05/16/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 @@ -53,7 +68,7 @@ Update 0.16.7: 05/16/2018\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 DMG fixes for macOS earlier than 10.13\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \uc0\u8226 }New devices +\ls2\ilvl0\cf0 {\listtext \uc0\u8226 }New devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -67,9 +82,9 @@ Update 0.16.6: 04/03/2018\ \b0 \ \'95 Enhancements for Bluetooth Xbox One S controllers\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ +\ls3\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0 +\ls3\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 New devices \b \ @@ -92,11 +107,11 @@ Update 0.16.4: 08/28/2016\ \cf0 \'95 Tons of new devices including the wired version of the new Xbox One controller\ \'95 Third party Xbox 360 controllers can pretend to be Microsoft ones for better game compatibility\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \uc0\u8226 }Wireless controllers show a raw battery percentage value now\ +\ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Wireless controllers show a raw battery percentage value now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Preference pane doesn't complain about constraints in the Console anymore\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ +\ls5\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Enable/disable feature is more stable \b \ @@ -107,7 +122,7 @@ Update 0.16.3: 07/14/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ +\ls6\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Third party Xbox One controllers still don't work, though \b \ @@ -118,7 +133,7 @@ Update 0.16.2: 07/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization +\ls7\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -127,7 +142,7 @@ Update 0.16.1: 07/06/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +\ls8\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -137,21 +152,21 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +\ls9\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ +\ls10\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0 +\ls10\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Settings load properly\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \uc0\u8226 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \uc0\u8226 } \b0 New rumble options for Xbox One controllers\ -\ls9\ilvl0 +\ls10\ilvl0 \b {\listtext \uc0\u8226 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -160,7 +175,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ +\ls11\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ {\listtext \uc0\u8226 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -169,9 +184,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ +\ls12\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0 +\ls12\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Fix Xbox One rumble. \b \ @@ -181,15 +196,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ +\ls13\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0 +\ls13\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Added various new Xbox 360 controllers.\ -\ls12\ilvl0 +\ls13\ilvl0 \b {\listtext \uc0\u8226 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls12\ilvl0 +\ls13\ilvl0 \b {\listtext \uc0\u8226 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -199,7 +214,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls14\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -207,7 +222,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ +\ls15\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ {\listtext \uc0\u8226 }Swappable sticks\ {\listtext \uc0\u8226 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -217,19 +232,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls16\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \uc0\u8226 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0 +\ls16\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls15\ilvl0 +\ls16\ilvl0 \b {\listtext \uc0\u8226 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls15\ilvl0 +\ls16\ilvl0 \b {\listtext \uc0\u8226 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls15\ilvl0 +\ls16\ilvl0 \b {\listtext \uc0\u8226 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -239,16 +254,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0 +\ls17\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls16\ilvl0 +\ls17\ilvl0 \b {\listtext \uc0\u8226 } \b0 Bug fixes for some devices\ {\listtext \uc0\u8226 }Fixed the compilation of 32bit code.\ -\ls16\ilvl0 +\ls17\ilvl0 \b {\listtext \uc0\u8226 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -258,17 +273,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \uc0\u8226 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0 +\ls18\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Better handling of feedback effects\ {\listtext \uc0\u8226 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls17\ilvl0 +\ls18\ilvl0 \b {\listtext \uc0\u8226 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls17\ilvl0 +\ls18\ilvl0 \b {\listtext \uc0\u8226 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -278,7 +293,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ +\ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -287,7 +302,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ +\ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ {\listtext \uc0\u8226 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -297,7 +312,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \uc0\u8226 }Improvement to ChatPad support\ {\listtext \uc0\u8226 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \uc0\u8226 }Updated Info.plist with many common devices\ @@ -309,7 +324,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ +\ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \uc0\u8226 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -319,7 +334,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ +\ls23\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ {\listtext \uc0\u8226 }New product IDs for Wireless Gaming Receiver\ {\listtext \uc0\u8226 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \uc0\u8226 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -331,7 +346,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ +\ls24\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ {\listtext \uc0\u8226 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -341,7 +356,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ +\ls25\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ {\listtext \uc0\u8226 }Fix for Snow Leopard\ {\listtext \uc0\u8226 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -352,7 +367,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls25\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ +\ls26\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ {\listtext \uc0\u8226 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -362,7 +377,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls26\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +\ls27\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ {\listtext \uc0\u8226 }Daemon providing persistent settings and LED setting\ {\listtext \uc0\u8226 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -373,7 +388,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls27\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +\ls28\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ {\listtext \uc0\u8226 }New increased compatibility with games\ {\listtext \uc0\u8226 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -384,7 +399,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls28\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls29\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \uc0\u8226 }Driver for the above to use the Wireless 360 Controller\ {\listtext \uc0\u8226 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -395,7 +410,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls29\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ +\ls30\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -404,7 +419,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls30\ilvl0\cf0 {\listtext \uc0\u8226 }Universal binaries, for Intel Mac support\ +\ls31\ilvl0\cf0 {\listtext \uc0\u8226 }Universal binaries, for Intel Mac support\ {\listtext \uc0\u8226 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \uc0\u8226 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \uc0\u8226 }Alternative deadzone mode\ diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index f4ad470a..9f0d7d63 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -140,8 +140,6 @@ - (void)dealloc - (NSString *)displayName { if (self.deviceName == nil) return @"Generic Controller"; - else if (self.controllerType == XboxOnePretend360Controller || self.controllerType == Xbox360Pretend360Controller) - return [self.deviceName stringByAppendingString:@" (Xbox 360)"]; else return self.deviceName; } diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 22b15a57..4669940c 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -445,17 +445,6 @@ - (void)startDevice ffDevice = [item ffDevice]; registryEntry = [item rawDevice]; controllerType = [item controllerType]; - - if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) - { - [_rumbleOptions removeAllItems]; - [_rumbleOptions addItemsWithTitles:@[@"Default", @"None", @"Triggers Only", @"Both"]]; - } - else - { - [_rumbleOptions removeAllItems]; - [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; - } } if((*device)->copyMatchingElements(device,NULL,&CFelements)!=kIOReturnSuccess) { @@ -717,6 +706,19 @@ - (void)startDevice } else NSLog(@"No value for Pretend360"); } else NSLog(@"No settings found\n"); } + + // Set force feedback options + if (controllerType == XboxOneController || controllerType == XboxOnePretend360Controller) + { + [_rumbleOptions removeAllItems]; + [_rumbleOptions addItemsWithTitles:@[@"Default", @"None", @"Triggers Only", @"Both"]]; + } + else + { + [_rumbleOptions removeAllItems]; + [_rumbleOptions addItemsWithTitles:@[@"Default", @"None"]]; + } + // Enable GUI components [self inputEnable:YES]; // Set device capabilities diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 4909d468..5ae8b7e6 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -1,8 +1,8 @@ - + - + @@ -835,7 +835,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -888,7 +888,7 @@ Due to some internal limitations, you need to connect your device once to be abl
- + diff --git a/Readme.md b/Readme.md index ee0f8189..733d1327 100644 --- a/Readme.md +++ b/Readme.md @@ -6,7 +6,7 @@ 3. [Uninstallation](#uninstallation) 4. [Usage](#usage) 5. [My controller doesn't work!](#my-controller-doesnt-work) - 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) + 1. [I'm using a driver from the Tattiebogle website](#im-using-a-driver-from-the-tattiebogle-website) 2. [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) 3. [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) 4. [Original Xbox Controllers](#original-xbox-controllers) @@ -23,17 +23,18 @@ 4. [Re-Enabling signing requirements](#re-enabling-signing-requirements) 5. [Debugging the driver](#debugging-the-driver) 6. [Debugging the preference pane](#debugging-the-preference-pane) + 7. [A note on Unity mappings](#a-note-on-unity-mappings) 8. [Licence](#licence) ## About This driver supports the Microsoft Xbox series of controllers including: 1. Original Xbox - - Original Xbox controllers are supported by using a USB adapter. + - Original Xbox controllers are supported by using a USB adapter. 2. Xbox 360 - Wired Xbox 360 controllers are supported directly. - - **As of macOS 10.11, Wireless Xbox 360 controller support causes kernel panics. This issue cannot be resolved with minor changes to the driver, and requires that the driver be re-written from scratch to resolve the issue. Due to an excess of caution, we have disabled Wireless Xbox 360 controller support as of 0.16.6. If you want to use a wireless controller, download 0.16.15 or earlier and disable the driver before the computer enters a "sleep" state in order to prevent kernel panics. Alternatively, you can revert to a macOS version before 10.11 to avoid this issue.** Wireless Xbox 360 controllers are supported with the Xbox 360 Wireless Gaming Receiver. Using a "Play and Charge" kit is not supported. + - **As of macOS 10.11, Wireless Xbox 360 controller support causes kernel panics. This issue cannot be resolved with minor changes to the driver, and requires that the driver be re-written from scratch to resolve the issue. Due to an excess of caution, we have disabled Wireless Xbox 360 controller support as of 0.16.6. If you want to use a wireless controller, download 0.16.15 or earlier and disable the driver before the computer enters a "sleep" state in order to prevent kernel panics. Alternatively, you can revert to a macOS version before 10.11 to avoid this issue.** Wireless Xbox 360 controllers are supported with the Xbox 360 Wireless Gaming Receiver. Using a "Play and Charge" kit is not supported. 3. Xbox One - Xbox One controllers are supported when connected with a micro USB cable. Using the controller with the Wireless Adapter is not currently supported. @@ -77,19 +78,19 @@ Navigate to the Apple menu at the top left corner of your screen. Select the `Ab Make an issue describing your problem. ### Wired Xbox 360 Controllers -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. ### Wireless Xbox 360 Controllers **CURRENTLY UNSUPPORTED** -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. Remember that wireless controllers must be connected using a wireless adapter. Plugging a "Play and Charge" kit into a wireless controller does not make it a wired controller. ### Xbox One Controllers connected with USB -Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. -If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. This is specifically found in controllers from PDP and PowerA. If you revert to macOS 10.10 or earlier, these controllers will work. -If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. -If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. +Always check your controller with the preference pane found at: `Apple Menu -> System Preferences -> Xbox 360 Controllers` before creating an issue. If the controller works in this menu, then the driver is operating as intended. If your controller works with this menu, but not with a specific game, then read the [My controller doesn't work with a game!](#my-controller-doesnt-work-with-a-game) section. +If your controller is recognized by the preference pane, but you aren't getting any response from button presses, this is likely due to an issue with macOS 10.11 and later. Apple changed some of the underlying USB code with this release and broke compatibility with some controllers. This is specifically found in controllers from PDP and PowerA. If you revert to macOS 10.10 or earlier, these controllers will work. +If the preference pane can't find your controller, make sure that it is listed in `Apple Menu -> About this Mac -> System Report -> Overview -> Hardware -> USB`. This menu should list a device called "Controller." If it isn't listed there, then you likely have a "charge" Micro USB cable instead of a "data" cable. If the cable isn't sending data, then you can't use the driver. Try a different cable. +If you have a third party controller, make an issue following the template with the "Product ID" and "Vendor ID" of the controller. Follow [How do I find my Vendor ID and Product ID?](#how-do-i-find-my-vendor-id-and-product-id) for instructions on how to find this information. **At this time, PDP and PowerA controllers are unsupported by this driver as of macOS 10.11+ thanks to a rewrite of the macOS USB kernel. We cannot resolve this issue. It is a bug in Apple's core OS code.** ### Xbox One Controllers connected with Wireless Adapter @@ -134,14 +135,11 @@ In order to build the .pkg, you will need to install [Packages.app](http://s.sud #### If you have a signing certificate -* Open `360 Driver.xcodeproj` using Xcode. +* Create a file named 'DeveloperSettings.xcconfig' * Select the `360 Driver` project in the Navigator. -* Select the `360Daemon` target from the top right corner. -* Select the `Build Settings` tab from the top of the screen. -* In the `Code Signing` section, find `Code Signing Identity` section and expand it. -* In the `Release` section, change the selection to your `Developer ID Application` certificate. -* Set the code signing identity for `360Daemon`, `Feedback360`, `360Controller`, `DriverTool`, `Pref360Control`, `Wireless360Controller`, `WirelessGamingReceiver` and `Whole Driver`. -* Run `./build.sh` to build the .pkg. This .pkg can be found in the `Install360Controller` directory. +* In this file, add the following lines: + * `DEVELOPMENT_TEAM = XXXXXXXXXX` where `XXXXXXXXXX` is the development team on your Developer ID Application and Installer certificates. + * `DEVELOPER_NAME = First Last` where `First Last` is the name on the Developer ID Installer certificate. ### Disabling signing requirements @@ -177,15 +175,25 @@ Debugging the driver depends on which part you intend to debug. For the 360Contr ### Debugging the preference pane -These instructions work for Xcode 6.4, the most recent version of Xcode that can still build the driver. Most of these instructions are pulled directly from [this blog post.](http://www.condition-alpha.com/blog/?p=1314) Please visit it for futher information. +Most of these instructions are pulled directly from [this blog post.](http://www.condition-alpha.com/blog/?p=1314) Please visit it for futher information. + +First, create a copy of `System Preferences.app` called `System Preferences (signed).app`. Then sign this new System Preferences with the command: + +```codesign -s "Developer ID Application: First Last (XXXXXXXXXX)" -f /Applications/System\ Preferences\ \(signed\).app/``` -First, edit your build scheme for Pref360Control, and select the "Run" scheme, and make sure you are editing "Debug" (A). In the environment variables section, click on "+" to add a new environment variable (B). Name the new variable OBJC_DISABLE_GC, and set its value to YES. +where `Developer ID Application: First Last (XXXXXXXXXX)` is the name of your Developer ID Application signing certificate. + +Edit your build scheme for Pref360Control, and select the "Run" scheme, and make sure you are editing "Debug" (A). In the environment variables section, click on "+" to add a new environment variable (B). Name the new variable OBJC_DISABLE_GC, and set its value to YES. Next, click the little disclosure triangle for the run scheme to reveal its detailed settings. Then select pre-actions. Click the "+" at the bottom to add a run script action. Enter /bin/sh as the shell, make sure that your target is selected to provide build settings, and type a shell command line to install the newly compiled pref pane in your personal Library folder: ```cp -Rf ${CONFIGURATION_BUILD_DIR}/Pref360Control.prefPane ~/Library/PreferencePanes``` -Finally, select the run step, choose "other" from the executable drop-down menu, and select System Preferences in the Applications folder. Verify that "Debug executable" and "Automatically" are both checked. +Finally, select the run step, choose "other" from the executable drop-down menu, and select `System Preferences (signed)` in the Applications folder. Verify that "Debug executable" and "Automatically" are both checked. + +### A note on Unity mappings + +The issues with the button and axis mappings in the Unity game engine are outside of our control. Unity mangles the button and axis values provided by the controller and remaps them to different values. There is absolutely no way that we can introduce a shim to fix it. Complaints about this should be directed at Unity, not at us. ## Licence diff --git a/build.sh b/build.sh index 9c349184..2f028f09 100755 --- a/build.sh +++ b/build.sh @@ -1,8 +1,13 @@ #!/bin/bash + +DEV_NAME=`echo | grep DEVELOPER_NAME DeveloperSettings.xcconfig` +DEV_TEAM=`echo | grep DEVELOPMENT_TEAM DeveloperSettings.xcconfig` +CERT_ID="${DEV_NAME//\DEVELOPER_NAME = } (${DEV_TEAM//\DEVELOPMENT_TEAM = })" + mkdir -p build zip -r build/360ControllerSource.zip * -x "build*" -xcrun xcodebuild -configuration Release -target "Whole Driver" +xcrun xcodebuild -configuration Release -target "Whole Driver" -xcconfig "DeveloperSettings.xcconfig" if [ $? -ne 0 ] then echo "******** BUILD FAILED ********" @@ -10,7 +15,7 @@ if [ $? -ne 0 ] fi cd Install360Controller -packagesbuild -v Install360Controller.pkgproj +packagesbuild -v Install360Controller.pkgproj --identity "Developer ID Installer: ""${CERT_ID}" mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -fs HFS+ -format UDZO ../build/360ControllerInstall.dmg mv 360ControllerInstall build From 398f1091773f47a4bfb3bcae763e445442e5d01a Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Fri, 1 Jun 2018 14:34:31 -0500 Subject: [PATCH 165/216] Add device from #638 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c7bb72a5..e301c155 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1773,6 +1773,26 @@ idVendor 7085 + MadCatzGamepad4 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 672 + idVendor + 1848 + MadCatzMC2 CFBundleIdentifier From 003839610f14bcddaad289bcdf11be9bfc317d4c Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 5 Jun 2018 13:03:00 -0500 Subject: [PATCH 166/216] Add version info to issue template --- issue_template.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/issue_template.md b/issue_template.md index 655dde68..0d41d331 100644 --- a/issue_template.md +++ b/issue_template.md @@ -1,6 +1,12 @@ ### Type of Controller Replace this text with: Original Xbox, Xbox 360, Xbox One, All or N/A +### OS Version +Replace this text with the version of macOS that you are running + +### Driver Version +Replate this text with the version or versions of the driver that you are using or have tested + ### Connection Method Replace this text with: Wired, Wireless Adapter, Bluetooth, N/A or more specific method if applicable From ec4e88eb2d2535e9b32561c702f42fb22b0a7f99 Mon Sep 17 00:00:00 2001 From: Nathaniel Wasson Date: Wed, 6 Jun 2018 23:17:52 -0400 Subject: [PATCH 167/216] Added controller from #693 (#694) --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e301c155..e1428b8b 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -3753,6 +3753,26 @@ idVendor 9414 + Xbox360ProEXController2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10271 + idVendor + 8406 + XboxOneProEXController CFBundleIdentifier From 28640922b97f39dc4eebcca5469d50a8878c8e25 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Wed, 27 Jun 2018 21:13:08 -0500 Subject: [PATCH 168/216] Add device from #707 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e1428b8b..fff73ca8 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1793,6 +1793,26 @@ idVendor 1848 + MadCatzGhostReconFS + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61473 + idVendor + 7085 + MadCatzMC2 CFBundleIdentifier From 98455a8943e3ebf461754f3e9d6fbda404a7026a Mon Sep 17 00:00:00 2001 From: Jose Barahona Date: Wed, 4 Jul 2018 13:03:42 -0600 Subject: [PATCH 169/216] Madcatbeatpad (#714) madcatz beat pad added, already convert the hex to decimal in the file as i observed in the other devices. --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index fff73ca8..af503580 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -3813,6 +3813,26 @@ idVendor 9414 + MadCatzBeatPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18240 + idVendor + 1848 + NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From dd1ce4a5a4685c3825a231a571f3c31342da320e Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 8 Jul 2018 16:02:38 -0500 Subject: [PATCH 170/216] Add device from #711 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index af503580..14a74b44 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -833,6 +833,26 @@ idVendor 9414 + HoriFightingEdge + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21763 + idVendor + 9414 + HoriFightingStickEX2 CFBundleIdentifier From e309052633cc61ebd8f10d873b2427e96940664e Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Wed, 1 Aug 2018 22:32:47 -0500 Subject: [PATCH 171/216] Add device from #725 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e1428b8b..a4466aaf 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -202,6 +202,26 @@ idVendor 9414 + AtplayController3 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 690 + idVendor + 3695 + ArcadeGameStick CFBundleIdentifier From 005fcefcdbf8b0b8eecc771c9b950afff1908e78 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sun, 5 Aug 2018 20:51:46 -0500 Subject: [PATCH 172/216] Add device from #724 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index efc5a15e..c099ab0a 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -3753,6 +3753,26 @@ idVendor 9414 + ThrustmasterTMX + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46718 + idVendor + 1103 + TrustPredator CFBundleIdentifier From 66af78fbe6f91ee0771deefd60a4148395fac9ac Mon Sep 17 00:00:00 2001 From: Jose Barahona Date: Sun, 5 Aug 2018 19:55:20 -0600 Subject: [PATCH 173/216] Add device from #718 Guitar Hero live guitar ( RedOctane) device description added! --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c099ab0a..488af764 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -3893,6 +3893,26 @@ idVendor 1848 + RedOctane guitar hero guitar + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1803 + idVendor + 5168 + NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From 9cae07189fd7e5bd4eff7a24ba0e4f6530cce873 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sat, 11 Aug 2018 12:06:58 -0500 Subject: [PATCH 174/216] Fix xone pedals Previous sniffing had shown that their range was only uint8, but like real Xbox One triggers, they are actually uint10 --- 360Controller/Controller.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 67867f64..7fcee9f0 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -483,15 +483,13 @@ typedef struct { SInt16 leftX; }; union { - UInt8 accelerator; - UInt8 trigR; + UInt16 accelerator; + UInt16 trigR; }; - UInt8 unknown1; union { - UInt8 brake; - UInt8 trigL; + UInt16 brake; + UInt16 trigL; }; - UInt8 unknown2; union { UInt8 clutch; UInt8 leftY; @@ -638,8 +636,8 @@ void XboxOneControllerClass::convertFromXboxOne(void *buffer, UInt8 packetSize) { XBOXONE_IN_WHEEL_REPORT *wheelReport=(XBOXONE_IN_WHEEL_REPORT*)buffer; - trigR = wheelReport->accelerator; - trigL = wheelReport->brake; + trigR = (wheelReport->accelerator / 1023.0) * 255; // UInt16 -> UInt8 + trigL = (wheelReport->brake / 1023.0) * 255; // UInt16 -> UInt8 left.x = wheelReport->steering - 32768; // UInt16 -> SInt16 left.y = wheelReport->clutch * 128; // Clutch is 0-255. Upconvert to half signed 16 range. (0 - 32640) right = {}; From 6304ee91a72ebd6fba315b4bd838370d1ce78c59 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sat, 1 Sep 2018 12:37:41 -0500 Subject: [PATCH 175/216] Add device from #739 --- 360Controller/Info.plist | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 488af764..e8a04f28 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -733,6 +733,66 @@ idVendor 5168 + HarmonixDrumKit360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 4408 + idVendor + 7085 + + HarmonixKeyboard360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 4920 + idVendor + 7085 + + HarmonixGuitar360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 5432 + idVendor + 7085 + HORI Real Arcade Pro.EX Premium VLX CFBundleIdentifier From 043054e9a5fcf704fb24a2361bddb681cd32e344 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sat, 8 Sep 2018 21:47:18 -0500 Subject: [PATCH 176/216] Add device from #742 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index e8a04f28..a4334a7f 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2273,6 +2273,26 @@ idVendor 1118 + MicrosoftXboxOneController2018 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 765 + idVendor + 1118 + MicrosoftXboxOneControllerElite CFBundleIdentifier From 9f7d90c157ff9b8e2c02f3d97c7f15b809bc3b1c Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Thu, 13 Sep 2018 20:51:03 -0500 Subject: [PATCH 177/216] Add device from #748 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index a4334a7f..fad94935 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2493,6 +2493,26 @@ idVendor 3695 + PDPMetallicsLEXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 345 + idVendor + 3695 + PDPStealthPhantomBlack CFBundleIdentifier From 06715bf24193244477b26cf40bc44b14e940ceaf Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sat, 15 Sep 2018 11:51:26 -0500 Subject: [PATCH 178/216] Remove Xbox One Bluetooth support hooks Resolves an issue with hang on boot during Bluetooth coexistence Fix found in #698 --- 360 Driver.xcodeproj/project.pbxproj | 13 ------------- .../Install360Controller.pkgproj | 16 ---------------- Readme.md | 4 ++-- 3 files changed, 2 insertions(+), 31 deletions(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index b402765d..25fb2402 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ buildPhases = ( ); dependencies = ( - 55ACBFE91D5BA33A00E4F677 /* PBXTargetDependency */, 55B6383D18C10FA200CE933D /* PBXTargetDependency */, 55B6383F18C10FA200CE933D /* PBXTargetDependency */, 55B6384118C10FA200CE933D /* PBXTargetDependency */, @@ -124,13 +123,6 @@ remoteGlobalIDString = 5579513D1F73006F001880D1; remoteInfo = XBOBTFF; }; - 55ACBFE81D5BA33A00E4F677 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 55B636AC18C104DB00CE933D /* Project object */; - proxyType = 1; - remoteGlobalIDString = 55ACBFDF1D5B9E2E00E4F677; - remoteInfo = XboxOneBluetooth; - }; 55B6374D18C1097D00CE933D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 55B636AC18C104DB00CE933D /* Project object */; @@ -1245,11 +1237,6 @@ target = 5579513D1F73006F001880D1 /* XBOBTFF */; targetProxy = 557951491F7300E4001880D1 /* PBXContainerItemProxy */; }; - 55ACBFE91D5BA33A00E4F677 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 55ACBFDF1D5B9E2E00E4F677 /* XboxOneBluetooth */; - targetProxy = 55ACBFE81D5BA33A00E4F677 /* PBXContainerItemProxy */; - }; 55B6374E18C1097D00CE933D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 55B6371E18C108A500CE933D /* Feedback360 */; diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj index 89bf4938..f0a73171 100644 --- a/Install360Controller/Install360Controller.pkgproj +++ b/Install360Controller/Install360Controller.pkgproj @@ -154,22 +154,6 @@ UID 0 - - CHILDREN - - GID - 0 - PATH - ../build/Release/XboxOneBluetooth.kext - PATH_TYPE - 1 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - CHILDREN diff --git a/Readme.md b/Readme.md index 733d1327..53ecda00 100644 --- a/Readme.md +++ b/Readme.md @@ -38,7 +38,7 @@ This driver supports the Microsoft Xbox series of controllers including: 3. Xbox One - Xbox One controllers are supported when connected with a micro USB cable. Using the controller with the Wireless Adapter is not currently supported. - - Bluetooth capable Xbox One controllers (released after August 2016) are natively supported by macOS without the use of this driver. However, installing this driver will enable force feedback (which is not natively supported) and allow you to plug the controller in via USB. + - Bluetooth capable Xbox One controllers (released after August 2016) are natively supported by macOS without the use of this driver. However, installing this driver will allow you to use the controller via USB. The driver provides developers with access to both force feedback and the LEDs of the controllers. Additionally, a preference pane has been provided so that users can configure their controllers and ensure that the driver has been installed properly. @@ -97,7 +97,7 @@ If you have a third party controller, make an issue following the template with Xbox One controllers connected with the Wireless Adapter are currently not supported. Please be patient as we figure out this complicated protocol. ### Xbox One Controllers connected with Bluetooth -The Xbox One controller works with macOS automatically when connected over Bluetooth via System Preferences. Only specific Xbox One controllers released after August 2016 have Bluetooth capability. See [Microsoft's support page](https://support.xbox.com/en-US/xbox-on-windows/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues-windows-10) for determining if your controller supports Bluetooth. Due to the fact that this controller works by default, it will not be supported by this driver. However, in order to get force feedback through the controller, you will need to install this driver. It will enable force feedback to the controller. Additionally, if you choose to plug this controller in via USB, the driver will support this configuration. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. +The Xbox One controller works with macOS automatically when connected over Bluetooth via System Preferences. Only specific Xbox One controllers released after August 2016 have Bluetooth capability. See [Microsoft's support page](https://support.xbox.com/en-US/xbox-on-windows/accessories/connect-and-troubleshoot-xbox-one-bluetooth-issues-windows-10) for determining if your controller supports Bluetooth. Due to the fact that this controller works by default, it will not be supported by this driver. If you choose to plug this controller in via USB, you will need this driver. If you do not wish to connect the controller via USB, then you do not need this driver. Any problems with game compatibility in Bluetooth mode are completely out of our control and are up to you to solve in conjunction with the game developer. ## Adding Third Party Controllers First, [disable signing requirements](#disabling-signing-requirements) so that you can run your custom build with your third party controller added. Then edit `360Controller/360Controller/Info.plist`. Add your controller following the pattern of pre-existing controllers by adding your vendor and product IDs to a new entry. After this, follow the information in the [building](#building) section, following the "If you don't have a signing certificate" path to build your new .kext. Then, place your shiny new `360Controller.kext` in to `/Library/Extensions` over the old one. You may need to take ownership of the driver in order for it to operate properly. You can do this with `sudo chown -R root:wheel /Library/Extensions/360Controller.kext`. Then, to make sure everything went according to plan, run `sudo kextutil /Library/Extensions/360Controller.kext`. This will load your kext into the OS and you should be able to use your controller. Once you reboot, your custom driver should be loaded automatically. From b96fa0351c96d1581e985078200c705bb992b504 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Sat, 15 Sep 2018 12:09:26 -0500 Subject: [PATCH 179/216] Make changes for 0.16.9 --- Install360Controller/Text/Welcome.rtf | 125 ++++++++++-------- .../en.lproj/Pref360ControlPref.xib | 6 +- 2 files changed, 74 insertions(+), 57 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 18d268cc..282ecc9a 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf400 +{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} @@ -32,21 +32,38 @@ {\list\listtemplateid28\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid28} {\list\listtemplateid29\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid29} {\list\listtemplateid30\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid2901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid30} -{\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid3001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid31}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}} +{\list\listtemplateid31\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid3001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid31} +{\list\listtemplateid32\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid3101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid32}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}} \margl1440\margr1440\vieww10240\viewh12600\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.8\ +\b0\fs24 \cf0 Version 0.16.9\ Copyright \'a9 2005\'962013 Colin Munro\ Copyright \'a9 2013\'962018 {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/graphs/contributors"}}{\fldrslt 360Controller contributors}}\ \ Welcome to the installer for the Xbox 360 Controller driver for macOS.\ \b \ +Update 0.16.9: 09/15/2018\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Resolves issues with hang in boot after installation\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\ls1\ilvl0\cf0 {\listtext \uc0\u8226 } +\b Removes all hooks for Bluetooth controllers +\b0 (Caused hang in boot)\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Fixed an issue where Xbox One racing wheel pedals didn't work correctly\ + \'95 Add various new devices +\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.8: 05/31/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 @@ -54,7 +71,7 @@ Update 0.16.8: 05/31/2018\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Fixes for Xbox One guide button issues\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls1\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes force feedback issues present since 0.16.6\ +\ls2\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes force feedback issues present since 0.16.6\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Issues involving settings failing to be saved should be resolved\ \'95 Appropriate rumble options should now be visible for Xbox One controllers in the preference pane @@ -68,7 +85,7 @@ Update 0.16.7: 05/16/2018\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 DMG fixes for macOS earlier than 10.13\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls2\ilvl0\cf0 {\listtext \uc0\u8226 }New devices +\ls3\ilvl0\cf0 {\listtext \uc0\u8226 }New devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -82,9 +99,9 @@ Update 0.16.6: 04/03/2018\ \b0 \ \'95 Enhancements for Bluetooth Xbox One S controllers\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ +\ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls3\ilvl0 +\ls4\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 New devices \b \ @@ -107,11 +124,11 @@ Update 0.16.4: 08/28/2016\ \cf0 \'95 Tons of new devices including the wired version of the new Xbox One controller\ \'95 Third party Xbox 360 controllers can pretend to be Microsoft ones for better game compatibility\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Wireless controllers show a raw battery percentage value now\ +\ls5\ilvl0\cf0 {\listtext \uc0\u8226 }Wireless controllers show a raw battery percentage value now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Preference pane doesn't complain about constraints in the Console anymore\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls5\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ +\ls6\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Enable/disable feature is more stable \b \ @@ -122,7 +139,7 @@ Update 0.16.3: 07/14/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls6\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ +\ls7\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Third party Xbox One controllers still don't work, though \b \ @@ -133,7 +150,7 @@ Update 0.16.2: 07/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls7\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization +\ls8\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -142,7 +159,7 @@ Update 0.16.1: 07/06/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls8\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +\ls9\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }Fixed "normalize" not staying checked \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -152,21 +169,21 @@ Update 0.16: 04/26/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls9\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ +\ls10\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }The remapping tool is more robust\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ +\ls11\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls10\ilvl0 +\ls11\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Settings load properly\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \uc0\u8226 } \b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \uc0\u8226 } \b0 New rumble options for Xbox One controllers\ -\ls10\ilvl0 +\ls11\ilvl0 \b {\listtext \uc0\u8226 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -175,7 +192,7 @@ Update 0.15 (beta 6): 04/09/2016\ \b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\ls11\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ +\ls12\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ {\listtext \uc0\u8226 }New Xbox 360 devices \b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -184,9 +201,9 @@ Update 0.15 (beta 5): 01/25/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ +\ls13\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls12\ilvl0 +\ls13\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Fix Xbox One rumble. \b \ @@ -196,15 +213,15 @@ Update 0.15 (beta 4): 01/14/2016\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ +\ls14\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls13\ilvl0 +\ls14\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Added various new Xbox 360 controllers.\ -\ls13\ilvl0 +\ls14\ilvl0 \b {\listtext \uc0\u8226 } \b0 Xbox One controllers no longer pretend to be 360 controllers.\ -\ls13\ilvl0 +\ls14\ilvl0 \b {\listtext \uc0\u8226 } \b0 Added support for the Xbox One Elite controller. \b \ @@ -214,7 +231,7 @@ Update 0.15 (beta 3): 09/15/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls14\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ +\ls15\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -222,7 +239,7 @@ Update 0.15 (beta 2): 08/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls15\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ +\ls16\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ {\listtext \uc0\u8226 }Swappable sticks\ {\listtext \uc0\u8226 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -232,19 +249,19 @@ Update 0.15 (beta): 07/28/2015\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ +\ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \uc0\u8226 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls16\ilvl0 +\ls17\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ -\ls16\ilvl0 +\ls17\ilvl0 \b {\listtext \uc0\u8226 } \b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ -\ls16\ilvl0 +\ls17\ilvl0 \b {\listtext \uc0\u8226 } \b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ -\ls16\ilvl0 +\ls17\ilvl0 \b {\listtext \uc0\u8226 } \b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. \b \ @@ -254,16 +271,16 @@ Update 0.14: 12/23/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ +\ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls17\ilvl0 +\ls18\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Bug fixes for Force feedback with < 1 second duration\ -\ls17\ilvl0 +\ls18\ilvl0 \b {\listtext \uc0\u8226 } \b0 Bug fixes for some devices\ {\listtext \uc0\u8226 }Fixed the compilation of 32bit code.\ -\ls17\ilvl0 +\ls18\ilvl0 \b {\listtext \uc0\u8226 } \b0 Original Xbox's Controller Support with Force Feedback \b \ @@ -273,17 +290,17 @@ Update 0.14 (beta): 10/30/2014\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ +\ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \uc0\u8226 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls18\ilvl0 +\ls19\ilvl0 \b \cf0 {\listtext \uc0\u8226 } \b0 Better handling of feedback effects\ {\listtext \uc0\u8226 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ -\ls18\ilvl0 +\ls19\ilvl0 \b {\listtext \uc0\u8226 } \b0 Updated code signing to be compatible with 10.10 Yosemite\ -\ls18\ilvl0 +\ls19\ilvl0 \b {\listtext \uc0\u8226 } \b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} \b \ @@ -293,7 +310,7 @@ Update 0.13.1: 10/11/2013\ \b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ +\ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \b \cf0 \ @@ -302,7 +319,7 @@ Update 0.13: 9/29/2013\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ +\ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ {\listtext \uc0\u8226 }Bug fixes in the preference pane\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -312,7 +329,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ +\ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ {\listtext \uc0\u8226 }Improvement to ChatPad support\ {\listtext \uc0\u8226 }Improvement to wireless support (automatic and manual power-off)\ {\listtext \uc0\u8226 }Updated Info.plist with many common devices\ @@ -324,7 +341,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ +\ls23\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ {\listtext \uc0\u8226 }Adjustment to the automatic device match function\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -334,7 +351,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls23\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ +\ls24\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ {\listtext \uc0\u8226 }New product IDs for Wireless Gaming Receiver\ {\listtext \uc0\u8226 }Automatic device match function, allowing you to select and deselect which controllers you want it to match with\ {\listtext \uc0\u8226 }Fix the incompatibility with Bioshock introduced with ChatPad support\ @@ -346,7 +363,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls24\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ +\ls25\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ {\listtext \uc0\u8226 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -356,7 +373,7 @@ Update 0.08: 10/09/2009\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls25\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ +\ls26\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ {\listtext \uc0\u8226 }Fix for Snow Leopard\ {\listtext \uc0\u8226 }Minor bugfixes\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -367,7 +384,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls26\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ +\ls27\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ {\listtext \uc0\u8226 }Extra controller IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -377,7 +394,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls27\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +\ls28\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ {\listtext \uc0\u8226 }Daemon providing persistent settings and LED setting\ {\listtext \uc0\u8226 }Bugfix to support Halo\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -388,7 +405,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls28\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ +\ls29\ilvl0\cf0 {\listtext \uc0\u8226 }Improvements to the wireless support\ {\listtext \uc0\u8226 }New increased compatibility with games\ {\listtext \uc0\u8226 }Support for the Guitar Hero controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -399,7 +416,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls29\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls30\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \uc0\u8226 }Driver for the above to use the Wireless 360 Controller\ {\listtext \uc0\u8226 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 @@ -410,7 +427,7 @@ This update includes:\ \b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls30\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ +\ls31\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ @@ -419,7 +436,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 -\ls31\ilvl0\cf0 {\listtext \uc0\u8226 }Universal binaries, for Intel Mac support\ +\ls32\ilvl0\cf0 {\listtext \uc0\u8226 }Universal binaries, for Intel Mac support\ {\listtext \uc0\u8226 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \uc0\u8226 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \uc0\u8226 }Alternative deadzone mode\ diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 5ae8b7e6..0174e5e8 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -59,7 +59,7 @@ - + @@ -835,7 +835,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -888,7 +888,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + From 9b9d557a166a50eaa53e2e398552be17100e9d55 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Wed, 26 Sep 2018 22:12:50 -0500 Subject: [PATCH 180/216] Add Xbox One Adaptive controller --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index fad94935..d848bafd 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -2293,6 +2293,26 @@ idVendor 1118 + MicrosoftXboxOneControllerAdaptive + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 2826 + idVendor + 1118 + MicrosoftXboxOneControllerElite CFBundleIdentifier From 3c51e300e7606c1f6c8f2984367faa1fb9be3427 Mon Sep 17 00:00:00 2001 From: Jose Barahona Date: Tue, 2 Oct 2018 20:19:08 -0600 Subject: [PATCH 181/216] new device added (#762) Add device from #761 --- 360Controller/Info.plist | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index d848bafd..642091dc 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -4033,6 +4033,26 @@ idVendor 5168 + MADCATZ 360 MC2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18208 + idVendor + 1848 + NSHumanReadableCopyright Copyright © 2013 MICE Software. All rights reserved. From 76e5ac3b5d445a959872c1d4f0a1392338f27b51 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 2 Oct 2018 22:24:49 -0500 Subject: [PATCH 182/216] Fix version numbers --- 360 Driver.xcodeproj/project.pbxproj | 10 ++++++---- 360Controller/Info.plist | 2 ++ 360Daemon/360DaemonApp-Info.plist | 2 +- DriverTool/Info.plist | 2 +- Feedback360/Info.plist | 2 ++ Pref360Control/Info.plist | 2 +- Wireless360Controller/Info.plist | 2 ++ WirelessGamingReceiver/Info.plist | 2 ++ 8 files changed, 17 insertions(+), 7 deletions(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index 25fb2402..dce84422 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -1490,7 +1490,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d15; + CURRENT_PROJECT_VERSION = 0.16.9; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1509,8 +1509,9 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; + MIN_MACOS_VERSION = 10.11; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; + SDKROOT = macosx10.10; STRIP_INSTALLED_PRODUCT = NO; VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = ( @@ -1540,7 +1541,7 @@ CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1.0.0d15; + CURRENT_PROJECT_VERSION = 0.16.9; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1552,7 +1553,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; - SDKROOT = macosx; + MIN_MACOS_VERSION = 10.11; + SDKROOT = macosx10.10; STRINGS_FILE_OUTPUT_ENCODING = binary; VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = ( diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 642091dc..967466f8 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -20,6 +20,8 @@ ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} + LSMinimumSystemVersion + ${MIN_MACOS_VERSION} IOKitPersonalities AfterglowGamepad1 diff --git a/360Daemon/360DaemonApp-Info.plist b/360Daemon/360DaemonApp-Info.plist index a522ed4c..12973fce 100644 --- a/360Daemon/360DaemonApp-Info.plist +++ b/360Daemon/360DaemonApp-Info.plist @@ -21,7 +21,7 @@ CFBundleVersion ${CURRENT_PROJECT_VERSION} LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} + ${MIN_MACOS_VERSION} LSUIElement NSHumanReadableCopyright diff --git a/DriverTool/Info.plist b/DriverTool/Info.plist index d092a1bf..31834f80 100644 --- a/DriverTool/Info.plist +++ b/DriverTool/Info.plist @@ -13,7 +13,7 @@ CFBundleShortVersionString ${CURRENT_PROJECT_VERSION} LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} + ${MIN_MACOS_VERSION} CFBundleInfoDictionaryVersion 6.0 diff --git a/Feedback360/Info.plist b/Feedback360/Info.plist index 920aa069..02d7ba5f 100644 --- a/Feedback360/Info.plist +++ b/Feedback360/Info.plist @@ -20,6 +20,8 @@ ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} + LSMinimumSystemVersion + ${MIN_MACOS_VERSION} CFPlugInDynamicRegistration NO CFPlugInFactories diff --git a/Pref360Control/Info.plist b/Pref360Control/Info.plist index 440af5a3..b23cea4a 100644 --- a/Pref360Control/Info.plist +++ b/Pref360Control/Info.plist @@ -21,7 +21,7 @@ CFBundleVersion ${CURRENT_PROJECT_VERSION} LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} + ${MIN_MACOS_VERSION} NSMainNibFile Pref360ControlPref NSPrefPaneIconFile diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index ba65557c..82b41461 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -20,6 +20,8 @@ ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} + LSMinimumSystemVersion + ${MIN_MACOS_VERSION} IOKitPersonalities Wireless360Controller diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 41114472..a94ffe96 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -20,6 +20,8 @@ ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} + LSMinimumSystemVersion + ${MIN_MACOS_VERSION} IOKitPersonalities WirelessGamingReceiverForWindows From 875b4ca7bcf4c83aab2a6c290a8a411ac2e136d8 Mon Sep 17 00:00:00 2001 From: Drew Mills Date: Tue, 9 Oct 2018 22:48:54 -0500 Subject: [PATCH 183/216] Updates for 0.16.10 Add some devices Update text Add pre-install removal of Bluetooth driver --- 360 Driver.xcodeproj/project.pbxproj | 4 +- 360Controller/Info.plist | 40 ++++ .../Install360Controller.pkgproj | 49 +--- Install360Controller/Scripts/upgrade.sh | 7 + Install360Controller/Text/Welcome.rtf | 225 +++++++++--------- .../en.lproj/Pref360ControlPref.xib | 100 ++++---- 6 files changed, 230 insertions(+), 195 deletions(-) diff --git a/360 Driver.xcodeproj/project.pbxproj b/360 Driver.xcodeproj/project.pbxproj index dce84422..2b349ba2 100644 --- a/360 Driver.xcodeproj/project.pbxproj +++ b/360 Driver.xcodeproj/project.pbxproj @@ -1490,7 +1490,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.16.9; + CURRENT_PROJECT_VERSION = 0.16.10; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1541,7 +1541,7 @@ CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.16.9; + CURRENT_PROJECT_VERSION = 0.16.10; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 967466f8..8e2c38f2 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -535,6 +535,26 @@ idVendor 3853 + DragonRiseFightStick + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 6268 + idVendor + 121 + ElecomJCU3613M CFBundleIdentifier @@ -795,6 +815,26 @@ idVendor 7085 + HoneyBee360Gamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 21760 + idVendor + 4779 + HORI Real Arcade Pro.EX Premium VLX CFBundleIdentifier diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj index f0a73171..ef3d3bf1 100644 --- a/Install360Controller/Install360Controller.pkgproj +++ b/Install360Controller/Install360Controller.pkgproj @@ -138,38 +138,6 @@ UID 0 - - CHILDREN - - GID - 0 - PATH - ../build/Release/Wireless360Controller.kext - PATH_TYPE - 1 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ../build/Release/WirelessGamingReceiver.kext - PATH_TYPE - 1 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - GID 0 @@ -668,7 +636,7 @@ USE_HFS+_COMPRESSION VERSION - 0.16 + 0.16.10 TYPE 0 @@ -874,7 +842,7 @@ BEHAVIOR - 2 + 3 DICTIONARY IC_REQUIREMENT_OS_DISK_TYPE @@ -882,14 +850,23 @@ IC_REQUIREMENT_OS_DISTRIBUTION_TYPE 0 IC_REQUIREMENT_OS_MINIMUM_VERSION - 100800 + 101100 IC_REQUIREMENT_CHECK_TYPE 0 IDENTIFIER fr.whitebox.Packages.requirement.os MESSAGE - + + + LANGUAGE + English + SECONDARY_VALUE + This driver can only be installed on macOS 10.11 or later. + VALUE + Operating System Version Too Low + + NAME Operating System STATE diff --git a/Install360Controller/Scripts/upgrade.sh b/Install360Controller/Scripts/upgrade.sh index da266b52..f52ff5fc 100644 --- a/Install360Controller/Scripts/upgrade.sh +++ b/Install360Controller/Scripts/upgrade.sh @@ -64,4 +64,11 @@ if [ -d /Library/Extensions/WirelessGamingReceiver.kext ]; then /bin/rm -r /Library/Extensions/WirelessGamingReceiver.kext fi +# Remove bluetooth driver + +if [ -d /Library/Extensions/XboxOneBluetooth.kext ]; then + kextunload /Library/Extensions/XboxOneBluetooth.kext + /bin/rm -r /Library/Extensions/XboxOneBluetooth.kext +fi + exit 0 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 282ecc9a..bc201400 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,5 +1,5 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf1671 +{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -41,33 +41,44 @@ \f0\b\fs42 \cf0 Xbox 360 Controller Driver\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b0\fs24 \cf0 Version 0.16.9\ +\f1\b0\fs24 \cf0 Version 0.16.10\ Copyright \'a9 2005\'962013 Colin Munro\ Copyright \'a9 2013\'962018 {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/graphs/contributors"}}{\fldrslt 360Controller contributors}}\ \ Welcome to the installer for the Xbox 360 Controller driver for macOS.\ -\b \ +\f0\b \ +Update 0.16.10: 10/09/2018\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 + +\f1\b0 \cf0 This update includes:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 +\cf0 \'95 Adds removal of Bluetooth kexts to installer, to prevent carry-over hangs on boot\ + \'95 Removed wireless 360 kexts that snuck back in to the install\ + \'95 Add various new devices +\f0\b \ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 +\cf0 \ Update 0.16.9: 09/15/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Resolves issues with hang in boot after installation\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls1\ilvl0\cf0 {\listtext \uc0\u8226 } -\b Removes all hooks for Bluetooth controllers -\b0 (Caused hang in boot)\ +\f0\b Removes all hooks for Bluetooth controllers +\f1\b0 (Caused hang in boot)\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Fixed an issue where Xbox One racing wheel pedals didn't work correctly\ \'95 Add various new devices -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.8: 05/31/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Fixes for Xbox One guide button issues\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 @@ -75,51 +86,51 @@ Update 0.16.8: 05/31/2018\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Issues involving settings failing to be saved should be resolved\ \'95 Appropriate rumble options should now be visible for Xbox One controllers in the preference pane -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.7: 05/16/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 DMG fixes for macOS earlier than 10.13\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls3\ilvl0\cf0 {\listtext \uc0\u8226 }New devices -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.6: 04/03/2018\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 -\b \cf0 \'95 REMOVED XBOX 360 WIRELESS DRIVER -\b0 \ +\f0\b \cf0 \'95 REMOVED XBOX 360 WIRELESS DRIVER +\f1\b0 \ \'95 Enhancements for Bluetooth Xbox One S controllers\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls4\ilvl0\cf0 {\listtext \uc0\u8226 }Preferences should properly save now\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls4\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 New devices -\b \ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 New devices +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.5: 04/18/2017\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 New devices -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.4: 08/28/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Tons of new devices including the wired version of the new Xbox One controller\ \'95 Third party Xbox 360 controllers can pretend to be Microsoft ones for better game compatibility\ @@ -131,43 +142,43 @@ Update 0.16.4: 08/28/2016\ \ls6\ilvl0\cf0 {\listtext \uc0\u8226 }Xbox One racing wheel support\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Enable/disable feature is more stable -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.3: 07/14/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls7\ilvl0\cf0 {\listtext \uc0\u8226 }Actually resolves issue with Xbox One controller initialization\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \cf0 \'95 Third party Xbox One controllers still don't work, though -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.2: 07/09/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls8\ilvl0\cf0 {\listtext \uc0\u8226 }Potentially resolves issue with Xbox One controller initialization -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16.1: 07/06/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls9\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }Fixed "normalize" not staying checked -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.16: 04/26/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls10\ilvl0\cf0 {\listtext \uc0\u8226 }New devices\ {\listtext \uc0\u8226 }The remapping tool is more robust\ @@ -175,148 +186,148 @@ Update 0.16: 04/26/2016\ \ls11\ilvl0\cf0 {\listtext \uc0\u8226 }Remapping works on wireless 360 controllers\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls11\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Settings load properly\ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Settings load properly\ \ls11\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Xbox One controller pretends to be a 360 controller better ("Xbox One Controller (Xbox 360)" -> "Xbox 360 Wired Controller")\ \ls11\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 New rumble options for Xbox One controllers\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 New rumble options for Xbox One controllers\ \ls11\ilvl0 -\b {\listtext \uc0\u8226 }OFFICIAL!\ +\f0\b {\listtext \uc0\u8226 }OFFICIAL!\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.15 (beta 6): 04/09/2016\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0 -\b0 \cf0 This update includes:\ +\f1\b0 \cf0 This update includes:\ \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural\partightenfactor0 \ls12\ilvl0\cf0 {\listtext \uc0\u8226 }New wired Xbox One devices\ {\listtext \uc0\u8226 }New Xbox 360 devices -\b \ +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.15 (beta 5): 01/25/2016\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls13\ilvl0\cf0 {\listtext \uc0\u8226 }Fixed Xbox One Elite implementation.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls13\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Fix Xbox One rumble. -\b \ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Fix Xbox One rumble. +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.15 (beta 4): 01/14/2016\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls14\ilvl0\cf0 {\listtext \uc0\u8226 }Added fix for Rock Candy Xbox One controllers.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls14\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Added various new Xbox 360 controllers.\ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Added various new Xbox 360 controllers.\ \ls14\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Xbox One controllers no longer pretend to be 360 controllers.\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Xbox One controllers no longer pretend to be 360 controllers.\ \ls14\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Added support for the Xbox One Elite controller. -\b \ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Added support for the Xbox One Elite controller. +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.15 (beta 3): 09/15/2015\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls15\ilvl0\cf0 {\listtext \uc0\u8226 }Removed Wireless Controller Remapping temporarily, as it was causing problems with these controllers\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b \cf0 \ +\f0\b \cf0 \ Update 0.15 (beta 2): 08/28/2015\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls16\ilvl0\cf0 {\listtext \uc0\u8226 }New Xbox One Controller (2015 model) Support\ {\listtext \uc0\u8226 }Swappable sticks\ {\listtext \uc0\u8226 }A few more devices\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b \cf0 \ +\f0\b \cf0 \ Update 0.15 (beta): 07/28/2015\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls17\ilvl0\cf0 {\listtext \uc0\u8226 }Completely reworked User Interface by {\field{\*\fldinst{HYPERLINK "https://github.com/Pyroh"}}{\fldrslt Pyroh}}\ {\listtext \uc0\u8226 }Xbox One Controller Support with Force Feedback by {\field{\*\fldinst{HYPERLINK "https://github.com/FranticRain"}}{\fldrslt FranticRain}}.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls17\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Added dozens of device IDs provided by users, so most of Xbox compatible controllers should work\ \ls17\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Swappable button ids and Deadzone adjustment improvements by FranticRain\ \ls17\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 General bug fixes and improvements mostrly from {\field{\*\fldinst{HYPERLINK "https://github.com/MaddTheSane/"}}{\fldrslt C.W. Betts}}\ \ls17\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. -\b \ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 You can now temporarily disable or completely uninstall the driver from the Preference Panel itself by {\field{\*\fldinst{HYPERLINK "https://github.com/RodrigoCard"}}{\fldrslt RodrigoCard}}. +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.14: 12/23/2014\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls18\ilvl0\cf0 {\listtext \uc0\u8226 }Fixes Force Feedback and the controller lights that were broken on the beta\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls18\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Bug fixes for Force feedback with < 1 second duration\ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Bug fixes for Force feedback with < 1 second duration\ \ls18\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Bug fixes for some devices\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Bug fixes for some devices\ {\listtext \uc0\u8226 }Fixed the compilation of 32bit code.\ \ls18\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Original Xbox's Controller Support with Force Feedback -\b \ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Original Xbox's Controller Support with Force Feedback +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.14 (beta): 10/30/2014\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls19\ilvl0\cf0 {\listtext \uc0\u8226 }Cocoa code modernization by C.W. Betts. This includes synthesized getters/setters, KVO/KVC, and migration to ARC.\ {\listtext \uc0\u8226 }General code readability improvements\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls19\ilvl0 -\b \cf0 {\listtext \uc0\u8226 } -\b0 Better handling of feedback effects\ +\f0\b \cf0 {\listtext \uc0\u8226 } +\f1\b0 Better handling of feedback effects\ {\listtext \uc0\u8226 }Force Feedback is currently broken in this beta, {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/issues/22"}}{\fldrslt apparently due to an upstream Apple bug}}\ \ls19\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Updated code signing to be compatible with 10.10 Yosemite\ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Updated code signing to be compatible with 10.10 Yosemite\ \ls19\ilvl0 -\b {\listtext \uc0\u8226 } -\b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} -\b \ +\f0\b {\listtext \uc0\u8226 } +\f1\b0 Package and Kexts Signed by {\field{\*\fldinst{HYPERLINK "https://twitter.com/RodrigoRodrigoR"}}{\fldrslt Rodrigo C. Rocha}} +\f0\b \ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ Update 0.13.1: 10/11/2013\ -\b0 This update includes:\ +\f1\b0 This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls20\ilvl0\cf0 {\listtext \uc0\u8226 }Fix for kernel panics when Android File Transfer is also installed\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b \cf0 \ +\f0\b \cf0 \ Update 0.13: 9/29/2013\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls21\ilvl0\cf0 {\listtext \uc0\u8226 }Near-total rewrite of the Feedback component\ @@ -324,9 +335,9 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.12: 4/01/2013\ +\f0\b Update 0.12: 4/01/2013\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls22\ilvl0\cf0 {\listtext \uc0\u8226 }Fix that prevents non-ChatPad-compatible controllers from working\ @@ -336,9 +347,9 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.11: 10/01/2012\ +\f0\b Update 0.11: 10/01/2012\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls23\ilvl0\cf0 {\listtext \uc0\u8226 }Temporary Lion fix (thanks to "codeman38")\ @@ -346,9 +357,9 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.10: 8/05/2011\ +\f0\b Update 0.10: 8/05/2011\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls24\ilvl0\cf0 {\listtext \uc0\u8226 }Various bugfixes\ @@ -358,19 +369,19 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.09: 21/11/2009\ +\f0\b Update 0.09: 21/11/2009\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls25\ilvl0\cf0 {\listtext \uc0\u8226 }Driver rearchitecture\ {\listtext \uc0\u8226 }ChatPad support in wired controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 -\b \cf0 \ +\f0\b \cf0 \ Update 0.08: 10/09/2009\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls26\ilvl0\cf0 {\listtext \uc0\u8226 }64-bit support (untested)\ @@ -379,9 +390,9 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.07: 16/12/2007\ +\f0\b Update 0.07: 16/12/2007\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls27\ilvl0\cf0 {\listtext \uc0\u8226 }10.4 bugfix\ @@ -389,8 +400,8 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.06: 10/11/2007 -\b0 \ +\f0\b Update 0.06: 10/11/2007 +\f1\b0 \ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 @@ -400,8 +411,8 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.05: 21/4/2007 -\b0 \ +\f0\b Update 0.05: 21/4/2007 +\f1\b0 \ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 @@ -411,9 +422,9 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.04: 27/2/2007\ +\f0\b Update 0.04: 27/2/2007\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls30\ilvl0\cf0 {\listtext \uc0\u8226 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ @@ -422,17 +433,17 @@ This update includes:\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.03: 22/7/2006\ +\f0\b Update 0.03: 22/7/2006\ -\b0 \ +\f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 \ls31\ilvl0\cf0 {\listtext \uc0\u8226 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 \cf0 \ -\b Update 0.02: 11/2/2006 -\b0 \ +\f0\b Update 0.02: 11/2/2006 +\f1\b0 \ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural\partightenfactor0 @@ -446,7 +457,7 @@ This update includes:\ Please visit {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver}} for information on this software. Consider donating or buying via the Amazon associate links to support development of this driver!\ \ -\b Update: -\b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ +\f0\b Update: +\f1\b0 Since the version 0.13 you can find new releases of this software here: {\field{\*\fldinst{HYPERLINK "https://github.com/360Controller/360Controller/releases/"}}{\fldrslt https://github.com/360Controller/360Controller/releases/}} , this is a fork of the driver initially developed by TattieBogle.\ \ Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file diff --git a/Pref360Control/en.lproj/Pref360ControlPref.xib b/Pref360Control/en.lproj/Pref360ControlPref.xib index 0174e5e8..42b9a0e9 100644 --- a/Pref360Control/en.lproj/Pref360ControlPref.xib +++ b/Pref360Control/en.lproj/Pref360ControlPref.xib @@ -59,7 +59,7 @@ - + @@ -100,7 +100,7 @@ - + @@ -179,11 +179,11 @@ - + - + @@ -245,7 +245,7 @@ - + @@ -274,11 +274,11 @@ - + - + @@ -307,7 +307,7 @@ - + @@ -574,7 +574,7 @@ - + @@ -612,13 +612,13 @@ - + - + - + @@ -647,7 +647,7 @@ - + @@ -708,11 +708,11 @@ - + - + @@ -738,7 +738,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -756,7 +756,7 @@ Due to some internal limitations, you need to connect your device once to be abl - + @@ -778,11 +778,11 @@ Due to some internal limitations, you need to connect your device once to be abl - +