From 2a7b9f47b9d8fe25fdd5dae184c926f47b42f250 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 18 Aug 2006 22:53:21 +0000 Subject: [PATCH 01/66] Initial commit --- .../360Controller.xcodeproj/colin.mode1 | 1491 +++++++++++++ .../360Controller.xcodeproj/colin.pbxuser | 266 +++ .../360Controller.xcodeproj/project.pbxproj | 372 ++++ 360Controller/ControlStruct.h | 115 + 360Controller/English.lproj/InfoPlist.strings | Bin 0 -> 264 bytes 360Controller/Info copy.plist | 56 + 360Controller/Info.plist | 196 ++ 360Controller/_60Controller.cpp | 514 +++++ 360Controller/_60Controller.h | 93 + 360Controller/version.plist | 16 + 360Controller/xbox360hid.h | 125 ++ Feedback360/English.lproj/InfoPlist.strings | Bin 0 -> 260 bytes Feedback360/Feedback360.xcodeproj/colin.mode1 | 1532 ++++++++++++++ .../Feedback360.xcodeproj/colin.pbxuser | 253 +++ .../Feedback360.xcodeproj/project.pbxproj | 311 +++ Feedback360/Info.plist | 36 + Feedback360/devlink.c | 60 + Feedback360/devlink.h | 41 + Feedback360/emulator.c | 343 +++ Feedback360/emulator.h | 112 + Feedback360/main.c | 427 ++++ Feedback360/main.h | 56 + Feedback360/version.plist | 16 + .../Install360Controller.packproj | 360 ++++ Install360Controller/Scripts/finish.sh | 12 + Install360Controller/Scripts/upgrade.sh | 7 + Install360Controller/Text/Welcome.rtf | 41 + Licence.txt | 340 +++ Pref360Control/DeviceItem.h | 42 + Pref360Control/DeviceItem.m | 73 + .../English.lproj/InfoPlist.strings | Bin 0 -> 378 bytes .../Pref360ControlPref.nib/classes.nib | 45 + .../Pref360ControlPref.nib/info.nib | 16 + .../Pref360ControlPref.nib/objects.nib | Bin 0 -> 5494 bytes .../Pref360ControlPref~.nib/classes.nib | 45 + .../Pref360ControlPref~.nib/info.nib | 16 + .../Pref360ControlPref~.nib/objects.nib | Bin 0 -> 5387 bytes Pref360Control/Info.plist | 30 + Pref360Control/MyAnalogStick.h | 39 + Pref360Control/MyAnalogStick.m | 133 ++ Pref360Control/MyCentreButtons.h | 34 + Pref360Control/MyCentreButtons.m | 95 + Pref360Control/MyDigitalStick.h | 36 + Pref360Control/MyDigitalStick.m | 132 ++ Pref360Control/MyMainButtons.h | 35 + Pref360Control/MyMainButtons.m | 119 ++ Pref360Control/MyShoulderButton.h | 32 + Pref360Control/MyShoulderButton.m | 59 + .../Pref360Control.xcodeproj/colin.mode1 | 1869 +++++++++++++++++ .../Pref360Control.xcodeproj/colin.pbxuser | 513 +++++ .../Pref360Control.xcodeproj/project.pbxproj | 509 +++++ Pref360Control/Pref360ControlPref.h | 82 + Pref360Control/Pref360ControlPref.m | 622 ++++++ Pref360Control/Pref360Control_Prefix.pch | 8 + Pref360Control/pref360controlpref.tiff | Bin 0 -> 12076 bytes Pref360Control/version.plist | 18 + Readme.rtf | 86 + 57 files changed, 11879 insertions(+) create mode 100644 360Controller/360Controller.xcodeproj/colin.mode1 create mode 100644 360Controller/360Controller.xcodeproj/colin.pbxuser create mode 100644 360Controller/360Controller.xcodeproj/project.pbxproj create mode 100644 360Controller/ControlStruct.h create mode 100644 360Controller/English.lproj/InfoPlist.strings create mode 100644 360Controller/Info copy.plist create mode 100644 360Controller/Info.plist create mode 100644 360Controller/_60Controller.cpp create mode 100644 360Controller/_60Controller.h create mode 100644 360Controller/version.plist create mode 100644 360Controller/xbox360hid.h create mode 100644 Feedback360/English.lproj/InfoPlist.strings create mode 100644 Feedback360/Feedback360.xcodeproj/colin.mode1 create mode 100644 Feedback360/Feedback360.xcodeproj/colin.pbxuser create mode 100644 Feedback360/Feedback360.xcodeproj/project.pbxproj create mode 100644 Feedback360/Info.plist create mode 100644 Feedback360/devlink.c create mode 100644 Feedback360/devlink.h create mode 100644 Feedback360/emulator.c create mode 100644 Feedback360/emulator.h create mode 100644 Feedback360/main.c create mode 100644 Feedback360/main.h create mode 100644 Feedback360/version.plist create mode 100644 Install360Controller/Install360Controller.packproj create mode 100644 Install360Controller/Scripts/finish.sh create mode 100644 Install360Controller/Scripts/upgrade.sh create mode 100644 Install360Controller/Text/Welcome.rtf create mode 100644 Licence.txt create mode 100644 Pref360Control/DeviceItem.h create mode 100644 Pref360Control/DeviceItem.m create mode 100644 Pref360Control/English.lproj/InfoPlist.strings create mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib create mode 100644 Pref360Control/Info.plist create mode 100644 Pref360Control/MyAnalogStick.h create mode 100644 Pref360Control/MyAnalogStick.m create mode 100644 Pref360Control/MyCentreButtons.h create mode 100644 Pref360Control/MyCentreButtons.m create mode 100644 Pref360Control/MyDigitalStick.h create mode 100644 Pref360Control/MyDigitalStick.m create mode 100644 Pref360Control/MyMainButtons.h create mode 100644 Pref360Control/MyMainButtons.m create mode 100644 Pref360Control/MyShoulderButton.h create mode 100644 Pref360Control/MyShoulderButton.m create mode 100644 Pref360Control/Pref360Control.xcodeproj/colin.mode1 create mode 100644 Pref360Control/Pref360Control.xcodeproj/colin.pbxuser create mode 100644 Pref360Control/Pref360Control.xcodeproj/project.pbxproj create mode 100644 Pref360Control/Pref360ControlPref.h create mode 100644 Pref360Control/Pref360ControlPref.m create mode 100644 Pref360Control/Pref360Control_Prefix.pch create mode 100644 Pref360Control/pref360controlpref.tiff create mode 100644 Pref360Control/version.plist create mode 100644 Readme.rtf diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 new file mode 100644 index 00000000..819ab3ee --- /dev/null +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -0,0 +1,1491 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3BCE45D40963972A00B69EDF + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3B300FFB09F58A40009DA334 + PBXProjectModuleLabel + xbox360hid.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B300FFC09F58A40009DA334 + PBXProjectModuleLabel + xbox360hid.h + _historyCapacity + 0 + bookmark + 3BE2FE4C0A724EFE007DD2D8 + history + + 3BDC3E590A724A5A0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBEAB44096B786600F2E37B + PBXProjectModuleLabel + ControlStruct.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBEAB45096B786600F2E37B + PBXProjectModuleLabel + ControlStruct.h + _historyCapacity + 0 + bookmark + 3BE2FE4D0A724EFE007DD2D8 + history + + 3BDC3E5A0A724A5A0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 38 218 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BCE45D80963972A00B69EDF + PBXProjectModuleLabel + _60Controller.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BCE45D90963972A00B69EDF + PBXProjectModuleLabel + _60Controller.h + _historyCapacity + 0 + bookmark + 3BE2FE4E0A724EFE007DD2D8 + history + + 3BDC3E5C0A724A5A0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 85 129 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BCF4E45097DB33D0049C083 + PBXProjectModuleLabel + IOUSBPipe.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BCF4E46097DB33D0049C083 + PBXProjectModuleLabel + IOUSBPipe.h + _historyCapacity + 0 + bookmark + 3BE2FE4F0A724EFE007DD2D8 + history + + 3BDC3E5D0A724A5A0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 089C166AFE841209C02AAC07 + 247142CAFF3F8F9811CA285C + 3B2EF19A0965A03E007BFB7B + 089C167CFE841241C02AAC07 + 3B2EF52A0965A0AE007BFB7B + 8DA8362C06AD9B9200E5AC22 + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 367}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 385}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 223 481 713 426 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {505, 0}} + RubberWindowFrame + 223 481 713 426 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {505, 380}} + RubberWindowFrame + 223 481 713 426 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 380pt + + + Proportion + 505pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3BE2FE290A724BCD007DD2D8 + 1CE0B1FE06471DED0097A5F4 + 3BE2FE2A0A724BCD007DD2D8 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3BCE45C10963706A00B69EDF + 3BCF4E45097DB33D0049C083 + 3BCE45D80963972A00B69EDF + 3BBEAB44096B786600F2E37B + 3B300FFB09F58A40009DA334 + /Users/colin/Projects/360/360ControllerSource/360Controller/360Controller.xcodeproj + + WindowString + 223 481 713 426 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1024, 271}} + RubberWindowFrame + 101 235 1024 583 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 271pt + + + ContentConfiguration + + PBXBuildLogShowsTranscriptDefaultKey + {{0, 5}, {1024, 261}} + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 276}, {1024, 266}} + RubberWindowFrame + 101 235 1024 583 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 266pt + + + Proportion + 542pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3BCE45C10963706A00B69EDF + 3BE2FE2F0A724BCD007DD2D8 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 101 235 1024 583 0 0 1280 1002 + WindowToolGUID + 3BCE45C10963706A00B69EDF + WindowToolIsVisible + + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + IsVertical + + Layout + + + Dock + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + IOMessage.h + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {781, 212}} + RubberWindowFrame + 126 418 781 470 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 212pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{0, 217}, {781, 212}} + RubberWindowFrame + 126 418 781 470 0 0 1280 1002 + + Module + PBXProjectFindModule + Proportion + 212pt + + + Proportion + 429pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 3BCF4E4D097DB33D0049C083 + 3BCF4E4E097DB33D0049C083 + 1CDD528C0622207200134675 + 1CD0528E0623707200166675 + + WindowString + 126 418 781 470 0 0 1280 1002 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..11257802 --- /dev/null +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -0,0 +1,266 @@ +// !$*UTF8*$! +{ + 089C1669FE841209C02AAC07 /* Project object */ = { + activeBuildConfigurationName = Deployment; + activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Development */; + activeTarget = 32D94FC30562CBF700B6AF17 /* 360Controller */; + addToTargets = ( + 32D94FC30562CBF700B6AF17 /* 360Controller */, + ); + breakpoints = ( + ); + breakpointsGroup = 3BBDC6B209794B560023AAD8 /* XCBreakpointsBucket */; + codeSenseManager = 3BCE45B209633D9A00B69EDF /* Code sense */; + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 300, + 156, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXErrorsWarningsDataSource_TypeID, + PBXErrorsWarningsDataSource_MessageID, + PBXErrorsWarningsDataSource_LocationID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 266, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 200, + 86, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 175262526; + PBXWorkspaceStateSaveDate = 175262526; + }; + perUserProjectItems = { + 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */; + 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */; + 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */; + 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */; + 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */; + 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */; + 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */; + 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */; + }; + sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; + userBuildSettings = { + }; + }; + 089C167EFE841241C02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{129, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{130, 78}, {900, 814}}"; + }; + }; + 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1316}}"; + sepNavSelRange = "{1998, 12}"; + sepNavVisRect = "{{0, 253}, {861, 685}}"; + sepNavWindowFrame = "{{85, 73}, {900, 814}}"; + }; + }; + 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {896, 7210}}"; + sepNavSelRange = "{8675, 5}"; + sepNavVisRect = "{{0, 3599}, {861, 685}}"; + sepNavWindowFrame = "{{361, 128}, {900, 814}}"; + }; + }; + 32D94FC30562CBF700B6AF17 /* 360Controller */ = { + activeExec = 0; + }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 2758}}"; + sepNavSelRange = "{654, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{115, 102}, {900, 814}}"; + }; + }; + 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; + sepNavSelRange = "{3027, 10}"; + sepNavVisRect = "{{0, 491}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3BBDC6B209794B560023AAD8 /* XCBreakpointsBucket */ = { + isa = XCBreakpointsBucket; + name = "Project Breakpoints"; + objects = ( + ); + }; + 3BBEA711096AFD9F00F2E37B /* Info copy.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 798}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 113}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3BCE45B109633D9A00B69EDF /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3BCE45B209633D9A00B69EDF /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1624}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 840}, {861, 685}}"; + sepNavWindowFrame = "{{38, 162}, {900, 814}}"; + }; + }; + 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; + name = USAGE_PAGE; + rLen = 10; + rLoc = 3027; + rType = 0; + vrLen = 3010; + vrLoc = 1495; + }; + 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; + name = "ControlStruct.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1143; + vrLoc = 1895; + }; + 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = relativeLeft; + rLen = 12; + rLoc = 1998; + rType = 0; + vrLen = 1650; + vrLoc = 718; + }; + 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BDC3E5E0A724A5A0008F33B /* IOUSBPipe.h */; + name = "(null): 103"; + rLen = 0; + rLoc = 3455; + rType = 0; + vrLen = 1949; + vrLoc = 2564; + }; + 3BDC3E5E0A724A5A0008F33B /* IOUSBPipe.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IOUSBPipe.h; + path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/usb/IOUSBPipe.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {938, 4956}}"; + sepNavSelRange = "{3455, 0}"; + sepNavVisRect = "{{0, 1092}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; + name = USAGE_PAGE; + rLen = 10; + rLoc = 3027; + rType = 0; + vrLen = 3010; + vrLoc = 1495; + }; + 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; + name = "ControlStruct.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1143; + vrLoc = 1895; + }; + 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = relativeLeft; + rLen = 12; + rLoc = 1998; + rType = 0; + vrLen = 1650; + vrLoc = 718; + }; + 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE2FE500A724EFE007DD2D8 /* IOUSBPipe.h */; + name = "(null): 103"; + rLen = 0; + rLoc = 3455; + rType = 0; + vrLen = 1949; + vrLoc = 2564; + }; + 3BE2FE500A724EFE007DD2D8 /* IOUSBPipe.h */ = { + isa = PBXFileReference; + name = IOUSBPipe.h; + path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/usb/IOUSBPipe.h; + sourceTree = ""; + }; +} diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj new file mode 100644 index 00000000..0c5b232d --- /dev/null +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -0,0 +1,372 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 32D94FC60562CBF700B6AF17 /* _60Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; }; + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 32D94FCA0562CBF700B6AF17 /* _60Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; settings = {ATTRIBUTES = (); }; }; + 3BB5E09C09641F8200F83598 /* xbox360hid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; }; + 3BCE45CA09638EBC00B69EDF /* ControlStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildStyle section */ + 06AA1265FFB2107B11CA28AA /* Development */ = { + isa = PBXBuildStyle; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + ZERO_LINK = YES; + }; + name = Development; + }; + 06AA1266FFB2107B11CA28AA /* Deployment */ = { + isa = PBXBuildStyle; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + name = Deployment; + }; +/* End PBXBuildStyle section */ + +/* Begin PBXFileReference section */ + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _60Controller.h; sourceTree = ""; }; + 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = _60Controller.cpp; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FD00562CBF700B6AF17 /* 360Controller.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = 360Controller.kext; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B0F1276097B395B00127827 /* Feedback360.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Feedback360.bundle; path = ../Feedback360/build/Deployment/Feedback360.bundle; sourceTree = SOURCE_ROOT; }; + 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = xbox360hid.h; sourceTree = ""; }; + 3BBEA711096AFD9F00F2E37B /* Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "Info copy.plist"; path = "/Users/colin/Projects/360Controller/Info copy.plist"; sourceTree = ""; }; + 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlStruct.h; sourceTree = ""; }; + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 32D94FCB0562CBF700B6AF17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* 360Controller */ = { + isa = PBXGroup; + children = ( + 247142CAFF3F8F9811CA285C /* Source */, + 089C167CFE841241C02AAC07 /* Resources */, + 19C28FB6FE9D52B211CA2CBB /* Products */, + ); + name = 360Controller; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 3B2EF52A0965A0AE007BFB7B /* Kernel Driver */, + ); + name = Resources; + sourceTree = ""; + }; + 19C28FB6FE9D52B211CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 32D94FD00562CBF700B6AF17 /* 360Controller.kext */, + ); + name = Products; + sourceTree = ""; + }; + 247142CAFF3F8F9811CA285C /* Source */ = { + isa = PBXGroup; + children = ( + 3B2EF19A0965A03E007BFB7B /* Kernel Driver */, + ); + name = Source; + sourceTree = ""; + }; + 3B2EF19A0965A03E007BFB7B /* Kernel Driver */ = { + isa = PBXGroup; + children = ( + 3BB5E09B09641F8200F83598 /* xbox360hid.h */, + 3BCE45C909638EBC00B69EDF /* ControlStruct.h */, + 1A224C3EFF42367911CA2CB7 /* _60Controller.h */, + 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */, + ); + name = "Kernel Driver"; + sourceTree = ""; + }; + 3B2EF52A0965A0AE007BFB7B /* Kernel Driver */ = { + isa = PBXGroup; + children = ( + 3B0F1276097B395B00127827 /* Feedback360.bundle */, + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */, + 32D94FCF0562CBF700B6AF17 /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + 3BBEA711096AFD9F00F2E37B /* Info copy.plist */, + ); + name = "Kernel Driver"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 32D94FC50562CBF700B6AF17 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC60562CBF700B6AF17 /* _60Controller.h in Headers */, + 3BCE45CA09638EBC00B69EDF /* ControlStruct.h in Headers */, + 3BB5E09C09641F8200F83598 /* xbox360hid.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 32D94FC30562CBF700B6AF17 /* 360Controller */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3BBDC682097938A90023AAD8 /* Build configuration list for PBXNativeTarget "360Controller" */; + buildPhases = ( + 32D94FC50562CBF700B6AF17 /* Headers */, + 32D94FC70562CBF700B6AF17 /* Resources */, + 32D94FC90562CBF700B6AF17 /* Sources */, + 32D94FCB0562CBF700B6AF17 /* Frameworks */, + 32D94FCC0562CBF700B6AF17 /* Rez */, + 3B0F12A1097B3A3A00127827 /* ShellScript */, + ); + buildRules = ( + ); + buildSettings = { + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.mice.driver.Xbox360Controller; + MODULE_VERSION = 1.0.0d1; + PREBINDING = NO; + PRODUCT_NAME = 360Controller; + WRAPPER_EXTENSION = kext; + }; + dependencies = ( + ); + name = 360Controller; + productInstallPath = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + productName = 360Controller; + productReference = 32D94FD00562CBF700B6AF17 /* 360Controller.kext */; + productType = "com.apple.product-type.kernel-extension.iokit"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */; + buildSettings = { + }; + buildStyles = ( + 06AA1265FFB2107B11CA28AA /* Development */, + 06AA1266FFB2107B11CA28AA /* Deployment */, + ); + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* 360Controller */; + projectDirPath = ""; + targets = ( + 32D94FC30562CBF700B6AF17 /* 360Controller */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 32D94FC70562CBF700B6AF17 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 32D94FCC0562CBF700B6AF17 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B0F12A1097B3A3A00127827 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd $TARGET_BUILD_DIR/$TARGET_NAME.kext/Contents\nmkdir PlugIns > /dev/null 2>&1\nrm -R PlugIns/Feedback360.plugin > /dev/null 2>&1\ncp -R $SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle PlugIns/Feedback360.plugin\n# Renaming extension from bundle to a plugin? Could be naughty."; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 32D94FC90562CBF700B6AF17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FCA0562CBF700B6AF17 /* _60Controller.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3BBDC683097938A90023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.mice.driver.Xbox360Controller; + MODULE_VERSION = 1.0.0d1; + PREBINDING = NO; + PRODUCT_NAME = 360Controller; + WRAPPER_EXTENSION = kext; + ZERO_LINK = YES; + }; + name = Development; + }; + 3BBDC684097938A90023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.mice.driver.Xbox360Controller; + MODULE_VERSION = 1.0.0d1; + PREBINDING = NO; + PRODUCT_NAME = 360Controller; + WRAPPER_EXTENSION = kext; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 3BBDC685097938A90023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.mice.driver.Xbox360Controller; + MODULE_VERSION = 1.0.0d1; + PREBINDING = NO; + PRODUCT_NAME = 360Controller; + WRAPPER_EXTENSION = kext; + }; + name = Default; + }; + 3BBDC687097938A90023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.2; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + }; + name = Development; + }; + 3BBDC688097938A90023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Deployment; + }; + 3BBDC689097938A90023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.2; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + }; + name = Default; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3BBDC682097938A90023AAD8 /* Build configuration list for PBXNativeTarget "360Controller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC683097938A90023AAD8 /* Development */, + 3BBDC684097938A90023AAD8 /* Deployment */, + 3BBDC685097938A90023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC687097938A90023AAD8 /* Development */, + 3BBDC688097938A90023AAD8 /* Deployment */, + 3BBDC689097938A90023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h new file mode 100644 index 00000000..083a7673 --- /dev/null +++ b/360Controller/ControlStruct.h @@ -0,0 +1,115 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 __CONTROLSTRUCT_H__ +#define __CONTROLSTRUCT_H__ + +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);} + +#define PACKED __attribute__((__packed__)) + +// Common structure format +typedef struct { + XBox360_Byte command; + XBox360_Byte size; +} PACKED XBOX360_PACKET; + +// Analog stick format +typedef struct { + XBox360_SShort x,y; +} PACKED XBOX360_HAT; + +// Structure describing the report had back from the controller +typedef struct { + XBOX360_PACKET header; + XBox360_Short buttons; + XBox360_Byte trigL,trigR; + XBOX360_HAT left,right; + XBox360_Byte reserved[6]; +} PACKED XBOX360_IN_REPORT; + +// Structure describing the command to change LED status +typedef struct { + XBOX360_PACKET header; + XBox360_Byte pattern; +} PACKED XBOX360_OUT_LED; + +// Structure describing the command to change rumble motor status +typedef struct { + XBOX360_PACKET header; + XBox360_Byte reserved1; + XBox360_Byte big,little; + XBox360_Byte reserved[3]; +} PACKED XBOX360_OUT_RUMBLE; + +// Enumeration of command types +enum { + // In + inReport = 0, + // Out + outRumble = 0, + outLed = 1 +}; + +// Button bits +enum { + btnHatRight = 0x8000, + btnHatLeft = 0x4000, + btnBack = 0x2000, + btnStart = 0x1000, + btnDigiRight = 0x0800, + btnDigiLeft = 0x0400, + btnDigiDown = 0x0200, + btnDigiUp = 0x0100, + btnY = 0x0080, + btnX = 0x0040, + btnB = 0x0020, + btnA = 0x0010, + btnReserved1 = 0x0008, // Unused? + btnXbox = 0x0004, + btnShoulderRight = 0x0002, + btnShoulderLeft = 0x0001 +}; + +// LED values +enum { + ledOff = 0x00, + ledBlinkingAll = 0x01, + ledFlashOn1 = 0x02, + ledFlashOn2 = 0x03, + ledFlashOn3 = 0x04, + ledFlashOn4 = 0x05, + ledOn1 = 0x06, + ledOn2 = 0x07, + ledOn3 = 0x08, + ledOn4 = 0x09, + ledRotating = 0x0a, + ledBlinking = 0x0b, // Blinking of previously enabled LED (e.g. from 0x01-0x09) + ledBlinkingSlow = 0x0c, // As above + ldAlternating = 0x0d // 1+4, 2+3, then back to previous after a short time +}; + +#endif // __CONTROLSTRUCT_H__ diff --git a/360Controller/English.lproj/InfoPlist.strings b/360Controller/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..37b3a9e5286475b005ac0687ec9f149660751953 GIT binary patch literal 264 zcmXYs%MQUn6o&t`r)Vr2mxky@Y)FKJE_i}cMd&4MNq8eKiSG=V%$(bI{&VL2QD441 ztyE~QSXZ6()IkZkJGN3yrcjRcuqp47D8=uobbPIb>;?MaC?CxhXQsKPxE5BwR4p9l}xPI@2Hd8;ivmT-KzGN W9DnV0F#QhEfSG|t>i)gZrhNg7Z7hfY literal 0 HcmV?d00001 diff --git a/360Controller/Info copy.plist b/360Controller/Info copy.plist new file mode 100644 index 00000000..b06cc87e --- /dev/null +++ b/360Controller/Info copy.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + 360Controller + CFBundleIconFile + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + 1.0.0d1 + IOKitPersonalities + + Controller + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 654 + idVendor + 1118 + + + OSBundleLibraries + + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.iokit.IOUSBFamily + 1.8 + com.apple.kernel.libkern + 6.9.9 + com.apple.kernel.mach + 6.9.9 + + + diff --git a/360Controller/Info.plist b/360Controller/Info.plist new file mode 100644 index 00000000..92a3059d --- /dev/null +++ b/360Controller/Info.plist @@ -0,0 +1,196 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + 360Controller + CFBundleIconFile + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + 1.0.0d3 + IOKitPersonalities + + Controller + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + 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 + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 10 + idVendor + 3853 + + JoytekXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 48879 + idVendor + 5678 + + TSZPelican + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 513 + idVendor + 3695 + + MadCatzGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18198 + idVendor + 1848 + + MadCatzProGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18214 + idVendor + 1848 + + MadCatzMicroConGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18230 + idVendor + 1848 + + BigBenController + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1537 + idVendor + 5227 + + + OSBundleLibraries + + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.iokit.IOUSBFamily + 1.8 + com.apple.kernel.libkern + 6.9.9 + com.apple.kernel.mach + 6.9.9 + + + diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp new file mode 100644 index 00000000..d1e02ee3 --- /dev/null +++ b/360Controller/_60Controller.cpp @@ -0,0 +1,514 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + _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 "_60Controller.h" +#include "ControlStruct.h" +#include "xbox360hid.h" + +#define kDriverSettingKey "DeviceData" + +OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOHIDDevice) +#define super IOHIDDevice + +// Find the maximum packet size of this pipe +static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) +{ + const IOUSBEndpointDescriptor *ed; + + ed=pipe->GetEndpointDescriptor(); + if(ed==NULL) return 0; + else return ed->wMaxPacketSize; +} + +// Read the settings from the registry +void Xbox360ControllerClass::readSettings(void) +{ + OSDictionary *dataDictionary; + OSBoolean *value; + OSNumber *number; + + dataDictionary=OSDynamicCast(OSDictionary,getProperty(kDriverSettingKey)); + if(dataDictionary==NULL) return; + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertLeftX")); + if(value!=NULL) invertLeftX=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertLeftY")); + if(value!=NULL) invertLeftY=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertRightX")); + if(value!=NULL) invertRightX=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertRightY")); + if(value!=NULL) invertRightY=value->getValue(); + number=OSDynamicCast(OSNumber,dataDictionary->getObject("DeadzoneLeft")); + if(number!=NULL) deadzoneLeft=number->unsigned32BitValue(); + number=OSDynamicCast(OSNumber,dataDictionary->getObject("DeadzoneRight")); + if(number!=NULL) deadzoneRight=number->unsigned32BitValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("RelativeLeft")); + if(value!=NULL) relativeLeft=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("RelativeRight")); + if(value!=NULL) relativeRight=value->getValue(); + /* + IOLog("Xbox360ControllerClass preferences loaded:\n invertLeft X: %s, Y: %s\n invertRight X: %s, Y:%s\n deadzone Left: %d, Right: %d\n\n", + invertLeftX?"True":"False",invertLeftY?"True":"False", + invertRightX?"True":"False",invertRightY?"True":"False", + deadzoneLeft,deadzoneRight); + */ +} + +// Initialise the extension +bool Xbox360ControllerClass::init(OSDictionary *propTable) +{ + bool res=super::init(propTable); + device=NULL; + interface=NULL; + inPipe=NULL; + outPipe=NULL; + inBuffer=NULL; + // Default settings + invertLeftX=invertLeftY=FALSE; + invertRightX=invertRightY=FALSE; + deadzoneLeft=deadzoneRight=0; + relativeLeft=relativeRight=FALSE; + readSettings(); + // Done + return res; +} + +// Free the extension +void Xbox360ControllerClass::free(void) +{ + // Don't actually do anything yet + super::free(); +} + +IOService* Xbox360ControllerClass::probe(IOService *provider, SInt32 *score ) +{ + IOService *res=super::probe(provider,score); + return res; +} + +//bool Xbox360ControllerClass::start(IOService *provider) +bool Xbox360ControllerClass::handleStart(IOService *provider) +{ + const IOUSBConfigurationDescriptor *cd; + IOUSBFindInterfaceRequest intf; + IOUSBFindEndpointRequest pipe; + XBOX360_OUT_LED led; + + if(!super::handleStart(provider)) return false; + // Get device + device=OSDynamicCast(IOUSBDevice,provider); + if(device==NULL) { + IOLog("start - invalid provider\n"); + goto fail; + } + // Check for configurations + if(device->GetNumConfigurations()<1) { + device=NULL; + IOLog("start - device has no configurations!\n"); + goto fail; + } + // Set configuration + cd=device->GetFullConfigurationDescriptor(0); + if(cd==NULL) { + device=NULL; + IOLog("start - couldn't get configuration descriptor\n"); + goto fail; + } + // Open + if(!device->open(this)) { + device=NULL; + IOLog("start - unable to open device\n"); + goto fail; + } + if(device->SetConfiguration(this,cd->bConfigurationValue,true)!=kIOReturnSuccess) { + IOLog("start - unable to set configuration\n"); + goto fail; + } + // Find correct interface + intf.bInterfaceClass=kIOUSBFindInterfaceDontCare; + intf.bInterfaceSubClass=93; + intf.bInterfaceProtocol=1; + intf.bAlternateSetting=kIOUSBFindInterfaceDontCare; + interface=device->FindNextInterface(NULL,&intf); + if(interface==NULL) { + IOLog("start - unable to find the interface\n"); + goto fail; + } + interface->open(this); + // Find pipes + pipe.direction=kUSBIn; + pipe.interval=0; + pipe.type=kUSBInterrupt; + pipe.maxPacketSize=0; + inPipe=interface->FindNextPipe(NULL,&pipe); + if(inPipe==NULL) { + IOLog("start - unable to find in pipe\n"); + goto fail; + } + inPipe->retain(); + pipe.direction=kUSBOut; + outPipe=interface->FindNextPipe(NULL,&pipe); + if(outPipe==NULL) { + IOLog("start - unable to find out pipe\n"); + goto fail; + } + outPipe->retain(); + // Get a buffer + inBuffer=IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,GetMaxPacketSize(inPipe)); + if(inBuffer==NULL) { + IOLog("start - failed to allocate input buffer\n"); + goto fail; + } + // Begin reading + if(!QueueRead()) goto fail; + // Disable LED + Xbox360_Prepare(led,outLed); + led.pattern=ledOff; + QueueWrite(&led,sizeof(led)); + // Done + readSettings(); + return true; +fail: + ReleaseAll(); + return false; +} + +// Set up an asynchronous read +bool Xbox360ControllerClass::QueueRead(void) +{ + IOUSBCompletion complete; + IOReturn err; + + complete.target=this; + complete.action=ReadCompleteInternal; + complete.parameter=inBuffer; + err=inPipe->Read(inBuffer,0,0,inBuffer->getLength(),&complete); + if(err==kIOReturnSuccess) return true; + else { + IOLog("read - failed to start (0x%.8x\n",err); + return false; + } +} + +// Set up an asynchronous write +bool Xbox360ControllerClass::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"); + return false; + } + outBuffer->writeBytes(0,bytes,length); + complete.target=this; + complete.action=WriteCompleteInternal; + complete.parameter=outBuffer; + err=outPipe->Write(outBuffer,0,0,length,&complete); + if(err==kIOReturnSuccess) return true; + else { + IOLog("send - failed to start (0x%.8x)\n",err); + return false; + } +} + +//void Xbox360ControllerClass::stop(IOService *provider) +void Xbox360ControllerClass::handleStop(IOService *provider) +{ +// IOLog("Stopping\n"); + ReleaseAll(); + super::handleStop(provider); +} + +// Releases all the objects used +void Xbox360ControllerClass::ReleaseAll(void) +{ + if(outPipe!=NULL) { + outPipe->Abort(); + outPipe->release(); + outPipe=NULL; + } + if(inPipe!=NULL) { + inPipe->Abort(); + inPipe->release(); + inPipe=NULL; + } + if(inBuffer!=NULL) { + inBuffer->release(); + inBuffer=NULL; + } + if(interface!=NULL) { + interface->close(this); + interface=NULL; + } + if(device!=NULL) { + device->close(this); + device=NULL; + } +} + +// Handle message sent to the driver +IOReturn Xbox360ControllerClass::message(UInt32 type,IOService *provider,void *argument) +{ +// IOLog("Message\n"); + switch(type) { + case kIOMessageServiceIsTerminated: + case kIOMessageServiceIsRequestingClose: + if(device->isOpen(this)) ReleaseAll(); + return kIOReturnSuccess; + default: + return super::message(type,provider,argument); + } +} + +// This returns the abs() value of a short, swapping it if necessary +static inline XBox360_SShort getAbsolute(XBox360_SShort value) +{ + XBox360_SShort reverse; + +#ifdef __LITTLE_ENDIAN__ + reverse=value; +#elif __BIG_ENDIAN__ + reverse=((value&0xFF00)>>8)|((value&0x00FF)<<8); +#else +#error Unknown CPU byte order +#endif + return (reverse<0)?~reverse:reverse; +} + +// Adjusts the report for any settings speciified by the user +void Xbox360ControllerClass::fiddleReport(IOBufferMemoryDescriptor *buffer) +{ + 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; + if(deadzoneLeft!=0) { + if(relativeLeft) { + if((getAbsolute(report->left.x)left.y)left.x=0; + report->left.y=0; + } + } else { + if(getAbsolute(report->left.x)left.x=0; + if(getAbsolute(report->left.y)left.y=0; + } + } + if(deadzoneRight!=0) { + if(relativeRight) { + if((getAbsolute(report->right.x)right.y)right.x=0; + report->right.y=0; + } + } else { + if(getAbsolute(report->right.x)right.x=0; + if(getAbsolute(report->right.y)right.y=0; + } + } +} + +// This forwards a completed read notification to a member function +void Xbox360ControllerClass::ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +{ + if(target!=NULL) + ((Xbox360ControllerClass*)target)->ReadComplete(parameter,status,bufferSizeRemaining); +} + +// This forwards a completed write notification to a member function +void Xbox360ControllerClass::WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +{ + if(target!=NULL) + ((Xbox360ControllerClass*)target)->WriteComplete(parameter,status,bufferSizeRemaining); +} + +// This handles a completed asynchronous read +void Xbox360ControllerClass::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +{ + IOReturn err; + bool reread=!isInactive(); + + switch(status) { + case kIOReturnOverrun: + IOLog("read - kIOReturnOverrun, clearing stall\n"); + inPipe->ClearStall(); + // Fall through + case kIOReturnSuccess: + { + const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); + if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { + fiddleReport(inBuffer); + err=handleReport(inBuffer,kIOHIDReportTypeInput); + if(err!=kIOReturnSuccess) { + IOLog("read - failed to handle report: 0x%.8x\n",err); + } + } + } + break; + case kIOReturnNotResponding: + IOLog("read - kIOReturnNotResponding\n"); + reread=false; + break; + default: + reread=false; + break; + } + if(reread) QueueRead(); +} + +// Handle a completed asynchronous write +void Xbox360ControllerClass::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +{ + IOMemoryDescriptor *memory=(IOMemoryDescriptor*)parameter; + if(status!=kIOReturnSuccess) { + IOLog("write - Error writing: 0x%.8x\n",status); + } + memory->release(); +} + +// Returns the HID descriptor for this device +IOReturn Xbox360ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const +{ + IOBufferMemoryDescriptor *buffer; + + buffer=IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,sizeof(ReportDescriptor)); + if(buffer==NULL) return kIOReturnNoResources; + buffer->writeBytes(0,ReportDescriptor,sizeof(ReportDescriptor)); + *descriptor=buffer; + return kIOReturnSuccess; +} + +// Handles a message from the userspace IOHIDDeviceInterface122::setReport function +IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +{ + char data[2]; + + report->readBytes(0,data,2); + switch(data[0]) { + case 0x00: // Set force feedback + 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]; + rumble.little=data[1]; + QueueWrite(&rumble,sizeof(rumble)); + } + return kIOReturnSuccess; + case 0x01: // Set LEDs + 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]; + QueueWrite(&led,sizeof(led)); + } + return kIOReturnSuccess; + default: + return kIOReturnUnsupported; + } +} + +// Get report +IOReturn Xbox360ControllerClass::getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +{ + // Doesn't do anything yet ;) + return kIOReturnUnsupported; +} + +// Returns the string for the specified index from the USB device's string list, with an optional default +OSString* Xbox360ControllerClass::getDeviceString(UInt8 index,const char *def) const +{ + IOReturn err; + char buf[1024]; + const char *string; + + err=device->GetStringDescriptor(index,buf,sizeof(buf)); + if(err==kIOReturnSuccess) string=buf; + else { + if(def==NULL) string="Unknown"; + else string=def; + } + return OSString::withCString(string); +} + +OSString* Xbox360ControllerClass::newManufacturerString() const +{ + return getDeviceString(device->GetManufacturerStringIndex()); +} + +OSNumber* Xbox360ControllerClass::newPrimaryUsageNumber() const +{ + // Gamepad + return OSNumber::withNumber(0x05,8); +} + +OSNumber* Xbox360ControllerClass::newPrimaryUsagePageNumber() const +{ + // Generic Desktop + return OSNumber::withNumber(0x01,8); +} + +OSNumber* Xbox360ControllerClass::newProductIDNumber() const +{ + return OSNumber::withNumber(device->GetProductID(),16); +} + +OSString* Xbox360ControllerClass::newProductString() const +{ + return getDeviceString(device->GetProductStringIndex()); +} + +OSString* Xbox360ControllerClass::newSerialNumberString() const +{ + return getDeviceString(device->GetSerialNumberStringIndex()); +} + +OSString* Xbox360ControllerClass::newTransportString() const +{ + return OSString::withCString("USB"); +} + +OSNumber* Xbox360ControllerClass::newVendorIDNumber() const +{ + return OSNumber::withNumber(device->GetVendorID(),16); +} + +// Called by the userspace IORegistryEntrySetCFProperties function +IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) +{ + OSDictionary *dictionary; + + dictionary=OSDynamicCast(OSDictionary,properties); + if(dictionary!=NULL) { + setProperty(kDriverSettingKey,dictionary); + readSettings(); + return kIOReturnSuccess; + } else return kIOReturnBadArgument; +} diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h new file mode 100644 index 00000000..de9ebd12 --- /dev/null +++ b/360Controller/_60Controller.h @@ -0,0 +1,93 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + _60Controller.h - definition 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 + +class Xbox360ControllerClass : public IOHIDDevice +{ + OSDeclareDefaultStructors(Xbox360ControllerClass) + +private: + void ReleaseAll(void); + bool QueueRead(void); + bool QueueWrite(const void *bytes,UInt32 length); + + OSString* getDeviceString(UInt8 index,const char *def=NULL) const; + + static void ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); + static void WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining); + + void fiddleReport(IOBufferMemoryDescriptor *buffer); + + void readSettings(void); + +protected: + IOUSBDevice *device; + IOUSBInterface *interface; + IOUSBPipe *inPipe,*outPipe; + IOBufferMemoryDescriptor *inBuffer; + + // Settings + bool invertLeftX,invertLeftY; + bool invertRightX,invertRightY; + short deadzoneLeft,deadzoneRight; + bool relativeLeft,relativeRight; + +public: + // this is from the IORegistryEntry - no provider yet + virtual bool init(OSDictionary *propTable); + virtual void free(void); + + // IOKit methods. These methods are defines in + virtual IOService* probe(IOService *provider, SInt32 *score ); + + virtual IOReturn setProperties(OSObject *properties); + + virtual IOReturn message(UInt32 type, IOService *provider, void *argument); + + virtual void ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); + virtual void WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); + + // 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 OSString* newManufacturerString() const; + virtual OSNumber* newPrimaryUsageNumber() const; + virtual OSNumber* newPrimaryUsagePageNumber() const; + virtual OSNumber* newProductIDNumber() const; + virtual OSString* newProductString() const; + virtual OSString* newSerialNumberString() const; + virtual OSString* newTransportString() const; + virtual OSNumber* newVendorIDNumber() const; +protected: + virtual bool handleStart(IOService *provider); + virtual void handleStop(IOService *provider); +}; + +#endif /* __XBOX360CONTROLLER_H__ */ diff --git a/360Controller/version.plist b/360Controller/version.plist new file mode 100644 index 00000000..53bf3a3f --- /dev/null +++ b/360Controller/version.plist @@ -0,0 +1,16 @@ + + + + + BuildVersion + 12 + CFBundleVersion + 1.0 + ProductBuildVersion + 7K571 + ProjectName + DevToolsWizardTemplates + SourceVersion + 3870000 + + diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h new file mode 100644 index 00000000..3e1ae274 --- /dev/null +++ b/360Controller/xbox360hid.h @@ -0,0 +1,125 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ + +/* + * This descriptor was generated using the USB HID definition tool available + * from the USB people's website. It's not quite the same as the HID descriptor + * on the free60.org site as I created this file before I knew about it and + * just kept working with this one anyway :) + */ + +char ReportDescriptor[196] = { + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x05, // USAGE (Game Pad) + 0xa1, 0x01, // COLLECTION (Application) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x3a, // USAGE (Counted Buffer) + 0xa1, 0x02, // COLLECTION (Logical) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x3f, // USAGE (Reserved) + 0x09, 0x3b, // USAGE (Byte Count) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x0c, // USAGE_MINIMUM (Button 12) + 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x09, // USAGE (Button 9) + 0x09, 0x0a, // USAGE (Button 10) + 0x09, 0x07, // USAGE (Button 7) + 0x09, 0x08, // USAGE (Button 8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x05, // USAGE (Button 5) + 0x09, 0x06, // USAGE (Button 6) + 0x09, 0x0b, // USAGE (Button 11) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x46, 0xff, 0x00, // PHYSICAL_MAXIMUM (255) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x32, // USAGE (Z) + 0x09, 0x35, // USAGE (Rz) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x10, // REPORT_SIZE (16) + 0x16, 0x00, 0x80, // LOGICAL_MINIMUM (-32768) + 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767) + 0x36, 0x00, 0x80, // PHYSICAL_MINIMUM (-32768) + 0x46, 0xff, 0x7f, // PHYSICAL_MAXIMUM (32767) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x33, // USAGE (Rx) + 0x09, 0x34, // USAGE (Ry) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION +}; \ No newline at end of file diff --git a/Feedback360/English.lproj/InfoPlist.strings b/Feedback360/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..12350c0adbaba8678bcedb021a614f60429a4d56 GIT binary patch literal 260 zcmXYsOA5k35JYS3DT2%3Cn#nkZVZTmW}zpD$wWo-AyGkZ>ak@+mk!cT}vOiX+0DQ`BteuwZ7R*X*;UzE=xK=5`y~eHKZ3i8l|4;LUvYpz0 Wl++vN-+=V!M(78csQ<4*>-GhylPhTe literal 0 HcmV?d00001 diff --git a/Feedback360/Feedback360.xcodeproj/colin.mode1 b/Feedback360/Feedback360.xcodeproj/colin.mode1 new file mode 100644 index 00000000..a1c474fd --- /dev/null +++ b/Feedback360/Feedback360.xcodeproj/colin.mode1 @@ -0,0 +1,1532 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3B2EF59109661AF5007BFB7B + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3BBDC6DB097958F10023AAD8 + PBXProjectModuleLabel + emulator.c + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBDC6DC097958F10023AAD8 + PBXProjectModuleLabel + emulator.c + _historyCapacity + 0 + bookmark + 3BE2FE400A724ED5007DD2D8 + history + + 3BDC3E450A724A1F0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 345 119 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B09261E097D9E4100DE2683 + PBXProjectModuleLabel + IOHIDLib.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B09261F097D9E4100DE2683 + PBXProjectModuleLabel + IOHIDLib.h + _historyCapacity + 0 + bookmark + 3BE2FE410A724ED5007DD2D8 + history + + 3BDC3E460A724A1F0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBDC6D0097958F10023AAD8 + PBXProjectModuleLabel + devlink.c + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBDC6D1097958F10023AAD8 + PBXProjectModuleLabel + devlink.c + _historyCapacity + 0 + bookmark + 3BE2FE430A724ED5007DD2D8 + history + + 3BDC3E490A724A1F0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 253 166 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBEAB35096B786400F2E37B + PBXProjectModuleLabel + main.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBEAB36096B786400F2E37B + PBXProjectModuleLabel + main.h + _historyCapacity + 0 + bookmark + 3BE2FE440A724ED5007DD2D8 + history + + 3BDC3E4A0A724A1F0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 7 124 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBA03BD096A128C008A46C9 + PBXProjectModuleLabel + emulator.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBA03BE096A128C008A46C9 + PBXProjectModuleLabel + emulator.h + _historyCapacity + 0 + bookmark + 3BE2FE450A724ED5007DD2D8 + history + + 3BDC3E4B0A724A1F0008F33B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 284 144 900 758 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 089C166AFE841209C02AAC07 + 08FB77AFFE84173DC02AAC07 + 089C167CFE841241C02AAC07 + 3B2EF5470965B8E3007BFB7B + 089C1671FE841209C02AAC07 + 3B2EF54B0965C358007BFB7B + 0AA1909FFE8422F4C02AAC07 + 19C28FB6FE9D52B211CA2CBB + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 57 554 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 57 554 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 57 554 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3BE2FE3E0A724ED5007DD2D8 + 1CE0B1FE06471DED0097A5F4 + 3BE2FE3F0A724ED5007DD2D8 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3B2EF5820965C4A5007BFB7B + 3BBA03BD096A128C008A46C9 + 3BBEAB35096B786400F2E37B + 3BBDC6D0097958F10023AAD8 + 3B09261E097D9E4100DE2683 + 3BBDC6DB097958F10023AAD8 + /Users/colin/Projects/360/360ControllerSource/Feedback360/Feedback360.xcodeproj + + WindowString + 57 554 690 397 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {500, 218}} + RubberWindowFrame + 691 470 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + ContentConfiguration + + PBXBuildLogShowsTranscriptDefaultKey + {{0, 5}, {500, 231}} + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 223}, {500, 236}} + RubberWindowFrame + 691 470 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 459pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3B2EF5820965C4A5007BFB7B + 3BE2FE460A724ED5007DD2D8 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 691 470 500 500 0 0 1280 1002 + WindowToolGUID + 3B2EF5820965C4A5007BFB7B + WindowToolIsVisible + + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + IsVertical + + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + IOHIDLib.h + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {781, 212}} + RubberWindowFrame + 31 477 781 470 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 212pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{0, 217}, {781, 212}} + RubberWindowFrame + 31 477 781 470 0 0 1280 1002 + + Module + PBXProjectFindModule + Proportion + 212pt + + + Proportion + 429pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 3BCF4DD2097DA7030049C083 + 3BCF4DD3097DA7030049C083 + 1CDD528C0622207200134675 + 1CD0528E0623707200166675 + + WindowString + 31 477 781 470 0 0 1280 1002 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..73829fb8 --- /dev/null +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -0,0 +1,253 @@ +// !$*UTF8*$! +{ + 089C1669FE841209C02AAC07 /* Project object */ = { + activeBuildConfigurationName = Deployment; + activeBuildStyle = 014CEA3F0018CDD111CA2923 /* Development */; + activeTarget = 8D57630D048677EA00EA77CD /* Feedback360 */; + addToTargets = ( + 8D57630D048677EA00EA77CD /* Feedback360 */, + ); + breakpoints = ( + ); + codeSenseManager = 3B2EF5370965A149007BFB7B /* Code sense */; + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 243, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 175262674; + PBXWorkspaceStateSaveDate = 175262674; + }; + perUserProjectItems = { + 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */; + 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */; + 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */; + 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */; + 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */; + 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */; + 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */; + 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */; + 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */; + 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */; + }; + sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; + userBuildSettings = { + }; + }; + 089C167EFE841241C02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{127, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{38, 162}, {900, 814}}"; + }; + }; + 08FB77B6FE84183AC02AAC07 /* main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1226, 5992}}"; + sepNavSelRange = "{3534, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{253, 96}, {900, 814}}"; + }; + }; + 3B2EF5360965A149007BFB7B /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3B2EF5370965A149007BFB7B /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3B2EF5440965B3C7007BFB7B /* main.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 784}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{7, 68}, {900, 814}}"; + }; + }; + 3BBA037B09697D80008A46C9 /* emulator.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{284, 88}, {900, 814}}"; + }; + }; + 3BBA037C09697D80008A46C9 /* emulator.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 4816}}"; + sepNavSelRange = "{1235, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{345, 63}, {900, 814}}"; + }; + }; + 3BBA03E1096A29B5008A46C9 /* devlink.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {488, 588}}"; + sepNavSelRange = "{1342, 0}"; + sepNavVisRect = "{{0, 402}, {459, 186}}"; + sepNavWindowFrame = "{{107, 99}, {900, 814}}"; + }; + }; + 3BBA03E2096A29B5008A46C9 /* devlink.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 854}}"; + sepNavSelRange = "{1097, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{253, 110}, {900, 814}}"; + }; + }; + 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; + name = "emulator.c: 30"; + rLen = 0; + rLoc = 1235; + rType = 0; + vrLen = 1924; + vrLoc = 0; + }; + 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BDC3E470A724A1F0008F33B /* IOHIDLib.h */; + name = "(null): 4"; + rLen = 0; + rLoc = 101; + rType = 0; + vrLen = 2161; + vrLoc = 9198; + }; + 3BDC3E470A724A1F0008F33B /* IOHIDLib.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IOHIDLib.h; + path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/hid/IOHIDLib.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 7518}}"; + sepNavSelRange = "{101, 0}"; + sepNavVisRect = "{{0, 3038}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; + name = "devlink.c: 29"; + rLen = 0; + rLoc = 1097; + rType = 0; + vrLen = 1832; + vrLoc = 0; + }; + 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; + name = "main.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1781; + vrLoc = 0; + }; + 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; + name = "emulator.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1403; + vrLoc = 0; + }; + 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; + name = "emulator.c: 30"; + rLen = 0; + rLoc = 1235; + rType = 0; + vrLen = 1924; + vrLoc = 0; + }; + 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE2FE420A724ED5007DD2D8 /* IOHIDLib.h */; + name = "(null): 4"; + rLen = 0; + rLoc = 101; + rType = 0; + vrLen = 2161; + vrLoc = 9198; + }; + 3BE2FE420A724ED5007DD2D8 /* IOHIDLib.h */ = { + isa = PBXFileReference; + name = IOHIDLib.h; + path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/hid/IOHIDLib.h; + sourceTree = ""; + }; + 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; + name = "devlink.c: 29"; + rLen = 0; + rLoc = 1097; + rType = 0; + vrLen = 1832; + vrLoc = 0; + }; + 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; + name = "main.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1781; + vrLoc = 0; + }; + 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; + name = "emulator.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1403; + vrLoc = 0; + }; + 8D57630D048677EA00EA77CD /* Feedback360 */ = { + activeExec = 0; + }; + 8D576317048677EA00EA77CD /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{1047, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{325, 66}, {900, 814}}"; + }; + }; +} diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj new file mode 100644 index 00000000..f6962642 --- /dev/null +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -0,0 +1,311 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 3B2EF54C0965C358007BFB7B /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2EF54B0965C358007BFB7B /* ForceFeedback.framework */; }; + 3BBA037D09697D80008A46C9 /* emulator.c in Sources */ = {isa = PBXBuildFile; fileRef = 3BBA037C09697D80008A46C9 /* emulator.c */; }; + 3BBA03D0096A22F5008A46C9 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BBA03CF096A22F5008A46C9 /* IOKit.framework */; }; + 3BBA03E3096A29B5008A46C9 /* devlink.c in Sources */ = {isa = PBXBuildFile; fileRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; }; + 8D576312048677EA00EA77CD /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 08FB77B6FE84183AC02AAC07 /* main.c */; settings = {ATTRIBUTES = (); }; }; + 8D576314048677EA00EA77CD /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AA1909FFE8422F4C02AAC07 /* CoreFoundation.framework */; }; + 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B49A704867FD3000E48DA /* InfoPlist.strings */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildStyle section */ + 014CEA3F0018CDD111CA2923 /* Development */ = { + isa = PBXBuildStyle; + buildSettings = { + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + ZERO_LINK = YES; + }; + name = Development; + }; + 014CEA400018CDD111CA2923 /* Deployment */ = { + isa = PBXBuildStyle; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + name = Deployment; + }; +/* End PBXBuildStyle section */ + +/* Begin PBXFileReference section */ + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 08FB77B6FE84183AC02AAC07 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; + 0AA1909FFE8422F4C02AAC07 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 3B2EF5440965B3C7007BFB7B /* main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; + 3B2EF54B0965C358007BFB7B /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = /System/Library/Frameworks/ForceFeedback.framework; sourceTree = ""; }; + 3BBA037B09697D80008A46C9 /* emulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emulator.h; sourceTree = ""; }; + 3BBA037C09697D80008A46C9 /* emulator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = emulator.c; sourceTree = ""; }; + 3BBA03CF096A22F5008A46C9 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 3BBA03E1096A29B5008A46C9 /* devlink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = devlink.h; sourceTree = ""; }; + 3BBA03E2096A29B5008A46C9 /* devlink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = devlink.c; sourceTree = ""; }; + 8D576316048677EA00EA77CD /* Feedback360.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Feedback360.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D576317048677EA00EA77CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D576313048677EA00EA77CD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D576314048677EA00EA77CD /* CoreFoundation.framework in Frameworks */, + 3B2EF54C0965C358007BFB7B /* ForceFeedback.framework in Frameworks */, + 3BBA03D0096A22F5008A46C9 /* IOKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Feedback360 */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Source */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */, + 19C28FB6FE9D52B211CA2CBB /* Products */, + ); + name = Feedback360; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 3BBA03CF096A22F5008A46C9 /* IOKit.framework */, + 3B2EF54B0965C358007BFB7B /* ForceFeedback.framework */, + 0AA1909FFE8422F4C02AAC07 /* CoreFoundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 3B2EF5470965B8E3007BFB7B /* New Group */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 3B2EF5440965B3C7007BFB7B /* main.h */, + 08FB77B6FE84183AC02AAC07 /* main.c */, + 3BBA037B09697D80008A46C9 /* emulator.h */, + 3BBA037C09697D80008A46C9 /* emulator.c */, + 3BBA03E1096A29B5008A46C9 /* devlink.h */, + 3BBA03E2096A29B5008A46C9 /* devlink.c */, + ); + name = Source; + sourceTree = ""; + }; + 19C28FB6FE9D52B211CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D576316048677EA00EA77CD /* Feedback360.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 3B2EF5470965B8E3007BFB7B /* New Group */ = { + isa = PBXGroup; + children = ( + 8D576317048677EA00EA77CD /* Info.plist */, + 8D5B49A704867FD3000E48DA /* InfoPlist.strings */, + ); + name = "New Group"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D57630D048677EA00EA77CD /* Feedback360 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3BBDC69309793BF60023AAD8 /* Build configuration list for PBXNativeTarget "Feedback360" */; + buildPhases = ( + 8D57630F048677EA00EA77CD /* Resources */, + 8D576311048677EA00EA77CD /* Sources */, + 8D576313048677EA00EA77CD /* Frameworks */, + ); + buildRules = ( + ); + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Feedback360; + WRAPPER_EXTENSION = bundle; + }; + dependencies = ( + ); + name = Feedback360; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = Feedback360; + productReference = 8D576316048677EA00EA77CD /* Feedback360.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 3BBDC69709793BF60023AAD8 /* Build configuration list for PBXProject "Feedback360" */; + buildSettings = { + }; + buildStyles = ( + 014CEA3F0018CDD111CA2923 /* Development */, + 014CEA400018CDD111CA2923 /* Deployment */, + ); + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Feedback360 */; + projectDirPath = ""; + targets = ( + 8D57630D048677EA00EA77CD /* Feedback360 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D57630F048677EA00EA77CD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D576311048677EA00EA77CD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D576312048677EA00EA77CD /* main.c in Sources */, + 3BBA037D09697D80008A46C9 /* emulator.c in Sources */, + 3BBA03E3096A29B5008A46C9 /* devlink.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 8D5B49A704867FD3000E48DA /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3BBDC69409793BF60023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Feedback360; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = YES; + }; + name = Development; + }; + 3BBDC69509793BF60023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Feedback360; + WRAPPER_EXTENSION = bundle; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 3BBDC69609793BF60023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = Feedback360; + WRAPPER_EXTENSION = bundle; + }; + name = Default; + }; + 3BBDC69809793BF60023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + }; + name = Development; + }; + 3BBDC69909793BF60023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Deployment; + }; + 3BBDC69A09793BF60023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + }; + name = Default; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3BBDC69309793BF60023AAD8 /* Build configuration list for PBXNativeTarget "Feedback360" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC69409793BF60023AAD8 /* Development */, + 3BBDC69509793BF60023AAD8 /* Deployment */, + 3BBDC69609793BF60023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 3BBDC69709793BF60023AAD8 /* Build configuration list for PBXProject "Feedback360" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC69809793BF60023AAD8 /* Development */, + 3BBDC69909793BF60023AAD8 /* Deployment */, + 3BBDC69A09793BF60023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Feedback360/Info.plist b/Feedback360/Info.plist new file mode 100644 index 00000000..e0fe7a73 --- /dev/null +++ b/Feedback360/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Feedback360 + CFBundleIconFile + + CFBundleIdentifier + com.mice.Xbox360ControllerForceFeedback + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFPlugInDynamicRegistration + NO + CFPlugInFactories + + B8ED278F-EC8A-4E8E-B4CF-13E2A9D68E83 + Control360Factory + + CFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + + B8ED278F-EC8A-4E8E-B4CF-13E2A9D68E83 + + + + diff --git a/Feedback360/devlink.c b/Feedback360/devlink.c new file mode 100644 index 00000000..ed0d5684 --- /dev/null +++ b/Feedback360/devlink.c @@ -0,0 +1,60 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 "devlink.h" + +// Initialise the link +bool Device_Initialise(DeviceLink *link,io_object_t device) +{ + IOCFPlugInInterface **plugInInterface; + SInt32 score; + IOReturn ret; + + plugInInterface=NULL; + score=0; + ret=IOCreatePlugInInterfaceForService(device,kIOHIDDeviceUserClientTypeID,kIOCFPlugInInterfaceID,&plugInInterface,&score); + if(ret!=kIOReturnSuccess) return FALSE; + ret=(*plugInInterface)->QueryInterface(plugInInterface,CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID121),(LPVOID)&link->interface); + (*plugInInterface)->Release(plugInInterface); + if(ret!=kIOReturnSuccess) return FALSE; + (*link->interface)->open(link->interface,0); + return TRUE; +} + +// Finish the link +void Device_Finalise(DeviceLink *link) +{ + (*link->interface)->close(link->interface); + (*link->interface)->Release(link->interface); + link->interface=NULL; +} + +// Send a report via the link +bool Device_Send(DeviceLink *link,void *data,int length) +{ + if(link->interface==NULL) return FALSE; + else { + IOReturn res=(*link->interface)->setReport(link->interface,kIOHIDReportTypeOutput,0,data,length,10000,NULL,NULL,NULL); + return res==kIOReturnSuccess; + } +} diff --git a/Feedback360/devlink.h b/Feedback360/devlink.h new file mode 100644 index 00000000..3bb9ce25 --- /dev/null +++ b/Feedback360/devlink.h @@ -0,0 +1,41 @@ +/* + * devlink.h + * Feedback360 + * + * Created by Colin Munro on 3/1/06. + * Copyright 2006 Colin Munro. All rights reserved. + * + */ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 + +typedef struct { + IOHIDDeviceInterface121 **interface; +} DeviceLink; + +bool Device_Initialise(DeviceLink *link,io_object_t device); +void Device_Finalise(DeviceLink *link); + +bool Device_Send(DeviceLink *link,void *data,int length); diff --git a/Feedback360/emulator.c b/Feedback360/emulator.c new file mode 100644 index 00000000..34d5b401 --- /dev/null +++ b/Feedback360/emulator.c @@ -0,0 +1,343 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + emulator.c - simulate a force feedback device + + 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 "emulator.h" + +/* + * This code could do with being improved. For example, the two motors could + * allow for a "left" and "right" rumble in a car game. + * + * For debugging, you may use fprintf(stderr,...). The output will appear on + * the console of whatever game is using the Apple Force Feedback Framework. + */ + +#define LoopGranularity 500 // Microseconds +#define LoopTimerDelay (LoopGranularity*0.000001f) // In seconds + +static void Emulate_Timer(CFRunLoopTimerRef timer,void *context); + +// Initialise the emulation of a force feedback device +void Emulate_Initialise(ForceEmulator *emulator,int effectCount,void (*SetForce)(void*,unsigned char,unsigned char),void *context) +{ + int i; + CFRunLoopTimerContext callbackData; + + // Set callback + emulator->SetForce=SetForce; + emulator->context=context; + // Create effects memory + emulator->effects=(ForceEffect*)malloc(sizeof(ForceEffect)*effectCount); + emulator->effectCount=effectCount; + // Defaults + emulator->enable=TRUE; + emulator->pause=FALSE; + emulator->gain=4; + emulator->maxGain=4; + emulator->activeEffect=-1; + // Reset + for(i=0;ieffects[i].inUse=FALSE; + // Launch timer + callbackData.version=0; + callbackData.info=emulator; + callbackData.retain=NULL; + callbackData.release=NULL; + callbackData.copyDescription=NULL; + emulator->timer=CFRunLoopTimerCreate(NULL,LoopTimerDelay,LoopTimerDelay,0,0,Emulate_Timer,&callbackData); + CFRunLoopAddTimer(CFRunLoopGetCurrent(),emulator->timer,kCFRunLoopCommonModes); +} + +// Close down the force feedback stuff +void Emulate_Finalise(ForceEmulator *emulator) +{ + CFRunLoopTimerInvalidate(emulator->timer); + CFRelease(emulator->timer); + free(emulator->effects); + emulator->SetForce(emulator->context,0,0); +} + +// Call the callback, if output is enabled +void Emulate_Callback(ForceEmulator *emulator,unsigned char large,unsigned char small) +{ + emulator->oldLarge=large; + emulator->oldSmall=small; + if(emulator->enable) emulator->SetForce(emulator->context,large,small); +} + +// Create an effect - for the FF API +int Emulate_CreateEffect(ForceEmulator *emulator,const ForceParams *params) +{ + int i; + + for(i=0;ieffectCount;i++) { + if(!emulator->effects[i].inUse) { + emulator->effects[i].inUse=TRUE; + if(!Emulate_ChangeEffect(emulator,i+1,params)) { + emulator->effects[i].inUse=FALSE; + return 0; + } + return i+1; + } + } + return 0; +} + +// Change an effect - for the FF API +bool Emulate_ChangeEffect(ForceEmulator *emulator,int index,const ForceParams *params) +{ + ForceEffect *effect=emulator->effects+index-1; + effect->gain=params->gain; + effect->maxLevel=params->maxLevel; + effect->startCount=params->startDelay/LoopGranularity; + effect->attackLevel=params->attackLevel; + effect->attackCount=params->attackTime/LoopGranularity; + effect->sustainLevel=params->sustainLevel; + effect->sustainCount=params->sustainTime/LoopGranularity; + effect->fadeLevel=params->fadeLevel; + effect->fadeCount=params->fadeTime/LoopGranularity; + return TRUE; +} + +// Destroy an effect - for the FF API +void Emulate_DestroyEffect(ForceEmulator *emulator,int index) +{ + emulator->effects[index-1].inUse=FALSE; + if(emulator->activeEffect==(index-1)) emulator->activeEffect=-1; +} + +// Returns true if the effect index is in use +bool Emulate_IsValidEffect(ForceEmulator *emulator,int index) +{ + if((index<1)||(index>emulator->effectCount)) return FALSE; + return emulator->effects[index-1].inUse; +} + +// Returns true if the effect index is playing +bool Emulate_IsPlaying(ForceEmulator *emulator,int index) +{ + return emulator->activeEffect==(index-1); +} + +// Returns true if the device has no effects +bool Emulate_IsEmpty(ForceEmulator *emulator) +{ + int i; + + for(i=0;ieffectCount;i++) + if(emulator->effects[i].inUse) + return FALSE; + return TRUE; +} + +// Resets the device +void Emulate_Reset(ForceEmulator *emulator) +{ + int i; + + for(i=0;ieffectCount;i++) emulator->effects[i].inUse=FALSE; + Emulate_Callback(emulator,0,0); +} + +// Starts an effect for the specified number of loops +void Emulate_Start(ForceEmulator *emulator,int index,int iterations) +{ + ForceEffect *effect; + +// fprintf(stderr,"Emulate_Start(%p,%i,%i)\n",emulator,index,iterations); + effect=emulator->effects+index-1; + effect->countStart=effect->startCount; + effect->countAttack=effect->attackCount; + effect->countSustain=effect->sustainCount; + effect->countFade=effect->fadeCount; + effect->countLoop=iterations; + emulator->activeEffect=index-1; +} + +// Stops an effect +void Emulate_Stop(ForceEmulator *emulator,int index) +{ +// fprintf(stderr,"Emulate_Stop(%p,%i)\n",emulator,index); + if((index-1)==emulator->activeEffect) { + emulator->activeEffect=-1; + Emulate_Callback(emulator,0,0); + } +} + +// Returns true if no effects are running +bool Emulate_IsStopped(ForceEmulator *emulator) +{ + return emulator->activeEffect==-1; +} + +// Returns the number of used effects +UInt32 Emulate_Effects_Used(ForceEmulator *emulator) +{ + int i,j; + + for(i=j=0;ieffectCount;i++) + if(emulator->effects[i].inUse) + j++; + return j; +} + +// Returns the number of possible effects +UInt32 Emulate_Effects_Total(ForceEmulator *emulator) +{ + return emulator->effectCount; +} + +// Enables or disables the force feedback +void Emulate_SetEnable(ForceEmulator *emulator,bool enable) +{ + bool old=emulator->enable; + // Stop motors in case they were running + if(old&&(!enable)) Emulate_Callback(emulator,0,0); + emulator->enable=enable; + // Resume motors at last computed value, as we'll have + // been computing new values for them even if disabled + if((!old)&&enable) Emulate_Callback(emulator,emulator->oldLarge,emulator->oldSmall); +} + +// Returns true if enabled +bool Emulate_IsEnabled(ForceEmulator *emulator) +{ + return emulator->enable; +} + +// Pauses the device +void Emulate_SetPaused(ForceEmulator *emulator,bool enable) +{ + bool old=emulator->pause; + // Stop motors in case they were running + if((!old)&&enable) Emulate_Callback(emulator,0,0); + emulator->pause=enable; + // Resume motors at last computed value, as we'll be + // resuming feedback effects where we left off. + if(old&&(!enable)) Emulate_Callback(emulator,emulator->oldLarge,emulator->oldSmall); +} + +// Returns true if paused +bool Emulate_IsPaused(ForceEmulator *emulator) +{ + return emulator->pause; +} + +// Sets the gain for the device +void Emulate_SetGain(ForceEmulator *emulator,int gain,int gainMax) +{ + if((emulator->gain<=0)||(emulator->maxGain<=0)) return; + emulator->gain=gain; + emulator->maxGain=gainMax; + while(emulator->maxGain<4) { + emulator->gain*=2; + emulator->maxGain*=2; + } +} + +// Utility - scales a value +static inline int Emulate_Scale(int from,int to,int max,int val) +{ + int upper=max-1; + return from+(((to-from)*(upper-val))/upper); +} + +// Utility - computes the values for the large and small motors from the effect +static void Emulate_Force(ForceEmulator *emulator,int force,int maxGain) +{ + int adjusted; + int bling; + int small,large; + +// fprintf(stderr,"Emulate_Force(%p,%i)\n",emulator,force); + adjusted=(force*emulator->gain)/emulator->maxGain; + bling=maxGain/4; + if(adjustedactiveEffect; + if((i==-1)||emulator->pause) return; + effect=emulator->effects+emulator->activeEffect; + // Process each counter on the effect, to see what's happening + if(effect->countStart>0) { + // In the start (pre-effect) stage + level=effect->attackLevel; + effect->countStart--; + } else { + if(effect->countAttack>0) { + // In the attack stage + level=Emulate_Scale(effect->attackLevel,effect->sustainLevel,effect->attackCount,effect->countAttack); + effect->countAttack--; + } else { + if(effect->countSustain>0) { + // In the sustain stage + level=effect->sustainLevel; + effect->countSustain--; + } else { + if(effect->countFade>0) { + // In the fade stage + level=Emulate_Scale(effect->sustainLevel,effect->fadeLevel,effect->fadeCount,effect->countFade); + effect->countFade--; + } else { + // Work out if we need to do it again + effect->countLoop--; + if(effect->countLoop>0) { + // Prepare for next loop + level=effect->attackLevel; + effect->countStart=effect->startCount; + effect->countAttack=effect->attackCount; + effect->countSustain=effect->sustainCount; + effect->countFade=effect->fadeCount; + } else { + // Effect finished + level=0; + emulator->activeEffect=-1; + } + } + } + } + } + // Actually calculate what to do for the effect + Emulate_Force(emulator,(level*effect->gain)/effect->maxLevel,effect->maxLevel); +} diff --git a/Feedback360/emulator.h b/Feedback360/emulator.h new file mode 100644 index 00000000..6d42ca82 --- /dev/null +++ b/Feedback360/emulator.h @@ -0,0 +1,112 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + emulator.h - Interface to fake FF API effects using rumble motors + + 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 + +typedef enum { + fsStop, + fsPlay, +} ForceState; + +typedef struct { + bool inUse; + ForceState state; + // Information + int gain; + int maxLevel; + int startCount; + int attackLevel; + int attackCount; + int sustainLevel; + int sustainCount; + int fadeLevel; + int fadeCount; + // Runtime + int countStart; + int countAttack; + int countSustain; + int countFade; + int countLoop; +} ForceEffect; + +typedef struct { + // Settings + int gain; // 0-maxLevel + int maxLevel; + int startDelay; // Microseconds + // Envelope for effect + int attackLevel; // 0-maxLevel + int attackTime; // Microseconds + int sustainLevel; // 0-maxLevel + int sustainTime; // Microseconds + int fadeLevel; // 0-maxLevel + int fadeTime; // Microseconds +} ForceParams; + +typedef struct { + // Callback + void (*SetForce)(void *context,unsigned char large,unsigned char small); + void *context; + // Options + int gain,maxGain; + bool enable,pause; + // Effect entries + ForceEffect *effects; + int effectCount; + // Runtime + CFRunLoopTimerRef timer; + unsigned char oldLarge,oldSmall; + int activeEffect; +} ForceEmulator; + +// Constructor/destructor +void Emulate_Initialise(ForceEmulator *emulator,int effectCount,void (*SetForce)(void*,unsigned char,unsigned char),void *context); +void Emulate_Finalise(ForceEmulator *emulator); + +// Options +void Emulate_SetGain(ForceEmulator *emulator,int gain,int gainMax); +void Emulate_SetEnable(ForceEmulator *emulator,bool enable); +bool Emulate_IsEnabled(ForceEmulator *emulator); +void Emulate_SetPaused(ForceEmulator *emulator,bool enable); +bool Emulate_IsPaused(ForceEmulator *emulator); + +// Using effects +int Emulate_CreateEffect(ForceEmulator *emulator,const ForceParams *params); +bool Emulate_ChangeEffect(ForceEmulator *emulator,int index,const ForceParams *params); +void Emulate_DestroyEffect(ForceEmulator *emulator,int index); + +bool Emulate_IsValidEffect(ForceEmulator *emulator,int index); +bool Emulate_IsPlaying(ForceEmulator *emulator,int index); + +bool Emulate_IsEmpty(ForceEmulator *emulator); + +void Emulate_Reset(ForceEmulator *emulator); + +void Emulate_Start(ForceEmulator *emulator,int index,int iterations); +void Emulate_Stop(ForceEmulator *emulator,int index); +bool Emulate_IsStopped(ForceEmulator *emulator); + +UInt32 Emulate_Effects_Used(ForceEmulator *emulator); +UInt32 Emulate_Effects_Total(ForceEmulator *emulator); + +// Callbacks +void Emulate_Callback(ForceEmulator *emulator,unsigned char large,unsigned char small); diff --git a/Feedback360/main.c b/Feedback360/main.c new file mode 100644 index 00000000..43b72f3c --- /dev/null +++ b/Feedback360/main.c @@ -0,0 +1,427 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + main.c - 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 Foobar; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include +#include "main.h" + +static void dealloc360Feedback(Xbox360ForceFeedback *this); + +// IUnknown + +static HRESULT Feedback360QueryInterface(void *that,REFIID iid,LPVOID *ppv) +{ + Xbox360ForceFeedback *this=FFThis(that); + CFUUIDRef interface; + + interface=CFUUIDCreateFromUUIDBytes(NULL,iid); + // IOForceFeedbackDevice + 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 S_OK; + } +} + +static ULONG Feedback360AddRef(void *that) +{ + Xbox360ForceFeedback *this=FFThis(that); + this->refCount++; + return this->refCount; +} + +static ULONG Feedback360Release(void *that) +{ + Xbox360ForceFeedback *this=FFThis(that); + this->refCount--; + if(this->refCount==0) { + dealloc360Feedback(this); + return 0; + } else return this->refCount; +} + +// IOCFPlugInInterface + +static IOReturn Feedback360Probe(void *that,CFDictionaryRef propertyTable,io_service_t service,SInt32 *order) +{ + if((service==0)||(!IOObjectConformsTo(service,"Xbox360ControllerClass"))) return kIOReturnBadArgument; + return S_OK; +} + +static IOReturn Feedback360Start(void *that,CFDictionaryRef propertyTable,io_service_t service) +{ + return S_OK; +} + +static IOReturn Feedback360Stop(void *that) +{ + return S_OK; +} + +// IOForceFeedbackDevice + +static HRESULT Feedback360GetVersion(void *this,ForceFeedbackVersion *version) +{ + if((this==NULL)||(version==NULL)) return FFERR_INVALIDPARAM; + 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 S_OK; +} + +static void Feedback360_Callback(void *that,unsigned char large,unsigned char small) +{ + Xbox360ForceFeedback *this=(Xbox360ForceFeedback*)that; + char buf[]={0x00,0x04,large,small}; + if(!this->manual) Device_Send(&this->device,buf,sizeof(buf)); +} + +static HRESULT Feedback360InitializeTerminate(void *that,NumVersion APIversion,io_object_t hidDevice,boolean_t begin) +{ + Xbox360ForceFeedback *this=FFThis(that); +// fprintf(stderr,"Feedback360InitializeTerminate(%p,[%i.%i.%i.%i],%p,%s)\n",this,APIversion.majorRev,APIversion.minorAndBugRev,APIversion.stage,APIversion.nonRelRev,hidDevice,begin?"true":"false"); + if(this==NULL) return FFERR_INVALIDPARAM; + if(begin) { +// fprintf(stderr,"Feedback: Initialising...\n"); + // Initialize + if(APIversion.majorRev!=kFFPlugInAPIMajorRev) return FFERR_INVALIDPARAM; + // From probe + if((hidDevice==0)||(!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass"))) return FFERR_INVALIDPARAM; + Emulate_Initialise(&this->emulator,10,Feedback360_Callback,this); + if(!Device_Initialise(&this->device,hidDevice)) { + Emulate_Finalise(&this->emulator); + return FFERR_NOINTERFACE; + } + this->manual=FALSE; + } else { +// fprintf(stderr,"Feedback: Terminating\n"); + // Terminate + Emulate_Finalise(&this->emulator); + Device_Finalise(&this->device); + } + return FF_OK; +} + +static HRESULT Feedback360DestroyEffect(void *that,FFEffectDownloadID downloadID) +{ + Xbox360ForceFeedback *this=FFThis(that); + Emulate_DestroyEffect(&this->emulator,downloadID); + return FF_OK; +} + +static bool Feedback360SupportedEffect(CFUUIDRef effect) +{ + if(CFEqual(effect,kFFEffectType_SawtoothDown_ID)) return TRUE; + if(CFEqual(effect,kFFEffectType_SawtoothUp_ID)) return TRUE; + if(CFEqual(effect,kFFEffectType_Sine_ID)) return TRUE; + if(CFEqual(effect,kFFEffectType_Spring_ID)) return TRUE; + if(CFEqual(effect,kFFEffectType_Square_ID)) return TRUE; + if(CFEqual(effect,kFFEffectType_Triangle_ID)) return TRUE; + return FALSE; +} + +static bool Feedback360ConvertEffect(const FFEFFECT *effect,ForceParams *params) +{ + if((effect->cbTypeSpecificParams!=sizeof(FFPERIODIC))||(effect->lpvTypeSpecificParams==NULL)) return FALSE; + // Settings + params->startDelay=effect->dwStartDelay; + params->gain=effect->dwGain; + params->maxLevel=10000; + // Envelope + params->sustainLevel=((FFPERIODIC*)effect->lpvTypeSpecificParams)->dwMagnitude; + // Documentation was a bit confusing here as to which value was right, compared to what a game actually used +// params->sustainTime=effect->dwDuration; + params->sustainTime=((FFPERIODIC*)effect->lpvTypeSpecificParams)->dwPeriod; + if(effect->lpEnvelope==NULL) { + params->attackLevel=params->sustainLevel; + params->attackTime=0; + params->fadeLevel=params->sustainLevel; + params->fadeTime=0; + } else { + if(effect->lpEnvelope->dwSizeattackLevel=effect->lpEnvelope->dwAttackLevel; + params->attackTime=effect->lpEnvelope->dwAttackTime; + params->fadeLevel=effect->lpEnvelope->dwFadeLevel; + params->fadeTime=effect->lpEnvelope->dwFadeTime; + } + // Done + return TRUE; +} + +static HRESULT Feedback360DownloadEffect(void *that,CFUUIDRef effectType,FFEffectDownloadID *downloadID,FFEFFECT *effect,FFEffectParameterFlag flags) +{ + ForceParams params; + Xbox360ForceFeedback *this=FFThis(that); + + if(!Feedback360SupportedEffect(effectType)) return FFERR_UNSUPPORTED; + if(!(effect->dwFlags&FFEFF_SPHERICAL)) return FFERR_UNSUPPORTED; + if(effect->dwTriggerButton!=FFEB_NOTRIGGER) return FFERR_UNSUPPORTED; + if(!Feedback360ConvertEffect(effect,¶ms)) return FFERR_UNSUPPORTED; + if(Emulate_IsPaused(&this->emulator)) return FFERR_DEVICEPAUSED; + if(flags&FFEP_NODOWNLOAD) return FF_OK; + if((*downloadID)==0) { + *downloadID=Emulate_CreateEffect(&this->emulator,¶ms); + if((*downloadID)==0) return FFERR_DEVICEFULL; + } else { + if(!Emulate_IsValidEffect(&this->emulator,*downloadID)) return FFERR_INVALIDDOWNLOADID; + if(!Emulate_ChangeEffect(&this->emulator,*downloadID,¶ms)) return FFERR_EFFECTTYPEMISMATCH; + } + if(flags&FFEP_START) { + // Restart + } + return FF_OK; +} + +static HRESULT Feedback360Escape(void *that,FFEffectDownloadID downloadID,FFEFFESCAPE *escape) +{ + Xbox360ForceFeedback *this=FFThis(that); + + if(this==NULL) return FFERR_INVALIDPARAM; + if(downloadID!=0) return FFERR_UNSUPPORTED; + if(escape->dwSizecbOutBuffer=0; + switch(escape->dwCommand) { + case 0x00: // Control motors + if(escape->cbInBuffer!=1) return FFERR_INVALIDPARAM; + this->manual=((unsigned char*)escape->lpvInBuffer)[0]!=0x00; + break; + case 0x01: // Set motors + if(escape->cbInBuffer!=2) return FFERR_INVALIDPARAM; + if(this->manual) { + unsigned char *data=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; + { + unsigned char *data=escape->lpvInBuffer; + unsigned char buf[]={0x01,0x03,data[0]}; + Device_Send(&this->device,buf,sizeof(buf)); + } + break; + default: + fprintf(stderr,"Xbox360Controller FF plugin: Unknown escape (%i)\n",escape->dwCommand); + return FFERR_UNSUPPORTED; + } + return FF_OK; +} + +static HRESULT Feedback360GetEffectStatus(void *that,FFEffectDownloadID downloadID,FFEffectStatusFlag *statusCode) +{ + Xbox360ForceFeedback *this=FFThis(that); + + if(!Emulate_IsValidEffect(&this->emulator,downloadID)) return FFERR_INVALIDDOWNLOADID; + *statusCode=Emulate_IsPlaying(&this->emulator,downloadID)?FFEGES_PLAYING:FFEGES_NOTPLAYING; + return FF_OK; +} + +static HRESULT Feedback360GetForceFeedbackCapabilities(void *this,FFCAPABILITIES *capabilities) +{ + capabilities->ffSpecVer.majorRev=kFFPlugInAPIMajorRev; + capabilities->ffSpecVer.minorAndBugRev=kFFPlugInAPIMinorAndBugRev; + capabilities->ffSpecVer.stage=kFFPlugInAPIStage; + capabilities->ffSpecVer.nonRelRev=kFFPlugInAPINonRelRev; + capabilities->supportedEffects=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=1; + capabilities->ffAxes[0]=FFJOFS_X; + 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 S_OK; +} + +static HRESULT Feedback360GetForceFeedbackState(void *that,ForceFeedbackDeviceState *deviceState) +{ + Xbox360ForceFeedback *this=FFThis(that); + + if(deviceState->dwSizedwSize=sizeof(ForceFeedbackDeviceState); + deviceState->dwState + = Emulate_IsEmpty(&this->emulator)?FFGFFS_EMPTY:0 + | Emulate_IsStopped(&this->emulator)?FFGFFS_STOPPED:0 + | Emulate_IsPaused(&this->emulator)?FFGFFS_PAUSED:0 + | Emulate_IsEnabled(&this->emulator)?FFGFFS_ACTUATORSON:FFGFFS_ACTUATORSOFF; + deviceState->dwLoad=(Emulate_Effects_Used(&this->emulator)*100)/Emulate_Effects_Total(&this->emulator); + return S_OK; +} + +static HRESULT Feedback360SendForceFeedbackCommand(void *that,FFCommandFlag state) +{ + Xbox360ForceFeedback *this=FFThis(that); + + switch(state) { + case FFSFFC_RESET: + Emulate_Reset(&this->emulator); + return S_OK; + case FFSFFC_STOPALL: + Emulate_Stop(&this->emulator,0); // 0 == all effects + return S_OK; + case FFSFFC_PAUSE: + case FFSFFC_CONTINUE: + Emulate_SetPaused(&this->emulator,state==FFSFFC_PAUSE); + return S_OK; + case FFSFFC_SETACTUATORSON: + case FFSFFC_SETACTUATORSOFF: + Emulate_SetEnable(&this->emulator,state==FFSFFC_SETACTUATORSON); + return S_OK; + default: + return FFERR_UNSUPPORTED; + } +} + +static HRESULT Feedback360SetProperty(void *that,FFProperty property,void *value) +{ + Xbox360ForceFeedback *this=FFThis(that); + + switch(property) { + case FFPROP_FFGAIN: + { + UInt32 value=*((UInt32*)value); + if(value>10000) return FFERR_INVALIDPARAM; + Emulate_SetGain(&this->emulator,value,10000); + } + return FF_OK; + default: + return FFERR_UNSUPPORTED; + } +} + +static HRESULT Feedback360StartEffect(void *that,FFEffectDownloadID downloadID,FFEffectStartFlag mode,UInt32 iterations) +{ + Xbox360ForceFeedback *this=FFThis(that); + + if(mode&FFES_SOLO) Feedback360SendForceFeedbackCommand(that,FFSFFC_RESET); + Emulate_Start(&this->emulator,downloadID,iterations); + return S_OK; +} + +static HRESULT Feedback360StopEffect(void *that,FFEffectDownloadID downloadID) +{ + Xbox360ForceFeedback *this=FFThis(that); + + if(!Emulate_IsValidEffect(&this->emulator,downloadID)) return FFERR_INVALIDDOWNLOADID; + Emulate_Stop(&this->emulator,downloadID); + return S_OK; +} + +// Function table + +static IOCFPlugInInterface functionMap360_IOCFPlugInInterface={ + // Padding required for COM + NULL, + // IUnknown + Feedback360QueryInterface, + Feedback360AddRef, + Feedback360Release, + // IOCFPlugInInterface + 1,0, // Version + Feedback360Probe, + Feedback360Start, + Feedback360Stop +}; + +static IOForceFeedbackDeviceInterface functionMap360_IOForceFeedbackDeviceInterface={ + // Padding required for COM + NULL, + // IUnknown + Feedback360QueryInterface, + Feedback360AddRef, + Feedback360Release, + // IOForceFeedbackDevice + Feedback360GetVersion, + Feedback360InitializeTerminate, + Feedback360DestroyEffect, + Feedback360DownloadEffect, + Feedback360Escape, + Feedback360GetEffectStatus, + Feedback360GetForceFeedbackCapabilities, + Feedback360GetForceFeedbackState, + Feedback360SendForceFeedbackCommand, + Feedback360SetProperty, + Feedback360StartEffect, + Feedback360StopEffect +}; + +// Constructor and destructor + +static IOCFPlugInInterface** alloc360Feedback(CFUUIDRef uuid) +{ + Xbox360ForceFeedback *item; + + item=(Xbox360ForceFeedback*)malloc(sizeof(Xbox360ForceFeedback)); + item->iIOCFPlugInInterface.pseudoVTable=(IUnknownVTbl*)&functionMap360_IOCFPlugInInterface; + item->iIOCFPlugInInterface.obj=item; + item->iIOForceFeedbackDeviceInterface.pseudoVTable=(IUnknownVTbl*)&functionMap360_IOForceFeedbackDeviceInterface; + item->iIOForceFeedbackDeviceInterface.obj=item; + item->factoryID=CFRetain(uuid); + CFPlugInAddInstanceForFactory(uuid); + item->refCount=1; + return (IOCFPlugInInterface**)&item->iIOCFPlugInInterface.pseudoVTable; +} + +static void dealloc360Feedback(Xbox360ForceFeedback *this) +{ + CFUUIDRef uuid; + + uuid=this->factoryID; + free(this); + if(uuid) { + CFPlugInRemoveInstanceForFactory(uuid); + CFRelease(uuid); + } +} + +// External factory function + +void* Control360Factory(CFAllocatorRef allocator,CFUUIDRef uuid) +{ + if(CFEqual(uuid,kIOForceFeedbackLibTypeID)) return (void*)alloc360Feedback(uuid); + else return NULL; +} diff --git a/Feedback360/main.h b/Feedback360/main.h new file mode 100644 index 00000000..c8df1c5f --- /dev/null +++ b/Feedback360/main.h @@ -0,0 +1,56 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 Colin Munro + + main.h - defines the structure used for the plugin COM object + + 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 "emulator.h" +#include "devlink.h" + +struct _Xbox360ForceFeedback; + +typedef struct _Xbox360InterfaceMap { + IUnknownVTbl *pseudoVTable; + struct _Xbox360ForceFeedback *obj; +} Xbox360InterfaceMap; + +typedef struct _Xbox360ForceFeedback { + Xbox360InterfaceMap iIOCFPlugInInterface; + Xbox360InterfaceMap iIOForceFeedbackDeviceInterface; + CFUUIDRef factoryID; + UInt32 refCount; + ForceEmulator emulator; + DeviceLink device; + bool manual; +} Xbox360ForceFeedback; + +#define FFThis(interface) (((interface)==NULL)?NULL:(((Xbox360InterfaceMap*)(interface))->obj)) + +#define FeedbackDriverVersionMajor 1 +#define FeedbackDriverVersionMinor 0 +#define FeedbackDriverVersionStage developStage +#define FeedbackDriverVersionNonRelRev 0 + +// B8ED278F-EC8A-4E8E-B4CF-13E2A9D68E83 +#define FeedbackDriverUuid CFUUIDGetConstantUUIDWithBytes(NULL, \ + 0xB8, 0xED, 0x27, 0x8F, 0xEC, 0x8A, 0x4E, 0x8E, \ + 0xB4, 0xCF, 0x13, 0xE2, 0xA9, 0xD6, 0x8E, 0x83) + \ No newline at end of file diff --git a/Feedback360/version.plist b/Feedback360/version.plist new file mode 100644 index 00000000..53bf3a3f --- /dev/null +++ b/Feedback360/version.plist @@ -0,0 +1,16 @@ + + + + + BuildVersion + 12 + CFBundleVersion + 1.0 + ProductBuildVersion + 7K571 + ProjectName + DevToolsWizardTemplates + SourceVersion + 3870000 + + diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj new file mode 100644 index 00000000..77fffee4 --- /dev/null +++ b/Install360Controller/Install360Controller.packproj @@ -0,0 +1,360 @@ + + + + + Hierarchy + + Attributes + + Documents + + Background Image + + IFPkgFlagBackgroundAlignment + 4 + IFPkgFlagBackgroundScaling + 1 + Mode + 0 + Path + + Path Type + 1 + + License + + International + + Mode + 1 + Path + ../Licence.txt + Path Type + 2 + + + ReadMe + + International + + Mode + 1 + Path + ../Readme.rtf + Path Type + 2 + + + Welcome + + International + + Mode + 1 + Path + Text/Welcome.rtf + Path Type + 2 + + + + Files + + Compress + + Hierarchy + + Children + + + Children + + + Children + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane + Path Type + 2 + Privileges + 509 + Type + 3 + UID + 0 + + + GID + 80 + Path + PreferencePanes + Path Type + 1 + Privileges + 509 + Type + 1 + UID + 0 + + + GID + 80 + Path + Library + Path Type + 1 + Privileges + 1021 + Type + 1 + UID + 0 + + + Children + + + Children + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + GID + 80 + Path + Extensions + Path Type + 1 + Privileges + 509 + Type + 2 + UID + 0 + + + GID + 80 + Path + Library + Path Type + 1 + Privileges + 509 + Type + 2 + UID + 0 + + + GID + 80 + Path + System + Path Type + 1 + Privileges + 509 + Type + 2 + UID + 0 + + + GID + 80 + Path + / + Path Type + 1 + Privileges + 1021 + Type + 1 + UID + 0 + + IFPkgFlagDefaultLocation + / + Imported Package + + Package Path + + Split Forks + + + Scripts + + Additional Resources + + International + + + Installation Scripts + + IFInstallationScriptsPostflight + + Path + Scripts/finish.sh + Path Type + 2 + Status + + + IFInstallationScriptsPostinstall + + Path + + Status + + + IFInstallationScriptsPostupgrade + + Path + + Status + + + IFInstallationScriptsPreflight + + Path + + Status + + + IFInstallationScriptsPreinstall + + Path + + Status + + + IFInstallationScriptsPreupgrade + + Path + Scripts/upgrade.sh + Path Type + 2 + Status + + + + Requirements + + + Settings + + Description + + International + + IFPkgDescriptionDeleteWarning + + IFPkgDescriptionDescription + Installs the driver for the XBox 360 Controller for MacOS X. + IFPkgDescriptionTitle + XBox 360 Controller Installer + IFPkgDescriptionVersion + 0.03 + + + Display Information + + CFBundleGetInfoString + Install360Controller 0.03 Copyrights © 2006 Colin Munro + CFBundleIconFile + + CFBundleIconFile Path Type + 1 + CFBundleIdentifier + com.mice.pkg.Xbox360controller + CFBundleName + XBox 360 Controller Driver Installer + CFBundleShortVersionString + 0.03 + + Options + + IFPkgFlagAllowBackRev + + IFPkgFlagAuthorizationAction + 2 + IFPkgFlagFollowLinks + + IFPkgFlagInstallFat + + IFPkgFlagIsRequired + + IFPkgFlagOverwritePermissions + + IFPkgFlagRelocatable + + IFPkgFlagRestartAction + 1 + IFPkgFlagRootVolumeOnly + + IFPkgFlagUpdateInstalledLanguages + + + Version + + IFMajorVersion + 0 + IFMinorVersion + 3 + + + + IFPkgFlagPackageSelection + 0 + Name + Install360Controller + Status + 1 + Type + 1 + + Name + Project + Settings + + 10.1 Compatibility + + Build Path + build + Build Path Type + 2 + Comment + + Remove .DS_Store + + Remove .pbdevelopment + + Remove CVS + + + + diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh new file mode 100644 index 00000000..6d6e507d --- /dev/null +++ b/Install360Controller/Scripts/finish.sh @@ -0,0 +1,12 @@ +#!/bin/sh +installdir="$3" +newer=`ps -ax | awk '{print $1" "$5}' | grep kextd | awk '{print $1}'` +if [ "$newer" == "" ] +then +cd "$installdir" +cd System/Library/Extensions +kextload 360Controller.kext +else +/bin/kill -1 $newer +fi +exit $? diff --git a/Install360Controller/Scripts/upgrade.sh b/Install360Controller/Scripts/upgrade.sh new file mode 100644 index 00000000..7a903ab0 --- /dev/null +++ b/Install360Controller/Scripts/upgrade.sh @@ -0,0 +1,7 @@ +#!/bin/sh +cd $3 +cd System/Library/Extensions +kextunload 360Controller.kext +#Fail if didn't unload? Currently, don't. +#exit $? +exit 0 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf new file mode 100644 index 00000000..d2c5e2f4 --- /dev/null +++ b/Install360Controller/Text/Welcome.rtf @@ -0,0 +1,41 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 +{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs42 \cf0 XBox 360 Controller Driver\ + +\f1\b0\fs24 Version 0.03\ +Copyright (C) 2005-2006 Colin Munro\ +\ +Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ +\ + +\f0\b Update 0.03: 22/7/2006\ + +\f1\b0 \ +This update includes:\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 \ + +\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\ql\qnatural\pardirnatural +\ls2\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ +{\listtext \'a5 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ +{\listtext \'a5 }Preference Pane now correctly detects devices being connected/disconnected\ +{\listtext \'a5 }Alternative deadzone mode\ +{\listtext \'a5 }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\ql\qnatural\pardirnatural +\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!\ +\ +Ensure to read the following Read Me and License sections before installing!} \ No newline at end of file diff --git a/Licence.txt b/Licence.txt new file mode 100644 index 00000000..3912109b --- /dev/null +++ b/Licence.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h new file mode 100644 index 00000000..adfa8479 --- /dev/null +++ b/Pref360Control/DeviceItem.h @@ -0,0 +1,42 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import +#import +#import +#import +#import +#import + +@interface DeviceItem : NSObject { + IOHIDDeviceInterface122 **interface; + FFDeviceObjectReference forceFeedback; + io_service_t deviceHandle; +} + ++ allocateDeviceItemForDevice:(io_service_t)device; + +- (IOHIDDeviceInterface122**)hidDevice; +- (FFDeviceObjectReference)ffDevice; +- (io_service_t)rawDevice; + +@end diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m new file mode 100644 index 00000000..2e4f4686 --- /dev/null +++ b/Pref360Control/DeviceItem.m @@ -0,0 +1,73 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import "DeviceItem.h" + +@implementation DeviceItem + ++ allocateDeviceItemForDevice:(io_service_t)device +{ + DeviceItem *item; + IOReturn ret; + IOCFPlugInInterface **plugInInterface; + SInt32 score=0; + + item=[[[DeviceItem alloc] init] autorelease]; + if(item==nil) goto fail; + ret=IOCreatePlugInInterfaceForService(device,kIOHIDDeviceUserClientTypeID,kIOCFPlugInInterfaceID,&plugInInterface,&score); + if(ret!=kIOReturnSuccess) goto fail; + ret=(*plugInInterface)->QueryInterface(plugInInterface,CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID122),(LPVOID)&item->interface); + (*plugInInterface)->Release(plugInInterface); + if(ret!=kIOReturnSuccess) goto fail; + item->forceFeedback=0; + FFCreateDevice(device,&item->forceFeedback); + item->deviceHandle=device; + return item; +fail: + IOObjectRelease(device); + return NULL; +} + +- (void)dealloc +{ + if(deviceHandle!=0) IOObjectRelease(deviceHandle); + if(interface!=NULL) (*interface)->Release(interface); + if(forceFeedback!=0) FFReleaseDevice(forceFeedback); + [super dealloc]; +} + +- (IOHIDDeviceInterface122**)hidDevice +{ + return interface; +} + +- (FFDeviceObjectReference)ffDevice +{ + return forceFeedback; +} + +- (io_service_t)rawDevice +{ + return deviceHandle; +} + +@end diff --git a/Pref360Control/English.lproj/InfoPlist.strings b/Pref360Control/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..1618a65769b7dd58345fcbeaa9d8d7894b0b02b9 GIT binary patch literal 378 zcmZvYO$z~G6ot>)ub5_qgeV)?P@<67SlA5SL70)R@Z<5^S7M=Q=6=k%=iGB2PnDEc zpq^6A6=|!r?s8htyATgL(n*yN17gg#OBItBwfFd=PINb*ZyuG0GsDwTTTPuoFTgns z;NKAgHF!e}VRtZ9RZ|(XshsGgphMMR7-*~x3_B(hjX+0mMVfg&o7kgyV8f+Wev3Er zzdu?0<&b3l_w?Rg$bUc9 literal 0 HcmV?d00001 diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib new file mode 100644 index 00000000..a52f1db1 --- /dev/null +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib @@ -0,0 +1,45 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = MyAnalogStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyCentreButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyDigitalStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyMainButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyShoulderButton; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + { + ACTIONS = {changeSetting = id; selectDevice = id; }; + CLASS = NSPreferencePane; + LANGUAGE = ObjC; + OUTLETS = { + "_firstKeyView" = id; + "_initialKeyView" = id; + "_lastKeyView" = id; + "_window" = NSWindow; + centreButtons = MyCentreButtons; + deviceList = NSPopUpButton; + digiStick = MyDigitalStick; + leftLinked = NSButton; + leftShoulder = MyShoulderButton; + leftStick = MyAnalogStick; + leftStickDeadzone = NSSlider; + leftStickInvertX = NSButton; + leftStickInvertY = NSButton; + leftTrigger = NSProgressIndicator; + leftTriggerDeadzone = NSSlider; + rightButtons = MyMainButtons; + rightLinked = NSButton; + rightShoulder = MyShoulderButton; + rightStick = MyAnalogStick; + rightStickDeadzone = NSSlider; + rightStickInvertX = NSButton; + rightStickInvertY = NSButton; + rightTrigger = NSProgressIndicator; + rightTriggerDeadzone = NSSlider; + rumbleEnable = NSButton; + rumbleTest = NSButton; + }; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib new file mode 100644 index 00000000..86884be0 --- /dev/null +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 99 47 481 349 0 0 1280 1002 + IBFramework Version + 443.0 + IBOpenObjects + + 12 + + IBSystem Version + 8H14 + + diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..a54d52ac26accded86b127716153355808974fd3 GIT binary patch literal 5494 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 Ow%J;mj9TJt;r{>vQ`gD> literal 0 HcmV?d00001 diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib new file mode 100644 index 00000000..a52f1db1 --- /dev/null +++ b/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib @@ -0,0 +1,45 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = MyAnalogStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyCentreButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyDigitalStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyMainButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + {CLASS = MyShoulderButton; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + { + ACTIONS = {changeSetting = id; selectDevice = id; }; + CLASS = NSPreferencePane; + LANGUAGE = ObjC; + OUTLETS = { + "_firstKeyView" = id; + "_initialKeyView" = id; + "_lastKeyView" = id; + "_window" = NSWindow; + centreButtons = MyCentreButtons; + deviceList = NSPopUpButton; + digiStick = MyDigitalStick; + leftLinked = NSButton; + leftShoulder = MyShoulderButton; + leftStick = MyAnalogStick; + leftStickDeadzone = NSSlider; + leftStickInvertX = NSButton; + leftStickInvertY = NSButton; + leftTrigger = NSProgressIndicator; + leftTriggerDeadzone = NSSlider; + rightButtons = MyMainButtons; + rightLinked = NSButton; + rightShoulder = MyShoulderButton; + rightStick = MyAnalogStick; + rightStickDeadzone = NSSlider; + rightStickInvertX = NSButton; + rightStickInvertY = NSButton; + rightTrigger = NSProgressIndicator; + rightTriggerDeadzone = NSSlider; + rumbleEnable = NSButton; + rumbleTest = NSButton; + }; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib new file mode 100644 index 00000000..86884be0 --- /dev/null +++ b/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 99 47 481 349 0 0 1280 1002 + IBFramework Version + 443.0 + IBOpenObjects + + 12 + + IBSystem Version + 8H14 + + diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..97fe8a5605bf01f0114f627787cb69f7399b0853 GIT binary patch literal 5387 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 literal 0 HcmV?d00001 diff --git a/Pref360Control/Info.plist b/Pref360Control/Info.plist new file mode 100644 index 00000000..0b8b1e60 --- /dev/null +++ b/Pref360Control/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Pref360Control + CFBundleIconFile + + CFBundleIdentifier + com.apple.prefpanel + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSMainNibFile + Pref360ControlPref + NSPrefPaneIconFile + Pref360ControlPref.tiff + NSPrincipalClass + Pref360ControlPref + + diff --git a/Pref360Control/MyAnalogStick.h b/Pref360Control/MyAnalogStick.h new file mode 100644 index 00000000..3f7e6fd2 --- /dev/null +++ b/Pref360Control/MyAnalogStick.h @@ -0,0 +1,39 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import + +@interface MyAnalogStick : NSView +{ + int deadzone; + int x,y; + BOOL pressed,linked; +} + +- (void)setDeadzone:(int)pos; +- (void)setPositionX:(int)xPos y:(int)yPos; +- (void)setPositionX:(int)xPos; +- (void)setPositionY:(int)xPos; +- (void)setPressed:(BOOL)pressedState; +- (void)setLinked:(BOOL)linkedState; + +@end diff --git a/Pref360Control/MyAnalogStick.m b/Pref360Control/MyAnalogStick.m new file mode 100644 index 00000000..f5616312 --- /dev/null +++ b/Pref360Control/MyAnalogStick.m @@ -0,0 +1,133 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import "MyAnalogStick.h" + +#define PRESSED_INSET 5 +#define AREA_INSET 4 + +@implementation MyAnalogStick + +- (id)initWithFrame:(NSRect)frameRect +{ + if ((self = [super initWithFrame:frameRect]) != nil) { + deadzone=0; + x=0; + y=0; + pressed=FALSE; + linked=FALSE; + } + return self; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect area,deadRect,posRect; + + // Compute positions + // Area + area=[self bounds]; + // Deadzone + deadRect.size.width=(deadzone*area.size.width)/32768; + deadRect.size.height=(deadzone*area.size.height)/32768; + deadRect.origin.x=area.origin.x+((area.size.width-deadRect.size.width)/2); + deadRect.origin.y=area.origin.y+((area.size.height-deadRect.size.height)/2); + // Position + posRect.size.width=4; + posRect.size.height=4; + posRect.origin.x=area.origin.x+AREA_INSET+(((x+32768)*(area.size.width-(AREA_INSET*2)))/65536)-(posRect.size.width/2); + posRect.origin.y=area.origin.y+area.size.height-AREA_INSET-(((y+32768)*(area.size.height-(AREA_INSET*2)))/65536)-(posRect.size.height/2); + // Draw border + NSDrawLightBezel(area,area); + // Draw pressed state + if(pressed) { + NSRect pressArea; + + pressArea=area; + pressArea.origin.x+=PRESSED_INSET; + pressArea.origin.y+=PRESSED_INSET; + pressArea.size.width-=PRESSED_INSET*2; + pressArea.size.height-=PRESSED_INSET*2; + [[NSColor blackColor] set]; + NSRectFill(pressArea); + } + // Draw deadzone + if(deadzone!=0) { + [[NSColor redColor] set]; + if(linked) NSFrameRect(deadRect); + else { + NSRect trueRect; + + trueRect=deadRect; + trueRect.origin.x=area.origin.x; + trueRect.size.width=area.size.width; + NSFrameRect(trueRect); + trueRect=deadRect; + trueRect.origin.y=area.origin.y; + trueRect.size.height=area.size.height; + NSFrameRect(trueRect); + } + } + // Draw position + if(pressed) [[NSColor whiteColor] set]; + else [[NSColor blackColor] set]; + NSRectFill(posRect); +} + +- (void)setDeadzone:(int)pos +{ + deadzone=pos; + [self setNeedsDisplay:YES]; +} + +- (void)setPositionX:(int)xPos y:(int)yPos +{ + x=xPos; + y=yPos; + [self setNeedsDisplay:YES]; +} + +- (void)setPositionX:(int)xPos +{ + x=xPos; + [self setNeedsDisplay:YES]; +} + +- (void)setPositionY:(int)yPos +{ + y=yPos; + [self setNeedsDisplay:YES]; +} + +- (void)setPressed:(BOOL)pressedState +{ + pressed=pressedState; + [self setNeedsDisplay:YES]; +} + +- (void)setLinked:(BOOL)linkedState +{ + linked=linkedState; + [self setNeedsDisplay:YES]; +} + +@end diff --git a/Pref360Control/MyCentreButtons.h b/Pref360Control/MyCentreButtons.h new file mode 100644 index 00000000..d90dd311 --- /dev/null +++ b/Pref360Control/MyCentreButtons.h @@ -0,0 +1,34 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import + +@interface MyCentreButtons : NSView +{ + BOOL back,start,appSpecific; +} + +- (void)setBack:(BOOL)bBack; +- (void)setStart:(BOOL)bStart; +- (void)setSpecific:(BOOL)bSpecific; + +@end diff --git a/Pref360Control/MyCentreButtons.m b/Pref360Control/MyCentreButtons.m new file mode 100644 index 00000000..75e9f58a --- /dev/null +++ b/Pref360Control/MyCentreButtons.m @@ -0,0 +1,95 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/#import "MyCentreButtons.h" + +@implementation MyCentreButtons + +- (id)initWithFrame:(NSRect)frameRect +{ + if ((self = [super initWithFrame:frameRect]) != nil) { + back=start=appSpecific=FALSE; + } + return self; +} + +- (void)drawButton:(NSString*)button inRectangle:(NSRect)rect pressed:(BOOL)down +{ + NSBezierPath *path; + NSSize size; + NSDictionary *attributes; + NSPoint point; + NSColor *colour; + + // Draw circle + path=[NSBezierPath bezierPathWithOvalInRect:rect]; + colour=[NSColor blackColor]; + [colour set]; + if(down) { + [path fill]; + colour=[NSColor whiteColor]; + } else [path stroke]; + // Draw text + attributes=[NSDictionary dictionaryWithObject:colour forKey:NSForegroundColorAttributeName]; + size=[button sizeWithAttributes:attributes]; + point.x=rect.origin.x+((rect.size.width-size.width)/2); + point.y=rect.origin.y+((rect.size.height-size.height)/2); + [button drawAtPoint:point withAttributes:attributes]; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect area,button; + + area=[self bounds]; + button.size.height=area.size.height/2; + button.size.width=area.size.width/4; + button.origin.x=area.origin.x; + button.origin.y=area.origin.y+((area.size.height-button.size.height)/2); + [self drawButton:@"Back" inRectangle:button pressed:back]; + button.origin.x=area.origin.x+area.size.width-button.size.width; + [self drawButton:@"Start" inRectangle:button pressed:start]; + button.size.height=area.size.height-2; + button.size.width=button.size.height; + button.origin.x=area.origin.x+((area.size.width-button.size.width)/2); + button.origin.y=area.origin.y+1; + [self drawButton:@"" inRectangle:button pressed:appSpecific]; +} + +- (void)setBack:(BOOL)bBack +{ + back=bBack; + [self setNeedsDisplay:TRUE]; +} + +- (void)setStart:(BOOL)bStart +{ + start=bStart; + [self setNeedsDisplay:TRUE]; +} + +- (void)setSpecific:(BOOL)bSpecific +{ + appSpecific=bSpecific; + [self setNeedsDisplay:TRUE]; +} + +@end diff --git a/Pref360Control/MyDigitalStick.h b/Pref360Control/MyDigitalStick.h new file mode 100644 index 00000000..86e9917f --- /dev/null +++ b/Pref360Control/MyDigitalStick.h @@ -0,0 +1,36 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import + +@interface MyDigitalStick : NSView +{ + NSBezierPath *up,*down,*left,*right; + BOOL bUp,bDown,bLeft,bRight; +} + +- (void)setUp:(BOOL)upState; +- (void)setDown:(BOOL)downState; +- (void)setLeft:(BOOL)leftState; +- (void)setRight:(BOOL)rightState; + +@end diff --git a/Pref360Control/MyDigitalStick.m b/Pref360Control/MyDigitalStick.m new file mode 100644 index 00000000..72013961 --- /dev/null +++ b/Pref360Control/MyDigitalStick.m @@ -0,0 +1,132 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import "MyDigitalStick.h" + +#define INSET_AMOUNT 10 + +@implementation MyDigitalStick + +- (NSBezierPath*)makeTriangle:(int)start inRectangle:(NSRect)rect; +{ + NSBezierPath *path; + NSPoint centre,point; + const int mult[][2]={ + {0,0}, + {1,0}, + {1,1}, + {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); + // Create path + path=[NSBezierPath bezierPath]; + // Make triangle + [path moveToPoint:centre]; + point.x=rect.origin.x+(rect.size.width*mult[start][0]); + point.y=rect.origin.y+(rect.size.height*mult[start][1]); + [path lineToPoint:point]; + point.x=rect.origin.x+(rect.size.width*mult[start+1][0]); + point.y=rect.origin.y+(rect.size.height*mult[start+1][1]); + [path lineToPoint:point]; + [path closePath]; + // Done + return [path retain]; +} + +- (id)initWithFrame:(NSRect)frameRect +{ + if ((self = [super initWithFrame:frameRect]) != nil) { + NSRect rect,triangle; + + bUp=bDown=bLeft=bRight=FALSE; + rect=[self bounds]; + triangle.origin.x+=INSET_AMOUNT; + triangle.origin.y+=INSET_AMOUNT; + triangle.size.width-=INSET_AMOUNT*2; + triangle.size.height-=INSET_AMOUNT*2; + triangle.size.width=rect.size.width/3; + triangle.size.height=rect.size.height/3; + triangle.origin.y=rect.origin.y+(triangle.size.height*2); + triangle.origin.x=rect.origin.x+triangle.size.width; + up=[self makeTriangle:0 inRectangle:triangle]; + triangle.origin.y=rect.origin.y; + down=[self makeTriangle:2 inRectangle:triangle]; + triangle.origin.y=rect.origin.y+triangle.size.height; + triangle.origin.x=rect.origin.x; + left=[self makeTriangle:1 inRectangle:triangle]; + triangle.origin.x=rect.origin.x+(triangle.size.width*2); + right=[self makeTriangle:3 inRectangle:triangle]; + } + return self; +} + +- (void)dealloc +{ + [up release]; + [down release]; + [left release]; + [right release]; + [super dealloc]; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect area; + + area=[self bounds]; + NSDrawLightBezel(area,area); + [[NSColor blackColor] set]; + if(bUp) [up fill]; + if(bDown) [down fill]; + if(bLeft) [left fill]; + if(bRight) [right fill]; +} + +- (void)setUp:(BOOL)upState +{ + bUp=upState; + [self setNeedsDisplay:TRUE]; +} + +- (void)setDown:(BOOL)downState +{ + bDown=downState; + [self setNeedsDisplay:TRUE]; +} + +- (void)setLeft:(BOOL)leftState +{ + bLeft=leftState; + [self setNeedsDisplay:TRUE]; +} + +- (void)setRight:(BOOL)rightState +{ + bRight=rightState; + [self setNeedsDisplay:TRUE]; +} + +@end diff --git a/Pref360Control/MyMainButtons.h b/Pref360Control/MyMainButtons.h new file mode 100644 index 00000000..aa252985 --- /dev/null +++ b/Pref360Control/MyMainButtons.h @@ -0,0 +1,35 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import + +@interface MyMainButtons : NSView +{ + BOOL a,b,x,y; +} + +- (void)setA:(BOOL)aVal; +- (void)setB:(BOOL)bVal; +- (void)setX:(BOOL)xVal; +- (void)setY:(BOOL)yVal; + +@end diff --git a/Pref360Control/MyMainButtons.m b/Pref360Control/MyMainButtons.m new file mode 100644 index 00000000..f3c81ea0 --- /dev/null +++ b/Pref360Control/MyMainButtons.m @@ -0,0 +1,119 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import "MyMainButtons.h" + +#define MINI_OFFSET 2 + +@implementation MyMainButtons + +- (id)initWithFrame:(NSRect)frameRect +{ + if ((self = [super initWithFrame:frameRect]) != nil) { + a=b=x=y=FALSE; + } + return self; +} + +- (void)drawButton:(NSString*)button inRectangle:(NSRect)rect pressed:(BOOL)down +{ + NSBezierPath *path; + NSSize size; + NSDictionary *attributes; + NSPoint point; + NSColor *colour; + NSRect bling; + + // Draw circle + path=[NSBezierPath bezierPathWithOvalInRect:rect]; + if(down) { + [path fill]; +// colour=[NSColor whiteColor]; + } else { + [path stroke]; +// colour=[NSColor blackColor]; + } + colour=[NSColor blackColor]; + bling=rect; + bling.origin.x-=1; + bling.origin.y-=1; + bling.size.width+=2; + bling.size.height+=2; + path=[NSBezierPath bezierPathWithOvalInRect:bling]; + [colour set]; + [path stroke]; + // Draw text + attributes=[NSDictionary dictionaryWithObject:colour forKey:NSForegroundColorAttributeName]; + size=[button sizeWithAttributes:attributes]; + point.x=rect.origin.x+((rect.size.width-size.width)/2); + point.y=rect.origin.y+((rect.size.height-size.height)/2); + [button drawAtPoint:point withAttributes:attributes]; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect area,bit; + + area=[self bounds]; + bit.size.width=area.size.width/3; + bit.size.height=area.size.height/3; + bit.origin.x=area.origin.x+bit.size.width; + bit.origin.y=area.origin.y+(bit.size.height*2)-MINI_OFFSET; + [[NSColor yellowColor] set]; + [self drawButton:@"Y" inRectangle:bit pressed:y]; + bit.origin.y=area.origin.y+MINI_OFFSET; + [[NSColor greenColor] set]; + [self drawButton:@"A" inRectangle:bit pressed:a]; + bit.origin.y=area.origin.y+bit.size.height; + bit.origin.x=area.origin.x+MINI_OFFSET; + [[NSColor blueColor] set]; + [self drawButton:@"X" inRectangle:bit pressed:x]; + bit.origin.x=area.origin.x+(bit.size.width*2)-MINI_OFFSET; + [[NSColor redColor] set]; + [self drawButton:@"B" inRectangle:bit pressed:b]; +} + +- (void)setA:(BOOL)aVal +{ + a=aVal; + [self setNeedsDisplay:TRUE]; +} + +- (void)setB:(BOOL)bVal +{ + b=bVal; + [self setNeedsDisplay:TRUE]; +} + +- (void)setX:(BOOL)xVal +{ + x=xVal; + [self setNeedsDisplay:TRUE]; +} + +- (void)setY:(BOOL)yVal +{ + y=yVal; + [self setNeedsDisplay:TRUE]; +} + +@end diff --git a/Pref360Control/MyShoulderButton.h b/Pref360Control/MyShoulderButton.h new file mode 100644 index 00000000..4f6f7960 --- /dev/null +++ b/Pref360Control/MyShoulderButton.h @@ -0,0 +1,32 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import + +@interface MyShoulderButton : NSView +{ + BOOL pressed; +} + +- (void)setPressed:(BOOL)b; + +@end diff --git a/Pref360Control/MyShoulderButton.m b/Pref360Control/MyShoulderButton.m new file mode 100644 index 00000000..7b7b2c1d --- /dev/null +++ b/Pref360Control/MyShoulderButton.m @@ -0,0 +1,59 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ +#import "MyShoulderButton.h" + +#define INSET_AMOUNT 2 + +@implementation MyShoulderButton + +- (id)initWithFrame:(NSRect)frameRect +{ + if ((self = [super initWithFrame:frameRect]) != nil) { + pressed=FALSE; + } + return self; +} + +- (void)drawRect:(NSRect)rect +{ + NSRect area; + + area=[self bounds]; + NSDrawLightBezel(area,area); + if(pressed) { + area.origin.x+=INSET_AMOUNT; + area.origin.y+=INSET_AMOUNT; + area.size.width-=INSET_AMOUNT*2; + area.size.height-=INSET_AMOUNT*2; + [[NSColor blueColor] set]; + NSRectFill(area); + } +} + +- (void)setPressed:(BOOL)b +{ + pressed=b; + [self setNeedsDisplay:TRUE]; +} + +@end diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 new file mode 100644 index 00000000..fc2fb621 --- /dev/null +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -0,0 +1,1869 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3BBEAB4A096B786700F2E37B + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3BE2FE670A724F1D007DD2D8 + PBXProjectModuleLabel + Info.plist + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE2FE680A724F1D007DD2D8 + PBXProjectModuleLabel + Info.plist + _historyCapacity + 0 + bookmark + 3B491CBD0A7256B7000D1BD9 + history + + 3BE2FEA70A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 319 149 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBEAB4B096B786700F2E37B + PBXProjectModuleLabel + Pref360ControlPref.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBEAB4C096B786700F2E37B + PBXProjectModuleLabel + Pref360ControlPref.m + _historyCapacity + 0 + bookmark + 3B491CBE0A7256B7000D1BD9 + history + + 3BE2FEA80A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 327 131 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BC41F5F096CE12C00664A42 + PBXProjectModuleLabel + DeviceItem.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BC41F60096CE12C00664A42 + PBXProjectModuleLabel + DeviceItem.h + _historyCapacity + 0 + bookmark + 3B491CBF0A7256B7000D1BD9 + history + + 3BE2FEA90A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 292 114 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33F0097B301C00E8A35A + PBXProjectModuleLabel + MyAnalogStick.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33F1097B301C00E8A35A + PBXProjectModuleLabel + MyAnalogStick.m + _historyCapacity + 0 + bookmark + 3B491CC00A7256B7000D1BD9 + history + + 3BE2FEAA0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 84 176 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33F3097B301C00E8A35A + PBXProjectModuleLabel + MyAnalogStick.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33F4097B301C00E8A35A + PBXProjectModuleLabel + MyAnalogStick.h + _historyCapacity + 0 + bookmark + 3B491CC10A7256B7000D1BD9 + history + + 3BE2FEAB0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 196 202 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33DB097B301C00E8A35A + PBXProjectModuleLabel + MyShoulderButton.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33DC097B301C00E8A35A + PBXProjectModuleLabel + MyShoulderButton.m + _historyCapacity + 0 + bookmark + 3B491CC20A7256B7000D1BD9 + history + + 3BE2FEAC0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 107 155 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33DE097B301C00E8A35A + PBXProjectModuleLabel + MyShoulderButton.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33DF097B301C00E8A35A + PBXProjectModuleLabel + MyShoulderButton.h + _historyCapacity + 0 + bookmark + 3B491CC30A7256B7000D1BD9 + history + + 3BE2FEAD0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 130 134 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33E1097B301C00E8A35A + PBXProjectModuleLabel + MyMainButtons.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33E2097B301C00E8A35A + PBXProjectModuleLabel + MyMainButtons.m + _historyCapacity + 0 + bookmark + 3B491CC40A7256B7000D1BD9 + history + + 3BE2FEAE0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33E4097B301C00E8A35A + PBXProjectModuleLabel + MyMainButtons.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33E5097B301C00E8A35A + PBXProjectModuleLabel + MyMainButtons.h + _historyCapacity + 0 + bookmark + 3B491CC50A7256B7000D1BD9 + history + + 3BE2FEAF0A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 123 160 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33E7097B301C00E8A35A + PBXProjectModuleLabel + MyDigitalStick.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33E8097B301C00E8A35A + PBXProjectModuleLabel + MyDigitalStick.m + _historyCapacity + 0 + bookmark + 3B491CC60A7256B7000D1BD9 + history + + 3BE2FEB00A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 107 155 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33EA097B301C00E8A35A + PBXProjectModuleLabel + MyDigitalStick.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33EB097B301C00E8A35A + PBXProjectModuleLabel + MyDigitalStick.h + _historyCapacity + 0 + bookmark + 3B491CC70A7256B7000D1BD9 + history + + 3BE2FEB10A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 130 134 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BBB33ED097B301C00E8A35A + PBXProjectModuleLabel + MyCentreButtons.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BBB33EE097B301C00E8A35A + PBXProjectModuleLabel + MyCentreButtons.m + _historyCapacity + 0 + bookmark + 3B491CC80A7256B7000D1BD9 + history + + 3BE2FEB20A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 61 197 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BC41F62096CE12C00664A42 + PBXProjectModuleLabel + IOHIDLib.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BC41F63096CE12C00664A42 + PBXProjectModuleLabel + IOHIDLib.h + _historyCapacity + 0 + bookmark + 3B491CC90A7256B7000D1BD9 + history + + 3BE2FEB30A724FE3007DD2D8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 089C166AFE841209C02AAC07 + 08FB77AFFE84173DC02AAC07 + 32DBCFA10370C40200C91783 + 089C167CFE841241C02AAC07 + 089C1671FE841209C02AAC07 + 1058C7ACFEA557BF11CA2CBB + 1058C7AEFEA557BF11CA2CBB + 19C28FB8FE9D52D311CA2CBB + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 511 605 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 511 605 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 511 605 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3B491CAD0A725663000D1BD9 + 1CE0B1FE06471DED0097A5F4 + 3B491CAE0A725663000D1BD9 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3BBEAB15096B38D200F2E37B + 3BC41F62096CE12C00664A42 + 3BBB33ED097B301C00E8A35A + 3BBB33EA097B301C00E8A35A + 3BBB33E7097B301C00E8A35A + 3BBB33E4097B301C00E8A35A + 3BBB33E1097B301C00E8A35A + 3BBB33DE097B301C00E8A35A + 3BBB33DB097B301C00E8A35A + 3BBB33F3097B301C00E8A35A + 3BBB33F0097B301C00E8A35A + 3BC41F5F096CE12C00664A42 + 3BBEAB4B096B786700F2E37B + 3BE2FE670A724F1D007DD2D8 + /Users/colin/Projects/360/360ControllerSource/Pref360Control/Pref360Control.xcodeproj + + WindowString + 511 605 690 397 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {500, 218}} + RubberWindowFrame + 105 411 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + ContentConfiguration + + PBXBuildLogShowsTranscriptDefaultKey + {{0, 5}, {500, 231}} + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 223}, {500, 236}} + RubberWindowFrame + 105 411 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 459pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3BBEAB15096B38D200F2E37B + 3B491CCB0A7256B7000D1BD9 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 105 411 500 500 0 0 1280 1002 + WindowToolGUID + 3BBEAB15096B38D200F2E37B + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {305, 162}} + {{305, 0}, {389, 162}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 162}} + {{0, 162}, {694, 219}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 381}} + RubberWindowFrame + 348 444 694 422 0 0 1280 1002 + + Module + PBXDebugSessionModule + Proportion + 381pt + + + Proportion + 381pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 3BBB33F9097B301C00E8A35A + 1C162984064C10D400B95A72 + 3BBB33FA097B301C00E8A35A + 3BBB33FB097B301C00E8A35A + 3BBB33FC097B301C00E8A35A + 3BBB33FD097B301C00E8A35A + 3BBB33FE097B301C00E8A35A + 3BBB33FF097B301C00E8A35A + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 348 444 694 422 0 0 1280 1002 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + IsVertical + + Layout + + + Dock + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + DeviceItem.h + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {781, 212}} + RubberWindowFrame + 126 418 781 470 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 212pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{0, 217}, {781, 212}} + RubberWindowFrame + 126 418 781 470 0 0 1280 1002 + + Module + PBXProjectFindModule + Proportion + 212pt + + + Proportion + 429pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 3BCF4E3C097DB0F80049C083 + 3BCF4E3D097DB0F80049C083 + 1CDD528C0622207200134675 + 1CD0528E0623707200166675 + + WindowString + 126 418 781 470 0 0 1280 1002 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..589e25fc --- /dev/null +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -0,0 +1,513 @@ +// !$*UTF8*$! +{ + 089C1669FE841209C02AAC07 /* Project object */ = { + activeBuildConfigurationName = Deployment; + activeBuildStyle = 06F27B30FFEEEFEF11CA0E56 /* Development */; + activeTarget = 8D202CE80486D31800D8A456 /* Pref360Control */; + addToTargets = ( + 8D202CE80486D31800D8A456 /* Pref360Control */, + ); + breakpoints = ( + ); + breakpointsGroup = 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */; + codeSenseManager = 3BBEAAF6096B030C00F2E37B /* Code sense */; + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 243, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 175265369; + PBXWorkspaceStateSaveDate = 175265369; + }; + perUserProjectItems = { + 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */; + 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */; + 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */; + 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */; + }; + sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; + userBuildSettings = { + }; + }; + 089C167EFE841241C02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{188, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{156, 129}, {900, 814}}"; + }; + }; + 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D202CF70486D31800D8A456 /* Info.plist */; + name = "Info.plist: 27"; + rLen = 0; + rLoc = 844; + rType = 0; + vrLen = 927; + vrLoc = 0; + }; + 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + name = "Pref360ControlPref.m: 331"; + rLen = 0; + rLoc = 9444; + rType = 0; + vrLen = 1550; + vrLoc = 8477; + }; + 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BC41F30096C85CB00664A42 /* DeviceItem.h */; + name = "DeviceItem.h: 5"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1437; + vrLoc = 0; + }; + 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; + name = "MyAnalogStick.m: 128"; + rLen = 0; + rLoc = 3564; + rType = 0; + vrLen = 888; + vrLoc = 2736; + }; + 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; + name = "MyAnalogStick.h: 40"; + rLen = 0; + rLoc = 1265; + rType = 0; + vrLen = 1265; + vrLoc = 0; + }; + 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */; + name = "MyShoulderButton.m: 5"; + rLen = 0; + rLoc = 153; + rType = 0; + vrLen = 1507; + vrLoc = 0; + }; + 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */; + name = "MyShoulderButton.h: 5"; + rLen = 0; + rLoc = 147; + rType = 0; + vrLen = 1045; + vrLoc = 0; + }; + 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */; + name = "MyMainButtons.m: 5"; + rLen = 0; + rLoc = 151; + rType = 0; + vrLen = 1485; + vrLoc = 0; + }; + 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */; + name = "MyMainButtons.h: 5"; + rLen = 0; + rLoc = 148; + rType = 0; + vrLen = 1115; + vrLoc = 0; + }; + 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */; + name = "MyDigitalStick.m: 5"; + rLen = 0; + rLoc = 151; + rType = 0; + vrLen = 1603; + vrLoc = 0; + }; + 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */; + name = "MyDigitalStick.h: 5"; + rLen = 0; + rLoc = 161; + rType = 0; + vrLen = 1215; + vrLoc = 0; + }; + 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; + name = "MyCentreButtons.m: 57"; + rLen = 0; + rLoc = 1909; + rType = 0; + vrLen = 1564; + vrLoc = 0; + }; + 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B491CCA0A7256B7000D1BD9 /* IOHIDLib.h */; + name = "(null): 256"; + rLen = 19; + rLoc = 11842; + rType = 0; + vrLen = 2237; + vrLoc = 10283; + }; + 3B491CCA0A7256B7000D1BD9 /* IOHIDLib.h */ = { + isa = PBXFileReference; + name = IOHIDLib.h; + path = /System/Library/Frameworks/IOKit.framework/Headers/hid/IOHIDLib.h; + sourceTree = ""; + }; + 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */ = { + isa = XCBreakpointsBucket; + name = "Project Breakpoints"; + objects = ( + ); + }; + 3BBEAAF5096B030C00F2E37B /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3BBEAAF6096B030C00F2E37B /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{1265, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{196, 146}, {900, 814}}"; + }; + }; + 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {866, 1876}}"; + sepNavSelRange = "{3564, 0}"; + sepNavVisRect = "{{0, 1149}, {861, 685}}"; + sepNavWindowFrame = "{{84, 120}, {900, 814}}"; + }; + }; + 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1344}}"; + sepNavSelRange = "{1909, 0}"; + sepNavVisRect = "{{0, 1}, {861, 685}}"; + sepNavWindowFrame = "{{61, 141}, {900, 814}}"; + }; + }; + 3BBEAB04096B2C5200F2E37B /* MyCentreButtons.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{162, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{84, 120}, {900, 814}}"; + }; + }; + 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1862}}"; + sepNavSelRange = "{151, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{107, 99}, {900, 814}}"; + }; + }; + 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{161, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{130, 78}, {900, 814}}"; + }; + }; + 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{148, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{123, 104}, {900, 814}}"; + }; + }; + 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1680}}"; + sepNavSelRange = "{151, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{147, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{130, 78}, {900, 814}}"; + }; + }; + 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 840}}"; + sepNavSelRange = "{153, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{107, 99}, {900, 814}}"; + }; + }; + 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{158, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{292, 58}, {900, 814}}"; + }; + }; + 3BC41F31096C85CB00664A42 /* DeviceItem.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1036}}"; + sepNavSelRange = "{0, 3}"; + sepNavVisRect = "{{0, 351}, {861, 685}}"; + sepNavWindowFrame = "{{231, 136}, {900, 814}}"; + }; + }; + 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D202CF70486D31800D8A456 /* Info.plist */; + name = "Info.plist: 27"; + rLen = 0; + rLoc = 844; + rType = 0; + vrLen = 927; + vrLoc = 0; + }; + 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + name = "Pref360ControlPref.m: 331"; + rLen = 0; + rLoc = 9444; + rType = 0; + vrLen = 1550; + vrLoc = 8477; + }; + 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BC41F30096C85CB00664A42 /* DeviceItem.h */; + name = "DeviceItem.h: 5"; + rLen = 0; + rLoc = 158; + rType = 0; + vrLen = 1437; + vrLoc = 0; + }; + 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; + name = "MyAnalogStick.m: 128"; + rLen = 0; + rLoc = 3564; + rType = 0; + vrLen = 888; + vrLoc = 2736; + }; + 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; + name = "MyAnalogStick.h: 40"; + rLen = 0; + rLoc = 1265; + rType = 0; + vrLen = 1265; + vrLoc = 0; + }; + 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */; + name = "MyShoulderButton.m: 5"; + rLen = 0; + rLoc = 153; + rType = 0; + vrLen = 1507; + vrLoc = 0; + }; + 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */; + name = "MyShoulderButton.h: 5"; + rLen = 0; + rLoc = 147; + rType = 0; + vrLen = 1045; + vrLoc = 0; + }; + 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */; + name = "MyMainButtons.m: 5"; + rLen = 0; + rLoc = 151; + rType = 0; + vrLen = 1485; + vrLoc = 0; + }; + 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */; + name = "MyMainButtons.h: 5"; + rLen = 0; + rLoc = 148; + rType = 0; + vrLen = 1115; + vrLoc = 0; + }; + 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */; + name = "MyDigitalStick.m: 5"; + rLen = 0; + rLoc = 151; + rType = 0; + vrLen = 1603; + vrLoc = 0; + }; + 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */; + name = "MyDigitalStick.h: 5"; + rLen = 0; + rLoc = 161; + rType = 0; + vrLen = 1215; + vrLoc = 0; + }; + 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; + name = "MyCentreButtons.m: 57"; + rLen = 0; + rLoc = 1909; + rType = 0; + vrLen = 1564; + vrLoc = 0; + }; + 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE2FEB40A724FE3007DD2D8 /* IOHIDLib.h */; + name = "(null): 256"; + rLen = 19; + rLoc = 11842; + rType = 0; + vrLen = 2237; + vrLoc = 10283; + }; + 3BE2FEB40A724FE3007DD2D8 /* IOHIDLib.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IOHIDLib.h; + path = /System/Library/Frameworks/IOKit.framework/Headers/hid/IOHIDLib.h; + sourceTree = ""; + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 12236}}"; + sepNavSelRange = "{11842, 19}"; + sepNavVisRect = "{{0, 3122}, {861, 685}}"; + sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + }; + }; + 8D202CE80486D31800D8A456 /* Pref360Control */ = { + activeExec = 0; + }; + 8D202CF70486D31800D8A456 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; + sepNavSelRange = "{844, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{319, 93}, {900, 814}}"; + }; + }; + F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1162}}"; + sepNavSelRange = "{2374, 0}"; + sepNavVisRect = "{{0, 477}, {861, 685}}"; + sepNavWindowFrame = "{{138, 55}, {900, 814}}"; + }; + }; + F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 8722}}"; + sepNavSelRange = "{9444, 0}"; + sepNavVisRect = "{{0, 4089}, {861, 685}}"; + sepNavWindowFrame = "{{327, 75}, {900, 814}}"; + }; + }; + F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */ = { + uiCtxt = { + sepNavWindowFrame = "{{130, 78}, {900, 814}}"; + }; + }; +} diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c2f6406c --- /dev/null +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -0,0 +1,509 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 3BBEAB01096B2C4C00F2E37B /* MyAnalogStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; }; + 3BBEAB02096B2C4C00F2E37B /* MyAnalogStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; }; + 3BBEAB05096B2C5200F2E37B /* MyCentreButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; }; + 3BBEAB06096B2C5200F2E37B /* MyCentreButtons.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAB04096B2C5200F2E37B /* MyCentreButtons.h */; }; + 3BBEAB09096B2C5600F2E37B /* MyDigitalStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */; }; + 3BBEAB0A096B2C5600F2E37B /* MyDigitalStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */; }; + 3BBEAB0D096B2C5B00F2E37B /* MyMainButtons.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */; }; + 3BBEAB0E096B2C5B00F2E37B /* MyMainButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */; }; + 3BBEAB11096B2C6000F2E37B /* MyShoulderButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */; }; + 3BBEAB12096B2C6000F2E37B /* MyShoulderButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */; }; + 3BBEAB2D096B6EDE00F2E37B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BBEAB2C096B6EDE00F2E37B /* IOKit.framework */; }; + 3BC41F32096C85CB00664A42 /* DeviceItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BC41F30096C85CB00664A42 /* DeviceItem.h */; }; + 3BC41F33096C85CB00664A42 /* DeviceItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BC41F31096C85CB00664A42 /* DeviceItem.m */; }; + 3BC41F47096C8D0300664A42 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BC41F46096C8D0300664A42 /* ForceFeedback.framework */; }; + 8D202CEA0486D31800D8A456 /* Pref360Control_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */; }; + 8D202CEB0486D31800D8A456 /* Pref360ControlPref.h in Headers */ = {isa = PBXBuildFile; fileRef = F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */; }; + 8D202CED0486D31800D8A456 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 8D202CEE0486D31800D8A456 /* Pref360ControlPref.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */; }; + 8D202CEF0486D31800D8A456 /* Pref360ControlPref.nib in Resources */ = {isa = PBXBuildFile; fileRef = F506C042013D9D8C01CA16C8 /* Pref360ControlPref.nib */; }; + 8D202CF10486D31800D8A456 /* Pref360ControlPref.m in Sources */ = {isa = PBXBuildFile; fileRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; }; + 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; + 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F506C035013D953901CA16C8 /* PreferencePanes.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildStyle section */ + 06F27B30FFEEEFEF11CA0E56 /* Development */ = { + isa = PBXBuildStyle; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OPTIMIZATION_CFLAGS = "-O0"; + ZERO_LINK = YES; + }; + name = Development; + }; + 06F27B31FFEEEFEF11CA0E56 /* Deployment */ = { + isa = PBXBuildStyle; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + name = Deployment; + }; +/* End PBXBuildStyle section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pref360Control_Prefix.pch; sourceTree = ""; }; + 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyAnalogStick.h; sourceTree = ""; }; + 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyAnalogStick.m; sourceTree = ""; }; + 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCentreButtons.m; sourceTree = ""; }; + 3BBEAB04096B2C5200F2E37B /* MyCentreButtons.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyCentreButtons.h; sourceTree = ""; }; + 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyDigitalStick.m; sourceTree = ""; }; + 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyDigitalStick.h; sourceTree = ""; }; + 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyMainButtons.h; sourceTree = ""; }; + 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyMainButtons.m; sourceTree = ""; }; + 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyShoulderButton.h; sourceTree = ""; }; + 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyShoulderButton.m; sourceTree = ""; }; + 3BBEAB2C096B6EDE00F2E37B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceItem.h; sourceTree = ""; }; + 3BC41F31096C85CB00664A42 /* DeviceItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceItem.m; sourceTree = ""; }; + 3BC41F46096C8D0300664A42 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = /System/Library/Frameworks/ForceFeedback.framework; sourceTree = ""; }; + 8D202CF70486D31800D8A456 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8D202CF80486D31800D8A456 /* Pref360Control.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pref360Control.prefPane; sourceTree = BUILT_PRODUCTS_DIR; }; + F506C035013D953901CA16C8 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = /System/Library/Frameworks/PreferencePanes.framework; sourceTree = ""; }; + F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pref360ControlPref.h; sourceTree = ""; }; + F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Pref360ControlPref.m; sourceTree = ""; }; + F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Pref360ControlPref.tiff; sourceTree = ""; }; + F506C043013D9D8C01CA16C8 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Pref360ControlPref.nib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D202CF20486D31800D8A456 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CF30486D31800D8A456 /* Cocoa.framework in Frameworks */, + 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */, + 3BBEAB2D096B6EDE00F2E37B /* IOKit.framework in Frameworks */, + 3BC41F47096C8D0300664A42 /* ForceFeedback.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Pref360Control */ = { + isa = PBXGroup; + children = ( + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32DBCFA10370C40200C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = Pref360Control; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D202CF70486D31800D8A456 /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */, + F506C042013D9D8C01CA16C8 /* Pref360ControlPref.nib */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */, + F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */, + 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */, + 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */, + 3BBEAB04096B2C5200F2E37B /* MyCentreButtons.h */, + 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */, + 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */, + 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */, + 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */, + 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */, + 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */, + 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */, + 3BC41F30096C85CB00664A42 /* DeviceItem.h */, + 3BC41F31096C85CB00664A42 /* DeviceItem.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 3BC41F46096C8D0300664A42 /* ForceFeedback.framework */, + 3BBEAB2C096B6EDE00F2E37B /* IOKit.framework */, + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + F506C035013D953901CA16C8 /* PreferencePanes.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 089C1672FE841209C02AAC07 /* Foundation.framework */, + 089C167FFE841241C02AAC07 /* AppKit.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D202CF80486D31800D8A456 /* Pref360Control.prefPane */, + ); + name = Products; + sourceTree = ""; + }; + 32DBCFA10370C40200C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D202CE90486D31800D8A456 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CEA0486D31800D8A456 /* Pref360Control_Prefix.pch in Headers */, + 8D202CEB0486D31800D8A456 /* Pref360ControlPref.h in Headers */, + 3BBEAB01096B2C4C00F2E37B /* MyAnalogStick.h in Headers */, + 3BBEAB06096B2C5200F2E37B /* MyCentreButtons.h in Headers */, + 3BBEAB0A096B2C5600F2E37B /* MyDigitalStick.h in Headers */, + 3BBEAB0D096B2C5B00F2E37B /* MyMainButtons.h in Headers */, + 3BBEAB11096B2C6000F2E37B /* MyShoulderButton.h in Headers */, + 3BC41F32096C85CB00664A42 /* DeviceItem.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 8D202CE80486D31800D8A456 /* Pref360Control */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3BBDC6A5097946B50023AAD8 /* Build configuration list for PBXNativeTarget "Pref360Control" */; + buildPhases = ( + 8D202CE90486D31800D8A456 /* Headers */, + 8D202CEC0486D31800D8A456 /* Resources */, + 8D202CF00486D31800D8A456 /* Sources */, + 8D202CF20486D31800D8A456 /* Frameworks */, + 8D202CF50486D31800D8A456 /* Rez */, + ); + buildRules = ( + ); + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Pref360Control_Prefix.pch; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + LIBRARY_SEARCH_PATHS = ""; + LIBRARY_STYLE = Bundle; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-bundle", + "-twolevel_namespace", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = Pref360Control; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = prefPane; + }; + dependencies = ( + ); + name = Pref360Control; + productInstallPath = "$(HOME)/Library/PreferencePanes"; + productName = Pref360Control; + productReference = 8D202CF80486D31800D8A456 /* Pref360Control.prefPane */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 3BBDC6A9097946B50023AAD8 /* Build configuration list for PBXProject "Pref360Control" */; + buildSettings = { + }; + buildStyles = ( + 06F27B30FFEEEFEF11CA0E56 /* Development */, + 06F27B31FFEEEFEF11CA0E56 /* Deployment */, + ); + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Pref360Control */; + projectDirPath = ""; + targets = ( + 8D202CE80486D31800D8A456 /* Pref360Control */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D202CEC0486D31800D8A456 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CED0486D31800D8A456 /* InfoPlist.strings in Resources */, + 8D202CEE0486D31800D8A456 /* Pref360ControlPref.tiff in Resources */, + 8D202CEF0486D31800D8A456 /* Pref360ControlPref.nib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D202CF50486D31800D8A456 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D202CF00486D31800D8A456 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D202CF10486D31800D8A456 /* Pref360ControlPref.m in Sources */, + 3BBEAB02096B2C4C00F2E37B /* MyAnalogStick.m in Sources */, + 3BBEAB05096B2C5200F2E37B /* MyCentreButtons.m in Sources */, + 3BBEAB09096B2C5600F2E37B /* MyDigitalStick.m in Sources */, + 3BBEAB0E096B2C5B00F2E37B /* MyMainButtons.m in Sources */, + 3BBEAB12096B2C6000F2E37B /* MyShoulderButton.m in Sources */, + 3BC41F33096C85CB00664A42 /* DeviceItem.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + F506C042013D9D8C01CA16C8 /* Pref360ControlPref.nib */ = { + isa = PBXVariantGroup; + children = ( + F506C043013D9D8C01CA16C8 /* English */, + ); + name = Pref360ControlPref.nib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3BBDC6A6097946B50023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Pref360Control_Prefix.pch; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + LIBRARY_SEARCH_PATHS = ""; + LIBRARY_STYLE = Bundle; + OPTIMIZATION_CFLAGS = "-O0"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-bundle", + "-twolevel_namespace", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = Pref360Control; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = prefPane; + ZERO_LINK = YES; + }; + name = Development; + }; + 3BBDC6A7097946B50023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Pref360Control_Prefix.pch; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + LIBRARY_SEARCH_PATHS = ""; + LIBRARY_STYLE = Bundle; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-bundle", + "-twolevel_namespace", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = Pref360Control; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = prefPane; + ZERO_LINK = NO; + }; + name = Deployment; + }; + 3BBDC6A8097946B50023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = Pref360Control_Prefix.pch; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + LIBRARY_SEARCH_PATHS = ""; + LIBRARY_STYLE = Bundle; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-bundle", + "-twolevel_namespace", + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = Pref360Control; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = prefPane; + }; + name = Default; + }; + 3BBDC6AA097946B50023AAD8 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + }; + name = Development; + }; + 3BBDC6AB097946B50023AAD8 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + MACOSX_DEPLOYMENT_TARGET = 10.3; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Deployment; + }; + 3BBDC6AC097946B50023AAD8 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.3; + SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + }; + name = Default; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3BBDC6A5097946B50023AAD8 /* Build configuration list for PBXNativeTarget "Pref360Control" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC6A6097946B50023AAD8 /* Development */, + 3BBDC6A7097946B50023AAD8 /* Deployment */, + 3BBDC6A8097946B50023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 3BBDC6A9097946B50023AAD8 /* Build configuration list for PBXProject "Pref360Control" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BBDC6AA097946B50023AAD8 /* Development */, + 3BBDC6AB097946B50023AAD8 /* Deployment */, + 3BBDC6AC097946B50023AAD8 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h new file mode 100644 index 00000000..0f5e426a --- /dev/null +++ b/Pref360Control/Pref360ControlPref.h @@ -0,0 +1,82 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +*/ + +#import + +#import +#import +#import +#import +#import + +#include "MyCentreButtons.h" +#include "MyDigitalStick.h" +#include "MyAnalogStick.h" +#include "MyMainButtons.h" +#include "MyShoulderButton.h" + +@interface Pref360ControlPref : NSPreferencePane +{ + // Window components + IBOutlet MyCentreButtons *centreButtons; + IBOutlet NSPopUpButton *deviceList; + IBOutlet MyDigitalStick *digiStick; + IBOutlet MyShoulderButton *leftShoulder; + IBOutlet MyAnalogStick *leftStick; + IBOutlet NSButton *leftLinked; + IBOutlet NSSlider *leftStickDeadzone; + IBOutlet NSButton *leftStickInvertX; + IBOutlet NSButton *leftStickInvertY; + IBOutlet NSProgressIndicator *leftTrigger; + IBOutlet MyMainButtons *rightButtons; + IBOutlet MyShoulderButton *rightShoulder; + IBOutlet MyAnalogStick *rightStick; + IBOutlet NSButton *rightLinked; + IBOutlet NSSlider *rightStickDeadzone; + IBOutlet NSButton *rightStickInvertX; + IBOutlet NSButton *rightStickInvertY; + IBOutlet NSProgressIndicator *rightTrigger; + // Internal info + mach_port_t masterPort; + NSMutableArray *deviceArray; + 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 onIterator,offIterator; +} + +- (void)mainViewDidLoad; + +- (void)eventQueueFired:(void*)sender withResult:(IOReturn)result; + +- (void)handleDeviceChange; + +@end diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m new file mode 100644 index 00000000..06377afd --- /dev/null +++ b/Pref360Control/Pref360ControlPref.m @@ -0,0 +1,622 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006 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 + 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 +#import "Pref360ControlPref.h" +#import "DeviceItem.h" + +#define NO_ITEMS @"No devices found" + +// Passes a C callback back to the Objective C class +static void CallbackFunction(void *target,IOReturn result,void *refCon,void *sender) +{ + if(target!=NULL) [((Pref360ControlPref*)target) eventQueueFired:sender withResult:result]; +} + +// Handle callback for when our device is connected or disconnected. Both events are +// actually handled identically. +static void callbackHandleDevice(void *param,io_iterator_t iterator) +{ + io_service_t object=0; + BOOL update; + + update=FALSE; + while((object=IOIteratorNext(iterator))!=0) { + IOObjectRelease(object); + update=TRUE; + } + if(update) [(Pref360ControlPref*)param handleDeviceChange]; +} + +@implementation Pref360ControlPref + +// Set the pattern on the LEDs +- (void)updateLED:(int)ledIndex +{ + FFEFFESCAPE escape; + unsigned char c; + + if(ffDevice==0) return; + c=ledIndex; + escape.dwSize=sizeof(escape); + escape.dwCommand=0x02; + escape.cbInBuffer=sizeof(c); + escape.lpvInBuffer=&c; + escape.cbOutBuffer=0; + escape.lpvOutBuffer=NULL; + FFDeviceEscape(ffDevice,&escape); +} + +// Enables and disables the rumble motor "override" +- (void)setMotorOverride:(BOOL)enable +{ + FFEFFESCAPE escape; + char c; + + if(ffDevice==0) return; + // If true, the motors will no longer obey any Force Feedback Framework + // effects, and the motors may be controlled directly. False and the + // motors will perform effects but can not be directly controlled. + c=enable?0x01:0x00; + escape.dwSize=sizeof(escape); + escape.dwCommand=0x00; + escape.cbInBuffer=sizeof(c); + escape.lpvInBuffer=&c; + escape.cbOutBuffer=0; + escape.lpvOutBuffer=NULL; + FFDeviceEscape(ffDevice,&escape); +} + +// If the direct rumble control is enabled, this will set the motors +// to the desired speed. +- (void)testMotorsLarge:(unsigned char)large small:(unsigned char)small +{ + FFEFFESCAPE escape; + char c[2]; + + if(ffDevice==0) return; + c[0]=large; + c[1]=small; + escape.dwSize=sizeof(escape); + escape.dwCommand=0x01; + escape.cbInBuffer=sizeof(c); + escape.lpvInBuffer=c; + escape.cbOutBuffer=0; + escape.lpvOutBuffer=NULL; + FFDeviceEscape(ffDevice,&escape); +} + +// Update axis GUI component +- (void)axisChanged:(int)index newValue:(int)value +{ + switch(index) { + case 0: + [leftStick setPositionX:value]; + break; + case 1: + [leftStick setPositionY:value]; + break; + case 2: + [rightStick setPositionX:value]; + break; + case 3: + [rightStick setPositionY:value]; + break; + case 4: + [leftTrigger setDoubleValue:value]; + largeMotor=value; + [self testMotorsLarge:largeMotor small:smallMotor]; + break; + case 5: + [rightTrigger setDoubleValue:value]; + smallMotor=value; + [self testMotorsLarge:largeMotor small:smallMotor]; + break; + default: + break; + } +} + +// Update button GUI component +- (void)buttonChanged:(int)index newValue:(int)value +{ + BOOL b; + + b=value!=0; + switch(index) { + case 0: + [rightButtons setA:b]; + break; + case 1: + [rightButtons setB:b]; + break; + case 2: + [rightButtons setX:b]; + break; + case 3: + [rightButtons setY:b]; + break; + case 4: + [leftShoulder setPressed:b]; + break; + case 5: + [rightShoulder setPressed:b]; + break; + case 6: + [leftStick setPressed:b]; + break; + case 7: + [rightStick setPressed:b]; + break; + case 8: + [centreButtons setStart:b]; + break; + case 9: + [centreButtons setBack:b]; + break; + case 10: + [centreButtons setSpecific:b]; + break; + case 11: + [digiStick setUp:b]; + break; + case 12: + [digiStick setDown:b]; + break; + case 13: + [digiStick setLeft:b]; + break; + case 14: + [digiStick setRight:b]; + break; + default: + break; + } +} + +// Handle message from I/O Kit indicating something happened on the device +- (void)eventQueueFired:(void*)sender withResult:(IOReturn)result +{ + AbsoluteTime zeroTime={0,0}; + IOHIDEventStruct event; + BOOL found; + int i; + + if(sender!=hidQueue) return; + while(result==kIOReturnSuccess) { + result=(*hidQueue)->getNextEvent(hidQueue,&event,zeroTime,0); + if(result!=kIOReturnSuccess) continue; + // Check axis + for(i=0,found=FALSE;(i<6)&&(!found);i++) { + if(event.elementCookie==axis[i]) { + [self axisChanged:i newValue:event.value]; + found=TRUE; + } + } + if(found) continue; + // Check buttons + for(i=0,found=FALSE;(i<15)&&(!found);i++) { + if(event.elementCookie==buttons[i]) { + [self buttonChanged:i newValue:event.value]; + found=TRUE; + } + } + if(found) continue; + // Cookie wasn't for us? + } +} + +// Enable input components +- (void)inputEnable:(BOOL)enable +{ + [leftStickDeadzone setEnabled:enable]; + [leftStickInvertX setEnabled:enable]; + [leftStickInvertY setEnabled:enable]; + [leftLinked setEnabled:enable]; + [rightStickDeadzone setEnabled:enable]; + [rightStickInvertX setEnabled:enable]; + [rightStickInvertY setEnabled:enable]; + [rightLinked setEnabled:enable]; +} + +// Reset GUI components +- (void)resetDisplay +{ + [leftStick setPositionX:0 y:0]; + [leftStick setPressed:FALSE]; + [leftStick setDeadzone:0]; + [digiStick setUp:FALSE]; + [digiStick setDown:FALSE]; + [digiStick setLeft:FALSE]; + [digiStick setRight:FALSE]; + [centreButtons setBack:FALSE]; + [centreButtons setSpecific:FALSE]; + [centreButtons setStart:FALSE]; + [rightStick setPositionX:0 y:0]; + [rightStick setPressed:FALSE]; + [rightStick setDeadzone:0]; + [rightButtons setA:FALSE]; + [rightButtons setB:FALSE]; + [rightButtons setX:FALSE]; + [rightButtons setY:FALSE]; + [leftShoulder setPressed:FALSE]; + [leftTrigger setDoubleValue:0]; + [rightShoulder setPressed:FALSE]; + [rightTrigger setDoubleValue:0]; + // Reset inputs + [leftStickDeadzone setIntValue:0]; + [leftStickInvertX setState:NSOffState]; + [leftStickInvertY setState:NSOffState]; + [rightStickDeadzone setIntValue:0]; + [rightStickInvertX setState:NSOffState]; + [rightStickInvertY setState:NSOffState]; + // Disable inputs + [self inputEnable:NO]; +} + +// Stop using the HID device +- (void)stopDevice +{ + if(registryEntry==0) return; + [self testMotorsLarge:0 small:0]; + [self setMotorOverride:FALSE]; + [self updateLED:0x00]; + if(hidQueue!=NULL) { + CFRunLoopSourceRef eventSource; + + (*hidQueue)->stop(hidQueue); + eventSource=(*hidQueue)->getAsyncEventSource(hidQueue); + if((eventSource!=NULL)&&CFRunLoopContainsSource(CFRunLoopGetCurrent(),eventSource,kCFRunLoopCommonModes)) + CFRunLoopRemoveSource(CFRunLoopGetCurrent(),eventSource,kCFRunLoopCommonModes); + (*hidQueue)->Release(hidQueue); + hidQueue=NULL; + } + if(device!=NULL) { + (*device)->close(device); + device=NULL; + } + registryEntry=0; +} + +// Start using a HID device +- (void)startDevice +{ + int i,j; + CFArrayRef elements; + CFDictionaryRef element; + CFTypeRef object; + long number; + IOHIDElementCookie cookie; + long usage,usagePage; + CFRunLoopSourceRef eventSource; + IOReturn ret; + + [self resetDisplay]; + i=[deviceList indexOfSelectedItem]; + if(([deviceArray count]==0)||(i==-1)) { + NSLog(@"No devices found? :( device count==%i, i==%i",[deviceArray count],i); + return; + } + { + DeviceItem *item=[deviceArray objectAtIndex:i]; + + device=[item hidDevice]; + ffDevice=[item ffDevice]; + registryEntry=[item rawDevice]; + } + if((*device)->copyMatchingElements(device,NULL,&elements)!=kIOReturnSuccess) { + NSLog(@"Can't get elements list"); + // Make note of failure? + return; + } + for(i=0;i=1)&&(usage<=15)) { + // Button 1-11 + buttons[usage-1]=cookie; + } + break; + default: + break; + } + } + // Start queue + if((*device)->open(device,0)!=kIOReturnSuccess) { + NSLog(@"Can't open device"); + // Make note of failure? + return; + } + hidQueue=(*device)->allocQueue(device); + if(hidQueue==NULL) { + NSLog(@"Unable to allocate queue"); + // Error? + return; + } + ret=(*hidQueue)->create(hidQueue,0,32); + if(ret!=kIOReturnSuccess) { + NSLog(@"Unable to create the queue"); + // Error? + return; + } + // Create event source + ret=(*hidQueue)->createAsyncEventSource(hidQueue,&eventSource); + if(ret!=kIOReturnSuccess) { + NSLog(@"Unable to create async event source"); + // Error? + return; + } + // Set callback + ret=(*hidQueue)->setEventCallout(hidQueue,CallbackFunction,self,NULL); + if(ret!=kIOReturnSuccess) { + NSLog(@"Unable to set event callback"); + // Error? + return; + } + // Add to runloop + CFRunLoopAddSource(CFRunLoopGetCurrent(),eventSource,kCFRunLoopCommonModes); + // Add some elements + for(i=0;i<6;i++) + (*hidQueue)->addElement(hidQueue,axis[i],0); + for(i=0;i<15;i++) + (*hidQueue)->addElement(hidQueue,buttons[i],0); + // Start + ret=(*hidQueue)->start(hidQueue); + if(ret!=kIOReturnSuccess) { + NSLog(@"Unable to start queue - 0x%.8x",ret); + // Error? + return; + } + // Read existing properties + { + CFDictionaryRef dict=(CFDictionaryRef)IORegistryEntryCreateCFProperty(registryEntry,CFSTR("DeviceData"),NULL,0); + if(dict!=0) { + CFBooleanRef boolValue; + CFNumberRef intValue; + + if(CFDictionaryGetValueIfPresent(dict,CFSTR("InvertLeftX"),(void*)&boolValue)) { + [leftStickInvertX setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; + } else NSLog(@"No value for InvertLeftX"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("InvertLeftY"),(void*)&boolValue)) { + [leftStickInvertY setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; + } else NSLog(@"No value for InvertLeftY"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("RelativeLeft"),(void*)&boolValue)) { + BOOL enable=CFBooleanGetValue(boolValue); + [leftLinked setState:enable?NSOnState:NSOffState]; + [leftStick setLinked:enable]; + } else NSLog(@"No value for RelativeLeft"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneLeft"),(void*)&intValue)) { + UInt16 i; + + CFNumberGetValue(intValue,kCFNumberShortType,&i); + [leftStickDeadzone setIntValue:i]; + [leftStick setDeadzone:i]; + } else NSLog(@"No value for DeadzoneLeft"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("InvertRightX"),(void*)&boolValue)) { + [rightStickInvertX setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; + } else NSLog(@"No value for InvertRightX"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("InvertRightY"),(void*)&boolValue)) { + [rightStickInvertY setState:CFBooleanGetValue(boolValue)?NSOnState:NSOffState]; + } else NSLog(@"No value for InvertRightY"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("RelativeRight"),(void*)&boolValue)) { + BOOL enable=CFBooleanGetValue(boolValue); + [rightLinked setState:enable?NSOnState:NSOffState]; + [rightStick setLinked:enable]; + } else NSLog(@"No value for RelativeRight"); + if(CFDictionaryGetValueIfPresent(dict,CFSTR("DeadzoneRight"),(void*)&intValue)) { + UInt16 i; + + CFNumberGetValue(intValue,kCFNumberShortType,&i); + [rightStickDeadzone setIntValue:i]; + [rightStick setDeadzone:i]; + } else NSLog(@"No value for DeadzoneRight"); + CFRelease(dict); + } else NSLog(@"No settings found"); + } + // Enable GUI components + [self inputEnable:YES]; + // Set LED and manual motor control + [self updateLED:0x0a]; + [self setMotorOverride:TRUE]; + [self testMotorsLarge:0 small:0]; + largeMotor=0; + smallMotor=0; +} + +// Clear out the device lists +- (void)deleteDeviceList +{ + [deviceList removeAllItems]; + [deviceArray removeAllObjects]; +} + +// Update the device list from the I/O Kit +- (void)updateDeviceList +{ + CFMutableDictionaryRef hidDictionary; + IOReturn ioReturn; + io_iterator_t iterator; + io_object_t hidDevice; + io_name_t className; + int count; + DeviceItem *item; + + // Scrub old items + [self stopDevice]; + [self deleteDeviceList]; + // Add new items + hidDictionary=IOServiceMatching(kIOHIDDeviceKey); + ioReturn=IOServiceGetMatchingServices(masterPort,hidDictionary,&iterator); + if((ioReturn!=kIOReturnSuccess)||(iterator==0)) { + [deviceList addItemWithTitle:NO_ITEMS]; + return; + } + count=0; + while(hidDevice=IOIteratorNext(iterator)) { + ioReturn=IOObjectGetClass(hidDevice,className); + if((ioReturn!=kIOReturnSuccess)||(strcmp(className,"Xbox360ControllerClass")!=0)) { + IOObjectRelease(hidDevice); + continue; + } + item=[DeviceItem allocateDeviceItemForDevice:hidDevice]; + if(item==NULL) continue; + // Add to item + [deviceList addItemWithTitle:[NSString stringWithFormat:@"Controller %i",++count]]; + [deviceArray addObject:item]; + } + IOObjectRelease(iterator); + if(count==0) [deviceList addItemWithTitle:NO_ITEMS]; + [self startDevice]; +} + +// Start up +- (void)mainViewDidLoad +{ + 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 + notifyPort=IONotificationPortCreate(masterPort); + notifySource=IONotificationPortGetRunLoopSource(notifyPort); + CFRunLoopAddSource(CFRunLoopGetCurrent(),notifySource,kCFRunLoopCommonModes); + // Prepare other fields + deviceArray=[[NSMutableArray arrayWithCapacity:1] retain]; + device=NULL; + hidQueue=NULL; + // Activate callbacks + IOServiceAddMatchingNotification(notifyPort,kIOFirstMatchNotification,IOServiceMatching(kIOUSBDeviceClassName),callbackHandleDevice,self,&onIterator); + callbackHandleDevice(self,onIterator); + IOServiceAddMatchingNotification(notifyPort,kIOTerminatedNotification,IOServiceMatching(kIOUSBDeviceClassName),callbackHandleDevice,self,&offIterator); + while((object=IOIteratorNext(offIterator))!=0) IOObjectRelease(object); +} + +// Shut down +- (void)dealloc +{ + // Remove notification source + IOObjectRelease(onIterator); + IOObjectRelease(offIterator); + CFRunLoopRemoveSource(CFRunLoopGetCurrent(),notifySource,kCFRunLoopCommonModes); + CFRunLoopSourceInvalidate(notifySource); + IONotificationPortDestroy(notifyPort); + // Release device and info + [self stopDevice]; + [self deleteDeviceList]; + [deviceArray release]; + // Close master port + mach_port_deallocate(mach_task_self(),masterPort); + // Done + [super dealloc]; +} + +// Handle selection from drop down menu +- (void)selectDevice:(id)sender +{ + [self startDevice]; +} + +// Handle changing a setting +- (void)changeSetting:(id)sender +{ + CFDictionaryRef dict; + CFStringRef keys[8]; + CFTypeRef values[8]; + UInt16 i; + + // Set keys and values + keys[0]=CFSTR("InvertLeftX"); + values[0]=([leftStickInvertX state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + keys[1]=CFSTR("InvertLeftY"); + values[1]=([leftStickInvertY state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + keys[2]=CFSTR("InvertRightX"); + values[2]=([rightStickInvertX state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + keys[3]=CFSTR("InvertRightY"); + values[3]=([rightStickInvertY state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + keys[4]=CFSTR("DeadzoneLeft"); + i=[leftStickDeadzone doubleValue]; + values[4]=CFNumberCreate(NULL,kCFNumberShortType,&i); + keys[5]=CFSTR("DeadzoneRight"); + i=[rightStickDeadzone doubleValue]; + values[5]=CFNumberCreate(NULL,kCFNumberShortType,&i); + keys[6]=CFSTR("RelativeLeft"); + values[6]=([leftLinked state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + keys[7]=CFSTR("RelativeRight"); + values[7]=([rightLinked state]==NSOnState)?kCFBooleanTrue:kCFBooleanFalse; + // Create dictionary + dict=CFDictionaryCreate(NULL,(const void**)keys,(const void**)values,sizeof(keys)/sizeof(keys[0]),&kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks); + // Set property + IORegistryEntrySetCFProperties(registryEntry,dict); + // Update UI + [leftStick setLinked:([leftLinked state]==NSOnState)]; + [leftStick setDeadzone:[leftStickDeadzone doubleValue]]; + [rightStick setLinked:([rightLinked state]==NSOnState)]; + [rightStick setDeadzone:[rightStickDeadzone doubleValue]]; +} + +// Handle I/O Kit device add/remove +- (void)handleDeviceChange +{ + // Ideally, this function would make a note of the controller's Location ID, then + // reselect it when the list is updated, if it's still in the list. + [self updateDeviceList]; +} + +@end diff --git a/Pref360Control/Pref360Control_Prefix.pch b/Pref360Control/Pref360Control_Prefix.pch new file mode 100644 index 00000000..5da80c02 --- /dev/null +++ b/Pref360Control/Pref360Control_Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'Pref360Control' target in the 'Pref360Control' project. +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/Pref360Control/pref360controlpref.tiff b/Pref360Control/pref360controlpref.tiff new file mode 100644 index 0000000000000000000000000000000000000000..d8d477b630076b30a9cd1f69a9792c0eb197cab9 GIT binary patch literal 12076 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 + + + + BuildVersion + 328 + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + ProductBuildVersion + 7K571 + ProjectName + PreferencePaneTemplate + SourceVersion + 120000 + + diff --git a/Readme.rtf b/Readme.rtf new file mode 100644 index 00000000..082f863d --- /dev/null +++ b/Readme.rtf @@ -0,0 +1,86 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 +{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X +\f1\b0\fs24 \ +Copyright (C) 2006 Colin Munro\ +{\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ +\ + +\f0\b About +\f1\b0 \ +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.\ +\ + +\f0\b Licence +\f1\b0 \ +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.\ +\ + +\f0\b Installation +\f1\b0 \ +Simply complete the installer package to install the driver. The driver will recommend you restart - if you do not, the driver will only be usable if the controller is already connected or connected within a minute after the installer completes. To test, connect the controller before loading the Preference Pane, as the code to detect connection is mysteriously not working. If you are interested in installing in a developer please see below.\ +\ + +\f0\b Usage +\f1\b0 \ +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.\ +\ + +\f0\b Known Problems/Todo +\f1\b0 \ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'a5 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ +{\listtext \'a5 }Settings aren't persistent, I don't think (need to be set when the device connects)\ +{\listtext \'a5 }Force Feedback plugin may make effects run slower (e.g. longer time) than they should\ +{\listtext \'a5 }Driver probably needs to be more resilient to errors and odd cases\ +{\listtext \'a5 }Better Force Feedback "emulation"\ +{\listtext \'a5 }Extra settings? E.g. trigger deadzones, control remapping.\ +{\listtext \'a5 }Someone has requested old Xbox Controller support too.\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\ls2\ilvl0 +\f0\b \cf0 \ +Contact me +\f1\b0 \ +\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\ls2\ilvl0\cf0 Please feel free to contact me with any comments, questions and so on using the form at the URL at the top of the file.\ +\ +\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\ls2\ilvl0 +\f0\b \cf0 Developer info +\f1\b0 \ +Anything below this probably doesn't affect end users, so you can stop reading now if you just want to use the driver.\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 \ + +\f0\b Building +\f1\b0 \ +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.\ +\ + +\f0\b Debugging +\f1\b0 \ +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.\ +\ + +\f0\b Installer +\f1\b0 \ +Included is an installer project for Iceberg. Download Iceberg at {\field{\*\fldinst{HYPERLINK "http://s.sudre.free.fr/Software/Iceberg.html"}}{\fldrslt http://s.sudre.free.fr/Software/Iceberg.html}}\ +\ + +\f0\b Other information +\f1\b0 \ +I wrote the driver from scratch, using Apple documentation and drivers simply as a reference and not basing it upon any existing source. As such, some things may be done strangely or incorrectly, so excuse any weirdness. I've also tried to include comments to explain generally what's going on :)\ +} \ No newline at end of file From 0399f232f218c6fe81973243ac7d296b8f9dbad3 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 27 Feb 2007 01:18:27 +0000 Subject: [PATCH 02/66] Initial commit of wireless controller drivers and relevant integration code --- .../360Controller.xcodeproj/colin.mode1 | 146 +- .../360Controller.xcodeproj/colin.pbxuser | 193 +- .../360Controller.xcodeproj/project.pbxproj | 2 +- 360Controller/_60Controller.h | 3 +- Feedback360/Feedback360.xcodeproj/colin.mode1 | 104 +- .../Feedback360.xcodeproj/colin.pbxuser | 176 +- Feedback360/main.c | 19 +- .../Pref360Control.xcodeproj/colin.mode1 | 506 +----- .../Pref360Control.xcodeproj/colin.pbxuser | 364 +--- Pref360Control/Pref360ControlPref.h | 3 +- Pref360Control/Pref360ControlPref.m | 31 +- .../English.lproj/InfoPlist.strings | Bin 0 -> 202 bytes .../IOKitDriver.pbproj/project.pbxproj | 311 ++++ Wireless360Controller/Info.plist | 54 + .../Wireless360Controller.cpp | 231 +++ Wireless360Controller/Wireless360Controller.h | 40 + .../colin.mode1 | 1411 ++++++++++++++ .../colin.pbxuser | 161 ++ .../project.pbxproj | 278 +++ Wireless360Controller/version.plist | 16 + .../English.lproj/InfoPlist.strings | Bin 0 -> 202 bytes .../IOKitDriver.pbproj/project.pbxproj | 311 ++++ WirelessGamingReceiver/Info.plist | 55 + WirelessGamingReceiver/WirelessDevice.cpp | 62 + WirelessGamingReceiver/WirelessDevice.h | 34 + .../WirelessGamingReceiver.cpp | 458 +++++ .../WirelessGamingReceiver.h | 56 + .../colin.mode1 | 1613 +++++++++++++++++ .../colin.pbxuser | 313 ++++ .../project.pbxproj | 299 +++ WirelessGamingReceiver/WirelessHIDDevice.cpp | 154 ++ WirelessGamingReceiver/WirelessHIDDevice.h | 29 + WirelessGamingReceiver/devices.h | 7 + WirelessGamingReceiver/version.plist | 16 + 34 files changed, 6313 insertions(+), 1143 deletions(-) create mode 100644 Wireless360Controller/English.lproj/InfoPlist.strings create mode 100644 Wireless360Controller/IOKitDriver.pbproj/project.pbxproj create mode 100644 Wireless360Controller/Info.plist create mode 100644 Wireless360Controller/Wireless360Controller.cpp create mode 100644 Wireless360Controller/Wireless360Controller.h create mode 100644 Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 create mode 100644 Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser create mode 100644 Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj create mode 100644 Wireless360Controller/version.plist create mode 100644 WirelessGamingReceiver/English.lproj/InfoPlist.strings create mode 100644 WirelessGamingReceiver/IOKitDriver.pbproj/project.pbxproj create mode 100644 WirelessGamingReceiver/Info.plist create mode 100644 WirelessGamingReceiver/WirelessDevice.cpp create mode 100644 WirelessGamingReceiver/WirelessDevice.h create mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.cpp create mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.h create mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 create mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser create mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj create mode 100644 WirelessGamingReceiver/WirelessHIDDevice.cpp create mode 100644 WirelessGamingReceiver/WirelessHIDDevice.h create mode 100644 WirelessGamingReceiver/devices.h create mode 100644 WirelessGamingReceiver/version.plist diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 index 819ab3ee..80dc0039 100644 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -190,87 +190,7 @@ Content PBXProjectModuleGUID - 3B300FFB09F58A40009DA334 - PBXProjectModuleLabel - xbox360hid.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B300FFC09F58A40009DA334 - PBXProjectModuleLabel - xbox360hid.h - _historyCapacity - 0 - bookmark - 3BE2FE4C0A724EFE007DD2D8 - history - - 3BDC3E590A724A5A0008F33B - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 239 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBEAB44096B786600F2E37B - PBXProjectModuleLabel - ControlStruct.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBEAB45096B786600F2E37B - PBXProjectModuleLabel - ControlStruct.h - _historyCapacity - 0 - bookmark - 3BE2FE4D0A724EFE007DD2D8 - history - - 3BDC3E5A0A724A5A0008F33B - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 38 218 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BCE45D80963972A00B69EDF + 3B18E3890B93A3CC0093FA6E PBXProjectModuleLabel _60Controller.h PBXSplitModuleInNavigatorKey @@ -278,16 +198,16 @@ Split0 PBXProjectModuleGUID - 3BCE45D90963972A00B69EDF + 3B18E38A0B93A3CC0093FA6E PBXProjectModuleLabel _60Controller.h _historyCapacity 0 bookmark - 3BE2FE4E0A724EFE007DD2D8 + 3B2593570B93ACEF0025011E history - 3BDC3E5C0A724A5A0008F33B + 3B2593210B93A9320025011E SplitCount @@ -303,31 +223,31 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 85 129 900 758 0 0 1280 1002 + 389 190 900 758 0 0 1280 1002 Content PBXProjectModuleGUID - 3BCF4E45097DB33D0049C083 + 3B2593580B93ACEF0025011E PBXProjectModuleLabel - IOUSBPipe.h + _60Controller.cpp PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3BCF4E46097DB33D0049C083 + 3B2593590B93ACEF0025011E PBXProjectModuleLabel - IOUSBPipe.h + _60Controller.cpp _historyCapacity 0 bookmark - 3BE2FE4F0A724EFE007DD2D8 + 3B25935A0B93ACEF0025011E history - 3BDC3E5D0A724A5A0008F33B + 3B2593530B93AC600025011E SplitCount @@ -343,7 +263,7 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 15 239 900 758 0 0 1280 1002 + 518 115 900 758 0 0 1280 1002 @@ -380,6 +300,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -428,6 +350,9 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey + 6 + 2 + 1 0 @@ -451,7 +376,7 @@ 186 RubberWindowFrame - 223 481 713 426 0 0 1280 1002 + 238 423 713 426 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -488,7 +413,7 @@ Frame {{0, 0}, {505, 0}} RubberWindowFrame - 223 481 713 426 0 0 1280 1002 + 238 423 713 426 0 0 1280 1002 Module PBXNavigatorGroup @@ -496,8 +421,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -510,7 +433,7 @@ Frame {{0, 5}, {505, 380}} RubberWindowFrame - 223 481 713 426 0 0 1280 1002 + 238 423 713 426 0 0 1280 1002 Module XCDetailModule @@ -534,9 +457,9 @@ TableOfContents - 3BE2FE290A724BCD007DD2D8 + 3B2593550B93ACEF0025011E 1CE0B1FE06471DED0097A5F4 - 3BE2FE2A0A724BCD007DD2D8 + 3B2593560B93ACEF0025011E 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -670,15 +593,12 @@ 5 WindowOrderList - 3BCE45C10963706A00B69EDF - 3BCF4E45097DB33D0049C083 - 3BCE45D80963972A00B69EDF - 3BBEAB44096B786600F2E37B - 3B300FFB09F58A40009DA334 - /Users/colin/Projects/360/360ControllerSource/360Controller/360Controller.xcodeproj + 3B2593580B93ACEF0025011E + 3B18E3890B93A3CC0093FA6E + /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj WindowString - 223 481 713 426 0 0 1280 1002 + 238 423 713 426 0 0 1280 1002 WindowTools @@ -706,20 +626,22 @@ GeometryConfiguration Frame - {{0, 0}, {1024, 271}} + {{0, 0}, {1024, 323}} RubberWindowFrame 101 235 1024 583 0 0 1280 1002 Module PBXNavigatorGroup Proportion - 271pt + 323pt + BecomeActive + ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 5}, {1024, 261}} + {{0, 160}, {1024, 54}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -732,14 +654,14 @@ GeometryConfiguration Frame - {{0, 276}, {1024, 266}} + {{0, 328}, {1024, 214}} RubberWindowFrame 101 235 1024 583 0 0 1280 1002 Module PBXBuildResultsModule Proportion - 266pt + 214pt Proportion @@ -757,7 +679,7 @@ TableOfContents 3BCE45C10963706A00B69EDF - 3BE2FE2F0A724BCD007DD2D8 + 3B18E27F0B92754D0093FA6E 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index 11257802..8cc966ec 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -48,6 +48,22 @@ PBXFileDataSource_Target_ColumnID, ); }; + PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 16, + 200, + 50, + 206, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXSymbolsDataSource_SymbolTypeIconID, + PBXSymbolsDataSource_SymbolNameID, + PBXSymbolsDataSource_SymbolTypeID, + PBXSymbolsDataSource_ReferenceNameID, + ); + }; PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; @@ -70,18 +86,14 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 175262526; - PBXWorkspaceStateSaveDate = 175262526; + PBXPerProjectTemplateStateSaveDate = 194229520; + PBXWorkspaceStateSaveDate = 194229520; }; perUserProjectItems = { - 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */; - 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */; - 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */; - 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */ = 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */; - 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */; - 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */; - 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */; - 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */ = 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */; + 3B2593210B93A9320025011E = 3B2593210B93A9320025011E /* PBXTextBookmark */; + 3B2593530B93AC600025011E = 3B2593530B93AC600025011E /* PBXBookmark */; + 3B2593570B93ACEF0025011E = 3B2593570B93ACEF0025011E /* PBXTextBookmark */; + 3B25935A0B93ACEF0025011E = 3B25935A0B93ACEF0025011E /* PBXTextBookmark */; }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { @@ -97,18 +109,18 @@ }; 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1316}}"; - sepNavSelRange = "{1998, 12}"; - sepNavVisRect = "{{0, 253}, {861, 685}}"; - sepNavWindowFrame = "{{85, 73}, {900, 814}}"; + sepNavIntBoundsRect = "{{0, 0}, {861, 1330}}"; + sepNavSelRange = "{1062, 0}"; + sepNavVisRect = "{{0, 562}, {861, 685}}"; + sepNavWindowFrame = "{{389, 134}, {900, 814}}"; }; }; 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {896, 7210}}"; - sepNavSelRange = "{8675, 5}"; - sepNavVisRect = "{{0, 3599}, {861, 685}}"; - sepNavWindowFrame = "{{361, 128}, {900, 814}}"; + sepNavSelRange = "{15952, 405}"; + sepNavVisRect = "{{0, 6525}, {861, 685}}"; + sepNavWindowFrame = "{{518, 59}, {900, 814}}"; }; }; 32D94FC30562CBF700B6AF17 /* 360Controller */ = { @@ -117,16 +129,50 @@ 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 2758}}"; - sepNavSelRange = "{654, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{115, 102}, {900, 814}}"; + sepNavSelRange = "{5341, 230}"; + sepNavVisRect = "{{0, 2073}, {861, 685}}"; + sepNavWindowFrame = "{{376, 7}, {900, 814}}"; }; }; + 3B2593210B93A9320025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = "_60Controller.h: 27"; + rLen = 0; + rLoc = 1062; + rType = 0; + vrLen = 1680; + vrLoc = 462; + }; + 3B2593530B93AC600025011E /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; + }; + 3B2593570B93ACEF0025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = "_60Controller.h: 27"; + rLen = 0; + rLoc = 1062; + rType = 0; + vrLen = 2048; + vrLoc = 1402; + }; + 3B25935A0B93ACEF0025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; + name = "_60Controller.cpp: 503"; + rLen = 405; + rLoc = 15952; + rType = 0; + vrLen = 1220; + vrLoc = 15137; + }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; - sepNavSelRange = "{3027, 10}"; - sepNavVisRect = "{{0, 491}, {861, 685}}"; + sepNavSelRange = "{926, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; @@ -159,108 +205,9 @@ 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1624}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 840}, {861, 685}}"; + sepNavSelRange = "{949, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{38, 162}, {900, 814}}"; }; }; - 3BDC3E590A724A5A0008F33B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; - name = USAGE_PAGE; - rLen = 10; - rLoc = 3027; - rType = 0; - vrLen = 3010; - vrLoc = 1495; - }; - 3BDC3E5A0A724A5A0008F33B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; - name = "ControlStruct.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1143; - vrLoc = 1895; - }; - 3BDC3E5C0A724A5A0008F33B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = relativeLeft; - rLen = 12; - rLoc = 1998; - rType = 0; - vrLen = 1650; - vrLoc = 718; - }; - 3BDC3E5D0A724A5A0008F33B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BDC3E5E0A724A5A0008F33B /* IOUSBPipe.h */; - name = "(null): 103"; - rLen = 0; - rLoc = 3455; - rType = 0; - vrLen = 1949; - vrLoc = 2564; - }; - 3BDC3E5E0A724A5A0008F33B /* IOUSBPipe.h */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = IOUSBPipe.h; - path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/usb/IOUSBPipe.h; - sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {938, 4956}}"; - sepNavSelRange = "{3455, 0}"; - sepNavVisRect = "{{0, 1092}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; - 3BE2FE4C0A724EFE007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; - name = USAGE_PAGE; - rLen = 10; - rLoc = 3027; - rType = 0; - vrLen = 3010; - vrLoc = 1495; - }; - 3BE2FE4D0A724EFE007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; - name = "ControlStruct.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1143; - vrLoc = 1895; - }; - 3BE2FE4E0A724EFE007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = relativeLeft; - rLen = 12; - rLoc = 1998; - rType = 0; - vrLen = 1650; - vrLoc = 718; - }; - 3BE2FE4F0A724EFE007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE2FE500A724EFE007DD2D8 /* IOUSBPipe.h */; - name = "(null): 103"; - rLen = 0; - rLoc = 3455; - rType = 0; - vrLen = 1949; - vrLoc = 2564; - }; - 3BE2FE500A724EFE007DD2D8 /* IOUSBPipe.h */ = { - isa = PBXFileReference; - name = IOUSBPipe.h; - path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/usb/IOUSBPipe.h; - sourceTree = ""; - }; } diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 0c5b232d..8d2bad6a 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -224,7 +224,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "cd $TARGET_BUILD_DIR/$TARGET_NAME.kext/Contents\nmkdir PlugIns > /dev/null 2>&1\nrm -R PlugIns/Feedback360.plugin > /dev/null 2>&1\ncp -R $SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle PlugIns/Feedback360.plugin\n# Renaming extension from bundle to a plugin? Could be naughty."; + shellScript = "cd \"$TARGET_BUILD_DIR/$TARGET_NAME.kext/Contents\"\nmkdir PlugIns > /dev/null 2>&1\nrm -R PlugIns/Feedback360.plugin > /dev/null 2>&1\necho $SRCROOT\ncp -R $SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle PlugIns/Feedback360.plugin\n# Renaming extension from bundle to a plugin? Could be naughty."; }; /* End PBXShellScriptBuildPhase section */ diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index de9ebd12..61118aa6 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -19,7 +19,8 @@ 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__ +*/ +#ifndef __XBOX360CONTROLLER_H__ #define __XBOX360CONTROLLER_H__ #include diff --git a/Feedback360/Feedback360.xcodeproj/colin.mode1 b/Feedback360/Feedback360.xcodeproj/colin.mode1 index a1c474fd..b688a09e 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.mode1 +++ b/Feedback360/Feedback360.xcodeproj/colin.mode1 @@ -190,24 +190,24 @@ Content PBXProjectModuleGUID - 3BBDC6DB097958F10023AAD8 + 3B47D9330B93B50800F200B8 PBXProjectModuleLabel - emulator.c + main.c PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3BBDC6DC097958F10023AAD8 + 3B47D9340B93B50800F200B8 PBXProjectModuleLabel - emulator.c + main.c _historyCapacity 0 bookmark - 3BE2FE400A724ED5007DD2D8 + 3B47D95D0B93B63A00F200B8 history - 3BDC3E450A724A1F0008F33B + 3B47D9350B93B50800F200B8 SplitCount @@ -223,31 +223,31 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 345 119 900 758 0 0 1280 1002 + 253 152 900 758 0 0 1280 1002 Content PBXProjectModuleGUID - 3B09261E097D9E4100DE2683 + 3BBDC6D0097958F10023AAD8 PBXProjectModuleLabel - IOHIDLib.h + devlink.c PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3B09261F097D9E4100DE2683 + 3BBDC6D1097958F10023AAD8 PBXProjectModuleLabel - IOHIDLib.h + devlink.c _historyCapacity 0 bookmark - 3BE2FE410A724ED5007DD2D8 + 3B47D95E0B93B63A00F200B8 history - 3BDC3E460A724A1F0008F33B + 3B47D9370B93B50800F200B8 SplitCount @@ -263,31 +263,31 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 15 239 900 758 0 0 1280 1002 + 253 166 900 758 0 0 1280 1002 Content PBXProjectModuleGUID - 3BBDC6D0097958F10023AAD8 + 3BBDC6DB097958F10023AAD8 PBXProjectModuleLabel - devlink.c + emulator.c PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3BBDC6D1097958F10023AAD8 + 3BBDC6DC097958F10023AAD8 PBXProjectModuleLabel - devlink.c + emulator.c _historyCapacity 0 bookmark - 3BE2FE430A724ED5007DD2D8 + 3B47D95F0B93B63A00F200B8 history - 3BDC3E490A724A1F0008F33B + 3B47D9380B93B50800F200B8 SplitCount @@ -303,7 +303,47 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 253 166 900 758 0 0 1280 1002 + 345 119 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B09261E097D9E4100DE2683 + PBXProjectModuleLabel + IOHIDLib.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B09261F097D9E4100DE2683 + PBXProjectModuleLabel + IOHIDLib.h + _historyCapacity + 0 + bookmark + 3B47D9600B93B63A00F200B8 + history + + 3B47D9390B93B50800F200B8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 239 900 758 0 0 1280 1002 @@ -324,10 +364,10 @@ _historyCapacity 0 bookmark - 3BE2FE440A724ED5007DD2D8 + 3B47D9620B93B63A00F200B8 history - 3BDC3E4A0A724A1F0008F33B + 3B47D93B0B93B50800F200B8 SplitCount @@ -364,10 +404,10 @@ _historyCapacity 0 bookmark - 3BE2FE450A724ED5007DD2D8 + 3B47D9630B93B63A00F200B8 history - 3BDC3E4B0A724A1F0008F33B + 3B47D93C0B93B50800F200B8 SplitCount @@ -468,6 +508,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey + 3 + 1 0 @@ -574,9 +616,9 @@ TableOfContents - 3BE2FE3E0A724ED5007DD2D8 + 3B47D95B0B93B63A00F200B8 1CE0B1FE06471DED0097A5F4 - 3BE2FE3F0A724ED5007DD2D8 + 3B47D95C0B93B63A00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -710,13 +752,13 @@ 5 WindowOrderList - 3B2EF5820965C4A5007BFB7B 3BBA03BD096A128C008A46C9 3BBEAB35096B786400F2E37B - 3BBDC6D0097958F10023AAD8 3B09261E097D9E4100DE2683 3BBDC6DB097958F10023AAD8 - /Users/colin/Projects/360/360ControllerSource/Feedback360/Feedback360.xcodeproj + 3BBDC6D0097958F10023AAD8 + 3B47D9330B93B50800F200B8 + /Users/colin/Projects2/OSX/360 Controller/Feedback360/Feedback360.xcodeproj WindowString 57 554 690 397 0 0 1280 1002 @@ -798,7 +840,7 @@ TableOfContents 3B2EF5820965C4A5007BFB7B - 3BE2FE460A724ED5007DD2D8 + 3B47D93D0B93B50800F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 73829fb8..38854bbd 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -33,20 +33,22 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 175262674; - PBXWorkspaceStateSaveDate = 175262674; + PBXPerProjectTemplateStateSaveDate = 194229813; + PBXWorkspaceStateSaveDate = 194229813; }; perUserProjectItems = { - 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */; - 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */; - 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */; - 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */; - 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */ = 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */; - 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */; - 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */; - 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */; - 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */; - 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */ = 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */; + 3B47D9350B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9350B93B50800F200B8 /* PBXTextBookmark */; + 3B47D9370B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9370B93B50800F200B8 /* PBXTextBookmark */; + 3B47D9380B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9380B93B50800F200B8 /* PBXTextBookmark */; + 3B47D9390B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9390B93B50800F200B8 /* PBXTextBookmark */; + 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */ = 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */; + 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */ = 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */; + 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */; + 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */; + 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */; + 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */; + 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */; + 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { @@ -62,9 +64,9 @@ }; 08FB77B6FE84183AC02AAC07 /* main.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1226, 5992}}"; - sepNavSelRange = "{3534, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {1226, 6174}}"; + sepNavSelRange = "{2434, 0}"; + sepNavVisRect = "{{0, 659}, {861, 685}}"; sepNavWindowFrame = "{{253, 96}, {900, 814}}"; }; }; @@ -88,39 +90,27 @@ sepNavWindowFrame = "{{7, 68}, {900, 814}}"; }; }; - 3BBA037B09697D80008A46C9 /* emulator.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{284, 88}, {900, 814}}"; - }; - }; - 3BBA037C09697D80008A46C9 /* emulator.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 4816}}"; - sepNavSelRange = "{1235, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{345, 63}, {900, 814}}"; - }; - }; - 3BBA03E1096A29B5008A46C9 /* devlink.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {488, 588}}"; - sepNavSelRange = "{1342, 0}"; - sepNavVisRect = "{{0, 402}, {459, 186}}"; - sepNavWindowFrame = "{{107, 99}, {900, 814}}"; - }; + 3B47D9350B93B50800F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB77B6FE84183AC02AAC07 /* main.c */; + name = "main.c: 76"; + rLen = 0; + rLoc = 2434; + rType = 0; + vrLen = 1290; + vrLoc = 1672; }; - 3BBA03E2096A29B5008A46C9 /* devlink.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 854}}"; - sepNavSelRange = "{1097, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{253, 110}, {900, 814}}"; - }; + 3B47D9370B93B50800F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; + name = Device_Initialise; + rLen = 17; + rLoc = 1001; + rType = 0; + vrLen = 1698; + vrLoc = 454; }; - 3BDC3E450A724A1F0008F33B /* PBXTextBookmark */ = { + 3B47D9380B93B50800F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; name = "emulator.c: 30"; @@ -130,9 +120,9 @@ vrLen = 1924; vrLoc = 0; }; - 3BDC3E460A724A1F0008F33B /* PBXTextBookmark */ = { + 3B47D9390B93B50800F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3BDC3E470A724A1F0008F33B /* IOHIDLib.h */; + fRef = 3B47D93A0B93B50800F200B8 /* IOHIDLib.h */; name = "(null): 4"; rLen = 0; rLoc = 101; @@ -140,7 +130,7 @@ vrLen = 2161; vrLoc = 9198; }; - 3BDC3E470A724A1F0008F33B /* IOHIDLib.h */ = { + 3B47D93A0B93B50800F200B8 /* IOHIDLib.h */ = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IOHIDLib.h; @@ -153,17 +143,7 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3BDC3E490A724A1F0008F33B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; - name = "devlink.c: 29"; - rLen = 0; - rLoc = 1097; - rType = 0; - vrLen = 1832; - vrLoc = 0; - }; - 3BDC3E4A0A724A1F0008F33B /* PBXTextBookmark */ = { + 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; name = "main.h: 1"; @@ -173,7 +153,7 @@ vrLen = 1781; vrLoc = 0; }; - 3BDC3E4B0A724A1F0008F33B /* PBXTextBookmark */ = { + 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; name = "emulator.h: 1"; @@ -183,7 +163,27 @@ vrLen = 1403; vrLoc = 0; }; - 3BE2FE400A724ED5007DD2D8 /* PBXTextBookmark */ = { + 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB77B6FE84183AC02AAC07 /* main.c */; + name = "main.c: 76"; + rLen = 0; + rLoc = 2434; + rType = 0; + vrLen = 1279; + vrLoc = 1683; + }; + 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; + name = Device_Initialise; + rLen = 17; + rLoc = 1001; + rType = 0; + vrLen = 1738; + vrLoc = 414; + }; + 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; name = "emulator.c: 30"; @@ -193,9 +193,9 @@ vrLen = 1924; vrLoc = 0; }; - 3BE2FE410A724ED5007DD2D8 /* PBXTextBookmark */ = { + 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3BE2FE420A724ED5007DD2D8 /* IOHIDLib.h */; + fRef = 3B47D9610B93B63A00F200B8 /* IOHIDLib.h */; name = "(null): 4"; rLen = 0; rLoc = 101; @@ -203,23 +203,13 @@ vrLen = 2161; vrLoc = 9198; }; - 3BE2FE420A724ED5007DD2D8 /* IOHIDLib.h */ = { + 3B47D9610B93B63A00F200B8 /* IOHIDLib.h */ = { isa = PBXFileReference; name = IOHIDLib.h; path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/hid/IOHIDLib.h; sourceTree = ""; }; - 3BE2FE430A724ED5007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; - name = "devlink.c: 29"; - rLen = 0; - rLoc = 1097; - rType = 0; - vrLen = 1832; - vrLoc = 0; - }; - 3BE2FE440A724ED5007DD2D8 /* PBXTextBookmark */ = { + 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; name = "main.h: 1"; @@ -229,7 +219,7 @@ vrLen = 1781; vrLoc = 0; }; - 3BE2FE450A724ED5007DD2D8 /* PBXTextBookmark */ = { + 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; name = "emulator.h: 1"; @@ -239,6 +229,38 @@ vrLen = 1403; vrLoc = 0; }; + 3BBA037B09697D80008A46C9 /* emulator.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{284, 88}, {900, 814}}"; + }; + }; + 3BBA037C09697D80008A46C9 /* emulator.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 4816}}"; + sepNavSelRange = "{1235, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; + sepNavWindowFrame = "{{345, 63}, {900, 814}}"; + }; + }; + 3BBA03E1096A29B5008A46C9 /* devlink.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {488, 588}}"; + sepNavSelRange = "{1342, 0}"; + sepNavVisRect = "{{0, 402}, {459, 186}}"; + sepNavWindowFrame = "{{107, 99}, {900, 814}}"; + }; + }; + 3BBA03E2096A29B5008A46C9 /* devlink.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {861, 854}}"; + sepNavSelRange = "{1001, 17}"; + sepNavVisRect = "{{0, 162}, {861, 685}}"; + sepNavWindowFrame = "{{253, 110}, {900, 814}}"; + }; + }; 8D57630D048677EA00EA77CD /* Feedback360 */ = { activeExec = 0; }; diff --git a/Feedback360/main.c b/Feedback360/main.c index 43b72f3c..47c6e742 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -71,7 +71,9 @@ static ULONG Feedback360Release(void *that) static IOReturn Feedback360Probe(void *that,CFDictionaryRef propertyTable,io_service_t service,SInt32 *order) { - if((service==0)||(!IOObjectConformsTo(service,"Xbox360ControllerClass"))) return kIOReturnBadArgument; + if ((service==0) + || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) + && (!IOObjectConformsTo(service,"Wireless360Controller")))) return kIOReturnBadArgument; return S_OK; } @@ -116,11 +118,22 @@ static HRESULT Feedback360InitializeTerminate(void *that,NumVersion APIversion,i if(begin) { // fprintf(stderr,"Feedback: Initialising...\n"); // Initialize - if(APIversion.majorRev!=kFFPlugInAPIMajorRev) return FFERR_INVALIDPARAM; + if(APIversion.majorRev!=kFFPlugInAPIMajorRev) + { +// fprintf(stderr,"Feedback: Invalid version\n"); + return FFERR_INVALIDPARAM; + } // From probe - if((hidDevice==0)||(!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass"))) return FFERR_INVALIDPARAM; + if( (hidDevice==0) + || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) + && (!IOObjectConformsTo(hidDevice,"Wireless360Controller"))) ) + { +// fprintf(stderr,"Feedback: Invalid device\n"); + return FFERR_INVALIDPARAM; + } Emulate_Initialise(&this->emulator,10,Feedback360_Callback,this); if(!Device_Initialise(&this->device,hidDevice)) { +// fprintf(stderr,"Feedback: Failed to initialise\n"); Emulate_Finalise(&this->emulator); return FFERR_NOINTERFACE; } diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 index fc2fb621..4eefd228 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -190,24 +190,24 @@ Content PBXProjectModuleGUID - 3BE2FE670A724F1D007DD2D8 + 3BCAF9310AC373D4008F5CE4 PBXProjectModuleLabel - Info.plist + DeviceItem.m PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3BE2FE680A724F1D007DD2D8 + 3BCAF9320AC373D4008F5CE4 PBXProjectModuleLabel - Info.plist + DeviceItem.m _historyCapacity 0 bookmark - 3B491CBD0A7256B7000D1BD9 + 3B47D97D0B93B67000F200B8 history - 3BE2FEA70A724FE3007DD2D8 + 3B25936A0B93AE570025011E SplitCount @@ -223,31 +223,31 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 319 149 900 758 0 0 1280 1002 + 381 144 900 758 0 0 1280 1002 Content PBXProjectModuleGUID - 3BBEAB4B096B786700F2E37B + 3B18E35E0B939D2A0093FA6E PBXProjectModuleLabel - Pref360ControlPref.m + Pref360ControlPref.h PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID - 3BBEAB4C096B786700F2E37B + 3B18E35F0B939D2A0093FA6E PBXProjectModuleLabel - Pref360ControlPref.m + Pref360ControlPref.h _historyCapacity 0 bookmark - 3B491CBE0A7256B7000D1BD9 + 3B47D97E0B93B67000F200B8 history - 3BE2FEA80A724FE3007DD2D8 + 3B25936B0B93AE570025011E SplitCount @@ -263,447 +263,7 @@ PBXModuleWindowStatusBarHidden2 RubberWindowFrame - 327 131 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BC41F5F096CE12C00664A42 - PBXProjectModuleLabel - DeviceItem.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BC41F60096CE12C00664A42 - PBXProjectModuleLabel - DeviceItem.h - _historyCapacity - 0 - bookmark - 3B491CBF0A7256B7000D1BD9 - history - - 3BE2FEA90A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 292 114 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33F0097B301C00E8A35A - PBXProjectModuleLabel - MyAnalogStick.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33F1097B301C00E8A35A - PBXProjectModuleLabel - MyAnalogStick.m - _historyCapacity - 0 - bookmark - 3B491CC00A7256B7000D1BD9 - history - - 3BE2FEAA0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 84 176 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33F3097B301C00E8A35A - PBXProjectModuleLabel - MyAnalogStick.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33F4097B301C00E8A35A - PBXProjectModuleLabel - MyAnalogStick.h - _historyCapacity - 0 - bookmark - 3B491CC10A7256B7000D1BD9 - history - - 3BE2FEAB0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 196 202 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33DB097B301C00E8A35A - PBXProjectModuleLabel - MyShoulderButton.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33DC097B301C00E8A35A - PBXProjectModuleLabel - MyShoulderButton.m - _historyCapacity - 0 - bookmark - 3B491CC20A7256B7000D1BD9 - history - - 3BE2FEAC0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 107 155 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33DE097B301C00E8A35A - PBXProjectModuleLabel - MyShoulderButton.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33DF097B301C00E8A35A - PBXProjectModuleLabel - MyShoulderButton.h - _historyCapacity - 0 - bookmark - 3B491CC30A7256B7000D1BD9 - history - - 3BE2FEAD0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 130 134 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33E1097B301C00E8A35A - PBXProjectModuleLabel - MyMainButtons.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33E2097B301C00E8A35A - PBXProjectModuleLabel - MyMainButtons.m - _historyCapacity - 0 - bookmark - 3B491CC40A7256B7000D1BD9 - history - - 3BE2FEAE0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 239 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33E4097B301C00E8A35A - PBXProjectModuleLabel - MyMainButtons.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33E5097B301C00E8A35A - PBXProjectModuleLabel - MyMainButtons.h - _historyCapacity - 0 - bookmark - 3B491CC50A7256B7000D1BD9 - history - - 3BE2FEAF0A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 123 160 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33E7097B301C00E8A35A - PBXProjectModuleLabel - MyDigitalStick.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33E8097B301C00E8A35A - PBXProjectModuleLabel - MyDigitalStick.m - _historyCapacity - 0 - bookmark - 3B491CC60A7256B7000D1BD9 - history - - 3BE2FEB00A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 107 155 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33EA097B301C00E8A35A - PBXProjectModuleLabel - MyDigitalStick.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33EB097B301C00E8A35A - PBXProjectModuleLabel - MyDigitalStick.h - _historyCapacity - 0 - bookmark - 3B491CC70A7256B7000D1BD9 - history - - 3BE2FEB10A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 130 134 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBB33ED097B301C00E8A35A - PBXProjectModuleLabel - MyCentreButtons.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBB33EE097B301C00E8A35A - PBXProjectModuleLabel - MyCentreButtons.m - _historyCapacity - 0 - bookmark - 3B491CC80A7256B7000D1BD9 - history - - 3BE2FEB20A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 61 197 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BC41F62096CE12C00664A42 - PBXProjectModuleLabel - IOHIDLib.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BC41F63096CE12C00664A42 - PBXProjectModuleLabel - IOHIDLib.h - _historyCapacity - 0 - bookmark - 3B491CC90A7256B7000D1BD9 - history - - 3BE2FEB30A724FE3007DD2D8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 239 900 758 0 0 1280 1002 + 138 152 900 758 0 0 1280 1002 @@ -740,6 +300,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -856,8 +418,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -894,9 +454,9 @@ TableOfContents - 3B491CAD0A725663000D1BD9 + 3B47D9780B93B64A00F200B8 1CE0B1FE06471DED0097A5F4 - 3B491CAE0A725663000D1BD9 + 3B47D9790B93B64A00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -1030,21 +590,9 @@ 5 WindowOrderList - 3BBEAB15096B38D200F2E37B - 3BC41F62096CE12C00664A42 - 3BBB33ED097B301C00E8A35A - 3BBB33EA097B301C00E8A35A - 3BBB33E7097B301C00E8A35A - 3BBB33E4097B301C00E8A35A - 3BBB33E1097B301C00E8A35A - 3BBB33DE097B301C00E8A35A - 3BBB33DB097B301C00E8A35A - 3BBB33F3097B301C00E8A35A - 3BBB33F0097B301C00E8A35A - 3BC41F5F096CE12C00664A42 - 3BBEAB4B096B786700F2E37B - 3BE2FE670A724F1D007DD2D8 - /Users/colin/Projects/360/360ControllerSource/Pref360Control/Pref360Control.xcodeproj + 3B18E35E0B939D2A0093FA6E + /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj + 3BCAF9310AC373D4008F5CE4 WindowString 511 605 690 397 0 0 1280 1002 @@ -1126,7 +674,7 @@ TableOfContents 3BBEAB15096B38D200F2E37B - 3B491CCB0A7256B7000D1BD9 + 3B2593420B93AA0B0025011E 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -1266,14 +814,12 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - DeviceItem.h + Pref360ControlPref.h StatusBarVisibility @@ -1294,6 +840,8 @@ 212pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -1329,8 +877,8 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3BCF4E3C097DB0F80049C083 - 3BCF4E3D097DB0F80049C083 + 3BCC2D1E0AE2A03400663661 + 3BCC2D1F0AE2A03400663661 1CDD528C0622207200134675 1CD0528E0623707200166675 diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser index 589e25fc..cc916306 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -8,6 +8,7 @@ 8D202CE80486D31800D8A456 /* Pref360Control */, ); breakpoints = ( + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */, ); breakpointsGroup = 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */; codeSenseManager = 3BBEAAF6096B030C00F2E37B /* Code sense */; @@ -34,36 +35,14 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 175265369; - PBXWorkspaceStateSaveDate = 175265369; + PBXPerProjectTemplateStateSaveDate = 194229824; + PBXWorkspaceStateSaveDate = 194229824; }; perUserProjectItems = { - 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */; - 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */ = 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */; - 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */; - 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */ = 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */; + 3B25936A0B93AE570025011E /* PBXTextBookmark */ = 3B25936A0B93AE570025011E /* PBXTextBookmark */; + 3B25936B0B93AE570025011E /* PBXTextBookmark */ = 3B25936B0B93AE570025011E /* PBXTextBookmark */; + 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */ = 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */; + 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */ = 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */; }; sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; userBuildSettings = { @@ -85,146 +64,64 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3B491CBD0A7256B7000D1BD9 /* PBXTextBookmark */ = { + 3B25936A0B93AE570025011E /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 8D202CF70486D31800D8A456 /* Info.plist */; - name = "Info.plist: 27"; + fRef = 3BC41F31096C85CB00664A42 /* DeviceItem.m */; + name = "DeviceItem.m: 35"; rLen = 0; - rLoc = 844; + rLoc = 1219; rType = 0; - vrLen = 927; - vrLoc = 0; + vrLen = 1804; + vrLoc = 199; }; - 3B491CBE0A7256B7000D1BD9 /* PBXTextBookmark */ = { + 3B25936B0B93AE570025011E /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - name = "Pref360ControlPref.m: 331"; + fRef = F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */; + name = "Pref360ControlPref.h: onIteratorWireless"; rLen = 0; - rLoc = 9444; + rLoc = 2619; rType = 0; - vrLen = 1550; - vrLoc = 8477; + vrLen = 1619; + vrLoc = 1005; }; - 3B491CBF0A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BC41F30096C85CB00664A42 /* DeviceItem.h */; - name = "DeviceItem.h: 5"; - rLen = 0; - rLoc = 158; - rType = 0; - vrLen = 1437; - vrLoc = 0; - }; - 3B491CC00A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; - name = "MyAnalogStick.m: 128"; - rLen = 0; - rLoc = 3564; - rType = 0; - vrLen = 888; - vrLoc = 2736; - }; - 3B491CC10A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; - name = "MyAnalogStick.h: 40"; - rLen = 0; - rLoc = 1265; - rType = 0; - vrLen = 1265; - vrLoc = 0; - }; - 3B491CC20A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */; - name = "MyShoulderButton.m: 5"; - rLen = 0; - rLoc = 153; - rType = 0; - vrLen = 1507; - vrLoc = 0; - }; - 3B491CC30A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */; - name = "MyShoulderButton.h: 5"; - rLen = 0; - rLoc = 147; - rType = 0; - vrLen = 1045; - vrLoc = 0; - }; - 3B491CC40A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */; - name = "MyMainButtons.m: 5"; - rLen = 0; - rLoc = 151; - rType = 0; - vrLen = 1485; - vrLoc = 0; - }; - 3B491CC50A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */; - name = "MyMainButtons.h: 5"; - rLen = 0; - rLoc = 148; - rType = 0; - vrLen = 1115; - vrLoc = 0; - }; - 3B491CC60A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */; - name = "MyDigitalStick.m: 5"; - rLen = 0; - rLoc = 151; - rType = 0; - vrLen = 1603; - vrLoc = 0; - }; - 3B491CC70A7256B7000D1BD9 /* PBXTextBookmark */ = { + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + continueAfterActions = 0; + delayBeforeContinue = 0; + fileReference = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + functionName = "-startDevice"; + hitCount = 1; + lineNumber = 411; + modificationTime = 182909504.480911; + state = 0; + }; + 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */; - name = "MyDigitalStick.h: 5"; + fRef = 3BC41F31096C85CB00664A42 /* DeviceItem.m */; + name = "DeviceItem.m: 35"; rLen = 0; - rLoc = 161; + rLoc = 1219; rType = 0; - vrLen = 1215; - vrLoc = 0; + vrLen = 1803; + vrLoc = 199; }; - 3B491CC80A7256B7000D1BD9 /* PBXTextBookmark */ = { + 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; - name = "MyCentreButtons.m: 57"; + fRef = F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */; + name = "Pref360ControlPref.h: onIteratorWireless"; rLen = 0; - rLoc = 1909; + rLoc = 2619; rType = 0; - vrLen = 1564; - vrLoc = 0; - }; - 3B491CC90A7256B7000D1BD9 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B491CCA0A7256B7000D1BD9 /* IOHIDLib.h */; - name = "(null): 256"; - rLen = 19; - rLoc = 11842; - rType = 0; - vrLen = 2237; - vrLoc = 10283; - }; - 3B491CCA0A7256B7000D1BD9 /* IOHIDLib.h */ = { - isa = PBXFileReference; - name = IOHIDLib.h; - path = /System/Library/Frameworks/IOKit.framework/Headers/hid/IOHIDLib.h; - sourceTree = ""; + vrLen = 1618; + vrLoc = 1005; }; 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */ = { isa = XCBreakpointsBucket; name = "Project Breakpoints"; objects = ( + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */, ); }; 3BBEAAF5096B030C00F2E37B /* Source Control */ = { @@ -250,8 +147,8 @@ 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {866, 1876}}"; - sepNavSelRange = "{3564, 0}"; - sepNavVisRect = "{{0, 1149}, {861, 685}}"; + sepNavSelRange = "{3005, 0}"; + sepNavVisRect = "{{0, 1184}, {861, 685}}"; sepNavWindowFrame = "{{84, 120}, {900, 814}}"; }; }; @@ -322,7 +219,7 @@ 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{158, 0}"; + sepNavSelRange = "{1196, 0}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{292, 58}, {900, 814}}"; }; @@ -330,152 +227,9 @@ 3BC41F31096C85CB00664A42 /* DeviceItem.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1036}}"; - sepNavSelRange = "{0, 3}"; - sepNavVisRect = "{{0, 351}, {861, 685}}"; - sepNavWindowFrame = "{{231, 136}, {900, 814}}"; - }; - }; - 3BE2FEA70A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8D202CF70486D31800D8A456 /* Info.plist */; - name = "Info.plist: 27"; - rLen = 0; - rLoc = 844; - rType = 0; - vrLen = 927; - vrLoc = 0; - }; - 3BE2FEA80A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - name = "Pref360ControlPref.m: 331"; - rLen = 0; - rLoc = 9444; - rType = 0; - vrLen = 1550; - vrLoc = 8477; - }; - 3BE2FEA90A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BC41F30096C85CB00664A42 /* DeviceItem.h */; - name = "DeviceItem.h: 5"; - rLen = 0; - rLoc = 158; - rType = 0; - vrLen = 1437; - vrLoc = 0; - }; - 3BE2FEAA0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; - name = "MyAnalogStick.m: 128"; - rLen = 0; - rLoc = 3564; - rType = 0; - vrLen = 888; - vrLoc = 2736; - }; - 3BE2FEAB0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; - name = "MyAnalogStick.h: 40"; - rLen = 0; - rLoc = 1265; - rType = 0; - vrLen = 1265; - vrLoc = 0; - }; - 3BE2FEAC0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */; - name = "MyShoulderButton.m: 5"; - rLen = 0; - rLoc = 153; - rType = 0; - vrLen = 1507; - vrLoc = 0; - }; - 3BE2FEAD0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */; - name = "MyShoulderButton.h: 5"; - rLen = 0; - rLoc = 147; - rType = 0; - vrLen = 1045; - vrLoc = 0; - }; - 3BE2FEAE0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */; - name = "MyMainButtons.m: 5"; - rLen = 0; - rLoc = 151; - rType = 0; - vrLen = 1485; - vrLoc = 0; - }; - 3BE2FEAF0A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */; - name = "MyMainButtons.h: 5"; - rLen = 0; - rLoc = 148; - rType = 0; - vrLen = 1115; - vrLoc = 0; - }; - 3BE2FEB00A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */; - name = "MyDigitalStick.m: 5"; - rLen = 0; - rLoc = 151; - rType = 0; - vrLen = 1603; - vrLoc = 0; - }; - 3BE2FEB10A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */; - name = "MyDigitalStick.h: 5"; - rLen = 0; - rLoc = 161; - rType = 0; - vrLen = 1215; - vrLoc = 0; - }; - 3BE2FEB20A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; - name = "MyCentreButtons.m: 57"; - rLen = 0; - rLoc = 1909; - rType = 0; - vrLen = 1564; - vrLoc = 0; - }; - 3BE2FEB30A724FE3007DD2D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE2FEB40A724FE3007DD2D8 /* IOHIDLib.h */; - name = "(null): 256"; - rLen = 19; - rLoc = 11842; - rType = 0; - vrLen = 2237; - vrLoc = 10283; - }; - 3BE2FEB40A724FE3007DD2D8 /* IOHIDLib.h */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = IOHIDLib.h; - path = /System/Library/Frameworks/IOKit.framework/Headers/hid/IOHIDLib.h; - sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 12236}}"; - sepNavSelRange = "{11842, 19}"; - sepNavVisRect = "{{0, 3122}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; + sepNavSelRange = "{1219, 0}"; + sepNavVisRect = "{{0, 98}, {861, 685}}"; + sepNavWindowFrame = "{{381, 88}, {900, 814}}"; }; }; 8D202CE80486D31800D8A456 /* Pref360Control */ = { @@ -491,18 +245,18 @@ }; F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1162}}"; - sepNavSelRange = "{2374, 0}"; - sepNavVisRect = "{{0, 477}, {861, 685}}"; - sepNavWindowFrame = "{{138, 55}, {900, 814}}"; + sepNavIntBoundsRect = "{{0, 0}, {861, 1176}}"; + sepNavSelRange = "{2619, 0}"; + sepNavVisRect = "{{0, 365}, {861, 685}}"; + sepNavWindowFrame = "{{138, 96}, {900, 814}}"; }; }; F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1022, 8722}}"; - sepNavSelRange = "{9444, 0}"; - sepNavVisRect = "{{0, 4089}, {861, 685}}"; - sepNavWindowFrame = "{{327, 75}, {900, 814}}"; + sepNavIntBoundsRect = "{{0, 0}, {1022, 8876}}"; + sepNavSelRange = "{20883, 0}"; + sepNavVisRect = "{{0, 8191}, {861, 685}}"; + sepNavWindowFrame = "{{221, 123}, {900, 814}}"; }; }; F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */ = { diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 0f5e426a..73fc028b 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -70,7 +70,8 @@ IONotificationPortRef notifyPort; CFRunLoopSourceRef notifySource; - io_iterator_t onIterator,offIterator; + io_iterator_t onIteratorWired, offIteratorWired; + io_iterator_t onIteratorWireless, offIteratorWireless; } - (void)mainViewDidLoad; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 06377afd..849f9488 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -494,7 +494,6 @@ - (void)updateDeviceList IOReturn ioReturn; io_iterator_t iterator; io_object_t hidDevice; - io_name_t className; int count; DeviceItem *item; @@ -510,15 +509,17 @@ - (void)updateDeviceList } count=0; while(hidDevice=IOIteratorNext(iterator)) { - ioReturn=IOObjectGetClass(hidDevice,className); - if((ioReturn!=kIOReturnSuccess)||(strcmp(className,"Xbox360ControllerClass")!=0)) { + BOOL deviceWired = IOObjectConformsTo(hidDevice, "Xbox360ControllerClass"); + BOOL deviceWireless = IOObjectConformsTo(hidDevice, "WirelessHIDDevice"); + if ((!deviceWired) && (!deviceWireless)) + { IOObjectRelease(hidDevice); continue; } item=[DeviceItem allocateDeviceItemForDevice:hidDevice]; if(item==NULL) continue; // Add to item - [deviceList addItemWithTitle:[NSString stringWithFormat:@"Controller %i",++count]]; + [deviceList addItemWithTitle:[NSString stringWithFormat:@"Controller %i (%@)",++count, deviceWireless ? @"Wireless" : @"Wired"]]; [deviceArray addObject:item]; } IOObjectRelease(iterator); @@ -542,18 +543,28 @@ - (void)mainViewDidLoad device=NULL; hidQueue=NULL; // Activate callbacks - IOServiceAddMatchingNotification(notifyPort,kIOFirstMatchNotification,IOServiceMatching(kIOUSBDeviceClassName),callbackHandleDevice,self,&onIterator); - callbackHandleDevice(self,onIterator); - IOServiceAddMatchingNotification(notifyPort,kIOTerminatedNotification,IOServiceMatching(kIOUSBDeviceClassName),callbackHandleDevice,self,&offIterator); - while((object=IOIteratorNext(offIterator))!=0) IOObjectRelease(object); + // Wired + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName), callbackHandleDevice, self, &onIteratorWired); + callbackHandleDevice(self, onIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching(kIOUSBDeviceClassName), callbackHandleDevice, self, &offIteratorWired); + while((object = IOIteratorNext(offIteratorWired)) != 0) + IOObjectRelease(object); + // Wireless + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("WirelessHIDDevice"), callbackHandleDevice, self, &onIteratorWireless); + callbackHandleDevice(self, onIteratorWireless); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("WirelessHIDDevice"), callbackHandleDevice, self, &offIteratorWireless); + while((object = IOIteratorNext(offIteratorWireless)) != 0) + IOObjectRelease(object); } // Shut down - (void)dealloc { // Remove notification source - IOObjectRelease(onIterator); - IOObjectRelease(offIterator); + IOObjectRelease(onIteratorWired); + IOObjectRelease(onIteratorWireless); + IOObjectRelease(offIteratorWired); + IOObjectRelease(offIteratorWireless); CFRunLoopRemoveSource(CFRunLoopGetCurrent(),notifySource,kCFRunLoopCommonModes); CFRunLoopSourceInvalidate(notifySource); IONotificationPortDestroy(notifyPort); diff --git a/Wireless360Controller/English.lproj/InfoPlist.strings b/Wireless360Controller/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..414ca3b2f5e172a126dc6cbaee8e9f490a11acf8 GIT binary patch literal 202 zcmW-ZO%B0e6h+V2D#Wl6#Kb_1Oh_OP + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.mice.driver.Wireless360Controller + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + 1.0.0d1 + IOKitPersonalities + + Wireless360Controller + + CFBundleIdentifier + com.mice.driver.Wireless360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Wireless360Controller + IOKitDebug + 65536 + IOProviderClass + WirelessDevice + Wireless360Device + 0 + + + OSBundleLibraries + + com.mice.driver.WirelessGamingReceiver + 1.0.0d1 + com.apple.kernel.libkern + 6.9.9 + com.apple.kernel.mach + 6.9.9 + + + diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp new file mode 100644 index 00000000..28a6de4c --- /dev/null +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -0,0 +1,231 @@ +#include +#include "Wireless360Controller.h" +#include "../WirelessGamingReceiver/WirelessDevice.h" +#include "../360Controller/ControlStruct.h" +#include "../360Controller/xbox360hid.h" + +#define kDriverSettingKey "DeviceData" + +OSDefineMetaClassAndStructors(Wireless360Controller, WirelessHIDDevice) +#define super WirelessHIDDevice + +static inline XBox360_SShort getAbsolute(XBox360_SShort value) +{ + XBox360_SShort reverse; + +#ifdef __LITTLE_ENDIAN__ + reverse=value; +#elif __BIG_ENDIAN__ + reverse=((value&0xFF00)>>8)|((value&0x00FF)<<8); +#else +#error Unknown CPU byte order +#endif + return (reverse<0)?~reverse:reverse; +} + +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; +} + +// Read the settings from the registry +void Wireless360Controller::readSettings(void) +{ + OSDictionary *dataDictionary; + OSBoolean *value; + OSNumber *number; + + dataDictionary=OSDynamicCast(OSDictionary,getProperty(kDriverSettingKey)); + if(dataDictionary==NULL) return; + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertLeftX")); + if(value!=NULL) invertLeftX=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertLeftY")); + if(value!=NULL) invertLeftY=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertRightX")); + if(value!=NULL) invertRightX=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("InvertRightY")); + if(value!=NULL) invertRightY=value->getValue(); + number=OSDynamicCast(OSNumber,dataDictionary->getObject("DeadzoneLeft")); + if(number!=NULL) deadzoneLeft=number->unsigned32BitValue(); + number=OSDynamicCast(OSNumber,dataDictionary->getObject("DeadzoneRight")); + if(number!=NULL) deadzoneRight=number->unsigned32BitValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("RelativeLeft")); + if(value!=NULL) relativeLeft=value->getValue(); + value=OSDynamicCast(OSBoolean,dataDictionary->getObject("RelativeRight")); + if(value!=NULL) relativeRight=value->getValue(); + /* + IOLog("Xbox360ControllerClass preferences loaded:\n invertLeft X: %s, Y: %s\n invertRight X: %s, Y:%s\n deadzone Left: %d, Right: %d\n\n", + invertLeftX?"True":"False",invertLeftY?"True":"False", + invertRightX?"True":"False",invertRightY?"True":"False", + deadzoneLeft,deadzoneRight); + */ +} + +// Adjusts the report for any settings specified by the user +void Wireless360Controller::fiddleReport(unsigned char *data, int length) +{ + XBOX360_IN_REPORT *report = (XBOX360_IN_REPORT*)data; + + 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; + + if (deadzoneLeft != 0) + { + if (relativeLeft) + { + if ((getAbsolute(report->left.x) < deadzoneLeft) && (getAbsolute(report->left.y) < deadzoneLeft)) + { + report->left.x = 0; + report->left.y = 0; + } + } + else + { + if (getAbsolute(report->left.x) < deadzoneLeft) + report->left.x = 0; + if (getAbsolute(report->left.y) < deadzoneLeft) + report->left.y = 0; + } + } + if (deadzoneRight != 0) + { + if (relativeRight) + { + if ((getAbsolute(report->right.x) < deadzoneRight) && (getAbsolute(report->right.y) < deadzoneRight)) + { + report->right.x = 0; + report->right.y = 0; + } + } + else + { + if (getAbsolute(report->right.x) < deadzoneRight) + report->right.x = 0; + if (getAbsolute(report->right.y) < deadzoneRight) + report->right.y = 0; + } + } +} + +void Wireless360Controller::receivedHIDupdate(unsigned char *data, int length) +{ + fiddleReport(data, length); + super::receivedHIDupdate(data, length); +} + +void Wireless360Controller::SetRumbleMotors(unsigned char large, unsigned char small) +{ + char buf[] = {0x00, 0x01, 0x0f, 0xc0, 0x00, large, small, 0x00, 0x00, 0x00, 0x00, 0x00}; + WirelessDevice *device; + + device = OSDynamicCast(WirelessDevice, getProvider()); + if (device != NULL) + device->SendPacket(buf, sizeof(buf)); +} + +IOReturn Wireless360Controller::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) +{ + char data[2]; + + IOLog("setReport(%p, %i, %i)\n", report, reportType, options); + if (report->readBytes(0, data, 2) < 2) + return kIOReturnUnsupported; + + // Rumble + if (data[0] == 0x00) + { + if ((data[1] != report->getLength()) || (data[1] != 0x04)) + return kIOReturnUnsupported; + report->readBytes(2, data, 2); + SetRumbleMotors(data[0], data[1]); + return kIOReturnSuccess; + } + + return super::setReport(report, reportType, options); +} + +IOReturn Wireless360Controller::newReportDescriptor(IOMemoryDescriptor ** descriptor ) const +{ + IOBufferMemoryDescriptor *buffer; + + buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, sizeof(ReportDescriptor)); + if (buffer == NULL) + return kIOReturnNoResources; + buffer->writeBytes(0, ReportDescriptor, sizeof(ReportDescriptor)); + *descriptor = buffer; + return kIOReturnSuccess; +} + +// Called by the userspace IORegistryEntrySetCFProperties function +IOReturn Wireless360Controller::setProperties(OSObject *properties) +{ + OSDictionary *dictionary; + + dictionary=OSDynamicCast(OSDictionary,properties); + if(dictionary!=NULL) { + setProperty(kDriverSettingKey,dictionary); + readSettings(); + return kIOReturnSuccess; + } else return kIOReturnBadArgument; +} + +// Get info + +OSString* Wireless360Controller::newManufacturerString() const +{ + return OSString::withCString("Microsoft"); +} + +OSNumber* Wireless360Controller::newPrimaryUsageNumber() const +{ + // Gamepad + return OSNumber::withNumber(0x05, 8); +} + +OSNumber* Wireless360Controller::newPrimaryUsagePageNumber() const +{ + // Generic Desktop + return OSNumber::withNumber(0x01, 8); +} + +OSNumber* Wireless360Controller::newProductIDNumber() const +{ + return OSNumber::withNumber((unsigned long long)0, 16); +} + +OSString* Wireless360Controller::newProductString() const +{ + return OSString::withCString("Wireless 360 Controller"); +} + +OSString* Wireless360Controller::newSerialNumberString() const +{ + return OSString::withCString("0000"); +} + +OSString* Wireless360Controller::newTransportString() const +{ + return OSString::withCString("Wireless"); +} + +OSNumber* Wireless360Controller::newVendorIDNumber() const +{ + return OSNumber::withNumber((unsigned long long)0, 16); +} + diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h new file mode 100644 index 00000000..0c9b7d7f --- /dev/null +++ b/Wireless360Controller/Wireless360Controller.h @@ -0,0 +1,40 @@ +#ifndef __WIRELESS360CONTROLLER_H__ +#define __WIRELESS360CONTROLLER_H__ + +#include "../WirelessGamingReceiver/WirelessHIDDevice.h" + +class Wireless360Controller : public WirelessHIDDevice +{ + OSDeclareDefaultStructors(Wireless360Controller); +public: + 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; + + IOReturn setProperties(OSObject *properties); + + virtual OSString* newManufacturerString() const; + virtual OSNumber* newPrimaryUsageNumber() const; + virtual OSNumber* newPrimaryUsagePageNumber() const; + virtual OSNumber* newProductIDNumber() const; + virtual OSString* newProductString() const; + virtual OSString* newSerialNumberString() const; + virtual OSString* newTransportString() const; + virtual OSNumber* newVendorIDNumber() const; +protected: + void readSettings(void); + void receivedHIDupdate(unsigned char *data, int length); + + // Settings + bool invertLeftX,invertLeftY; + bool invertRightX,invertRightY; + short deadzoneLeft,deadzoneRight; + bool relativeLeft,relativeRight; +private: + void fiddleReport(unsigned char *data, int length); +}; + +#endif // __WIRELESS360CONTROLLER_H__ diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 new file mode 100644 index 00000000..6f35ba2e --- /dev/null +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 @@ -0,0 +1,1411 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3B18E2550B9272120093FA6E + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3B47D94D0B93B62D00F200B8 + PBXProjectModuleLabel + Wireless360Controller.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B47D94E0B93B62D00F200B8 + PBXProjectModuleLabel + Wireless360Controller.h + _historyCapacity + 0 + bookmark + 3B47D94F0B93B62D00F200B8 + history + + 3B47D9440B93B51F00F200B8 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 81 312 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B18E2560B9272120093FA6E + PBXProjectModuleLabel + Wireless360Controller.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B18E2570B9272120093FA6E + PBXProjectModuleLabel + Wireless360Controller.cpp + _historyCapacity + 0 + bookmark + 3B47D9500B93B62D00F200B8 + history + + 3B2593670B93AE560025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {497, 472}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 113 146 497 513 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 089C166AFE841209C02AAC07 + 247142CAFF3F8F9811CA285C + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 96 437 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 96 437 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 96 437 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3B47D94B0B93B62D00F200B8 + 1CE0B1FE06471DED0097A5F4 + 3B47D94C0B93B62D00F200B8 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj + 3B18E2560B9272120093FA6E + 3B47D94D0B93B62D00F200B8 + 3B18E2510B92720F0093FA6E + + WindowString + 96 437 690 397 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + Wireless360Controller.cpp + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {500, 218}} + RubberWindowFrame + 59 453 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 223}, {500, 236}} + RubberWindowFrame + 59 453 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 459pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3B18E2510B92720F0093FA6E + 3B47D9510B93B62D00F200B8 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 59 453 500 500 0 0 1280 1002 + WindowToolGUID + 3B18E2510B92720F0093FA6E + WindowToolIsVisible + + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..20bc9857 --- /dev/null +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -0,0 +1,161 @@ +// !$*UTF8*$! +{ + 089C1669FE841209C02AAC07 /* Project object */ = { + activeBuildConfigurationName = Release; + activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Debug */; + activeTarget = 32D94FC30562CBF700B6AF17 /* Wireless360Controller */; + addToTargets = ( + 32D94FC30562CBF700B6AF17 /* Wireless360Controller */, + ); + codeSenseManager = 3B18E24C0B92718C0093FA6E /* Code sense */; + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 243, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 194228424; + PBXWorkspaceStateSaveDate = 194228424; + }; + perUserProjectItems = { + 3B18E3AB0B93A6780093FA6E = 3B18E3AB0B93A6780093FA6E /* PBXTextBookmark */; + 3B18E3AC0B93A6780093FA6E = 3B18E3AC0B93A6780093FA6E /* PBXTextBookmark */; + 3B2593670B93AE560025011E = 3B2593670B93AE560025011E /* PBXTextBookmark */; + 3B2593680B93AE560025011E = 3B2593680B93AE560025011E /* PBXTextBookmark */; + 3B47D9440B93B51F00F200B8 /* PBXBookmark */ = 3B47D9440B93B51F00F200B8 /* PBXBookmark */; + 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */ = 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */; + 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */ = 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */; + }; + sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; + userBuildSettings = { + }; + }; + 089C167EFE841241C02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {458, 440}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRect = "{{0, 0}, {458, 440}}"; + sepNavWindowFrame = "{{107, 344}, {497, 569}}"; + }; + }; + 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 574}}"; + sepNavSelRange = "{1285, 0}"; + sepNavVisRect = "{{0, 103}, {1020, 471}}"; + sepNavWindowFrame = "{{129, 347}, {1059, 600}}"; + }; + }; + 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {896, 3248}}"; + sepNavSelRange = "{6196, 0}"; + sepNavVisRect = "{{0, 2445}, {458, 440}}"; + sepNavWindowFrame = "{{113, 90}, {497, 569}}"; + }; + }; + 32D94FC30562CBF700B6AF17 /* Wireless360Controller */ = { + activeExec = 0; + }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {767, 770}}"; + sepNavSelRange = "{1134, 0}"; + sepNavVisRect = "{{0, 0}, {767, 645}}"; + sepNavWindowFrame = "{{351, 182}, {806, 774}}"; + }; + }; + 3B18E24B0B92718C0093FA6E /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3B18E24C0B92718C0093FA6E /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3B18E3AB0B93A6780093FA6E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; + name = "Wireless360Controller.cpp: 4"; + rLen = 0; + rLoc = 185; + rType = 0; + vrLen = 1493; + vrLoc = 0; + }; + 3B18E3AC0B93A6780093FA6E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + name = "Wireless360Controller.h: 5"; + rLen = 0; + rLoc = 130; + rType = 0; + vrLen = 870; + vrLoc = 0; + }; + 3B2593670B93AE560025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; + name = "Wireless360Controller.cpp: 1"; + rLen = 0; + rLoc = 24; + rType = 0; + vrLen = 854; + vrLoc = 0; + }; + 3B2593680B93AE560025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + name = "Wireless360Controller.h: newReportDescriptor"; + rLen = 0; + rLoc = 498; + rType = 0; + vrLen = 969; + vrLoc = 0; + }; + 3B47D9440B93B51F00F200B8 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + }; + 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + name = "Wireless360Controller.h: fiddleReport"; + rLen = 0; + rLoc = 1285; + rType = 0; + vrLen = 1195; + vrLoc = 188; + }; + 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; + name = "Wireless360Controller.cpp: 189"; + rLen = 0; + rLoc = 6196; + rType = 0; + vrLen = 855; + vrLoc = 5779; + }; +} diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj new file mode 100644 index 00000000..220c6b52 --- /dev/null +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -0,0 +1,278 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 32D94FC60562CBF700B6AF17 /* Wireless360Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; }; + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 32D94FCA0562CBF700B6AF17 /* Wireless360Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; settings = {ATTRIBUTES = (); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildStyle section */ + 06AA1265FFB2107B11CA28AA /* Debug */ = { + isa = PBXBuildStyle; + buildSettings = { + }; + name = Debug; + }; + 06AA1266FFB2107B11CA28AA /* Release */ = { + isa = PBXBuildStyle; + buildSettings = { + }; + name = Release; + }; +/* End PBXBuildStyle section */ + +/* Begin PBXFileReference section */ + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wireless360Controller.h; sourceTree = ""; }; + 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Wireless360Controller.cpp; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FD00562CBF700B6AF17 /* Wireless360Controller.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wireless360Controller.kext; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 32D94FCB0562CBF700B6AF17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Wireless360Controller */ = { + isa = PBXGroup; + children = ( + 247142CAFF3F8F9811CA285C /* Source */, + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */, + 089C167CFE841241C02AAC07 /* Resources */, + 19C28FB6FE9D52B211CA2CBB /* Products */, + ); + name = Wireless360Controller; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 32D94FCF0562CBF700B6AF17 /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 19C28FB6FE9D52B211CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 32D94FD00562CBF700B6AF17 /* Wireless360Controller.kext */, + ); + name = Products; + sourceTree = ""; + }; + 247142CAFF3F8F9811CA285C /* Source */ = { + isa = PBXGroup; + children = ( + 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */, + 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */, + ); + name = Source; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 32D94FC50562CBF700B6AF17 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC60562CBF700B6AF17 /* Wireless360Controller.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 32D94FC30562CBF700B6AF17 /* Wireless360Controller */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "Wireless360Controller" */; + buildPhases = ( + 32D94FC50562CBF700B6AF17 /* Headers */, + 32D94FC70562CBF700B6AF17 /* Resources */, + 32D94FC90562CBF700B6AF17 /* Sources */, + 32D94FCB0562CBF700B6AF17 /* Frameworks */, + 32D94FCC0562CBF700B6AF17 /* Rez */, + ); + buildRules = ( + ); + buildSettings = { + }; + dependencies = ( + ); + name = Wireless360Controller; + productInstallPath = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + productName = Wireless360Controller; + productReference = 32D94FD00562CBF700B6AF17 /* Wireless360Controller.kext */; + productType = "com.apple.product-type.kernel-extension.iokit"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "Wireless360Controller" */; + buildSettings = { + }; + buildStyles = ( + 06AA1265FFB2107B11CA28AA /* Debug */, + 06AA1266FFB2107B11CA28AA /* Release */, + ); + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Wireless360Controller */; + projectDirPath = ""; + targets = ( + 32D94FC30562CBF700B6AF17 /* Wireless360Controller */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 32D94FC70562CBF700B6AF17 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 32D94FCC0562CBF700B6AF17 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 32D94FC90562CBF700B6AF17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FCA0562CBF700B6AF17 /* Wireless360Controller.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1DEB91DA08733DB10010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.yourcompany.driver.Wireless360Controller; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = Wireless360Controller; + WRAPPER_EXTENSION = kext; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB91DB08733DB10010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.yourcompany.driver.Wireless360Controller; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = Wireless360Controller; + WRAPPER_EXTENSION = kext; + }; + name = Release; + }; + 1DEB91DE08733DB10010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + }; + name = Debug; + }; + 1DEB91DF08733DB10010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "Wireless360Controller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91DA08733DB10010E9CD /* Debug */, + 1DEB91DB08733DB10010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "Wireless360Controller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91DE08733DB10010E9CD /* Debug */, + 1DEB91DF08733DB10010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/Wireless360Controller/version.plist b/Wireless360Controller/version.plist new file mode 100644 index 00000000..53bf3a3f --- /dev/null +++ b/Wireless360Controller/version.plist @@ -0,0 +1,16 @@ + + + + + BuildVersion + 12 + CFBundleVersion + 1.0 + ProductBuildVersion + 7K571 + ProjectName + DevToolsWizardTemplates + SourceVersion + 3870000 + + diff --git a/WirelessGamingReceiver/English.lproj/InfoPlist.strings b/WirelessGamingReceiver/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..414ca3b2f5e172a126dc6cbaee8e9f490a11acf8 GIT binary patch literal 202 zcmW-ZO%B0e6h+V2D#Wl6#Kb_1Oh_OP + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleName + ${PRODUCT_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + KEXT + CFBundleSignature + ???? + CFBundleVersion + 1.0.0d1 + OSBundleCompatibleVersion + 1.0.0d1 + IOKitPersonalities + + WirelessGamingReceiverForWindows + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1817 + idVendor + 1118 + + + OSBundleLibraries + + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.iokit.IOUSBFamily + 1.8 + com.apple.kernel.libkern + 6.9.9 + com.apple.kernel.mach + 6.9.9 + + + diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp new file mode 100644 index 00000000..a9a83455 --- /dev/null +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -0,0 +1,62 @@ +#include "WirelessDevice.h" +#include "WirelessGamingReceiver.h" + +OSDefineMetaClassAndStructors(WirelessDevice, IOService) +#define super IOService + +bool WirelessDevice::init(OSDictionary *dictionary) +{ + if (!super::init(dictionary)) + return false; + index = -1; + function = NULL; + return true; +} + +bool WirelessDevice::IsDataAvailable(void) +{ + if (index == -1) + return false; + WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); + if (receiver == NULL) + return false; + return receiver->IsDataQueued(index); +} + +IOMemoryDescriptor* WirelessDevice::NextPacket(void) +{ + if (index == -1) + return NULL; + WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); + if (receiver == NULL) + return false; + return receiver->ReadBuffer(index); +} + +void WirelessDevice::SendPacket(const void *data, size_t length) +{ + if (index == -1) + return; + WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); + if (receiver == NULL) + return; + receiver->QueueWrite(index, data, length); +} + +void WirelessDevice::RegisterWatcher(void *target, WirelessDeviceWatcher function, void *parameter) +{ + this->target = target; + this->parameter = parameter; + this->function = function; +} + +void WirelessDevice::SetIndex(int i) +{ + index = i; +} + +void WirelessDevice::NewData(void) +{ + if (function != NULL) + function(target, this, parameter); +} diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h new file mode 100644 index 00000000..c4b79c3c --- /dev/null +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -0,0 +1,34 @@ +#ifndef __WIRELESSDEVICE_H__ +#define __WIRELESSDEVICE_H__ + +#include + +class WirelessDevice; + +typedef void (*WirelessDeviceWatcher)(void *target, WirelessDevice *sender, void *parameter); + +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); +private: + friend class WirelessGamingReceiver; + void SetIndex(int i); + void NewData(void); +private: + int index; + // callback + void *target, *parameter; + WirelessDeviceWatcher function; +}; + +#endif // __WIRELESSDEVICE_H__ diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp new file mode 100644 index 00000000..3a49846d --- /dev/null +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -0,0 +1,458 @@ +#include "WirelessGamingReceiver.h" +#include "WirelessDevice.h" +#include "devices.h" + +OSDefineMetaClassAndStructors(WirelessGamingReceiver, IOService) + +typedef struct +{ + int index; + IOBufferMemoryDescriptor *buffer; +} +WGRREAD; + +static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) +{ + const IOUSBEndpointDescriptor *ed; + + ed=pipe->GetEndpointDescriptor(); + if(ed==NULL) return 0; + else return ed->wMaxPacketSize; +} + +bool WirelessGamingReceiver::start(IOService *provider) +{ + const IOUSBConfigurationDescriptor *cd; + IOUSBFindInterfaceRequest interfaceRequest; + IOUSBFindEndpointRequest pipeRequest; + IOUSBInterface *interface; + int iConnection, iOther, i; + + if (!IOService::start(provider)) + { +// IOLog("start - superclass failed\n"); + return false; + } + + device = OSDynamicCast(IOUSBDevice, provider); + if (device == NULL) + { +// IOLog("start - invalid provider\n"); + goto fail; + } + + // Check for configurations + if (device->GetNumConfigurations() < 1) + { + device = NULL; +// IOLog("start - device has no configurations!\n"); + goto fail; + } + + // Set configuration + cd = device->GetFullConfigurationDescriptor(0); + if (cd == NULL) + { + device = NULL; +// IOLog("start - couldn't get configuration descriptor\n"); + goto fail; + } + + if (!device->open(this)) + { + device = NULL; +// IOLog("start - failed to open device\n"); + goto fail; + } + if (device->SetConfiguration(this, cd->bConfigurationValue, true) != kIOReturnSuccess) + { +// IOLog("start - unable to set configuration\n"); + goto fail; + } + + for (i = 0; i < WIRELESS_CONNECTIONS; i++) + { + connections[i].controller = NULL; + connections[i].controllerIn = NULL; + connections[i].controllerOut = NULL; + connections[i].other = NULL; + connections[i].otherIn = NULL; + connections[i].otherOut = NULL; + connections[i].inputArray = NULL; + connections[i].service = NULL; + } + + pipeRequest.interval = 0; + pipeRequest.maxPacketSize = 0; + pipeRequest.type = kUSBInterrupt; + interfaceRequest.bInterfaceClass = kIOUSBFindInterfaceDontCare; + interfaceRequest.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; + interfaceRequest.bInterfaceProtocol = kIOUSBFindInterfaceDontCare; + interfaceRequest.bAlternateSetting = 0; + interface = NULL; + iConnection = 0; + iOther = 0; + while ((interface = device->FindNextInterface(interface, &interfaceRequest)) != NULL) + { + switch(interface->GetInterfaceProtocol()) + { + case 129: // Controller + if (!interface->open(this)) + { +// IOLog("start: Failed to open control interface\n"); + goto fail; + } + connections[iConnection].controller = interface; + pipeRequest.direction = kUSBIn; + connections[iConnection].controllerIn = interface->FindNextPipe(NULL, &pipeRequest); + if (connections[iConnection].controllerIn == NULL) + { +// IOLog("start: Failed to open control input pipe\n"); + goto fail; + } + else + connections[iConnection].controllerIn->retain(); + pipeRequest.direction = kUSBOut; + connections[iConnection].controllerOut = interface->FindNextPipe(NULL, &pipeRequest); + if (connections[iConnection].controllerOut == NULL) + { +// IOLog("start: Failed to open control output pipe\n"); + goto fail; + } + else + connections[iConnection].controllerOut->retain(); + iConnection++; + break; + case 130: // It is a mystery + if (!interface->open(this)) + { +// IOLog("start: Failed to open mystery interface\n"); + goto fail; + } + connections[iOther].other = interface; + pipeRequest.direction = kUSBIn; + connections[iOther].otherIn = interface->FindNextPipe(NULL, &pipeRequest); + if (connections[iOther].otherIn == NULL) + { +// IOLog("start: Failed to open mystery input pipe\n"); + goto fail; + } + else + connections[iOther].otherIn->retain(); + pipeRequest.direction = kUSBOut; + connections[iOther].otherOut = interface->FindNextPipe(NULL, &pipeRequest); + if (connections[iOther].otherOut == NULL) + { +// IOLog("start: Failed to open mystery output pipe\n"); + goto fail; + } + else + 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); + if (connections[i].inputArray == NULL) + { +// IOLog("start: Failed to allocate packet buffer %d\n", i); + goto fail; + } + if (!QueueRead(i)) + { +// IOLog("start: Failed to start read %d\n", i); + goto fail; + } + } + +// IOLog("start: Transform and roll out (%d interfaces)\n", connectionCount); + return true; + +fail: + ReleaseAll(); + return false; +} + +void WirelessGamingReceiver::stop(IOService *provider) +{ + ReleaseAll(); + IOService::stop(provider); +} + +bool WirelessGamingReceiver::QueueRead(int index) +{ + IOUSBCompletion complete; + IOReturn err; + WGRREAD *data; + + data = (WGRREAD*)IOMalloc(sizeof(WGRREAD)); + if (data == NULL) + return false; + data->index = index; + data->buffer = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, GetMaxPacketSize(connections[index].controllerIn)); + if (data->buffer == NULL) + { + IOFree(data, sizeof(WGRREAD)); + return false; + } + + 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; +} + +void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +{ + WGRREAD *data = (WGRREAD*)parameter; + bool reread = true; + + switch (status) + { + case kIOReturnOverrun: +// IOLog("read - kIOReturnOverrun, clearing stall\n"); + connections[data->index].controllerIn->ClearStall(); + // fall through + case kIOReturnSuccess: + ProcessMessage(data->index, (unsigned char*)data->buffer->getBytesNoCopy(), data->buffer->getLength() - bufferSizeRemaining); + break; + case kIOReturnNotResponding: +// IOLog("read - kIOReturnNotResponding\n"); + // fall through + default: + reread = false; + break; + } + + int newIndex = data->index; + data->buffer->release(); + IOFree(data, sizeof(WGRREAD)); + + if (reread) + QueueRead(newIndex); +} + +bool WirelessGamingReceiver::QueueWrite(int index, 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"); + 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; + else + { +// IOLog("send - failed to start (0x%.8x)\n",err); + return false; + } +} + +void WirelessGamingReceiver::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +{ + IOMemoryDescriptor *memory=(IOMemoryDescriptor*)parameter; + if(status!=kIOReturnSuccess) { + IOLog("write - Error writing: 0x%.8x\n",status); + } + memory->release(); +} + +void WirelessGamingReceiver::ReleaseAll(void) +{ + int i; + + for (i = 0; i < connectionCount; i++) + { + if (connections[i].service != NULL) + { + connections[i].service->terminate(kIOServiceRequired); + connections[i].service->detachAll(gIOServicePlane); + connections[i].service->release(); + connections[i].service = NULL; + } + if (connections[i].controllerIn != NULL) + { + connections[i].controllerIn->Abort(); + connections[i].controllerIn->release(); + connections[i].controllerIn = NULL; + } + if (connections[i].controllerOut != NULL) + { + connections[i].controllerOut->Abort(); + connections[i].controllerOut->release(); + connections[i].controllerOut = NULL; + } + if (connections[i].controller != NULL) + { + connections[i].controller->close(this); + connections[i].controller = NULL; + } + if (connections[i].otherIn != NULL) + { + connections[i].otherIn->Abort(); + connections[i].otherIn->release(); + connections[i].otherIn = NULL; + } + if (connections[i].otherOut != NULL) + { + connections[i].otherOut->Abort(); + connections[i].otherOut->release(); + connections[i].otherOut = NULL; + } + if (connections[i].other != NULL) + { + connections[i].other->close(this); + connections[i].other = NULL; + } + if (connections[i].inputArray != NULL) + { + connections[i].inputArray->release(); + connections[i].inputArray = NULL; + } + } + if (device != NULL) + { + device->close(this); + device = NULL; + } +} + +void WirelessGamingReceiver::_ReadComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +{ + if (target != NULL) + ((WirelessGamingReceiver*)target)->ReadComplete(parameter, status, bufferSizeRemaining); +} + +void WirelessGamingReceiver::_WriteComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +{ + if (target != NULL) + ((WirelessGamingReceiver*)target)->WriteComplete(parameter, status, bufferSizeRemaining); +} + +void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data, int length) +{ +/* + char s[1024]; + int i; + + for (i = 0; i < length; i++) + { + s[(i * 2) + 0] = "0123456789ABCDEF"[(data[i] & 0xF0) >> 4]; + s[(i * 2) + 1] = "0123456789ABCDEF"[data[i] & 0x0F]; + } + s[i * 2] = '\0'; + IOLog("Got data (%d, %d bytes): %s\n", index, length, s); +*/ + // Handle device connections + if ((length == 2) && (data[0] == 0x08)) + { + if (data[1] == 0x00) + { + // Device disconnected +// IOLog("process: Device detached\n"); + if (connections[index].service != NULL) + { + connections[index].service->SetIndex(-1); + connections[index].service->terminate(kIOServiceRequired); + connections[index].service->detachAll(gIOServicePlane); + connections[index].service->release(); + connections[index].service = NULL; + } + } + else + { + // Device connected +// IOLog("process: Attempting to add new device\n"); + if (connections[index].service == NULL) + InstantiateService(index); + } + return; + } + + // Add anything else to the queue + IOMemoryDescriptor *copy = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, length); + copy->writeBytes(0, data, length); + connections[index].inputArray->setObject(copy); + copy->release(); + if (connections[index].service == NULL) + InstantiateService(index); + if (connections[index].service != NULL) + connections[index].service->NewData(); +} + +void WirelessGamingReceiver::InstantiateService(int index) +{ + connections[index].service = new WirelessDevice; + if (connections[index].service != NULL) + { + const OSString *keys[1] = { + OSString::withCString(kIOWirelessDeviceType), + }; + const OSObject *objects[1] = { + OSNumber::withNumber((unsigned long long)0, 32), + }; + OSDictionary *dictionary = OSDictionary::withObjects(objects, keys, 1, 0); + if (connections[index].service->init(dictionary)) + { + connections[index].service->attach(this); + connections[index].service->SetIndex(index); + connections[index].service->registerService(); +// IOLog("process: Device attached\n"); + if (IsDataQueued(index)) + connections[index].service->NewData(); + } + else + { + connections[index].service->free(); + connections[index].service = NULL; +// IOLog("process: Device attach failure\n"); + } + } +} + +bool WirelessGamingReceiver::IsDataQueued(int index) +{ + return connections[index].inputArray->getCount() > 0; +} + +IOMemoryDescriptor* WirelessGamingReceiver::ReadBuffer(int index) +{ + IOMemoryDescriptor *data; + + data = OSDynamicCast(IOMemoryDescriptor, connections[index].inputArray->getObject(0)); + if (data != NULL) + data->retain(); + connections[index].inputArray->removeObject(0); + return data; +} diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h new file mode 100644 index 00000000..d8bf3dfc --- /dev/null +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -0,0 +1,56 @@ +#ifndef __WIRELESSGAMINGRECEIVER_H__ +#define __WIRELESSGAMINGRECEIVER_H__ + +#include +#include + +#define WIRELESS_CONNECTIONS 4 + +class WirelessDevice; + +typedef struct +{ + // Controller + IOUSBInterface *controller; + IOUSBPipe *controllerIn, *controllerOut; + // Mystery + IOUSBInterface *other; + IOUSBPipe *otherIn, *otherOut; + // Runtime data + OSArray *inputArray; + WirelessDevice *service; +} +WIRELESS_CONNECTION; + +class WirelessGamingReceiver : public IOService +{ + OSDeclareDefaultStructors(WirelessGamingReceiver); +public: + bool start(IOService *provider); + void stop(IOService *provider); +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); + + static void _ReadComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining); + static void _WriteComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining); +}; + +#endif // __WIRELESSGAMINGRECEIVER_H__ diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 new file mode 100644 index 00000000..abe3f9f3 --- /dev/null +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 @@ -0,0 +1,1613 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3B21EBD60B8CEAED00B5CACA + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3B21ED730B8E693700B5CACA + PBXProjectModuleLabel + WirelessGamingReceiver.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B21ED740B8E693700B5CACA + PBXProjectModuleLabel + WirelessGamingReceiver.cpp + _historyCapacity + 0 + bookmark + 3B47D9100B93B0C200F200B8 + history + + 3B2593600B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 15 453 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B21EBD70B8CEAED00B5CACA + PBXProjectModuleLabel + WirelessGamingReceiver.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B21EBD80B8CEAED00B5CACA + PBXProjectModuleLabel + WirelessGamingReceiver.h + _historyCapacity + 0 + bookmark + 3B47D9110B93B0C200F200B8 + history + + 3B25935F0B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {688, 361}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 89 158 688 402 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BE667290B910BCD009679FC + PBXProjectModuleLabel + WirelessHIDDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE6672A0B910BCD009679FC + PBXProjectModuleLabel + WirelessHIDDevice.h + _historyCapacity + 0 + bookmark + 3B47D9120B93B0C200F200B8 + history + + 3B2593610B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 155 150 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BE667250B910BCD009679FC + PBXProjectModuleLabel + WirelessHIDDevice.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE667260B910BCD009679FC + PBXProjectModuleLabel + WirelessHIDDevice.cpp + _historyCapacity + 0 + bookmark + 3B47D9130B93B0C200F200B8 + history + + 3B2593620B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 32 458 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B21ED760B8E693700B5CACA + PBXProjectModuleLabel + WirelessDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B21ED770B8E693700B5CACA + PBXProjectModuleLabel + WirelessDevice.h + _historyCapacity + 0 + bookmark + 3B47D9140B93B0C200F200B8 + history + + 3B2593630B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 175 169 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B18E2B50B9277EC0093FA6E + PBXProjectModuleLabel + Info.plist + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B18E2B60B9277EC0093FA6E + PBXProjectModuleLabel + Info.plist + _historyCapacity + 0 + bookmark + 3B47D9150B93B0C200F200B8 + history + + 3B2593640B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 45 114 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BE6677F0B91DC99009679FC + PBXProjectModuleLabel + devices.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE667800B91DC99009679FC + PBXProjectModuleLabel + devices.h + _historyCapacity + 0 + bookmark + 3B47D9160B93B0C200F200B8 + history + + 3B2593650B93AE550025011E + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 61 411 1059 544 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + BecomeActive + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 089C166AFE841209C02AAC07 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 42 150 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 42 150 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 42 150 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3B47D90E0B93B0C200F200B8 + 1CE0B1FE06471DED0097A5F4 + 3B47D90F0B93B0C200F200B8 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3B21ED2D0B8E33A000B5CACA + 3BE6677F0B91DC99009679FC + 3B18E2B50B9277EC0093FA6E + 3B21ED760B8E693700B5CACA + 3BE667250B910BCD009679FC + 3BE667290B910BCD009679FC + 3B21EBD70B8CEAED00B5CACA + 3B21ED730B8E693700B5CACA + /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj + + WindowString + 42 150 690 397 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {668, 312}} + RubberWindowFrame + 36 380 668 594 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 312pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 317}, {668, 236}} + RubberWindowFrame + 36 380 668 594 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 553pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3B21ED2D0B8E33A000B5CACA + 3B47D9170B93B0C200F200B8 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 36 380 668 594 0 0 1280 1002 + WindowToolGUID + 3B21ED2D0B8E33A000B5CACA + WindowToolIsVisible + + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..93a64168 --- /dev/null +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -0,0 +1,313 @@ +// !$*UTF8*$! +{ + 089C1669FE841209C02AAC07 /* Project object */ = { + activeBuildConfigurationName = Release; + activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Debug */; + activeTarget = 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */; + addToTargets = ( + 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, + ); + breakpoints = ( + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */, + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */, + ); + breakpointsGroup = 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */; + codeSenseManager = 3B21EBDB0B8CEAED00B5CACA /* Code sense */; + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 243, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 194228212; + PBXWorkspaceStateSaveDate = 194228212; + }; + perUserProjectItems = { + 3B25935F0B93AE550025011E /* PBXTextBookmark */ = 3B25935F0B93AE550025011E /* PBXTextBookmark */; + 3B2593600B93AE550025011E /* PBXTextBookmark */ = 3B2593600B93AE550025011E /* PBXTextBookmark */; + 3B2593610B93AE550025011E /* PBXTextBookmark */ = 3B2593610B93AE550025011E /* PBXTextBookmark */; + 3B2593620B93AE550025011E /* PBXTextBookmark */ = 3B2593620B93AE550025011E /* PBXTextBookmark */; + 3B2593630B93AE550025011E /* PBXTextBookmark */ = 3B2593630B93AE550025011E /* PBXTextBookmark */; + 3B2593640B93AE550025011E /* PBXTextBookmark */ = 3B2593640B93AE550025011E /* PBXTextBookmark */; + 3B2593650B93AE550025011E /* PBXTextBookmark */ = 3B2593650B93AE550025011E /* PBXTextBookmark */; + 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */; + 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */; + }; + sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; + userBuildSettings = { + }; + }; + 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {662, 798}}"; + sepNavSelRange = "{110, 0}"; + sepNavVisRect = "{{0, 461}, {649, 329}}"; + sepNavWindowFrame = "{{89, 102}, {688, 458}}"; + }; + }; + 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 6426}}"; + sepNavSelRange = "{13899, 0}"; + sepNavVisRect = "{{0, 3947}, {1020, 471}}"; + sepNavWindowFrame = "{{15, 397}, {1059, 600}}"; + }; + }; + 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */ = { + activeExec = 0; + }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 784}}"; + sepNavSelRange = "{793, 0}"; + sepNavVisRect = "{{0, 168}, {1020, 471}}"; + sepNavWindowFrame = "{{45, 58}, {1059, 600}}"; + }; + }; + 3B21EBDA0B8CEAED00B5CACA /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3B21EBDB0B8CEAED00B5CACA /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 490}}"; + sepNavSelRange = "{440, 0}"; + sepNavVisRect = "{{0, 0}, {1020, 471}}"; + sepNavWindowFrame = "{{175, 113}, {1059, 600}}"; + }; + }; + 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 882}}"; + sepNavSelRange = "{65, 81}"; + sepNavVisRect = "{{0, 57}, {1020, 471}}"; + sepNavWindowFrame = "{{636, 153}, {1059, 600}}"; + }; + }; + 3B25935F0B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; + name = "WirelessGamingReceiver.h: 5"; + rLen = 0; + rLoc = 110; + rType = 0; + vrLen = 498; + vrLoc = 0; + }; + 3B2593600B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */; + name = "WirelessGamingReceiver.cpp: 417"; + rLen = 0; + rLoc = 12990; + rType = 0; + vrLen = 803; + vrLoc = 0; + }; + 3B2593610B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + name = "WirelessHIDDevice.h: 23"; + rLen = 0; + rLoc = 741; + rType = 0; + vrLen = 906; + vrLoc = 0; + }; + 3B2593620B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; + name = "WirelessHIDDevice.cpp: 144"; + rLen = 0; + rLoc = 3629; + rType = 0; + vrLen = 946; + vrLoc = 3022; + }; + 3B2593630B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; + name = "WirelessDevice.h: NextPacket"; + rLen = 0; + rLoc = 440; + rType = 0; + vrLen = 846; + vrLoc = 0; + }; + 3B2593640B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + name = "Info.plist: 24"; + rLen = 0; + rLoc = 793; + rType = 0; + vrLen = 1104; + vrLoc = 419; + }; + 3B2593650B93AE550025011E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE6677A0B91DC55009679FC /* devices.h */; + name = Wireless360Device; + rLen = 17; + rLoc = 78; + rType = 0; + vrLen = 168; + vrLoc = 0; + }; + 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */; + name = "WirelessGamingReceiver.cpp: 439"; + rLen = 0; + rLoc = 13899; + rType = 0; + vrLen = 1178; + vrLoc = 8649; + }; + 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; + name = "WirelessGamingReceiver.h: 5"; + rLen = 0; + rLoc = 110; + rType = 0; + vrLen = 897; + vrLoc = 726; + }; + 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + name = "WirelessHIDDevice.h: 23"; + rLen = 0; + rLoc = 741; + rType = 0; + vrLen = 906; + vrLoc = 0; + }; + 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; + name = "WirelessHIDDevice.cpp: 144"; + rLen = 0; + rLoc = 3629; + rType = 0; + vrLen = 946; + vrLoc = 3022; + }; + 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; + name = "WirelessDevice.h: NextPacket"; + rLen = 0; + rLoc = 440; + rType = 0; + vrLen = 846; + vrLoc = 0; + }; + 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + name = "Info.plist: 24"; + rLen = 0; + rLoc = 793; + rType = 0; + vrLen = 1104; + vrLoc = 419; + }; + 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE6677A0B91DC55009679FC /* devices.h */; + name = Wireless360Device; + rLen = 17; + rLoc = 78; + rType = 0; + vrLen = 168; + vrLoc = 0; + }; + 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */ = { + isa = XCBreakpointsBucket; + name = "Project Breakpoints"; + objects = ( + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */, + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */, + ); + }; + 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 471}}"; + sepNavSelRange = "{741, 0}"; + sepNavVisRect = "{{0, 0}, {1020, 471}}"; + sepNavWindowFrame = "{{155, 94}, {1059, 600}}"; + }; + }; + 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 2170}}"; + sepNavSelRange = "{3629, 0}"; + sepNavVisRect = "{{0, 1685}, {1020, 471}}"; + sepNavWindowFrame = "{{32, 402}, {1059, 600}}"; + }; + }; + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + continueAfterActions = 0; + delayBeforeContinue = 0; + fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + hitCount = 0; + lineNumber = 7; + modificationTime = 194059839.645874; + state = 2; + }; + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + continueAfterActions = 0; + delayBeforeContinue = 0; + fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + hitCount = 0; + lineNumber = 29; + modificationTime = 194059838.6863289; + state = 2; + }; + 3BE6677A0B91DC55009679FC /* devices.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1020, 471}}"; + sepNavSelRange = "{78, 17}"; + sepNavVisRect = "{{0, 0}, {1020, 471}}"; + sepNavWindowFrame = "{{61, 355}, {1059, 600}}"; + }; + }; +} diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj new file mode 100644 index 00000000..b4ce9767 --- /dev/null +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -0,0 +1,299 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 32D94FC60562CBF700B6AF17 /* WirelessGamingReceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; }; + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 32D94FCA0562CBF700B6AF17 /* WirelessGamingReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */; settings = {ATTRIBUTES = (); }; }; + 3B21ED670B8E688A00B5CACA /* WirelessDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; }; + 3B21ED6C0B8E690F00B5CACA /* WirelessDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */; }; + 3BE667180B9109C5009679FC /* WirelessHIDDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; }; + 3BE6671C0B910A02009679FC /* WirelessHIDDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; }; + 3BE6677B0B91DC55009679FC /* devices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BE6677A0B91DC55009679FC /* devices.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildStyle section */ + 06AA1265FFB2107B11CA28AA /* Debug */ = { + isa = PBXBuildStyle; + buildSettings = { + }; + name = Debug; + }; + 06AA1266FFB2107B11CA28AA /* Release */ = { + isa = PBXBuildStyle; + buildSettings = { + }; + name = Release; + }; +/* End PBXBuildStyle section */ + +/* Begin PBXFileReference section */ + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessGamingReceiver.h; sourceTree = ""; }; + 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WirelessGamingReceiver.cpp; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FD00562CBF700B6AF17 /* WirelessGamingReceiver.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WirelessGamingReceiver.kext; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessDevice.h; sourceTree = ""; }; + 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WirelessDevice.cpp; sourceTree = ""; }; + 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessHIDDevice.h; sourceTree = ""; }; + 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WirelessHIDDevice.cpp; sourceTree = ""; }; + 3BE6677A0B91DC55009679FC /* devices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = devices.h; sourceTree = ""; }; + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 32D94FCB0562CBF700B6AF17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* WirelessGamingReceiver */ = { + isa = PBXGroup; + children = ( + 247142CAFF3F8F9811CA285C /* Source */, + 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */, + 089C167CFE841241C02AAC07 /* Resources */, + 19C28FB6FE9D52B211CA2CBB /* Products */, + ); + name = WirelessGamingReceiver; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 32D94FCF0562CBF700B6AF17 /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 19C28FB6FE9D52B211CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 32D94FD00562CBF700B6AF17 /* WirelessGamingReceiver.kext */, + ); + name = Products; + sourceTree = ""; + }; + 247142CAFF3F8F9811CA285C /* Source */ = { + isa = PBXGroup; + children = ( + 3BE6677A0B91DC55009679FC /* devices.h */, + 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */, + 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */, + 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */, + 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */, + 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */, + 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */, + ); + name = Source; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 32D94FC50562CBF700B6AF17 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC60562CBF700B6AF17 /* WirelessGamingReceiver.h in Headers */, + 3B21ED670B8E688A00B5CACA /* WirelessDevice.h in Headers */, + 3BE667180B9109C5009679FC /* WirelessHIDDevice.h in Headers */, + 3BE6677B0B91DC55009679FC /* devices.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "WirelessGamingReceiver" */; + buildPhases = ( + 32D94FC50562CBF700B6AF17 /* Headers */, + 32D94FC70562CBF700B6AF17 /* Resources */, + 32D94FC90562CBF700B6AF17 /* Sources */, + 32D94FCB0562CBF700B6AF17 /* Frameworks */, + 32D94FCC0562CBF700B6AF17 /* Rez */, + ); + buildRules = ( + ); + buildSettings = { + }; + dependencies = ( + ); + name = WirelessGamingReceiver; + productInstallPath = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + productName = WirelessGamingReceiver; + productReference = 32D94FD00562CBF700B6AF17 /* WirelessGamingReceiver.kext */; + productType = "com.apple.product-type.kernel-extension.iokit"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "WirelessGamingReceiver" */; + buildSettings = { + }; + buildStyles = ( + 06AA1265FFB2107B11CA28AA /* Debug */, + 06AA1266FFB2107B11CA28AA /* Release */, + ); + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* WirelessGamingReceiver */; + projectDirPath = ""; + targets = ( + 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 32D94FC70562CBF700B6AF17 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 32D94FCC0562CBF700B6AF17 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 32D94FC90562CBF700B6AF17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D94FCA0562CBF700B6AF17 /* WirelessGamingReceiver.cpp in Sources */, + 3B21ED6C0B8E690F00B5CACA /* WirelessDevice.cpp in Sources */, + 3BE6671C0B910A02009679FC /* WirelessHIDDevice.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1DEB91DA08733DB10010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.yourcompany.driver.WirelessGamingReceiver; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = WirelessGamingReceiver; + WRAPPER_EXTENSION = kext; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB91DB08733DB10010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + CURRENT_PROJECT_VERSION = 1.0.0d1; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + MODULE_NAME = com.yourcompany.driver.WirelessGamingReceiver; + MODULE_VERSION = 1.0.0d1; + PRODUCT_NAME = WirelessGamingReceiver; + WRAPPER_EXTENSION = kext; + }; + name = Release; + }; + 1DEB91DE08733DB10010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.2; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + }; + name = Debug; + }; + 1DEB91DF08733DB10010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SYMROOT = build; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB91D908733DB10010E9CD /* Build configuration list for PBXNativeTarget "WirelessGamingReceiver" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91DA08733DB10010E9CD /* Debug */, + 1DEB91DB08733DB10010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "WirelessGamingReceiver" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91DE08733DB10010E9CD /* Debug */, + 1DEB91DF08733DB10010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp new file mode 100644 index 00000000..f31f73c1 --- /dev/null +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -0,0 +1,154 @@ +#include +#include "WirelessHIDDevice.h" +#include "WirelessDevice.h" +#include "devices.h" + +OSDefineMetaClassAndAbstractStructors(WirelessHIDDevice, IOHIDDevice) +#define super IOHIDDevice + +const char weirdStart[] = {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +void WirelessHIDDevice::SetLEDs(int mode) +{ + char buf[] = {0x00, 0x00, 0x08, 0x40 + (mode % 0x0e), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + WirelessDevice *device; + + device = OSDynamicCast(WirelessDevice, getProvider()); + if (device != NULL) + { + device->SendPacket(buf, sizeof(buf)); + device->SendPacket(weirdStart, sizeof(weirdStart)); + } +} + +unsigned char WirelessHIDDevice::GetBatteryLevel(void) +{ + return battery; +} + +IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) +{ + char data[2]; + + if (report->readBytes(0, data, 2) < 2) + return kIOReturnUnsupported; + + // LED + if (data[0] == 0x01) + { + if ((data[1] != report->getLength()) || (data[1] != 0x03)) + return kIOReturnUnsupported; + report->readBytes(2, data, 1); + SetLEDs(data[0]); + return kIOReturnSuccess; + } + + return super::setReport(report, reportType, options); +} + +bool WirelessHIDDevice::handleStart(IOService *provider) +{ + WirelessDevice *device; + + if (!super::handleStart(provider)) + return false; + + device = OSDynamicCast(WirelessDevice, provider); + if (device == NULL) + return false; + + device->RegisterWatcher(this, _receivedData, NULL); + + device->SendPacket(weirdStart, sizeof(weirdStart)); + + return true; +} + +void WirelessHIDDevice::handleStop(IOService *provider) +{ + WirelessDevice *device; + + device = OSDynamicCast(WirelessDevice, provider); + if (device != NULL) + device->RegisterWatcher(NULL, NULL, NULL); + + super::handleStop(provider); +} + +void WirelessHIDDevice::receivedData(void) +{ + IOMemoryDescriptor *data; + WirelessDevice *device = OSDynamicCast(WirelessDevice, getProvider()); + if (device == NULL) + return; + + while ((data = device->NextPacket()) != NULL) + { + receivedMessage(data); + data->release(); + } +} + +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 + if (buf[16] == 0x13) + receivedUpdate(0x13, buf + 17); + 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; + } +} + +void WirelessHIDDevice::receivedUpdate(unsigned char type, unsigned char *data) +{ + switch (type) + { + case 0x13: // Battery level + battery = data[0]; + { + OSObject *prop = OSNumber::withNumber(battery, 8); + if (prop != NULL) + { + setProperty(kIOWirelessBatteryLevel, prop); + prop->release(); + } + } + break; + default: + break; + } +} + +void WirelessHIDDevice::receivedHIDupdate(unsigned char *data, int length) +{ + IOReturn err; + IOMemoryDescriptor *report; + + report = IOMemoryDescriptor::withAddress(data, length, kIODirectionNone); + err = handleReport(report, kIOHIDReportTypeInput); + report->release(); + if (err != kIOReturnSuccess) + IOLog("handleReport return: 0x%.8x\n", err); +} + +void WirelessHIDDevice::_receivedData(void *target, WirelessDevice *sender, void *parameter) +{ + ((WirelessHIDDevice*)target)->receivedData(); +} diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h new file mode 100644 index 00000000..1b61f93a --- /dev/null +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -0,0 +1,29 @@ +#ifndef __WIRELESSHIDDEVICE_H__ +#define __WIRELESSHIDDEVICE_H__ + +#include + +class WirelessDevice; + +class WirelessHIDDevice : public IOHIDDevice +{ + OSDeclareDefaultStructors(WirelessHIDDevice); +public: + void SetLEDs(int mode); + unsigned char GetBatteryLevel(void); + + IOReturn setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options); +protected: + bool handleStart(IOService *provider); + void handleStop(IOService *provider); + virtual void receivedData(void); + virtual void receivedMessage(IOMemoryDescriptor *data); + virtual void receivedUpdate(unsigned char type, unsigned char *data); + virtual void receivedHIDupdate(unsigned char *data, int length); +private: + static void _receivedData(void *target, WirelessDevice *sender, void *parameter); + + unsigned char battery; +}; + +#endif // __WIRELESSHIDDEVICE_H__ diff --git a/WirelessGamingReceiver/devices.h b/WirelessGamingReceiver/devices.h new file mode 100644 index 00000000..8a25aacb --- /dev/null +++ b/WirelessGamingReceiver/devices.h @@ -0,0 +1,7 @@ +#ifndef __DEVICES_H__ +#define __DEVICES_H__ + +#define kIOWirelessDeviceType "Wireless360Device" +#define kIOWirelessBatteryLevel "BatteryLevel" + +#endif // __DEVICES_H__ \ No newline at end of file diff --git a/WirelessGamingReceiver/version.plist b/WirelessGamingReceiver/version.plist new file mode 100644 index 00000000..53bf3a3f --- /dev/null +++ b/WirelessGamingReceiver/version.plist @@ -0,0 +1,16 @@ + + + + + BuildVersion + 12 + CFBundleVersion + 1.0 + ProductBuildVersion + 7K571 + ProjectName + DevToolsWizardTemplates + SourceVersion + 3870000 + + From 0446f94bdaa7054127645bc2635982193dffbcfa Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 27 Feb 2007 01:34:09 +0000 Subject: [PATCH 03/66] Updates to make installer work for wireless driver, and update readmes. --- .../360Controller.xcodeproj/colin.mode1 | 104 +----- .../360Controller.xcodeproj/colin.pbxuser | 52 +-- .../360Controller.xcodeproj/project.pbxproj | 2 +- Feedback360/Feedback360.xcodeproj/colin.mode1 | 264 +--------------- .../Feedback360.xcodeproj/colin.pbxuser | 159 +--------- .../Install360Controller.packproj | 40 ++- Install360Controller/Text/Welcome.rtf | 26 +- .../Pref360Control.xcodeproj/colin.mode1 | 92 +----- .../Pref360Control.xcodeproj/colin.pbxuser | 50 +-- Readme.rtf | 12 +- .../colin.mode1 | 61 +--- .../colin.pbxuser | 75 +---- .../colin.mode1 | 296 +----------------- .../colin.pbxuser | 164 +--------- 14 files changed, 129 insertions(+), 1268 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 index 80dc0039..b0a1ea99 100644 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -185,88 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B18E3890B93A3CC0093FA6E - PBXProjectModuleLabel - _60Controller.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B18E38A0B93A3CC0093FA6E - PBXProjectModuleLabel - _60Controller.h - _historyCapacity - 0 - bookmark - 3B2593570B93ACEF0025011E - history - - 3B2593210B93A9320025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 389 190 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B2593580B93ACEF0025011E - PBXProjectModuleLabel - _60Controller.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B2593590B93ACEF0025011E - PBXProjectModuleLabel - _60Controller.cpp - _historyCapacity - 0 - bookmark - 3B25935A0B93ACEF0025011E - history - - 3B2593530B93AC600025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 518 115 900 758 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -344,20 +263,20 @@ 3B2EF52A0965A0AE007BFB7B 8DA8362C06AD9B9200E5AC22 1C37FBAC04509CD000000102 + 3B47D9A10B93BC9D00F200B8 1C37FAAC04509CD000000102 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey - 6 - 2 - 1 - 0 + 23 + 17 + 16 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 367}} + {{0, 130}, {186, 367}} PBXTopSmartGroupGIDs @@ -457,9 +376,9 @@ TableOfContents - 3B2593550B93ACEF0025011E + 3B47D9A20B93BC9D00F200B8 1CE0B1FE06471DED0097A5F4 - 3B2593560B93ACEF0025011E + 3B47D9A30B93BC9D00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -593,8 +512,7 @@ 5 WindowOrderList - 3B2593580B93ACEF0025011E - 3B18E3890B93A3CC0093FA6E + 3BCE45C10963706A00B69EDF /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj WindowString @@ -641,7 +559,7 @@ ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 160}, {1024, 54}} + {{0, 130}, {1024, 84}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -679,7 +597,7 @@ TableOfContents 3BCE45C10963706A00B69EDF - 3B18E27F0B92754D0093FA6E + 3B47D9A40B93BC9D00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index 8cc966ec..cdf3b27c 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -86,14 +86,8 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194229520; - PBXWorkspaceStateSaveDate = 194229520; - }; - perUserProjectItems = { - 3B2593210B93A9320025011E = 3B2593210B93A9320025011E /* PBXTextBookmark */; - 3B2593530B93AC600025011E = 3B2593530B93AC600025011E /* PBXBookmark */; - 3B2593570B93ACEF0025011E = 3B2593570B93ACEF0025011E /* PBXTextBookmark */; - 3B25935A0B93ACEF0025011E = 3B25935A0B93ACEF0025011E /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 194231412; + PBXWorkspaceStateSaveDate = 194231412; }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { @@ -110,16 +104,16 @@ 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1330}}"; - sepNavSelRange = "{1062, 0}"; - sepNavVisRect = "{{0, 562}, {861, 685}}"; + sepNavSelRange = "{2975, 413}"; + sepNavVisRect = "{{0, 638}, {861, 685}}"; sepNavWindowFrame = "{{389, 134}, {900, 814}}"; }; }; 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {896, 7210}}"; - sepNavSelRange = "{15952, 405}"; - sepNavVisRect = "{{0, 6525}, {861, 685}}"; + sepNavSelRange = "{14555, 383}"; + sepNavVisRect = "{{0, 6048}, {861, 685}}"; sepNavWindowFrame = "{{518, 59}, {900, 814}}"; }; }; @@ -134,40 +128,6 @@ sepNavWindowFrame = "{{376, 7}, {900, 814}}"; }; }; - 3B2593210B93A9320025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = "_60Controller.h: 27"; - rLen = 0; - rLoc = 1062; - rType = 0; - vrLen = 1680; - vrLoc = 462; - }; - 3B2593530B93AC600025011E /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; - }; - 3B2593570B93ACEF0025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = "_60Controller.h: 27"; - rLen = 0; - rLoc = 1062; - rType = 0; - vrLen = 2048; - vrLoc = 1402; - }; - 3B25935A0B93ACEF0025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; - name = "_60Controller.cpp: 503"; - rLen = 405; - rLoc = 15952; - rType = 0; - vrLen = 1220; - vrLoc = 15137; - }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 8d2bad6a..8145e140 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -224,7 +224,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "cd \"$TARGET_BUILD_DIR/$TARGET_NAME.kext/Contents\"\nmkdir PlugIns > /dev/null 2>&1\nrm -R PlugIns/Feedback360.plugin > /dev/null 2>&1\necho $SRCROOT\ncp -R $SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle PlugIns/Feedback360.plugin\n# Renaming extension from bundle to a plugin? Could be naughty."; + shellScript = "cd \"$TARGET_BUILD_DIR/$TARGET_NAME.kext/Contents\"\nmkdir PlugIns > /dev/null 2>&1\nrm -R PlugIns/Feedback360.plugin > /dev/null 2>&1\necho \"$SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle\"\ncp -R \"$SRCROOT/../Feedback360/build/Deployment/Feedback360.bundle\" PlugIns/Feedback360.plugin\n# Renaming extension from bundle to a plugin? Could be naughty."; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Feedback360/Feedback360.xcodeproj/colin.mode1 b/Feedback360/Feedback360.xcodeproj/colin.mode1 index b688a09e..7c91f84e 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.mode1 +++ b/Feedback360/Feedback360.xcodeproj/colin.mode1 @@ -185,248 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B47D9330B93B50800F200B8 - PBXProjectModuleLabel - main.c - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B47D9340B93B50800F200B8 - PBXProjectModuleLabel - main.c - _historyCapacity - 0 - bookmark - 3B47D95D0B93B63A00F200B8 - history - - 3B47D9350B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 253 152 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBDC6D0097958F10023AAD8 - PBXProjectModuleLabel - devlink.c - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBDC6D1097958F10023AAD8 - PBXProjectModuleLabel - devlink.c - _historyCapacity - 0 - bookmark - 3B47D95E0B93B63A00F200B8 - history - - 3B47D9370B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 253 166 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBDC6DB097958F10023AAD8 - PBXProjectModuleLabel - emulator.c - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBDC6DC097958F10023AAD8 - PBXProjectModuleLabel - emulator.c - _historyCapacity - 0 - bookmark - 3B47D95F0B93B63A00F200B8 - history - - 3B47D9380B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 345 119 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B09261E097D9E4100DE2683 - PBXProjectModuleLabel - IOHIDLib.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B09261F097D9E4100DE2683 - PBXProjectModuleLabel - IOHIDLib.h - _historyCapacity - 0 - bookmark - 3B47D9600B93B63A00F200B8 - history - - 3B47D9390B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 239 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBEAB35096B786400F2E37B - PBXProjectModuleLabel - main.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBEAB36096B786400F2E37B - PBXProjectModuleLabel - main.h - _historyCapacity - 0 - bookmark - 3B47D9620B93B63A00F200B8 - history - - 3B47D93B0B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 7 124 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BBA03BD096A128C008A46C9 - PBXProjectModuleLabel - emulator.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BBA03BE096A128C008A46C9 - PBXProjectModuleLabel - emulator.h - _historyCapacity - 0 - bookmark - 3B47D9630B93B63A00F200B8 - history - - 3B47D93C0B93B50800F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 284 144 900 758 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -533,7 +292,7 @@ 186 RubberWindowFrame - 57 554 690 397 0 0 1280 1002 + 172 539 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -570,7 +329,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 57 554 690 397 0 0 1280 1002 + 172 539 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -592,7 +351,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 57 554 690 397 0 0 1280 1002 + 172 539 690 397 0 0 1280 1002 Module XCDetailModule @@ -616,9 +375,9 @@ TableOfContents - 3B47D95B0B93B63A00F200B8 + 3B47D9950B93BC6F00F200B8 1CE0B1FE06471DED0097A5F4 - 3B47D95C0B93B63A00F200B8 + 3B47D9960B93BC6F00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -752,16 +511,11 @@ 5 WindowOrderList - 3BBA03BD096A128C008A46C9 - 3BBEAB35096B786400F2E37B - 3B09261E097D9E4100DE2683 - 3BBDC6DB097958F10023AAD8 - 3BBDC6D0097958F10023AAD8 - 3B47D9330B93B50800F200B8 + 3B2EF5820965C4A5007BFB7B /Users/colin/Projects2/OSX/360 Controller/Feedback360/Feedback360.xcodeproj WindowString - 57 554 690 397 0 0 1280 1002 + 172 539 690 397 0 0 1280 1002 WindowTools @@ -840,7 +594,7 @@ TableOfContents 3B2EF5820965C4A5007BFB7B - 3B47D93D0B93B50800F200B8 + 3B47D9970B93BC6F00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 38854bbd..0c2b9756 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -33,22 +33,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194229813; - PBXWorkspaceStateSaveDate = 194229813; - }; - perUserProjectItems = { - 3B47D9350B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9350B93B50800F200B8 /* PBXTextBookmark */; - 3B47D9370B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9370B93B50800F200B8 /* PBXTextBookmark */; - 3B47D9380B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9380B93B50800F200B8 /* PBXTextBookmark */; - 3B47D9390B93B50800F200B8 /* PBXTextBookmark */ = 3B47D9390B93B50800F200B8 /* PBXTextBookmark */; - 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */ = 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */; - 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */ = 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */; - 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */; - 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */; - 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */; - 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */; - 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */; - 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */ = 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 194231396; + PBXWorkspaceStateSaveDate = 194231396; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { @@ -90,145 +76,6 @@ sepNavWindowFrame = "{{7, 68}, {900, 814}}"; }; }; - 3B47D9350B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB77B6FE84183AC02AAC07 /* main.c */; - name = "main.c: 76"; - rLen = 0; - rLoc = 2434; - rType = 0; - vrLen = 1290; - vrLoc = 1672; - }; - 3B47D9370B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; - name = Device_Initialise; - rLen = 17; - rLoc = 1001; - rType = 0; - vrLen = 1698; - vrLoc = 454; - }; - 3B47D9380B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; - name = "emulator.c: 30"; - rLen = 0; - rLoc = 1235; - rType = 0; - vrLen = 1924; - vrLoc = 0; - }; - 3B47D9390B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B47D93A0B93B50800F200B8 /* IOHIDLib.h */; - name = "(null): 4"; - rLen = 0; - rLoc = 101; - rType = 0; - vrLen = 2161; - vrLoc = 9198; - }; - 3B47D93A0B93B50800F200B8 /* IOHIDLib.h */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = IOHIDLib.h; - path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/hid/IOHIDLib.h; - sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 7518}}"; - sepNavSelRange = "{101, 0}"; - sepNavVisRect = "{{0, 3038}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; - 3B47D93B0B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; - name = "main.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1781; - vrLoc = 0; - }; - 3B47D93C0B93B50800F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; - name = "emulator.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1403; - vrLoc = 0; - }; - 3B47D95D0B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB77B6FE84183AC02AAC07 /* main.c */; - name = "main.c: 76"; - rLen = 0; - rLoc = 2434; - rType = 0; - vrLen = 1279; - vrLoc = 1683; - }; - 3B47D95E0B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA03E2096A29B5008A46C9 /* devlink.c */; - name = Device_Initialise; - rLen = 17; - rLoc = 1001; - rType = 0; - vrLen = 1738; - vrLoc = 414; - }; - 3B47D95F0B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA037C09697D80008A46C9 /* emulator.c */; - name = "emulator.c: 30"; - rLen = 0; - rLoc = 1235; - rType = 0; - vrLen = 1924; - vrLoc = 0; - }; - 3B47D9600B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B47D9610B93B63A00F200B8 /* IOHIDLib.h */; - name = "(null): 4"; - rLen = 0; - rLoc = 101; - rType = 0; - vrLen = 2161; - vrLoc = 9198; - }; - 3B47D9610B93B63A00F200B8 /* IOHIDLib.h */ = { - isa = PBXFileReference; - name = IOHIDLib.h; - path = /Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/hid/IOHIDLib.h; - sourceTree = ""; - }; - 3B47D9620B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B2EF5440965B3C7007BFB7B /* main.h */; - name = "main.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1781; - vrLoc = 0; - }; - 3B47D9630B93B63A00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BBA037B09697D80008A46C9 /* emulator.h */; - name = "emulator.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1403; - vrLoc = 0; - }; 3BBA037B09697D80008A46C9 /* emulator.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; @@ -257,7 +104,7 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 854}}"; sepNavSelRange = "{1001, 17}"; - sepNavVisRect = "{{0, 162}, {861, 685}}"; + sepNavVisRect = "{{0, 154}, {861, 685}}"; sepNavWindowFrame = "{{253, 110}, {900, 814}}"; }; }; diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 77fffee4..a65ff396 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -141,6 +141,38 @@ UID 0 + + Children + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + GID 80 @@ -278,13 +310,13 @@ IFPkgDescriptionTitle XBox 360 Controller Installer IFPkgDescriptionVersion - 0.03 + 0.04 Display Information CFBundleGetInfoString - Install360Controller 0.03 Copyrights © 2006 Colin Munro + Install360Controller 0.04 Copyrights © 2006-2007 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -294,7 +326,7 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.03 + 0.04 Options @@ -324,7 +356,7 @@ IFMajorVersion 0 IFMinorVersion - 3 + 4 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index d2c5e2f4..01edf9d7 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,26 +1,38 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} -{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} +{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\f1\b0\fs24 Version 0.03\ -Copyright (C) 2005-2006 Colin Munro\ +\f1\b0\fs24 Version 0.04\ +Copyright (C) 2005-2007 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\f0\b Update 0.04: 27/2/2007\ + +\f1\b0 \ +This update includes:\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'a5 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +{\listtext \'a5 }Driver for the above to use the Wireless 360 Controller\ +{\listtext \'a5 }Updates to the Preference Pane to support the Wireless 360 Controller\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 \ + \f0\b Update 0.03: 22/7/2006\ \f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ +\ls2\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ @@ -29,7 +41,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ +\ls3\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ {\listtext \'a5 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'a5 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'a5 }Alternative deadzone mode\ diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 index 4eefd228..74c5340b 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -185,88 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3BCAF9310AC373D4008F5CE4 - PBXProjectModuleLabel - DeviceItem.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BCAF9320AC373D4008F5CE4 - PBXProjectModuleLabel - DeviceItem.m - _historyCapacity - 0 - bookmark - 3B47D97D0B93B67000F200B8 - history - - 3B25936A0B93AE570025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 381 144 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B18E35E0B939D2A0093FA6E - PBXProjectModuleLabel - Pref360ControlPref.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B18E35F0B939D2A0093FA6E - PBXProjectModuleLabel - Pref360ControlPref.h - _historyCapacity - 0 - bookmark - 3B47D97E0B93B67000F200B8 - history - - 3B25936B0B93AE570025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 138 152 900 758 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -454,9 +373,9 @@ TableOfContents - 3B47D9780B93B64A00F200B8 + 3B47D9D40B93BD4D00F200B8 1CE0B1FE06471DED0097A5F4 - 3B47D9790B93B64A00F200B8 + 3B47D9D50B93BD4D00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -590,9 +509,8 @@ 5 WindowOrderList - 3B18E35E0B939D2A0093FA6E + 3BBEAB15096B38D200F2E37B /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj - 3BCAF9310AC373D4008F5CE4 WindowString 511 605 690 397 0 0 1280 1002 @@ -674,7 +592,7 @@ TableOfContents 3BBEAB15096B38D200F2E37B - 3B2593420B93AA0B0025011E + 3B47D9D60B93BD4D00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser index cc916306..648cba8f 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -35,14 +35,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194229824; - PBXWorkspaceStateSaveDate = 194229824; - }; - perUserProjectItems = { - 3B25936A0B93AE570025011E /* PBXTextBookmark */ = 3B25936A0B93AE570025011E /* PBXTextBookmark */; - 3B25936B0B93AE570025011E /* PBXTextBookmark */ = 3B25936B0B93AE570025011E /* PBXTextBookmark */; - 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */ = 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */; - 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */ = 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 194231609; + PBXWorkspaceStateSaveDate = 194231609; }; sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; userBuildSettings = { @@ -64,26 +58,6 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3B25936A0B93AE570025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BC41F31096C85CB00664A42 /* DeviceItem.m */; - name = "DeviceItem.m: 35"; - rLen = 0; - rLoc = 1219; - rType = 0; - vrLen = 1804; - vrLoc = 199; - }; - 3B25936B0B93AE570025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */; - name = "Pref360ControlPref.h: onIteratorWireless"; - rLen = 0; - rLoc = 2619; - rType = 0; - vrLen = 1619; - vrLoc = 1005; - }; 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */ = { isa = PBXFileBreakpoint; actions = ( @@ -97,26 +71,6 @@ modificationTime = 182909504.480911; state = 0; }; - 3B47D97D0B93B67000F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BC41F31096C85CB00664A42 /* DeviceItem.m */; - name = "DeviceItem.m: 35"; - rLen = 0; - rLoc = 1219; - rType = 0; - vrLen = 1803; - vrLoc = 199; - }; - 3B47D97E0B93B67000F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */; - name = "Pref360ControlPref.h: onIteratorWireless"; - rLen = 0; - rLoc = 2619; - rType = 0; - vrLen = 1618; - vrLoc = 1005; - }; 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */ = { isa = XCBreakpointsBucket; name = "Project Breakpoints"; diff --git a/Readme.rtf b/Readme.rtf index 082f863d..4a3940b5 100644 --- a/Readme.rtf +++ b/Readme.rtf @@ -1,4 +1,4 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330 +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} @@ -9,13 +9,13 @@ \f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X \f1\b0\fs24 \ -Copyright (C) 2006 Colin Munro\ +Copyright (C) 2006-2007 Colin Munro\ {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ \ \f0\b About \f1\b0 \ -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.\ +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.\ \ \f0\b Licence @@ -25,7 +25,7 @@ This driver is licensed under the GNU Public License. A copy of this license is \f0\b Installation \f1\b0 \ -Simply complete the installer package to install the driver. The driver will recommend you restart - if you do not, the driver will only be usable if the controller is already connected or connected within a minute after the installer completes. To test, connect the controller before loading the Preference Pane, as the code to detect connection is mysteriously not working. If you are interested in installing in a developer please see below.\ +Simply complete the installer package to install the driver. The driver will recommend you restart - if you do not, the driver will only be usable if the controller is already connected or connected within a minute after the installer completes. If you are interested in installing as a developer please see below.\ \ \f0\b Usage @@ -36,7 +36,8 @@ The driver exposes a standard game pad with a number of standard controls, so an \f0\b Known Problems/Todo \f1\b0 \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'a5 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ +\ls1\ilvl0\cf0 {\listtext \'a5 }The preference pane will turn off the wireless controller LEDs, so you don't know it's on anymore...\ +{\listtext \'a5 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ {\listtext \'a5 }Settings aren't persistent, I don't think (need to be set when the device connects)\ {\listtext \'a5 }Force Feedback plugin may make effects run slower (e.g. longer time) than they should\ {\listtext \'a5 }Driver probably needs to be more resilient to errors and odd cases\ @@ -61,6 +62,7 @@ Anything below this probably doesn't affect end users, so you can stop reading n \f0\b Building \f1\b0 \ +(This section does not yet discuss the source of the wireless drivers)\ 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.\ diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 index 6f35ba2e..10c9d50e 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 @@ -186,46 +186,6 @@ OpenEditors - - Content - - PBXProjectModuleGUID - 3B47D94D0B93B62D00F200B8 - PBXProjectModuleLabel - Wireless360Controller.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B47D94E0B93B62D00F200B8 - PBXProjectModuleLabel - Wireless360Controller.h - _historyCapacity - 0 - bookmark - 3B47D94F0B93B62D00F200B8 - history - - 3B47D9440B93B51F00F200B8 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 81 312 1059 544 0 0 1280 1002 - - Content @@ -244,10 +204,10 @@ _historyCapacity 0 bookmark - 3B47D9500B93B62D00F200B8 + 3B47D9B40B93BD0B00F200B8 history - 3B2593670B93AE560025011E + 3B47D9860B93BBB600F200B8 SplitCount @@ -448,9 +408,9 @@ TableOfContents - 3B47D94B0B93B62D00F200B8 + 3B47D9B20B93BD0B00F200B8 1CE0B1FE06471DED0097A5F4 - 3B47D94C0B93B62D00F200B8 + 3B47D9B30B93BD0B00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -584,10 +544,9 @@ 5 WindowOrderList - /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj - 3B18E2560B9272120093FA6E - 3B47D94D0B93B62D00F200B8 3B18E2510B92720F0093FA6E + 3B18E2560B9272120093FA6E + /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj WindowString 96 437 690 397 0 0 1280 1002 @@ -606,14 +565,12 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - Wireless360Controller.cpp + StatusBarVisibility @@ -669,7 +626,7 @@ TableOfContents 3B18E2510B92720F0093FA6E - 3B47D9510B93B62D00F200B8 + 3B47D9B50B93BD0B00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -680,7 +637,7 @@ WindowToolGUID 3B18E2510B92720F0093FA6E WindowToolIsVisible - + Identifier diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index 20bc9857..ff9e29dd 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -31,17 +31,12 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194228424; - PBXWorkspaceStateSaveDate = 194228424; + PBXPerProjectTemplateStateSaveDate = 194231556; + PBXWorkspaceStateSaveDate = 194231556; }; perUserProjectItems = { - 3B18E3AB0B93A6780093FA6E = 3B18E3AB0B93A6780093FA6E /* PBXTextBookmark */; - 3B18E3AC0B93A6780093FA6E = 3B18E3AC0B93A6780093FA6E /* PBXTextBookmark */; - 3B2593670B93AE560025011E = 3B2593670B93AE560025011E /* PBXTextBookmark */; - 3B2593680B93AE560025011E = 3B2593680B93AE560025011E /* PBXTextBookmark */; - 3B47D9440B93B51F00F200B8 /* PBXBookmark */ = 3B47D9440B93B51F00F200B8 /* PBXBookmark */; - 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */ = 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */; - 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */ = 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */; + 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */ = 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */; + 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */ = 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */; }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { @@ -60,14 +55,14 @@ sepNavIntBoundsRect = "{{0, 0}, {1020, 574}}"; sepNavSelRange = "{1285, 0}"; sepNavVisRect = "{{0, 103}, {1020, 471}}"; - sepNavWindowFrame = "{{129, 347}, {1059, 600}}"; + sepNavWindowFrame = "{{81, 256}, {1059, 600}}"; }; }; 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {896, 3248}}"; sepNavSelRange = "{6196, 0}"; - sepNavVisRect = "{{0, 2445}, {458, 440}}"; + sepNavVisRect = "{{0, 2436}, {458, 440}}"; sepNavWindowFrame = "{{113, 90}, {497, 569}}"; }; }; @@ -94,68 +89,24 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; - 3B18E3AB0B93A6780093FA6E /* PBXTextBookmark */ = { + 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - name = "Wireless360Controller.cpp: 4"; - rLen = 0; - rLoc = 185; - rType = 0; - vrLen = 1493; - vrLoc = 0; - }; - 3B18E3AC0B93A6780093FA6E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - name = "Wireless360Controller.h: 5"; - rLen = 0; - rLoc = 130; - rType = 0; - vrLen = 870; - vrLoc = 0; - }; - 3B2593670B93AE560025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - name = "Wireless360Controller.cpp: 1"; - rLen = 0; - rLoc = 24; - rType = 0; - vrLen = 854; - vrLoc = 0; - }; - 3B2593680B93AE560025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - name = "Wireless360Controller.h: newReportDescriptor"; - rLen = 0; - rLoc = 498; - rType = 0; - vrLen = 969; - vrLoc = 0; - }; - 3B47D9440B93B51F00F200B8 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - }; - 3B47D94F0B93B62D00F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - name = "Wireless360Controller.h: fiddleReport"; + name = "Wireless360Controller.cpp: 189"; rLen = 0; - rLoc = 1285; + rLoc = 6196; rType = 0; - vrLen = 1195; - vrLoc = 188; + vrLen = 855; + vrLoc = 5779; }; - 3B47D9500B93B62D00F200B8 /* PBXTextBookmark */ = { + 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; name = "Wireless360Controller.cpp: 189"; rLen = 0; rLoc = 6196; rType = 0; - vrLen = 855; + vrLen = 795; vrLoc = 5779; }; } diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 index abe3f9f3..bbddba2f 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 @@ -185,288 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B21ED730B8E693700B5CACA - PBXProjectModuleLabel - WirelessGamingReceiver.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B21ED740B8E693700B5CACA - PBXProjectModuleLabel - WirelessGamingReceiver.cpp - _historyCapacity - 0 - bookmark - 3B47D9100B93B0C200F200B8 - history - - 3B2593600B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 15 453 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B21EBD70B8CEAED00B5CACA - PBXProjectModuleLabel - WirelessGamingReceiver.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B21EBD80B8CEAED00B5CACA - PBXProjectModuleLabel - WirelessGamingReceiver.h - _historyCapacity - 0 - bookmark - 3B47D9110B93B0C200F200B8 - history - - 3B25935F0B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {688, 361}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 89 158 688 402 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BE667290B910BCD009679FC - PBXProjectModuleLabel - WirelessHIDDevice.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BE6672A0B910BCD009679FC - PBXProjectModuleLabel - WirelessHIDDevice.h - _historyCapacity - 0 - bookmark - 3B47D9120B93B0C200F200B8 - history - - 3B2593610B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 155 150 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BE667250B910BCD009679FC - PBXProjectModuleLabel - WirelessHIDDevice.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BE667260B910BCD009679FC - PBXProjectModuleLabel - WirelessHIDDevice.cpp - _historyCapacity - 0 - bookmark - 3B47D9130B93B0C200F200B8 - history - - 3B2593620B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 32 458 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B21ED760B8E693700B5CACA - PBXProjectModuleLabel - WirelessDevice.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B21ED770B8E693700B5CACA - PBXProjectModuleLabel - WirelessDevice.h - _historyCapacity - 0 - bookmark - 3B47D9140B93B0C200F200B8 - history - - 3B2593630B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 175 169 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B18E2B50B9277EC0093FA6E - PBXProjectModuleLabel - Info.plist - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B18E2B60B9277EC0093FA6E - PBXProjectModuleLabel - Info.plist - _historyCapacity - 0 - bookmark - 3B47D9150B93B0C200F200B8 - history - - 3B2593640B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 45 114 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BE6677F0B91DC99009679FC - PBXProjectModuleLabel - devices.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BE667800B91DC99009679FC - PBXProjectModuleLabel - devices.h - _historyCapacity - 0 - bookmark - 3B47D9160B93B0C200F200B8 - history - - 3B2593650B93AE550025011E - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 61 411 1059 544 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -647,9 +366,9 @@ TableOfContents - 3B47D90E0B93B0C200F200B8 + 3B47D9BF0B93BD2A00F200B8 1CE0B1FE06471DED0097A5F4 - 3B47D90F0B93B0C200F200B8 + 3B47D9C00B93BD2A00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -784,13 +503,6 @@ WindowOrderList 3B21ED2D0B8E33A000B5CACA - 3BE6677F0B91DC99009679FC - 3B18E2B50B9277EC0093FA6E - 3B21ED760B8E693700B5CACA - 3BE667250B910BCD009679FC - 3BE667290B910BCD009679FC - 3B21EBD70B8CEAED00B5CACA - 3B21ED730B8E693700B5CACA /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj WindowString @@ -871,7 +583,7 @@ TableOfContents 3B21ED2D0B8E33A000B5CACA - 3B47D9170B93B0C200F200B8 + 3B47D9C10B93BD2A00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser index 93a64168..f9829c15 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -36,24 +36,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194228212; - PBXWorkspaceStateSaveDate = 194228212; - }; - perUserProjectItems = { - 3B25935F0B93AE550025011E /* PBXTextBookmark */ = 3B25935F0B93AE550025011E /* PBXTextBookmark */; - 3B2593600B93AE550025011E /* PBXTextBookmark */ = 3B2593600B93AE550025011E /* PBXTextBookmark */; - 3B2593610B93AE550025011E /* PBXTextBookmark */ = 3B2593610B93AE550025011E /* PBXTextBookmark */; - 3B2593620B93AE550025011E /* PBXTextBookmark */ = 3B2593620B93AE550025011E /* PBXTextBookmark */; - 3B2593630B93AE550025011E /* PBXTextBookmark */ = 3B2593630B93AE550025011E /* PBXTextBookmark */; - 3B2593640B93AE550025011E /* PBXTextBookmark */ = 3B2593640B93AE550025011E /* PBXTextBookmark */; - 3B2593650B93AE550025011E /* PBXTextBookmark */ = 3B2593650B93AE550025011E /* PBXTextBookmark */; - 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */; - 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */ = 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 194231576; + PBXWorkspaceStateSaveDate = 194231576; }; sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; userBuildSettings = { @@ -63,7 +47,7 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {662, 798}}"; sepNavSelRange = "{110, 0}"; - sepNavVisRect = "{{0, 461}, {649, 329}}"; + sepNavVisRect = "{{0, 448}, {649, 329}}"; sepNavWindowFrame = "{{89, 102}, {688, 458}}"; }; }; @@ -71,7 +55,7 @@ uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1020, 6426}}"; sepNavSelRange = "{13899, 0}"; - sepNavVisRect = "{{0, 3947}, {1020, 471}}"; + sepNavVisRect = "{{0, 3953}, {1020, 471}}"; sepNavWindowFrame = "{{15, 397}, {1059, 600}}"; }; }; @@ -114,146 +98,6 @@ sepNavWindowFrame = "{{636, 153}, {1059, 600}}"; }; }; - 3B25935F0B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; - name = "WirelessGamingReceiver.h: 5"; - rLen = 0; - rLoc = 110; - rType = 0; - vrLen = 498; - vrLoc = 0; - }; - 3B2593600B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */; - name = "WirelessGamingReceiver.cpp: 417"; - rLen = 0; - rLoc = 12990; - rType = 0; - vrLen = 803; - vrLoc = 0; - }; - 3B2593610B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - name = "WirelessHIDDevice.h: 23"; - rLen = 0; - rLoc = 741; - rType = 0; - vrLen = 906; - vrLoc = 0; - }; - 3B2593620B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; - name = "WirelessHIDDevice.cpp: 144"; - rLen = 0; - rLoc = 3629; - rType = 0; - vrLen = 946; - vrLoc = 3022; - }; - 3B2593630B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; - name = "WirelessDevice.h: NextPacket"; - rLen = 0; - rLoc = 440; - rType = 0; - vrLen = 846; - vrLoc = 0; - }; - 3B2593640B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - name = "Info.plist: 24"; - rLen = 0; - rLoc = 793; - rType = 0; - vrLen = 1104; - vrLoc = 419; - }; - 3B2593650B93AE550025011E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE6677A0B91DC55009679FC /* devices.h */; - name = Wireless360Device; - rLen = 17; - rLoc = 78; - rType = 0; - vrLen = 168; - vrLoc = 0; - }; - 3B47D9100B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */; - name = "WirelessGamingReceiver.cpp: 439"; - rLen = 0; - rLoc = 13899; - rType = 0; - vrLen = 1178; - vrLoc = 8649; - }; - 3B47D9110B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; - name = "WirelessGamingReceiver.h: 5"; - rLen = 0; - rLoc = 110; - rType = 0; - vrLen = 897; - vrLoc = 726; - }; - 3B47D9120B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - name = "WirelessHIDDevice.h: 23"; - rLen = 0; - rLoc = 741; - rType = 0; - vrLen = 906; - vrLoc = 0; - }; - 3B47D9130B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; - name = "WirelessHIDDevice.cpp: 144"; - rLen = 0; - rLoc = 3629; - rType = 0; - vrLen = 946; - vrLoc = 3022; - }; - 3B47D9140B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; - name = "WirelessDevice.h: NextPacket"; - rLen = 0; - rLoc = 440; - rType = 0; - vrLen = 846; - vrLoc = 0; - }; - 3B47D9150B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - name = "Info.plist: 24"; - rLen = 0; - rLoc = 793; - rType = 0; - vrLen = 1104; - vrLoc = 419; - }; - 3B47D9160B93B0C200F200B8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE6677A0B91DC55009679FC /* devices.h */; - name = Wireless360Device; - rLen = 17; - rLoc = 78; - rType = 0; - vrLen = 168; - vrLoc = 0; - }; 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */ = { isa = XCBreakpointsBucket; name = "Project Breakpoints"; From d3afddeee2873b7dd4eb42031d8c50cb8f497ab0 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 21 Apr 2007 18:37:27 +0000 Subject: [PATCH 04/66] Better wireless support including location ID to support more games, new devices --- .../360Controller.xcodeproj/colin.mode1 | 106 ++++++- .../360Controller.xcodeproj/colin.pbxuser | 56 +++- 360Controller/ControlStruct.h | 2 +- 360Controller/Info.plist | 20 ++ 360Controller/_60Controller.cpp | 27 +- 360Controller/_60Controller.h | 6 +- 360Controller/xbox360hid.h | 2 +- Feedback360/Feedback360.xcodeproj/colin.mode1 | 12 +- .../Feedback360.xcodeproj/colin.pbxuser | 4 +- Install360Controller/Text/Welcome.rtf | 24 +- Pref360Control/DeviceItem.h | 2 +- Pref360Control/DeviceItem.m | 2 +- .../Pref360ControlPref.nib/classes.nib | 1 + .../Pref360ControlPref.nib/info.nib | 2 +- .../Pref360ControlPref.nib/objects.nib | Bin 5494 -> 5816 bytes .../Pref360ControlPref~.nib/classes.nib | 45 --- .../Pref360ControlPref~.nib/info.nib | 16 -- .../Pref360ControlPref~.nib/objects.nib | Bin 5387 -> 0 bytes Pref360Control/MyAnalogStick.h | 2 +- Pref360Control/MyAnalogStick.m | 2 +- Pref360Control/MyCentreButtons.h | 2 +- Pref360Control/MyCentreButtons.m | 2 +- Pref360Control/MyDigitalStick.h | 2 +- Pref360Control/MyDigitalStick.m | 2 +- Pref360Control/MyMainButtons.h | 2 +- Pref360Control/MyMainButtons.m | 2 +- Pref360Control/MyShoulderButton.h | 2 +- Pref360Control/MyShoulderButton.m | 2 +- .../Pref360Control.xcodeproj/colin.mode1 | 26 +- .../Pref360Control.xcodeproj/colin.pbxuser | 70 ++++- .../Pref360Control.xcodeproj/project.pbxproj | 20 ++ Pref360Control/Pref360ControlPref.h | 3 +- Pref360Control/Pref360ControlPref.m | 49 +++- Pref360Control/batt0.tif | Bin 0 -> 526 bytes Pref360Control/batt1.tif | Bin 0 -> 553 bytes Pref360Control/batt2.tif | Bin 0 -> 575 bytes Pref360Control/batt3.tif | Bin 0 -> 586 bytes Pref360Control/battNone.tif | Bin 0 -> 409 bytes .../Wireless360Controller.cpp | 29 +- Wireless360Controller/Wireless360Controller.h | 23 +- .../colin.mode1 | 109 +++++--- .../colin.pbxuser | 52 ++-- WirelessGamingReceiver/WirelessDevice.cpp | 49 ++++ WirelessGamingReceiver/WirelessDevice.h | 24 ++ .../WirelessGamingReceiver.cpp | 63 +++++ .../WirelessGamingReceiver.h | 30 ++ .../colin.mode1 | 262 +++++++++++++++--- .../colin.pbxuser | 182 +++++++++--- WirelessGamingReceiver/WirelessHIDDevice.cpp | 58 +++- WirelessGamingReceiver/WirelessHIDDevice.h | 26 ++ WirelessGamingReceiver/devices.h | 25 +- 51 files changed, 1169 insertions(+), 278 deletions(-) delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib create mode 100644 Pref360Control/batt0.tif create mode 100644 Pref360Control/batt1.tif create mode 100644 Pref360Control/batt2.tif create mode 100644 Pref360Control/batt3.tif create mode 100644 Pref360Control/battNone.tif diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 index b0a1ea99..c65a0edd 100644 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -185,7 +185,88 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3B7B8F830BB8707F00081C48 + PBXProjectModuleLabel + _60Controller.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8F840BB8707F00081C48 + PBXProjectModuleLabel + _60Controller.cpp + _historyCapacity + 0 + bookmark + 3B7B8FB70BB8A3A400081C48 + history + + 3B7B8F800BB8707500081C48 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 518 115 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B7B8FB80BB8A3A400081C48 + PBXProjectModuleLabel + _60Controller.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FB90BB8A3A400081C48 + PBXProjectModuleLabel + _60Controller.h + _historyCapacity + 0 + bookmark + 3B7B8FBA0BB8A3A400081C48 + history + + 3B7B8F860BB8709400081C48 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 389 190 900 758 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -219,8 +300,6 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs @@ -263,20 +342,17 @@ 3B2EF52A0965A0AE007BFB7B 8DA8362C06AD9B9200E5AC22 1C37FBAC04509CD000000102 - 3B47D9A10B93BC9D00F200B8 1C37FAAC04509CD000000102 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey - 23 - 17 - 16 + 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 130}, {186, 367}} + {{0, 0}, {186, 367}} PBXTopSmartGroupGIDs @@ -340,6 +416,8 @@ 0pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -376,9 +454,9 @@ TableOfContents - 3B47D9A20B93BC9D00F200B8 + 3B7B8F810BB8707F00081C48 1CE0B1FE06471DED0097A5F4 - 3B47D9A30B93BC9D00F200B8 + 3B7B8F820BB8707F00081C48 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -514,6 +592,8 @@ 3BCE45C10963706A00B69EDF /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj + 3B7B8FB80BB8A3A400081C48 + 3B7B8F830BB8707F00081C48 WindowString 238 423 713 426 0 0 1280 1002 @@ -554,12 +634,10 @@ 323pt - BecomeActive - ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 130}, {1024, 84}} + {{0, 23}, {1024, 191}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -597,7 +675,7 @@ TableOfContents 3BCE45C10963706A00B69EDF - 3B47D9A40B93BC9D00F200B8 + 3B7B8FBB0BB8A3A400081C48 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index cdf3b27c..20ebd11f 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -86,8 +86,14 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194231412; - PBXWorkspaceStateSaveDate = 194231412; + PBXPerProjectTemplateStateSaveDate = 198862999; + PBXWorkspaceStateSaveDate = 198862999; + }; + perUserProjectItems = { + 3B7B8F800BB8707500081C48 = 3B7B8F800BB8707500081C48 /* PBXBookmark */; + 3B7B8F860BB8709400081C48 = 3B7B8F860BB8709400081C48 /* PBXBookmark */; + 3B7B8FB70BB8A3A400081C48 = 3B7B8FB70BB8A3A400081C48 /* PBXTextBookmark */; + 3B7B8FBA0BB8A3A400081C48 = 3B7B8FBA0BB8A3A400081C48 /* PBXTextBookmark */; }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { @@ -103,17 +109,17 @@ }; 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1330}}"; - sepNavSelRange = "{2975, 413}"; - sepNavVisRect = "{{0, 638}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {861, 1358}}"; + sepNavSelRange = "{125, 0}"; + sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{389, 134}, {900, 814}}"; }; }; 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {896, 7210}}"; - sepNavSelRange = "{14555, 383}"; - sepNavVisRect = "{{0, 6048}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {896, 7560}}"; + sepNavSelRange = "{17116, 0}"; + sepNavVisRect = "{{0, 6875}, {861, 685}}"; sepNavWindowFrame = "{{518, 59}, {900, 814}}"; }; }; @@ -122,12 +128,40 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 2758}}"; - sepNavSelRange = "{5341, 230}"; - sepNavVisRect = "{{0, 2073}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {861, 3038}}"; + sepNavSelRange = "{6483, 0}"; + sepNavVisRect = "{{0, 2353}, {861, 685}}"; sepNavWindowFrame = "{{376, 7}, {900, 814}}"; }; }; + 3B7B8F800BB8707500081C48 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; + }; + 3B7B8F860BB8709400081C48 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + }; + 3B7B8FB70BB8A3A400081C48 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; + name = "_60Controller.cpp: 516"; + rLen = 347; + rLoc = 16271; + rType = 0; + vrLen = 1452; + vrLoc = 15585; + }; + 3B7B8FBA0BB8A3A400081C48 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = "_60Controller.h: newLocationIDNumber"; + rLen = 0; + rLoc = 3445; + rType = 0; + vrLen = 2018; + vrLoc = 1271; + }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index 083a7673..0d12a92b 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro ControlStruct.h - Structures used by the device diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 92a3059d..90043202 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -180,6 +180,26 @@ idVendor 5227 + GuitarHero + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360ControllerClass + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18248 + idVendor + 5168 + OSBundleLibraries diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index d1e02ee3..9efe0846 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro _60Controller.cpp - main source of the driver @@ -500,6 +500,31 @@ OSNumber* Xbox360ControllerClass::newVendorIDNumber() const return OSNumber::withNumber(device->GetVendorID(),16); } +OSNumber* Xbox360ControllerClass::newLocationIDNumber() const +{ + OSNumber *number; + UInt32 location; + + if (device) + { + if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + { + location = number->unsigned32BitValue(); + } + else + { + // Make up an address + if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) + location |= number->unsigned8BitValue() << 24; + + if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) + location |= number->unsigned8BitValue() << 16; + } + } + + return (location != 0) ? OSNumber::withNumber(location, 32) : 0; +} + // Called by the userspace IORegistryEntrySetCFProperties function IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) { diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 61118aa6..28f81241 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,8 +1,8 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro - _60Controller.h - definition of the driver main class + _60Controller.h - declaration of the driver main class This file is part of Xbox360Controller. @@ -86,6 +86,8 @@ class Xbox360ControllerClass : public IOHIDDevice virtual OSString* newSerialNumberString() const; virtual OSString* newTransportString() const; virtual OSNumber* newVendorIDNumber() const; + + virtual OSNumber* newLocationIDNumber() const; protected: virtual bool handleStart(IOService *provider); virtual void handleStop(IOService *provider); diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index 3e1ae274..60469f45 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro xbox360hid.h - HID descriptor for the driver diff --git a/Feedback360/Feedback360.xcodeproj/colin.mode1 b/Feedback360/Feedback360.xcodeproj/colin.mode1 index 7c91f84e..10192dc4 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.mode1 +++ b/Feedback360/Feedback360.xcodeproj/colin.mode1 @@ -219,6 +219,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -267,8 +269,6 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 3 - 1 0 @@ -337,8 +337,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -375,9 +373,9 @@ TableOfContents - 3B47D9950B93BC6F00F200B8 + 3B47DA420B93C92E00F200B8 1CE0B1FE06471DED0097A5F4 - 3B47D9960B93BC6F00F200B8 + 3B47DA430B93C92E00F200B8 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -594,7 +592,7 @@ TableOfContents 3B2EF5820965C4A5007BFB7B - 3B47D9970B93BC6F00F200B8 + 3B47DA700B93C96D00F200B8 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 0c2b9756..16c1df16 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -33,8 +33,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194231396; - PBXWorkspaceStateSaveDate = 194231396; + PBXPerProjectTemplateStateSaveDate = 194234669; + PBXWorkspaceStateSaveDate = 194234669; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 01edf9d7..00e43093 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -3,25 +3,37 @@ {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} -{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}} +{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3} +{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\f1\b0\fs24 Version 0.04\ +\f1\b0\fs24 Version 0.05\ Copyright (C) 2005-2007 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\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\ql\qnatural\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'a5 }Improvements to the wireless support\ +{\listtext \'a5 }New increased compatibility with games\ +{\listtext \'a5 }Support for the Guitar Hero controller\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 \ + \f0\b Update 0.04: 27/2/2007\ \f1\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'a5 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls2\ilvl0\cf0 {\listtext \'a5 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ {\listtext \'a5 }Driver for the above to use the Wireless 360 Controller\ {\listtext \'a5 }Updates to the Preference Pane to support the Wireless 360 Controller\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural @@ -32,7 +44,7 @@ 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\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ +\ls3\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ @@ -41,7 +53,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ +\ls4\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ {\listtext \'a5 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ {\listtext \'a5 }Preference Pane now correctly detects devices being connected/disconnected\ {\listtext \'a5 }Alternative deadzone mode\ diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index adfa8479..bfa17200 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro DeviceItem.h - declaration of wrapper class for device handles diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index 2e4f4686..bf024647 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro DeviceItem.m - implementation of device wrapper class diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib index a52f1db1..12473c7f 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib @@ -15,6 +15,7 @@ "_initialKeyView" = id; "_lastKeyView" = id; "_window" = NSWindow; + batteryLevel = NSImageView; centreButtons = MyCentreButtons; deviceList = NSPopUpButton; digiStick = MyDigitalStick; diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib index 86884be0..3b0dc88b 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib @@ -11,6 +11,6 @@ 12 IBSystem Version - 8H14 + 8J135 diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib index a54d52ac26accded86b127716153355808974fd3..76995e5c52c3c87f03b0ea03a2be4066337e2145 100644 GIT binary patch literal 5816 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 Ow%J;mj9TJt;r{>vQ`gD> diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib deleted file mode 100644 index a52f1db1..00000000 --- a/Pref360Control/English.lproj/Pref360ControlPref~.nib/classes.nib +++ /dev/null @@ -1,45 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = MyAnalogStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyCentreButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyDigitalStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyMainButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyShoulderButton; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - { - ACTIONS = {changeSetting = id; selectDevice = id; }; - CLASS = NSPreferencePane; - LANGUAGE = ObjC; - OUTLETS = { - "_firstKeyView" = id; - "_initialKeyView" = id; - "_lastKeyView" = id; - "_window" = NSWindow; - centreButtons = MyCentreButtons; - deviceList = NSPopUpButton; - digiStick = MyDigitalStick; - leftLinked = NSButton; - leftShoulder = MyShoulderButton; - leftStick = MyAnalogStick; - leftStickDeadzone = NSSlider; - leftStickInvertX = NSButton; - leftStickInvertY = NSButton; - leftTrigger = NSProgressIndicator; - leftTriggerDeadzone = NSSlider; - rightButtons = MyMainButtons; - rightLinked = NSButton; - rightShoulder = MyShoulderButton; - rightStick = MyAnalogStick; - rightStickDeadzone = NSSlider; - rightStickInvertX = NSButton; - rightStickInvertY = NSButton; - rightTrigger = NSProgressIndicator; - rightTriggerDeadzone = NSSlider; - rumbleEnable = NSButton; - rumbleTest = NSButton; - }; - SUPERCLASS = NSObject; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib deleted file mode 100644 index 86884be0..00000000 --- a/Pref360Control/English.lproj/Pref360ControlPref~.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - IBDocumentLocation - 99 47 481 349 0 0 1280 1002 - IBFramework Version - 443.0 - IBOpenObjects - - 12 - - IBSystem Version - 8H14 - - diff --git a/Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib b/Pref360Control/English.lproj/Pref360ControlPref~.nib/objects.nib deleted file mode 100644 index 97fe8a5605bf01f0114f627787cb69f7399b0853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5387 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 diff --git a/Pref360Control/MyAnalogStick.h b/Pref360Control/MyAnalogStick.h index 3f7e6fd2..ab00393b 100644 --- a/Pref360Control/MyAnalogStick.h +++ b/Pref360Control/MyAnalogStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyAnalogStick.h - declaration of analog stick view diff --git a/Pref360Control/MyAnalogStick.m b/Pref360Control/MyAnalogStick.m index f5616312..8af0a39f 100644 --- a/Pref360Control/MyAnalogStick.m +++ b/Pref360Control/MyAnalogStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyAnalogStick.m - implementation of analog stick view diff --git a/Pref360Control/MyCentreButtons.h b/Pref360Control/MyCentreButtons.h index d90dd311..ece6ff69 100644 --- a/Pref360Control/MyCentreButtons.h +++ b/Pref360Control/MyCentreButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyCentreButtons.h - definition of view to draw the central buttons diff --git a/Pref360Control/MyCentreButtons.m b/Pref360Control/MyCentreButtons.m index 75e9f58a..6766db92 100644 --- a/Pref360Control/MyCentreButtons.m +++ b/Pref360Control/MyCentreButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyCentreButtons.m - implementation of central button view diff --git a/Pref360Control/MyDigitalStick.h b/Pref360Control/MyDigitalStick.h index 86e9917f..c3050f86 100644 --- a/Pref360Control/MyDigitalStick.h +++ b/Pref360Control/MyDigitalStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyDigitalStick.h - declaration of view to draw digital stick view diff --git a/Pref360Control/MyDigitalStick.m b/Pref360Control/MyDigitalStick.m index 72013961..5b9892fc 100644 --- a/Pref360Control/MyDigitalStick.m +++ b/Pref360Control/MyDigitalStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyDigitalStick.m - implementation of digital stick view diff --git a/Pref360Control/MyMainButtons.h b/Pref360Control/MyMainButtons.h index aa252985..66752ba8 100644 --- a/Pref360Control/MyMainButtons.h +++ b/Pref360Control/MyMainButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyMainButtons.h - declaration of A/B/X/Y button view diff --git a/Pref360Control/MyMainButtons.m b/Pref360Control/MyMainButtons.m index f3c81ea0..9c8dc15a 100644 --- a/Pref360Control/MyMainButtons.m +++ b/Pref360Control/MyMainButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyMainButtons.m - implementation of A/B/X/Y button view diff --git a/Pref360Control/MyShoulderButton.h b/Pref360Control/MyShoulderButton.h index 4f6f7960..5034878a 100644 --- a/Pref360Control/MyShoulderButton.h +++ b/Pref360Control/MyShoulderButton.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyShoulderButton.h - simple button view declaration diff --git a/Pref360Control/MyShoulderButton.m b/Pref360Control/MyShoulderButton.m index 7b7b2c1d..968d874e 100644 --- a/Pref360Control/MyShoulderButton.m +++ b/Pref360Control/MyShoulderButton.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro MyShoulderButton.m - implementation of simple button view diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 index 74c5340b..2a144651 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -219,8 +219,6 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs @@ -264,6 +262,7 @@ 1058C7ACFEA557BF11CA2CBB 1058C7AEFEA557BF11CA2CBB 19C28FB8FE9D52D311CA2CBB + 1C37FBAC04509CD000000102 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey @@ -337,6 +336,8 @@ 0pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -373,9 +374,9 @@ TableOfContents - 3B47D9D40B93BD4D00F200B8 + 3BCC40610BDA753B00B1619B 1CE0B1FE06471DED0097A5F4 - 3B47D9D50B93BD4D00F200B8 + 3BCC40620BDA753B00B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -509,8 +510,9 @@ 5 WindowOrderList - 3BBEAB15096B38D200F2E37B + 1C530D57069F1CE1000CFCEE /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj + 3BBEAB15096B38D200F2E37B WindowString 511 605 690 397 0 0 1280 1002 @@ -529,12 +531,14 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - + Pref360ControlPref.m StatusBarVisibility @@ -592,7 +596,7 @@ TableOfContents 3BBEAB15096B38D200F2E37B - 3B47D9D60B93BD4D00F200B8 + 3BCC40630BDA753B00B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -603,7 +607,7 @@ WindowToolGUID 3BBEAB15096B38D200F2E37B WindowToolIsVisible - + FirstTimeWindowDisplayed @@ -737,7 +741,7 @@ PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - Pref360ControlPref.h + StatusBarVisibility @@ -795,8 +799,8 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3BCC2D1E0AE2A03400663661 - 3BCC2D1F0AE2A03400663661 + 3BCC405B0BDA6E0B00B1619B + 3BCC405C0BDA6E0B00B1619B 1CDD528C0622207200134675 1CD0528E0623707200166675 diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser index 648cba8f..c14d278a 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -8,7 +8,7 @@ 8D202CE80486D31800D8A456 /* Pref360Control */, ); breakpoints = ( - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */, + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */, ); breakpointsGroup = 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */; codeSenseManager = 3BBEAAF6096B030C00F2E37B /* Code sense */; @@ -35,8 +35,34 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194231609; - PBXWorkspaceStateSaveDate = 194231609; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 200, + 63, + 20, + 48.1626, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 198864362; + PBXWorkspaceStateSaveDate = 198864362; + }; + perUserProjectItems = { + 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */ = 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */; + 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */ = 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */; }; sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; userBuildSettings = { @@ -58,7 +84,7 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */ = { + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -67,7 +93,7 @@ fileReference = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; functionName = "-startDevice"; hitCount = 1; - lineNumber = 411; + lineNumber = 416; modificationTime = 182909504.480911; state = 0; }; @@ -75,7 +101,7 @@ isa = XCBreakpointsBucket; name = "Project Breakpoints"; objects = ( - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:411 */, + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */, ); }; 3BBEAAF5096B030C00F2E37B /* Source Control */ = { @@ -173,7 +199,7 @@ 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{1196, 0}"; + sepNavSelRange = "{1399, 8}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{292, 58}, {900, 814}}"; }; @@ -186,6 +212,24 @@ sepNavWindowFrame = "{{381, 88}, {900, 814}}"; }; }; + 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: instance variable 'forceFeedback' is declared protected"; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + rLen = 1; + rLoc = 609; + rType = 1; + }; + 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + name = "Pref360ControlPref.m: 619"; + rLen = 0; + rLoc = 20914; + rType = 0; + vrLen = 475; + vrLoc = 20576; + }; 8D202CE80486D31800D8A456 /* Pref360Control */ = { activeExec = 0; }; @@ -199,17 +243,17 @@ }; F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1176}}"; - sepNavSelRange = "{2619, 0}"; - sepNavVisRect = "{{0, 365}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {861, 1190}}"; + sepNavSelRange = "{2150, 0}"; + sepNavVisRect = "{{0, 414}, {861, 685}}"; sepNavWindowFrame = "{{138, 96}, {900, 814}}"; }; }; F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1022, 8876}}"; - sepNavSelRange = "{20883, 0}"; - sepNavVisRect = "{{0, 8191}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {1022, 9534}}"; + sepNavSelRange = "{20914, 0}"; + sepNavVisRect = "{{0, 8538}, {459, 186}}"; sepNavWindowFrame = "{{221, 123}, {900, 814}}"; }; }; diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index c2f6406c..44fee4c3 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 3B47D9ED0B93C2BF00F200B8 /* battNone.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EC0B93C2BF00F200B8 /* battNone.tif */; }; + 3B47D9F20B93C31400F200B8 /* batt1.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EE0B93C31400F200B8 /* batt1.tif */; }; + 3B47D9F30B93C31400F200B8 /* batt0.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EF0B93C31400F200B8 /* batt0.tif */; }; + 3B47D9F40B93C31400F200B8 /* batt3.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9F00B93C31400F200B8 /* batt3.tif */; }; + 3B47D9F50B93C31400F200B8 /* batt2.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9F10B93C31400F200B8 /* batt2.tif */; }; 3BBEAB01096B2C4C00F2E37B /* MyAnalogStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; }; 3BBEAB02096B2C4C00F2E37B /* MyAnalogStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; }; 3BBEAB05096B2C5200F2E37B /* MyCentreButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; }; @@ -63,6 +68,11 @@ 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pref360Control_Prefix.pch; sourceTree = ""; }; + 3B47D9EC0B93C2BF00F200B8 /* battNone.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = battNone.tif; sourceTree = ""; }; + 3B47D9EE0B93C31400F200B8 /* batt1.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt1.tif; sourceTree = ""; }; + 3B47D9EF0B93C31400F200B8 /* batt0.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt0.tif; sourceTree = ""; }; + 3B47D9F00B93C31400F200B8 /* batt3.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt3.tif; sourceTree = ""; }; + 3B47D9F10B93C31400F200B8 /* batt2.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt2.tif; sourceTree = ""; }; 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyAnalogStick.h; sourceTree = ""; }; 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyAnalogStick.m; sourceTree = ""; }; 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCentreButtons.m; sourceTree = ""; }; @@ -129,6 +139,11 @@ 089C167DFE841241C02AAC07 /* InfoPlist.strings */, F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */, F506C042013D9D8C01CA16C8 /* Pref360ControlPref.nib */, + 3B47D9EC0B93C2BF00F200B8 /* battNone.tif */, + 3B47D9EF0B93C31400F200B8 /* batt0.tif */, + 3B47D9EE0B93C31400F200B8 /* batt1.tif */, + 3B47D9F10B93C31400F200B8 /* batt2.tif */, + 3B47D9F00B93C31400F200B8 /* batt3.tif */, ); name = Resources; sourceTree = ""; @@ -289,6 +304,11 @@ 8D202CED0486D31800D8A456 /* InfoPlist.strings in Resources */, 8D202CEE0486D31800D8A456 /* Pref360ControlPref.tiff in Resources */, 8D202CEF0486D31800D8A456 /* Pref360ControlPref.nib in Resources */, + 3B47D9ED0B93C2BF00F200B8 /* battNone.tif in Resources */, + 3B47D9F20B93C31400F200B8 /* batt1.tif in Resources */, + 3B47D9F30B93C31400F200B8 /* batt0.tif in Resources */, + 3B47D9F40B93C31400F200B8 /* batt3.tif in Resources */, + 3B47D9F50B93C31400F200B8 /* batt2.tif in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 73fc028b..78e39a1c 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro Pref360ControlPref.h - definition for the pref pane class @@ -56,6 +56,7 @@ IBOutlet NSButton *rightStickInvertX; IBOutlet NSButton *rightStickInvertY; IBOutlet NSProgressIndicator *rightTrigger; + IBOutlet NSImageView *batteryLevel; // Internal info mach_port_t masterPort; NSMutableArray *deviceArray; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 849f9488..a0843f18 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2007 Colin Munro Pref360ControlPref.m - main source of the pref pane @@ -242,6 +242,8 @@ - (void)inputEnable:(BOOL)enable // Reset GUI components - (void)resetDisplay { + NSBundle *bundle; + [leftStick setPositionX:0 y:0]; [leftStick setPressed:FALSE]; [leftStick setDeadzone:0]; @@ -272,6 +274,9 @@ - (void)resetDisplay [rightStickInvertY setState:NSOffState]; // Disable inputs [self inputEnable:NO]; + // Hide battery icon + bundle = [NSBundle bundleForClass:[self class]]; + [batteryLevel setImage:[[[NSImage alloc] initByReferencingFile:[bundle pathForResource:@"battNone" ofType:@"tif"]] autorelease]]; } // Stop using the HID device @@ -478,6 +483,29 @@ - (void)startDevice [self testMotorsLarge:0 small:0]; largeMotor=0; smallMotor=0; + // Battery level? + { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path; + CFTypeRef prop; + + path = nil; + if (IOObjectConformsTo(registryEntry, "WirelessHIDDevice")) + { + prop = IORegistryEntryCreateCFProperty(registryEntry, CFSTR("BatteryLevel"), NULL, 0); + if (prop != nil) + { + unsigned char level; + + if (CFNumberGetValue(prop, kCFNumberCharType, &level)) + path = [bundle pathForResource:[NSString stringWithFormat:@"batt%i", level / 64] ofType:@"tif"]; + CFRelease(prop); + } + } + if (path == nil) + path = [bundle pathForResource:@"battNone" ofType:@"tif"]; + [batteryLevel setImage:[[[NSImage alloc] initByReferencingFile:path] autorelease]]; + } } // Clear out the device lists @@ -560,6 +588,11 @@ - (void)mainViewDidLoad // Shut down - (void)dealloc { + int i; + DeviceItem *item; + FFEFFESCAPE escape; + unsigned char c; + // Remove notification source IOObjectRelease(onIteratorWired); IOObjectRelease(onIteratorWireless); @@ -571,6 +604,20 @@ - (void)dealloc // Release device and info [self stopDevice]; [self deleteDeviceList]; + for (i = 0; i < [deviceArray count]; i++) + { + item = [deviceArray objectAtIndex:i]; + if ([item ffDevice] == 0) + continue; + c = 0x06 + (i % 0x04); + escape.dwSize = sizeof(escape); + escape.dwCommand = 0x02; + escape.cbInBuffer = sizeof(c); + escape.lpvInBuffer = &c; + escape.cbOutBuffer = 0; + escape.lpvOutBuffer = NULL; + FFDeviceEscape([item ffDevice], &escape); + } [deviceArray release]; // Close master port mach_port_deallocate(mach_task_self(),masterPort); diff --git a/Pref360Control/batt0.tif b/Pref360Control/batt0.tif new file mode 100644 index 0000000000000000000000000000000000000000..ff3b09c31940db8bc81b077a3ce4fa9f998eb41c GIT binary patch literal 526 zcmebEWzb?^U{GLSV7dULx!^Ph0|W{%{9|AN$}j>kh=8#b7#ZPg2}ULcW}q}kPJ)pc z%w}X@1*&I*vYCKvLAd&7jG|C+pbkbcxVQwPIE>Ax!6*eX0c*l z29o)D*xI!7=jX}tny%* z?zimnt5B(>Mr#9BUwLgBb+l}$+oD6OCs?aaJDa{GDmQF*>bBE?8~k+2UN61&wtRDp zhKcvwM}O-Ngsr~5%C>8B(&gJB<#%s21&n>zBkh=8#b7#ZPg2}ULcW}q}kPJ)pc z%w}X@1*&I*vYCKvLAd&7jG|C+pbkbcxVQwPIE>Bc%qRsi0c*l z29o)1@ z0(Yv^xvNb&k!n;KvM5$}hPPVK&L#WO&1RiRH?F+$sMdCYzeeybm4EFV3_%G~R(UW@ z_gi-PRjAZbqqPC6ue>&mI$E~WZPB6C{l8VGolV~ol^eD@b=%$46*ttytV8===I@Ei z{Vv5T^gd&ESbl_!>U`$7oe>+t=Gc03_aD3xzDA7uzxveE*WYjdW125M;X-s#q|dg= z#x)C{>)g22*B+aF@tMgjU)SIEbJu5W{k^wudg|0$cfS4F^R>GC_>Q2>HhY(99o)4k zTQjE5?fc9F&(nU?%srpKa>C2tjVAxhjJx~Zzy4u<)7|;<`)yS(KCS1?-u?Y|UETh8 t+4g7u_g~=t&A4}h4kMGp2NPCSM}Zh&_JbFCq&W{xSfj|Ll)==-1OU?ArTPE> literal 0 HcmV?d00001 diff --git a/Pref360Control/batt2.tif b/Pref360Control/batt2.tif new file mode 100644 index 0000000000000000000000000000000000000000..5475dc413e91d5c47f21887b9a857c053a3851ca GIT binary patch literal 575 zcmebEWzb?^U{GLSV7dULx!^Ph0|W{%{9|AN$}j>kh=8#b7#ZPg2}ULcW}q}kPJ)pc z%w}X@1*&I*vYCKvLAd&7jG|C+pbkbcxVQwPIE>90$tVRf0c*l z29o)1@ z0(Yv^xvNb&k!n;KvM5$}hPPVK&L#WO&1RiRH?F+$sMdCYzeeybm4EFV3_%G~R(UW@ z_gi-PRjAZbqqPC6ue>&mI$E~WZPB6C{l8VGolV~ol^eD@b=%$46*ttytV8==X6_El z{l44wShLISTl%K2*XDh#Ig;@D`!6?n*0w`&Mxr`yYE$+mY>5BabFEn1`M~|6QW@Q9 z=c(JS6yMr&uAZ^)V&*onoUqA(`B$?`XRiL%oL+G8(w41j`tAo$zgtv3Wi{LU#!Zjj zRLt}W-tYd(vL^r2p~VL_w5YNlnoy$4acIL4ea^!LXDoSL1pc`4 QyG(fFD{y3G5HMI90P@VY#sB~S literal 0 HcmV?d00001 diff --git a/Pref360Control/batt3.tif b/Pref360Control/batt3.tif new file mode 100644 index 0000000000000000000000000000000000000000..f0424a7fc47312ef1df9a8a632ca190f8fdf92bc GIT binary patch literal 586 zcmebEWzb?^U{GLSV7dULx!^Ph0|W{%{9|AN$}j>kh=8#b7#ZPg2}ULcW}q}kPJ)pc z%w}X@1*&I*vYCKvLAd&7jG|C+pbkbcxVQwPIE>Ah!YBnY0c*l z29o)1@ z0(Yv^xvNb&k!n;KvM5$}hPPVK&L#WO&1RiRH?F+$sMdCYzeeybm4EFV3_%G~R(UW@ z_gi-PRjAZbqqPC6ue>&mI$E~WZPB6C{l8VGolV~ol^eD@b=%$46*ttytV8==X6_El z+q(Peqp3x6W8aF;`uc8f)8>a-5m{HO8T}94-|+p8>}TbvC!c;aS^Ao_>HoRsUrc}T znwzE_4Jn+lHZJOV;Ket^x4h((1J_+m*|=lxwaulQF6O+mirsp+(CgZ>(mz#Y#*GUe z#{Zbl7#@(;K_Re$rpML(~+p5`h+silZ`}}(6-T!Izhg}}sG_}jSzxeg5d#^YC z%6-0k%9HH{%#UvAXwG5Veo(+il*RV_ErXwXHgxagbmF}ubLr448$;g10dKhZ4;!*r d3OZlp@fAGsQ72IJXkd<~_))_qkp}w*3IKDlzWV?G literal 0 HcmV?d00001 diff --git a/Pref360Control/battNone.tif b/Pref360Control/battNone.tif new file mode 100644 index 0000000000000000000000000000000000000000..6f1aa62862745e15a2ccec82477772628f93c675 GIT binary patch literal 409 zcmebEWzb?^U{GLSV7dULx!^Ph0|W{%{9|AN$}j>kh=8#b7#ZPg2}ULcW}q}kPJ)pc z%w}X@1*&I*vYCKvLAd&7jG|C+pbkbcxVQwPIGnwiQ3_-N*j^4sX*gSeQ3k3P=om%~ zB=c>N#DfsxKr|JvOaUC1=43RRlx zyCPUCWYAvS>yYA$h uS6_YfxAs81LHHik|Lkpt9u!*CgelARo=7%|*t5)DecGuf#pV_aOiTa+bXai! literal 0 HcmV?d00001 diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 28a6de4c..7f26b6ab 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 "Wireless360Controller.h" #include "../WirelessGamingReceiver/WirelessDevice.h" @@ -143,7 +165,7 @@ IOReturn Wireless360Controller::setReport(IOMemoryDescriptor *report, IOHIDRepor { char data[2]; - IOLog("setReport(%p, %i, %i)\n", report, reportType, options); +// IOLog("setReport(%p, %d, %d)\n", report, reportType, options); if (report->readBytes(0, data, 2) < 2) return kIOReturnUnsupported; @@ -214,11 +236,6 @@ OSString* Wireless360Controller::newProductString() const return OSString::withCString("Wireless 360 Controller"); } -OSString* Wireless360Controller::newSerialNumberString() const -{ - return OSString::withCString("0000"); -} - OSString* Wireless360Controller::newTransportString() const { return OSString::withCString("Wireless"); diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h index 0c9b7d7f..ce568ccf 100644 --- a/Wireless360Controller/Wireless360Controller.h +++ b/Wireless360Controller/Wireless360Controller.h @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 __WIRELESS360CONTROLLER_H__ #define __WIRELESS360CONTROLLER_H__ @@ -21,7 +43,6 @@ class Wireless360Controller : public WirelessHIDDevice virtual OSNumber* newPrimaryUsagePageNumber() const; virtual OSNumber* newProductIDNumber() const; virtual OSString* newProductString() const; - virtual OSString* newSerialNumberString() const; virtual OSString* newTransportString() const; virtual OSNumber* newVendorIDNumber() const; protected: diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 index 10c9d50e..abe3dddd 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 @@ -190,7 +190,7 @@ Content PBXProjectModuleGUID - 3B18E2560B9272120093FA6E + 3BCC400F0BDA689100B1619B PBXProjectModuleLabel Wireless360Controller.cpp PBXSplitModuleInNavigatorKey @@ -198,16 +198,16 @@ Split0 PBXProjectModuleGUID - 3B18E2570B9272120093FA6E + 3BCC40100BDA689100B1619B PBXProjectModuleLabel Wireless360Controller.cpp _historyCapacity 0 bookmark - 3B47D9B40B93BD0B00F200B8 + 3BCC40110BDA689100B1619B history - 3B47D9860B93BBB600F200B8 + 3BCC3FF60BDA643C00B1619B SplitCount @@ -226,6 +226,46 @@ 113 146 497 513 0 0 1280 1002 + + Content + + PBXProjectModuleGUID + 3BCC40120BDA689100B1619B + PBXProjectModuleLabel + Wireless360Controller.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BCC40130BDA689100B1619B + PBXProjectModuleLabel + Wireless360Controller.h + _historyCapacity + 0 + bookmark + 3BCC40140BDA689100B1619B + history + + 3BCC3FF80BDA669F00B1619B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 81 312 1059 544 0 0 1280 1002 + + PerspectiveWidths @@ -325,7 +365,7 @@ 186 RubberWindowFrame - 96 437 690 397 0 0 1280 1002 + 348 252 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -362,7 +402,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 96 437 690 397 0 0 1280 1002 + 348 252 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -384,7 +424,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 96 437 690 397 0 0 1280 1002 + 348 252 690 397 0 0 1280 1002 Module XCDetailModule @@ -408,9 +448,9 @@ TableOfContents - 3B47D9B20B93BD0B00F200B8 + 3BCC400D0BDA689100B1619B 1CE0B1FE06471DED0097A5F4 - 3B47D9B30B93BD0B00F200B8 + 3BCC400E0BDA689100B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -545,11 +585,12 @@ WindowOrderList 3B18E2510B92720F0093FA6E - 3B18E2560B9272120093FA6E + 3BCC40120BDA689100B1619B + 3BCC400F0BDA689100B1619B /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj WindowString - 96 437 690 397 0 0 1280 1002 + 348 252 690 397 0 0 1280 1002 WindowTools @@ -626,7 +667,7 @@ TableOfContents 3B18E2510B92720F0093FA6E - 3B47D9B50B93BD0B00F200B8 + 3BCC40150BDA689100B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -742,8 +783,12 @@ 0 + FirstTimeWindowDisplayed + Identifier windowTool.find + IsVertical + Layout @@ -759,25 +804,15 @@ 1CDD528C0622207200134675 PBXProjectModuleLabel <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - StatusBarVisibility - 1 + GeometryConfiguration Frame - {{0, 0}, {781, 167}} + {{0, 0}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 134 166 781 470 0 0 1280 1002 Module PBXNavigatorGroup @@ -786,11 +821,11 @@ Proportion - 50% + 212pt BecomeActive - 1 + ContentConfiguration PBXProjectModuleGUID @@ -801,18 +836,18 @@ GeometryConfiguration Frame - {{8, 0}, {773, 254}} + {{0, 217}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 134 166 781 470 0 0 1280 1002 Module PBXProjectFindModule Proportion - 50% + 212pt Proportion - 428pt + 429pt Name @@ -822,23 +857,21 @@ PBXProjectFindModule StatusbarIsVisible - 1 + TableOfContents 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE + 3B3C65030BDA5E8200EA9F99 + 3B3C65040BDA5E8200EA9F99 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 1CD0528E0623707200166675 WindowString - 62 385 781 470 0 0 1440 878 + 134 166 781 470 0 0 1280 1002 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - 0 + Identifier diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index ff9e29dd..61dc9de9 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -31,12 +31,14 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194231556; - PBXWorkspaceStateSaveDate = 194231556; + PBXPerProjectTemplateStateSaveDate = 198863039; + PBXWorkspaceStateSaveDate = 198863039; }; perUserProjectItems = { - 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */ = 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */; - 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */ = 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */; + 3BCC3FF60BDA643C00B1619B = 3BCC3FF60BDA643C00B1619B /* PBXBookmark */; + 3BCC3FF80BDA669F00B1619B = 3BCC3FF80BDA669F00B1619B /* PBXBookmark */; + 3BCC40110BDA689100B1619B = 3BCC40110BDA689100B1619B /* PBXTextBookmark */; + 3BCC40140BDA689100B1619B = 3BCC40140BDA689100B1619B /* PBXTextBookmark */; }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { @@ -52,17 +54,17 @@ }; 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 574}}"; - sepNavSelRange = "{1285, 0}"; - sepNavVisRect = "{{0, 103}, {1020, 471}}"; + sepNavIntBoundsRect = "{{0, 0}, {1020, 868}}"; + sepNavSelRange = "{138, 0}"; + sepNavVisRect = "{{0, 0}, {1020, 471}}"; sepNavWindowFrame = "{{81, 256}, {1059, 600}}"; }; }; 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {896, 3248}}"; - sepNavSelRange = "{6196, 0}"; - sepNavVisRect = "{{0, 2436}, {458, 440}}"; + sepNavIntBoundsRect = "{{0, 0}, {896, 3486}}"; + sepNavSelRange = "{188, 0}"; + sepNavVisRect = "{{0, 0}, {458, 440}}"; sepNavWindowFrame = "{{113, 90}, {497, 569}}"; }; }; @@ -89,24 +91,32 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; - 3B47D9860B93BBB600F200B8 /* PBXTextBookmark */ = { + 3BCC3FF60BDA643C00B1619B /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; + }; + 3BCC3FF80BDA669F00B1619B /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + }; + 3BCC40110BDA689100B1619B /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - name = "Wireless360Controller.cpp: 189"; + name = "Wireless360Controller.cpp: newTransportString"; rLen = 0; - rLoc = 6196; + rLoc = 7787; rType = 0; - vrLen = 855; - vrLoc = 5779; + vrLen = 683; + vrLoc = 6377; }; - 3B47D9B40B93BD0B00F200B8 /* PBXTextBookmark */ = { + 3BCC40140BDA689100B1619B /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - name = "Wireless360Controller.cpp: 189"; + fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; + name = "Wireless360Controller.h: newTransportString"; rLen = 0; - rLoc = 6196; + rLoc = 1818; rType = 0; - vrLen = 795; - vrLoc = 5779; + vrLen = 1144; + vrLoc = 186; }; } diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index a9a83455..4c67e5c1 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -1,9 +1,32 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 "WirelessDevice.h" #include "WirelessGamingReceiver.h" OSDefineMetaClassAndStructors(WirelessDevice, IOService) #define super IOService +// Initialise wireless device bool WirelessDevice::init(OSDictionary *dictionary) { if (!super::init(dictionary)) @@ -13,6 +36,7 @@ bool WirelessDevice::init(OSDictionary *dictionary) return true; } +// Checks if there's any data for us bool WirelessDevice::IsDataAvailable(void) { if (index == -1) @@ -23,6 +47,7 @@ bool WirelessDevice::IsDataAvailable(void) return receiver->IsDataQueued(index); } +// Gets the next item from our buffer IOMemoryDescriptor* WirelessDevice::NextPacket(void) { if (index == -1) @@ -33,6 +58,7 @@ IOMemoryDescriptor* WirelessDevice::NextPacket(void) return receiver->ReadBuffer(index); } +// Sends a buffer for this controller void WirelessDevice::SendPacket(const void *data, size_t length) { if (index == -1) @@ -43,6 +69,7 @@ void WirelessDevice::SendPacket(const void *data, size_t length) receiver->QueueWrite(index, data, length); } +// Registers a callback function void WirelessDevice::RegisterWatcher(void *target, WirelessDeviceWatcher function, void *parameter) { this->target = target; @@ -50,13 +77,35 @@ void WirelessDevice::RegisterWatcher(void *target, WirelessDeviceWatcher functio this->function = function; } +// For internal use, sets this instances index on the wireless gaming receiver void WirelessDevice::SetIndex(int i) { index = i; } +// Called when new data arrives void WirelessDevice::NewData(void) { if (function != NULL) function(target, this, parameter); } + +// Gets the location ID for this device +OSNumber* WirelessDevice::newLocationIDNumber() const +{ + OSNumber *owner; + UInt32 location = 0; + + if (index == -1) + return NULL; + WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); + if (receiver == NULL) + return NULL; + owner = receiver->newLocationIDNumber(); + if (owner != NULL) + { + location = owner->unsigned32BitValue() + 1 + index; + owner->release(); + } + return OSNumber::withNumber(location, 32); +} diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h index c4b79c3c..6a88a7b2 100644 --- a/WirelessGamingReceiver/WirelessDevice.h +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 __WIRELESSDEVICE_H__ #define __WIRELESSDEVICE_H__ @@ -20,6 +42,8 @@ class WirelessDevice : public IOService void SendPacket(const void *data, size_t length); void RegisterWatcher(void *target, WirelessDeviceWatcher function, void *parameter); + + OSNumber* WirelessDevice::newLocationIDNumber() const; private: friend class WirelessGamingReceiver; void SetIndex(int i); diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 3a49846d..387bbd22 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -1,9 +1,32 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 "WirelessGamingReceiver.h" #include "WirelessDevice.h" #include "devices.h" OSDefineMetaClassAndStructors(WirelessGamingReceiver, IOService) +// Holds data for asynchronous reads typedef struct { int index; @@ -11,6 +34,7 @@ typedef struct } WGRREAD; +// Get maximum packet size for a pipe static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) { const IOUSBEndpointDescriptor *ed; @@ -20,6 +44,7 @@ static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) else return ed->wMaxPacketSize; } +// Start device bool WirelessGamingReceiver::start(IOService *provider) { const IOUSBConfigurationDescriptor *cd; @@ -183,12 +208,14 @@ bool WirelessGamingReceiver::start(IOService *provider) return false; } +// Stop the device void WirelessGamingReceiver::stop(IOService *provider) { ReleaseAll(); IOService::stop(provider); } +// Queue a read on a controller bool WirelessGamingReceiver::QueueRead(int index) { IOUSBCompletion complete; @@ -221,6 +248,7 @@ bool WirelessGamingReceiver::QueueRead(int index) return false; } +// Handle a completed read on a controller void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { WGRREAD *data = (WGRREAD*)parameter; @@ -251,6 +279,7 @@ void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt QueueRead(newIndex); } +// Queue an asynchronous write on a controller bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 length) { IOBufferMemoryDescriptor *outBuffer; @@ -279,6 +308,7 @@ bool WirelessGamingReceiver::QueueWrite(int index, const void *bytes, UInt32 len } } +// Handle a completed write on a controller void WirelessGamingReceiver::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { IOMemoryDescriptor *memory=(IOMemoryDescriptor*)parameter; @@ -288,6 +318,7 @@ void WirelessGamingReceiver::WriteComplete(void *parameter,IOReturn status,UInt3 memory->release(); } +// Release any allocated objects void WirelessGamingReceiver::ReleaseAll(void) { int i; @@ -348,18 +379,21 @@ void WirelessGamingReceiver::ReleaseAll(void) } } +// Static wrapper for read notifications void WirelessGamingReceiver::_ReadComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { if (target != NULL) ((WirelessGamingReceiver*)target)->ReadComplete(parameter, status, bufferSizeRemaining); } +// Static wrapper for write notifications void WirelessGamingReceiver::_WriteComplete(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { if (target != NULL) ((WirelessGamingReceiver*)target)->WriteComplete(parameter, status, bufferSizeRemaining); } +// Processes a message for a controller void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data, int length) { /* @@ -411,6 +445,7 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data connections[index].service->NewData(); } +// Create a new node for the attached controller void WirelessGamingReceiver::InstantiateService(int index) { connections[index].service = new WirelessDevice; @@ -441,11 +476,13 @@ void WirelessGamingReceiver::InstantiateService(int index) } } +// Check a controller's queue bool WirelessGamingReceiver::IsDataQueued(int index) { return connections[index].inputArray->getCount() > 0; } +// Read a controller's queue IOMemoryDescriptor* WirelessGamingReceiver::ReadBuffer(int index) { IOMemoryDescriptor *data; @@ -456,3 +493,29 @@ IOMemoryDescriptor* WirelessGamingReceiver::ReadBuffer(int index) connections[index].inputArray->removeObject(0); return data; } + +// Get our location ID +OSNumber* WirelessGamingReceiver::newLocationIDNumber() const +{ + OSNumber *number; + UInt32 location = 0; + + if (device) + { + if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + { + location = number->unsigned32BitValue(); + } + else + { + // Make up an address + if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) + location |= number->unsigned8BitValue() << 24; + + if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) + location |= number->unsigned8BitValue() << 16; + } + } + + return OSNumber::withNumber(location, 32); +} diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index d8bf3dfc..1ff6eb8a 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -1,9 +1,32 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 __WIRELESSGAMINGRECEIVER_H__ #define __WIRELESSGAMINGRECEIVER_H__ #include #include +// This value is defined by the hardware and fixed #define WIRELESS_CONNECTIONS 4 class WirelessDevice; @@ -13,9 +36,11 @@ typedef struct // Controller IOUSBInterface *controller; IOUSBPipe *controllerIn, *controllerOut; + // Mystery IOUSBInterface *other; IOUSBPipe *otherIn, *otherOut; + // Runtime data OSArray *inputArray; WirelessDevice *service; @@ -28,11 +53,16 @@ class WirelessGamingReceiver : public IOService public: bool start(IOService *provider); void stop(IOService *provider); + + // For WirelessDevice to use + OSNumber* WirelessGamingReceiver::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]; diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 index bbddba2f..ef0ac907 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 @@ -185,7 +185,208 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3B7B8FA30BB8A3A200081C48 + PBXProjectModuleLabel + WirelessHIDDevice.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FA40BB8A3A200081C48 + PBXProjectModuleLabel + WirelessHIDDevice.cpp + _historyCapacity + 0 + bookmark + 3B3C64FC0BDA5E8100EA9F99 + history + + 3B3C64F70BDA5B7600EA9F99 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 32 458 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B7B8FA60BB8A3A200081C48 + PBXProjectModuleLabel + WirelessDevice.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FA70BB8A3A200081C48 + PBXProjectModuleLabel + WirelessDevice.cpp + _historyCapacity + 0 + bookmark + 3B3C64FD0BDA5E8100EA9F99 + history + + 3BEA26D30BCD6A8400267C3A + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 107 320 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B7B8FAA0BB8A3A200081C48 + PBXProjectModuleLabel + WirelessDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FAB0BB8A3A200081C48 + PBXProjectModuleLabel + WirelessDevice.h + _historyCapacity + 0 + bookmark + 3B3C64FE0BDA5E8100EA9F99 + history + + 3BEA26D50BCD6A8400267C3A + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 175 169 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B7B8FAD0BB8A3A200081C48 + PBXProjectModuleLabel + WirelessHIDDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FAE0BB8A3A200081C48 + PBXProjectModuleLabel + WirelessHIDDevice.h + _historyCapacity + 0 + bookmark + 3B3C64FF0BDA5E8100EA9F99 + history + + 3BEA26D60BCD6A8400267C3A + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 155 150 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B7B8FB30BB8A3A200081C48 + PBXProjectModuleLabel + WirelessGamingReceiver.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7B8FB40BB8A3A200081C48 + PBXProjectModuleLabel + WirelessGamingReceiver.h + _historyCapacity + 0 + bookmark + 3B3C65000BDA5E8100EA9F99 + history + + 3BEA26D70BCD6A8400267C3A + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {688, 361}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 481 168 688 402 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -366,9 +567,9 @@ TableOfContents - 3B47D9BF0B93BD2A00F200B8 + 3B3C64FA0BDA5E8100EA9F99 1CE0B1FE06471DED0097A5F4 - 3B47D9C00B93BD2A00F200B8 + 3B3C64FB0BDA5E8100EA9F99 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -502,8 +703,13 @@ 5 WindowOrderList - 3B21ED2D0B8E33A000B5CACA + 3B7B8FB30BB8A3A200081C48 + 3B7B8FAD0BB8A3A200081C48 + 3B7B8FAA0BB8A3A200081C48 + 3B7B8FA60BB8A3A200081C48 /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj + 1C530D57069F1CE1000CFCEE + 3B7B8FA30BB8A3A200081C48 WindowString 42 150 690 397 0 0 1280 1002 @@ -583,7 +789,7 @@ TableOfContents 3B21ED2D0B8E33A000B5CACA - 3B47D9C10B93BD2A00F200B8 + 3BD08D9F0BB8A54800606F66 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -699,8 +905,12 @@ 0 + FirstTimeWindowDisplayed + Identifier windowTool.find + IsVertical + Layout @@ -715,26 +925,16 @@ PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - + WirelessHIDDevice.cpp StatusBarVisibility - 1 + GeometryConfiguration Frame - {{0, 0}, {781, 167}} + {{0, 0}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 53 509 781 470 0 0 1280 1002 Module PBXNavigatorGroup @@ -743,11 +943,11 @@ Proportion - 50% + 212pt BecomeActive - 1 + ContentConfiguration PBXProjectModuleGUID @@ -758,18 +958,18 @@ GeometryConfiguration Frame - {{8, 0}, {773, 254}} + {{0, 217}, {781, 212}} RubberWindowFrame - 62 385 781 470 0 0 1440 878 + 53 509 781 470 0 0 1280 1002 Module PBXProjectFindModule Proportion - 50% + 212pt Proportion - 428pt + 429pt Name @@ -779,23 +979,21 @@ PBXProjectFindModule StatusbarIsVisible - 1 + TableOfContents 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE + 3B3C64E60BDA5B3400EA9F99 + 3B3C64E70BDA5B3400EA9F99 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 1CD0528E0623707200166675 WindowString - 62 385 781 470 0 0 1440 878 + 53 509 781 470 0 0 1280 1002 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - 0 + Identifier diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser index f9829c15..451b75c5 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -8,8 +8,8 @@ 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, ); breakpoints = ( - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */, - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */, + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */, + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */, ); breakpointsGroup = 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */; codeSenseManager = 3B21EBDB0B8CEAED00B5CACA /* Code sense */; @@ -36,8 +36,20 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194231576; - PBXWorkspaceStateSaveDate = 194231576; + PBXPerProjectTemplateStateSaveDate = 198861858; + PBXWorkspaceStateSaveDate = 198861858; + }; + perUserProjectItems = { + 3B3C64F70BDA5B7600EA9F99 = 3B3C64F70BDA5B7600EA9F99 /* PBXTextBookmark */; + 3B3C64FC0BDA5E8100EA9F99 = 3B3C64FC0BDA5E8100EA9F99 /* PBXTextBookmark */; + 3B3C64FD0BDA5E8100EA9F99 = 3B3C64FD0BDA5E8100EA9F99 /* PBXTextBookmark */; + 3B3C64FE0BDA5E8100EA9F99 = 3B3C64FE0BDA5E8100EA9F99 /* PBXTextBookmark */; + 3B3C64FF0BDA5E8100EA9F99 = 3B3C64FF0BDA5E8100EA9F99 /* PBXTextBookmark */; + 3B3C65000BDA5E8100EA9F99 = 3B3C65000BDA5E8100EA9F99 /* PBXTextBookmark */; + 3BEA26D30BCD6A8400267C3A = 3BEA26D30BCD6A8400267C3A /* PBXTextBookmark */; + 3BEA26D50BCD6A8400267C3A = 3BEA26D50BCD6A8400267C3A /* PBXTextBookmark */; + 3BEA26D60BCD6A8400267C3A = 3BEA26D60BCD6A8400267C3A /* PBXTextBookmark */; + 3BEA26D70BCD6A8400267C3A = 3BEA26D70BCD6A8400267C3A /* PBXTextBookmark */; }; sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; userBuildSettings = { @@ -45,18 +57,18 @@ }; 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {662, 798}}"; - sepNavSelRange = "{110, 0}"; - sepNavVisRect = "{{0, 448}, {649, 329}}"; - sepNavWindowFrame = "{{89, 102}, {688, 458}}"; + sepNavIntBoundsRect = "{{0, 0}, {662, 1218}}"; + sepNavSelRange = "{2745, 0}"; + sepNavVisRect = "{{0, 400}, {649, 329}}"; + sepNavWindowFrame = "{{481, 112}, {688, 458}}"; }; }; 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 6426}}"; - sepNavSelRange = "{13899, 0}"; - sepNavVisRect = "{{0, 3953}, {1020, 471}}"; - sepNavWindowFrame = "{{15, 397}, {1059, 600}}"; + sepNavIntBoundsRect = "{{0, 0}, {842, 7308}}"; + sepNavSelRange = "{16651, 0}"; + sepNavVisRect = "{{0, 6663}, {767, 645}}"; + sepNavWindowFrame = "{{38, 202}, {806, 774}}"; }; }; 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */ = { @@ -84,45 +96,109 @@ }; 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 490}}"; - sepNavSelRange = "{440, 0}"; - sepNavVisRect = "{{0, 0}, {1020, 471}}"; + sepNavIntBoundsRect = "{{0, 0}, {1020, 826}}"; + sepNavSelRange = "{1470, 0}"; + sepNavVisRect = "{{0, 355}, {1020, 471}}"; sepNavWindowFrame = "{{175, 113}, {1059, 600}}"; }; }; 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 882}}"; - sepNavSelRange = "{65, 81}"; - sepNavVisRect = "{{0, 57}, {1020, 471}}"; - sepNavWindowFrame = "{{636, 153}, {1059, 600}}"; + sepNavIntBoundsRect = "{{0, 0}, {1020, 1568}}"; + sepNavSelRange = "{3286, 0}"; + sepNavVisRect = "{{0, 1097}, {1020, 471}}"; + sepNavWindowFrame = "{{107, 264}, {1059, 600}}"; }; }; + 3B3C64F60BDA5B7600EA9F99 /* WirelessHIDDevice.cpp */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = WirelessHIDDevice.cpp; + path = "/Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessHIDDevice.cpp"; + sourceTree = ""; + }; + 3B3C64F70BDA5B7600EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B3C64F60BDA5B7600EA9F99 /* WirelessHIDDevice.cpp */; + rLen = 5; + rLoc = 5235; + rType = 0; + }; + 3B3C64FC0BDA5E8100EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; + name = "WirelessHIDDevice.cpp: 150"; + rLen = 0; + rLoc = 5328; + rType = 0; + vrLen = 857; + vrLoc = 3348; + }; + 3B3C64FD0BDA5E8100EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */; + name = "WirelessDevice.cpp: 70"; + rLen = 0; + rLoc = 2910; + rType = 0; + vrLen = 764; + vrLoc = 1260; + }; + 3B3C64FE0BDA5E8100EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; + name = "WirelessDevice.h: 23"; + rLen = 0; + rLoc = 1560; + rType = 0; + vrLen = 874; + vrLoc = 0; + }; + 3B3C64FF0BDA5E8100EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + name = "WirelessHIDDevice.h: 18"; + rLen = 0; + rLoc = 1438; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 3B3C65000BDA5E8100EA9F99 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; + name = "WirelessGamingReceiver.h: 32"; + rLen = 0; + rLoc = 1728; + rType = 0; + vrLen = 702; + vrLoc = 365; + }; 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */ = { isa = XCBreakpointsBucket; name = "Project Breakpoints"; objects = ( - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */, - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */, + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */, + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */, ); }; 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 471}}"; - sepNavSelRange = "{741, 0}"; - sepNavVisRect = "{{0, 0}, {1020, 471}}"; + sepNavIntBoundsRect = "{{0, 0}, {1020, 784}}"; + sepNavSelRange = "{96, 0}"; + sepNavVisRect = "{{0, 313}, {1020, 471}}"; sepNavWindowFrame = "{{155, 94}, {1059, 600}}"; }; }; 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 2170}}"; - sepNavSelRange = "{3629, 0}"; - sepNavVisRect = "{{0, 1685}, {1020, 471}}"; - sepNavWindowFrame = "{{32, 402}, {1059, 600}}"; + sepNavIntBoundsRect = "{{0, 0}, {1020, 2954}}"; + sepNavSelRange = "{5927, 0}"; + sepNavVisRect = "{{0, 2483}, {1020, 471}}"; + sepNavWindowFrame = "{{34, 402}, {1059, 600}}"; }; }; - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:7 */ = { + 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -130,11 +206,11 @@ delayBeforeContinue = 0; fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; hitCount = 0; - lineNumber = 7; + lineNumber = 5; modificationTime = 194059839.645874; state = 2; }; - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:29 */ = { + 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -142,16 +218,56 @@ delayBeforeContinue = 0; fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; hitCount = 0; - lineNumber = 29; + lineNumber = 5; modificationTime = 194059838.6863289; state = 2; }; 3BE6677A0B91DC55009679FC /* devices.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1020, 471}}"; - sepNavSelRange = "{78, 17}"; + sepNavSelRange = "{1030, 0}"; sepNavVisRect = "{{0, 0}, {1020, 471}}"; sepNavWindowFrame = "{{61, 355}, {1059, 600}}"; }; }; + 3BEA26D30BCD6A8400267C3A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */; + name = "WirelessDevice.cpp: 70"; + rLen = 0; + rLoc = 2910; + rType = 0; + vrLen = 737; + vrLoc = 1287; + }; + 3BEA26D50BCD6A8400267C3A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; + name = "WirelessDevice.h: 23"; + rLen = 0; + rLoc = 1560; + rType = 0; + vrLen = 874; + vrLoc = 0; + }; + 3BEA26D60BCD6A8400267C3A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; + name = "WirelessHIDDevice.h: 18"; + rLen = 0; + rLoc = 1438; + rType = 0; + vrLen = 950; + vrLoc = 0; + }; + 3BEA26D70BCD6A8400267C3A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; + name = "WirelessGamingReceiver.h: 32"; + rLen = 0; + rLoc = 1728; + rType = 0; + vrLen = 702; + vrLoc = 365; + }; } diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index f31f73c1..a72a0d67 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 "WirelessHIDDevice.h" #include "WirelessDevice.h" @@ -6,8 +28,10 @@ OSDefineMetaClassAndAbstractStructors(WirelessHIDDevice, IOHIDDevice) #define super IOHIDDevice +// Some sort of message to send const char weirdStart[] = {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +// Sets the LED with the same format as the wired controller void WirelessHIDDevice::SetLEDs(int mode) { char buf[] = {0x00, 0x00, 0x08, 0x40 + (mode % 0x0e), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -21,11 +45,13 @@ void WirelessHIDDevice::SetLEDs(int mode) } } +// Returns the battery level unsigned char WirelessHIDDevice::GetBatteryLevel(void) { return battery; } - + +// Called from userspace to do something, like set the LEDs IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) { char data[2]; @@ -46,6 +72,7 @@ IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportTyp return super::setReport(report, reportType, options); } +// Start up the driver bool WirelessHIDDevice::handleStart(IOService *provider) { WirelessDevice *device; @@ -64,6 +91,7 @@ bool WirelessHIDDevice::handleStart(IOService *provider) return true; } +// Shut down the driver void WirelessHIDDevice::handleStop(IOService *provider) { WirelessDevice *device; @@ -75,6 +103,7 @@ void WirelessHIDDevice::handleStop(IOService *provider) super::handleStop(provider); } +// Handle new data from the device void WirelessHIDDevice::receivedData(void) { IOMemoryDescriptor *data; @@ -89,6 +118,7 @@ void WirelessHIDDevice::receivedData(void) } } +// Process new data void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) { unsigned char buf[29]; @@ -103,19 +133,25 @@ void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) case 0x0f: // Initial info if (buf[16] == 0x13) receivedUpdate(0x13, buf + 17); + memcpy(serialString, buf + 0x0A, 4); + serialString[4] = '\0'; 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; } } +// Received an update of a specific value void WirelessHIDDevice::receivedUpdate(unsigned char type, unsigned char *data) { switch (type) @@ -131,11 +167,13 @@ void WirelessHIDDevice::receivedUpdate(unsigned char type, unsigned char *data) } } break; + default: break; } } +// Received a normal HID update from the device void WirelessHIDDevice::receivedHIDupdate(unsigned char *data, int length) { IOReturn err; @@ -148,7 +186,25 @@ void WirelessHIDDevice::receivedHIDupdate(unsigned char *data, int length) IOLog("handleReport return: 0x%.8x\n", err); } +// Wrapper for notification of receiving data void WirelessHIDDevice::_receivedData(void *target, WirelessDevice *sender, void *parameter) { ((WirelessHIDDevice*)target)->receivedData(); } + +// Get a location ID for this device, as some games require it +OSNumber* WirelessHIDDevice::newLocationIDNumber() const +{ + WirelessDevice *device; + + device = OSDynamicCast(WirelessDevice, getProvider()); + if (device == NULL) + return NULL; + return device->newLocationIDNumber(); +} + +// Get the serial number of the device +OSString* WirelessHIDDevice::newSerialNumberString() const +{ + return OSString::withCString(serialString); +} diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index 1b61f93a..5b87cfe6 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 __WIRELESSHIDDEVICE_H__ #define __WIRELESSHIDDEVICE_H__ @@ -13,6 +35,9 @@ class WirelessHIDDevice : public IOHIDDevice unsigned char GetBatteryLevel(void); IOReturn setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options); + + OSNumber* newLocationIDNumber() const; + OSString* newSerialNumberString() const; protected: bool handleStart(IOService *provider); void handleStop(IOService *provider); @@ -24,6 +49,7 @@ class WirelessHIDDevice : public IOHIDDevice static void _receivedData(void *target, WirelessDevice *sender, void *parameter); unsigned char battery; + char serialString[5]; }; #endif // __WIRELESSHIDDEVICE_H__ diff --git a/WirelessGamingReceiver/devices.h b/WirelessGamingReceiver/devices.h index 8a25aacb..6a8be577 100644 --- a/WirelessGamingReceiver/devices.h +++ b/WirelessGamingReceiver/devices.h @@ -1,7 +1,30 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2007 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 + 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 __DEVICES_H__ #define __DEVICES_H__ #define kIOWirelessDeviceType "Wireless360Device" + #define kIOWirelessBatteryLevel "BatteryLevel" -#endif // __DEVICES_H__ \ No newline at end of file +#endif // __DEVICES_H__ From ea5a94ea2d0bc275963db6848a676842ab6645e0 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 21 Apr 2007 18:41:43 +0000 Subject: [PATCH 05/66] Updated installer version --- Install360Controller/Install360Controller.packproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index a65ff396..bb5ec56c 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -310,13 +310,13 @@ IFPkgDescriptionTitle XBox 360 Controller Installer IFPkgDescriptionVersion - 0.04 + 0.05 Display Information CFBundleGetInfoString - Install360Controller 0.04 Copyrights © 2006-2007 Colin Munro + Install360Controller 0.05 Copyrights © 2006-2007 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -326,7 +326,7 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.04 + 0.05 Options @@ -356,7 +356,7 @@ IFMajorVersion 0 IFMinorVersion - 4 + 5 From 14c290855d2a6b4a1fa3a08f4efa90948f5ca161 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 21 Apr 2007 19:00:27 +0000 Subject: [PATCH 06/66] Preference Pane installation fixed, LED update of controllers on close better --- .../360Controller.xcodeproj/colin.mode1 | 114 ++------- .../360Controller.xcodeproj/colin.pbxuser | 34 --- Feedback360/Feedback360.xcodeproj/colin.mode1 | 14 +- .../Feedback360.xcodeproj/colin.pbxuser | 4 +- .../Install360Controller.packproj | 2 +- .../Pref360Control.xcodeproj/colin.mode1 | 67 +++-- .../Pref360Control.xcodeproj/colin.pbxuser | 44 ++-- Pref360Control/Pref360ControlPref.m | 2 +- .../colin.mode1 | 108 +------- .../colin.pbxuser | 34 --- .../colin.mode1 | 237 ++---------------- .../colin.pbxuser | 116 --------- 12 files changed, 129 insertions(+), 647 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 index c65a0edd..b5f82de3 100644 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -185,88 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B7B8F830BB8707F00081C48 - PBXProjectModuleLabel - _60Controller.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8F840BB8707F00081C48 - PBXProjectModuleLabel - _60Controller.cpp - _historyCapacity - 0 - bookmark - 3B7B8FB70BB8A3A400081C48 - history - - 3B7B8F800BB8707500081C48 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 518 115 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B7B8FB80BB8A3A400081C48 - PBXProjectModuleLabel - _60Controller.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FB90BB8A3A400081C48 - PBXProjectModuleLabel - _60Controller.h - _historyCapacity - 0 - bookmark - 3B7B8FBA0BB8A3A400081C48 - history - - 3B7B8F860BB8709400081C48 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 389 190 900 758 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -371,7 +290,7 @@ 186 RubberWindowFrame - 238 423 713 426 0 0 1280 1002 + 47 137 713 426 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -408,7 +327,7 @@ Frame {{0, 0}, {505, 0}} RubberWindowFrame - 238 423 713 426 0 0 1280 1002 + 47 137 713 426 0 0 1280 1002 Module PBXNavigatorGroup @@ -430,7 +349,7 @@ Frame {{0, 5}, {505, 380}} RubberWindowFrame - 238 423 713 426 0 0 1280 1002 + 47 137 713 426 0 0 1280 1002 Module XCDetailModule @@ -454,9 +373,9 @@ TableOfContents - 3B7B8F810BB8707F00081C48 + 3BCC40910BDA918C00B1619B 1CE0B1FE06471DED0097A5F4 - 3B7B8F820BB8707F00081C48 + 3BCC40920BDA918C00B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -591,12 +510,11 @@ WindowOrderList 3BCE45C10963706A00B69EDF + 1C530D57069F1CE1000CFCEE /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj - 3B7B8FB80BB8A3A400081C48 - 3B7B8F830BB8707F00081C48 WindowString - 238 423 713 426 0 0 1280 1002 + 47 137 713 426 0 0 1280 1002 WindowTools @@ -637,7 +555,7 @@ ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 23}, {1024, 191}} + {{0, 5}, {1024, 209}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -675,7 +593,7 @@ TableOfContents 3BCE45C10963706A00B69EDF - 3B7B8FBB0BB8A3A400081C48 + 3BCC40930BDA918C00B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -806,14 +724,12 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - IOMessage.h + StatusBarVisibility @@ -834,6 +750,8 @@ 212pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -869,8 +787,8 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3BCF4E4D097DB33D0049C083 - 3BCF4E4E097DB33D0049C083 + 3BCC40440BDA6D9500B1619B + 3BCC40450BDA6D9500B1619B 1CDD528C0622207200134675 1CD0528E0623707200166675 @@ -879,7 +797,7 @@ WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - + Identifier diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index 20ebd11f..a09a9f71 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -89,12 +89,6 @@ PBXPerProjectTemplateStateSaveDate = 198862999; PBXWorkspaceStateSaveDate = 198862999; }; - perUserProjectItems = { - 3B7B8F800BB8707500081C48 = 3B7B8F800BB8707500081C48 /* PBXBookmark */; - 3B7B8F860BB8709400081C48 = 3B7B8F860BB8709400081C48 /* PBXBookmark */; - 3B7B8FB70BB8A3A400081C48 = 3B7B8FB70BB8A3A400081C48 /* PBXTextBookmark */; - 3B7B8FBA0BB8A3A400081C48 = 3B7B8FBA0BB8A3A400081C48 /* PBXTextBookmark */; - }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { }; @@ -134,34 +128,6 @@ sepNavWindowFrame = "{{376, 7}, {900, 814}}"; }; }; - 3B7B8F800BB8707500081C48 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; - }; - 3B7B8F860BB8709400081C48 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - }; - 3B7B8FB70BB8A3A400081C48 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; - name = "_60Controller.cpp: 516"; - rLen = 347; - rLoc = 16271; - rType = 0; - vrLen = 1452; - vrLoc = 15585; - }; - 3B7B8FBA0BB8A3A400081C48 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = "_60Controller.h: newLocationIDNumber"; - rLen = 0; - rLoc = 3445; - rType = 0; - vrLen = 2018; - vrLoc = 1271; - }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; diff --git a/Feedback360/Feedback360.xcodeproj/colin.mode1 b/Feedback360/Feedback360.xcodeproj/colin.mode1 index 10192dc4..10ad1c5f 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.mode1 +++ b/Feedback360/Feedback360.xcodeproj/colin.mode1 @@ -292,7 +292,7 @@ 186 RubberWindowFrame - 172 539 690 397 0 0 1280 1002 + 308 400 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -329,7 +329,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 172 539 690 397 0 0 1280 1002 + 308 400 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -349,7 +349,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 172 539 690 397 0 0 1280 1002 + 308 400 690 397 0 0 1280 1002 Module XCDetailModule @@ -373,9 +373,9 @@ TableOfContents - 3B47DA420B93C92E00F200B8 + 3BCC40840BDA915400B1619B 1CE0B1FE06471DED0097A5F4 - 3B47DA430B93C92E00F200B8 + 3BCC40850BDA915400B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -513,7 +513,7 @@ /Users/colin/Projects2/OSX/360 Controller/Feedback360/Feedback360.xcodeproj WindowString - 172 539 690 397 0 0 1280 1002 + 308 400 690 397 0 0 1280 1002 WindowTools @@ -592,7 +592,7 @@ TableOfContents 3B2EF5820965C4A5007BFB7B - 3B47DA700B93C96D00F200B8 + 3BCC40880BDA916800B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 16c1df16..0cacda1b 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -33,8 +33,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 194234669; - PBXWorkspaceStateSaveDate = 194234669; + PBXPerProjectTemplateStateSaveDate = 198873428; + PBXWorkspaceStateSaveDate = 198873428; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index bb5ec56c..e4e9a207 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -82,7 +82,7 @@ Path Type 2 Privileges - 509 + 493 Type 3 UID diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 index 2a144651..3b4a32a5 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -185,7 +185,48 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3B4030190BDA964700D98BAE + PBXProjectModuleLabel + Pref360ControlPref.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B40301A0BDA964700D98BAE + PBXProjectModuleLabel + Pref360ControlPref.m + _historyCapacity + 0 + bookmark + 3B40301B0BDA964700D98BAE + history + + 3B4030150BDA961800D98BAE + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 221 179 900 758 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -291,7 +332,7 @@ 186 RubberWindowFrame - 511 605 690 397 0 0 1280 1002 + 564 128 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -328,7 +369,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 511 605 690 397 0 0 1280 1002 + 564 128 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -350,7 +391,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 511 605 690 397 0 0 1280 1002 + 564 128 690 397 0 0 1280 1002 Module XCDetailModule @@ -374,9 +415,9 @@ TableOfContents - 3BCC40610BDA753B00B1619B + 3B4030170BDA964700D98BAE 1CE0B1FE06471DED0097A5F4 - 3BCC40620BDA753B00B1619B + 3B4030180BDA964700D98BAE 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -510,12 +551,12 @@ 5 WindowOrderList - 1C530D57069F1CE1000CFCEE - /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj 3BBEAB15096B38D200F2E37B + /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj + 3B4030190BDA964700D98BAE WindowString - 511 605 690 397 0 0 1280 1002 + 564 128 690 397 0 0 1280 1002 WindowTools @@ -531,14 +572,12 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - Pref360ControlPref.m + StatusBarVisibility @@ -596,7 +635,7 @@ TableOfContents 3BBEAB15096B38D200F2E37B - 3BCC40630BDA753B00B1619B + 3B40301C0BDA964700D98BAE 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -607,7 +646,7 @@ WindowToolGUID 3BBEAB15096B38D200F2E37B WindowToolIsVisible - + FirstTimeWindowDisplayed diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser index c14d278a..23feacb5 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -57,12 +57,12 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198864362; - PBXWorkspaceStateSaveDate = 198864362; + PBXPerProjectTemplateStateSaveDate = 198874637; + PBXWorkspaceStateSaveDate = 198874637; }; perUserProjectItems = { - 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */ = 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */; - 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */ = 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */; + 3B4030150BDA961800D98BAE /* PBXBookmark */ = 3B4030150BDA961800D98BAE /* PBXBookmark */; + 3B40301B0BDA964700D98BAE /* PBXTextBookmark */ = 3B40301B0BDA964700D98BAE /* PBXTextBookmark */; }; sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; userBuildSettings = { @@ -84,6 +84,20 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; + 3B4030150BDA961800D98BAE /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + }; + 3B40301B0BDA964700D98BAE /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; + name = "Pref360ControlPref.m: 621"; + rLen = 0; + rLoc = 20932; + rType = 0; + vrLen = 2115; + vrLoc = 18924; + }; 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */ = { isa = PBXFileBreakpoint; actions = ( @@ -212,24 +226,6 @@ sepNavWindowFrame = "{{381, 88}, {900, 814}}"; }; }; - 3BCC40750BDA7CC900B1619B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - comments = "error: instance variable 'forceFeedback' is declared protected"; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - rLen = 1; - rLoc = 609; - rType = 1; - }; - 3BCC40760BDA7CC900B1619B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - name = "Pref360ControlPref.m: 619"; - rLen = 0; - rLoc = 20914; - rType = 0; - vrLen = 475; - vrLoc = 20576; - }; 8D202CE80486D31800D8A456 /* Pref360Control */ = { activeExec = 0; }; @@ -252,8 +248,8 @@ F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1022, 9534}}"; - sepNavSelRange = "{20914, 0}"; - sepNavVisRect = "{{0, 8538}, {459, 186}}"; + sepNavSelRange = "{20932, 0}"; + sepNavVisRect = "{{0, 8032}, {861, 685}}"; sepNavWindowFrame = "{{221, 123}, {900, 814}}"; }; }; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index a0843f18..22ded607 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -603,7 +603,6 @@ - (void)dealloc IONotificationPortDestroy(notifyPort); // Release device and info [self stopDevice]; - [self deleteDeviceList]; for (i = 0; i < [deviceArray count]; i++) { item = [deviceArray objectAtIndex:i]; @@ -618,6 +617,7 @@ - (void)dealloc escape.lpvOutBuffer = NULL; FFDeviceEscape([item ffDevice], &escape); } + [self deleteDeviceList]; [deviceArray release]; // Close master port mach_port_deallocate(mach_task_self(),masterPort); diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 index abe3dddd..693b0eee 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 @@ -185,88 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3BCC400F0BDA689100B1619B - PBXProjectModuleLabel - Wireless360Controller.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BCC40100BDA689100B1619B - PBXProjectModuleLabel - Wireless360Controller.cpp - _historyCapacity - 0 - bookmark - 3BCC40110BDA689100B1619B - history - - 3BCC3FF60BDA643C00B1619B - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {497, 472}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 113 146 497 513 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3BCC40120BDA689100B1619B - PBXProjectModuleLabel - Wireless360Controller.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BCC40130BDA689100B1619B - PBXProjectModuleLabel - Wireless360Controller.h - _historyCapacity - 0 - bookmark - 3BCC40140BDA689100B1619B - history - - 3BCC3FF80BDA669F00B1619B - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 81 312 1059 544 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -365,7 +284,7 @@ 186 RubberWindowFrame - 348 252 690 397 0 0 1280 1002 + 574 562 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -402,7 +321,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 348 252 690 397 0 0 1280 1002 + 574 562 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -424,7 +343,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 348 252 690 397 0 0 1280 1002 + 574 562 690 397 0 0 1280 1002 Module XCDetailModule @@ -448,9 +367,9 @@ TableOfContents - 3BCC400D0BDA689100B1619B + 3BCC408A0BDA917D00B1619B 1CE0B1FE06471DED0097A5F4 - 3BCC400E0BDA689100B1619B + 3BCC408B0BDA917D00B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -585,12 +504,11 @@ WindowOrderList 3B18E2510B92720F0093FA6E - 3BCC40120BDA689100B1619B - 3BCC400F0BDA689100B1619B + 1C530D57069F1CE1000CFCEE /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj WindowString - 348 252 690 397 0 0 1280 1002 + 574 562 690 397 0 0 1280 1002 WindowTools @@ -667,7 +585,7 @@ TableOfContents 3B18E2510B92720F0093FA6E - 3BCC40150BDA689100B1619B + 3BCC408C0BDA917D00B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -803,7 +721,7 @@ PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - <No Editor> + StatusBarVisibility @@ -861,8 +779,8 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3B3C65030BDA5E8200EA9F99 - 3B3C65040BDA5E8200EA9F99 + 3BCC40370BDA6D8600B1619B + 3BCC40380BDA6D8600B1619B 1CDD528C0622207200134675 1CD0528E0623707200166675 @@ -871,7 +789,7 @@ WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - + Identifier diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index 61dc9de9..7838c01b 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -34,12 +34,6 @@ PBXPerProjectTemplateStateSaveDate = 198863039; PBXWorkspaceStateSaveDate = 198863039; }; - perUserProjectItems = { - 3BCC3FF60BDA643C00B1619B = 3BCC3FF60BDA643C00B1619B /* PBXBookmark */; - 3BCC3FF80BDA669F00B1619B = 3BCC3FF80BDA669F00B1619B /* PBXBookmark */; - 3BCC40110BDA689100B1619B = 3BCC40110BDA689100B1619B /* PBXTextBookmark */; - 3BCC40140BDA689100B1619B = 3BCC40140BDA689100B1619B /* PBXTextBookmark */; - }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { }; @@ -91,32 +85,4 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; - 3BCC3FF60BDA643C00B1619B /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - }; - 3BCC3FF80BDA669F00B1619B /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - }; - 3BCC40110BDA689100B1619B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; - name = "Wireless360Controller.cpp: newTransportString"; - rLen = 0; - rLoc = 7787; - rType = 0; - vrLen = 683; - vrLoc = 6377; - }; - 3BCC40140BDA689100B1619B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */; - name = "Wireless360Controller.h: newTransportString"; - rLen = 0; - rLoc = 1818; - rType = 0; - vrLen = 1144; - vrLoc = 186; - }; } diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 index ef0ac907..1d53c5e5 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 @@ -185,208 +185,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B7B8FA30BB8A3A200081C48 - PBXProjectModuleLabel - WirelessHIDDevice.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FA40BB8A3A200081C48 - PBXProjectModuleLabel - WirelessHIDDevice.cpp - _historyCapacity - 0 - bookmark - 3B3C64FC0BDA5E8100EA9F99 - history - - 3B3C64F70BDA5B7600EA9F99 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 32 458 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B7B8FA60BB8A3A200081C48 - PBXProjectModuleLabel - WirelessDevice.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FA70BB8A3A200081C48 - PBXProjectModuleLabel - WirelessDevice.cpp - _historyCapacity - 0 - bookmark - 3B3C64FD0BDA5E8100EA9F99 - history - - 3BEA26D30BCD6A8400267C3A - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 107 320 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B7B8FAA0BB8A3A200081C48 - PBXProjectModuleLabel - WirelessDevice.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FAB0BB8A3A200081C48 - PBXProjectModuleLabel - WirelessDevice.h - _historyCapacity - 0 - bookmark - 3B3C64FE0BDA5E8100EA9F99 - history - - 3BEA26D50BCD6A8400267C3A - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 175 169 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B7B8FAD0BB8A3A200081C48 - PBXProjectModuleLabel - WirelessHIDDevice.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FAE0BB8A3A200081C48 - PBXProjectModuleLabel - WirelessHIDDevice.h - _historyCapacity - 0 - bookmark - 3B3C64FF0BDA5E8100EA9F99 - history - - 3BEA26D60BCD6A8400267C3A - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {1059, 503}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 155 150 1059 544 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B7B8FB30BB8A3A200081C48 - PBXProjectModuleLabel - WirelessGamingReceiver.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7B8FB40BB8A3A200081C48 - PBXProjectModuleLabel - WirelessGamingReceiver.h - _historyCapacity - 0 - bookmark - 3B3C65000BDA5E8100EA9F99 - history - - 3BEA26D70BCD6A8400267C3A - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {688, 361}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 481 168 688 402 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -420,8 +219,6 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs @@ -486,7 +283,7 @@ 186 RubberWindowFrame - 42 150 690 397 0 0 1280 1002 + 7 576 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -523,7 +320,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 42 150 690 397 0 0 1280 1002 + 7 576 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -531,6 +328,8 @@ 0pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -543,7 +342,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 42 150 690 397 0 0 1280 1002 + 7 576 690 397 0 0 1280 1002 Module XCDetailModule @@ -567,9 +366,9 @@ TableOfContents - 3B3C64FA0BDA5E8100EA9F99 + 3BCC408E0BDA918500B1619B 1CE0B1FE06471DED0097A5F4 - 3B3C64FB0BDA5E8100EA9F99 + 3BCC408F0BDA918500B1619B 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -703,16 +502,12 @@ 5 WindowOrderList - 3B7B8FB30BB8A3A200081C48 - 3B7B8FAD0BB8A3A200081C48 - 3B7B8FAA0BB8A3A200081C48 - 3B7B8FA60BB8A3A200081C48 - /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj 1C530D57069F1CE1000CFCEE - 3B7B8FA30BB8A3A200081C48 + 3B21ED2D0B8E33A000B5CACA + /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj WindowString - 42 150 690 397 0 0 1280 1002 + 7 576 690 397 0 0 1280 1002 WindowTools @@ -789,7 +584,7 @@ TableOfContents 3B21ED2D0B8E33A000B5CACA - 3BD08D9F0BB8A54800606F66 + 3BCC40320BDA6D7200B1619B 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -925,7 +720,7 @@ PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - WirelessHIDDevice.cpp + StatusBarVisibility @@ -983,8 +778,8 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3B3C64E60BDA5B3400EA9F99 - 3B3C64E70BDA5B3400EA9F99 + 3BCC40340BDA6D7200B1619B + 3BCC40350BDA6D7200B1619B 1CDD528C0622207200134675 1CD0528E0623707200166675 @@ -993,7 +788,7 @@ WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - + Identifier diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser index 451b75c5..61039573 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -39,18 +39,6 @@ PBXPerProjectTemplateStateSaveDate = 198861858; PBXWorkspaceStateSaveDate = 198861858; }; - perUserProjectItems = { - 3B3C64F70BDA5B7600EA9F99 = 3B3C64F70BDA5B7600EA9F99 /* PBXTextBookmark */; - 3B3C64FC0BDA5E8100EA9F99 = 3B3C64FC0BDA5E8100EA9F99 /* PBXTextBookmark */; - 3B3C64FD0BDA5E8100EA9F99 = 3B3C64FD0BDA5E8100EA9F99 /* PBXTextBookmark */; - 3B3C64FE0BDA5E8100EA9F99 = 3B3C64FE0BDA5E8100EA9F99 /* PBXTextBookmark */; - 3B3C64FF0BDA5E8100EA9F99 = 3B3C64FF0BDA5E8100EA9F99 /* PBXTextBookmark */; - 3B3C65000BDA5E8100EA9F99 = 3B3C65000BDA5E8100EA9F99 /* PBXTextBookmark */; - 3BEA26D30BCD6A8400267C3A = 3BEA26D30BCD6A8400267C3A /* PBXTextBookmark */; - 3BEA26D50BCD6A8400267C3A = 3BEA26D50BCD6A8400267C3A /* PBXTextBookmark */; - 3BEA26D60BCD6A8400267C3A = 3BEA26D60BCD6A8400267C3A /* PBXTextBookmark */; - 3BEA26D70BCD6A8400267C3A = 3BEA26D70BCD6A8400267C3A /* PBXTextBookmark */; - }; sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; userBuildSettings = { }; @@ -110,70 +98,6 @@ sepNavWindowFrame = "{{107, 264}, {1059, 600}}"; }; }; - 3B3C64F60BDA5B7600EA9F99 /* WirelessHIDDevice.cpp */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.cpp.cpp; - name = WirelessHIDDevice.cpp; - path = "/Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessHIDDevice.cpp"; - sourceTree = ""; - }; - 3B3C64F70BDA5B7600EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B3C64F60BDA5B7600EA9F99 /* WirelessHIDDevice.cpp */; - rLen = 5; - rLoc = 5235; - rType = 0; - }; - 3B3C64FC0BDA5E8100EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */; - name = "WirelessHIDDevice.cpp: 150"; - rLen = 0; - rLoc = 5328; - rType = 0; - vrLen = 857; - vrLoc = 3348; - }; - 3B3C64FD0BDA5E8100EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */; - name = "WirelessDevice.cpp: 70"; - rLen = 0; - rLoc = 2910; - rType = 0; - vrLen = 764; - vrLoc = 1260; - }; - 3B3C64FE0BDA5E8100EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; - name = "WirelessDevice.h: 23"; - rLen = 0; - rLoc = 1560; - rType = 0; - vrLen = 874; - vrLoc = 0; - }; - 3B3C64FF0BDA5E8100EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - name = "WirelessHIDDevice.h: 18"; - rLen = 0; - rLoc = 1438; - rType = 0; - vrLen = 950; - vrLoc = 0; - }; - 3B3C65000BDA5E8100EA9F99 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; - name = "WirelessGamingReceiver.h: 32"; - rLen = 0; - rLoc = 1728; - rType = 0; - vrLen = 702; - vrLoc = 365; - }; 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */ = { isa = XCBreakpointsBucket; name = "Project Breakpoints"; @@ -230,44 +154,4 @@ sepNavWindowFrame = "{{61, 355}, {1059, 600}}"; }; }; - 3BEA26D30BCD6A8400267C3A /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */; - name = "WirelessDevice.cpp: 70"; - rLen = 0; - rLoc = 2910; - rType = 0; - vrLen = 737; - vrLoc = 1287; - }; - 3BEA26D50BCD6A8400267C3A /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */; - name = "WirelessDevice.h: 23"; - rLen = 0; - rLoc = 1560; - rType = 0; - vrLen = 874; - vrLoc = 0; - }; - 3BEA26D60BCD6A8400267C3A /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - name = "WirelessHIDDevice.h: 18"; - rLen = 0; - rLoc = 1438; - rType = 0; - vrLen = 950; - vrLoc = 0; - }; - 3BEA26D70BCD6A8400267C3A /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */; - name = "WirelessGamingReceiver.h: 32"; - rLen = 0; - rLoc = 1728; - rType = 0; - vrLen = 702; - vrLoc = 365; - }; } From 36186875e870fca00f1318753a38fe8f04b84f30 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 6 Nov 2007 20:02:25 +0000 Subject: [PATCH 07/66] Fix the permissions in the installer --- .../Install360Controller.packproj | 551 +++++++++++++++++- 1 file changed, 547 insertions(+), 4 deletions(-) diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index e4e9a207..e688d8e6 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -1,5 +1,5 @@ - + Hierarchy @@ -127,7 +127,296 @@ Children - + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/Info.plist + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/MacOS/360Controller + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/MacOS + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Info.plist + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS/Feedback360 + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources/English.lproj/InfoPlist.strings + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources/English.lproj + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + + Children + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/Resources/English.lproj/InfoPlist.strings + Path Type + 2 + Privileges + 438 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/Resources/English.lproj + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents/Resources + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../360Controller/build/Deployment/360Controller.kext/Contents + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + GID 0 Path @@ -143,7 +432,134 @@ Children - + + + Children + + + Children + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Info.plist + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + + Children + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources/English.lproj/InfoPlist.strings + Path Type + 2 + Privileges + 438 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources/English.lproj + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + GID 0 Path @@ -159,7 +575,134 @@ Children - + + + Children + + + Children + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Info.plist + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + + Children + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources/English.lproj/InfoPlist.strings + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources/English.lproj + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 0 + Path + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + GID 0 Path From 33ed16252cdd88956b16d84618efa13b67c890d8 Mon Sep 17 00:00:00 2001 From: colin Date: Wed, 7 Nov 2007 02:42:19 +0000 Subject: [PATCH 08/66] Initial import of new daemon code --- 360Daemon/360Daemon.1 | 79 + 360Daemon/360Daemon.m | 147 ++ 360Daemon/360Daemon.xcodeproj/colin.mode1 | 1369 ++++++++++++++++ 360Daemon/360Daemon.xcodeproj/colin.mode1v3 | 1444 +++++++++++++++++ 360Daemon/360Daemon.xcodeproj/colin.pbxuser | 207 +++ 360Daemon/360Daemon.xcodeproj/project.pbxproj | 222 +++ 360Daemon/360Daemon_Prefix.pch | 7 + .../FoundationTool.pbproj/project.pbxproj | 259 +++ 8 files changed, 3734 insertions(+) create mode 100644 360Daemon/360Daemon.1 create mode 100644 360Daemon/360Daemon.m create mode 100644 360Daemon/360Daemon.xcodeproj/colin.mode1 create mode 100644 360Daemon/360Daemon.xcodeproj/colin.mode1v3 create mode 100644 360Daemon/360Daemon.xcodeproj/colin.pbxuser create mode 100644 360Daemon/360Daemon.xcodeproj/project.pbxproj create mode 100644 360Daemon/360Daemon_Prefix.pch create mode 100644 360Daemon/FoundationTool.pbproj/project.pbxproj diff --git a/360Daemon/360Daemon.1 b/360Daemon/360Daemon.1 new file mode 100644 index 00000000..b523c0c7 --- /dev/null +++ b/360Daemon/360Daemon.1 @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 7/8/07 \" DATE +.Dt 360Daemon 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm 360Daemon, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m new file mode 100644 index 00000000..0e2d0496 --- /dev/null +++ b/360Daemon/360Daemon.m @@ -0,0 +1,147 @@ +#import +#import +#import +#import +#import +#include + +#define CHECK_SHOWAGAIN @"Do not show this message again" + +mach_port_t masterPort; +IONotificationPortRef notifyPort; +CFRunLoopSourceRef notifySource; +io_iterator_t onIteratorWired; +io_iterator_t onIteratorWireless; +io_iterator_t onIteratorOther; + +CFUserNotificationRef activeAlert = nil; +CFRunLoopSourceRef activeAlertSource; + +enum { + kaPlugNCharge = 0, +}; + +NSString *alertStrings[] = { + @"You have attached a Microsoft plug'n'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!", +}; + +void releaseAlert(void) +{ + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), activeAlertSource, kCFRunLoopCommonModes); + CFRelease(activeAlertSource); + CFRelease(activeAlert); + activeAlertSource = nil; + activeAlert = nil; +} + +void callbackAlert(CFUserNotificationRef userNotification, CFOptionFlags responseFlags) +{ + if (responseFlags & CFUserNotificationCheckBoxChecked(0)) + { + NSLog(@"Checkbox checked!"); + } + releaseAlert(); + NSLog(@"Alert closed by user"); +} + +void ShowAlert(int index) +{ + SInt32 error; + NSArray *checkBoxes = [NSArray arrayWithObjects:CHECK_SHOWAGAIN, nil]; + NSArray *dictKeys = [NSArray arrayWithObjects: + (NSString*)kCFUserNotificationAlertHeaderKey, + (NSString*)kCFUserNotificationAlertMessageKey, + (NSString*)kCFUserNotificationCheckBoxTitlesKey, + nil]; + NSArray *dictValues = [NSArray arrayWithObjects: + @"XBox 360 Controller Driver", + alertStrings[index], + checkBoxes, + nil]; + NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:dictValues forKeys:dictKeys]; + + if (activeAlert != nil) + { + CFUserNotificationCancel(activeAlert); + releaseAlert(); + } + + activeAlert = CFUserNotificationCreate(kCFAllocatorDefault, 0, kCFUserNotificationPlainAlertLevel, &error, (CFDictionaryRef)dictionary); + NSLog(@"Error = %i", error); + activeAlertSource = CFUserNotificationCreateRunLoopSource(kCFAllocatorDefault, activeAlert, callbackAlert, 0); + CFRunLoopAddSource(CFRunLoopGetCurrent(), activeAlertSource, kCFRunLoopCommonModes); +} + +// Supported device - connecting - set settings? +static void callbackConnected(void *param,io_iterator_t iterator) +{ + io_service_t object = 0; + + while ((object = IOIteratorNext(iterator)) != 0) + { + if (IOObjectConformsTo(object, "WirelessHIDDevice") || IOObjectConformsTo(object, "Xbox360ControllerClass")) + { + // Supported device - load settings + if (IOObjectConformsTo(object, "Xbox360ControllerClass")) + NSLog(@"Got wired controller!"); + else + NSLog(@"Got wireless controller!"); + } + else + { + CFTypeRef vendorID = IORegistryEntrySearchCFProperty(object,kIOServicePlane,CFSTR("idVendor"),kCFAllocatorDefault,kIORegistryIterateRecursively | kIORegistryIterateParents); + CFTypeRef productID = IORegistryEntrySearchCFProperty(object,kIOServicePlane,CFSTR("idProduct"),kCFAllocatorDefault,kIORegistryIterateRecursively | kIORegistryIterateParents); + if ((vendorID != NULL) && (productID != NULL)) + { +// UInt32 idVendor = *((UInt32*)CFDataGetBytePtr(vendorID)); + UInt32 idVendor = [((NSNumber*)vendorID) unsignedIntValue]; +// UInt32 idProduct = *((UInt32*)CFDataGetBytePtr(productID)); + UInt32 idProduct = [((NSNumber*)productID) unsignedIntValue]; + if ((idVendor == 0x045e) && (idProduct == 0x028f)) + { + // Unsupported - plug'n'charge cable + ShowAlert(kaPlugNCharge); + } + } + if (vendorID != NULL) + CFRelease(vendorID); + if (productID != NULL) + CFRelease(productID); + } + IOObjectRelease(object); + } +} + +// Entry point +int main (int argc, const char * argv[]) { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + // Get master port, for accessing I/O Kit + IOMasterPort(MACH_PORT_NULL,&masterPort); + // Set up notification of USB device addition/removal + notifyPort=IONotificationPortCreate(masterPort); + notifySource=IONotificationPortGetRunLoopSource(notifyPort); + CFRunLoopAddSource(CFRunLoopGetCurrent(),notifySource,kCFRunLoopCommonModes); + // Start listening + // USB devices + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName), callbackConnected, NULL, &onIteratorOther); + callbackConnected(NULL, onIteratorOther); + // Wired 360 devices + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360ControllerClass"), callbackConnected, NULL, &onIteratorWired); + callbackConnected(NULL, onIteratorWired); + // Wireless 360 devices + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("WirelessHIDDevice"), callbackConnected, NULL, &onIteratorWireless); + callbackConnected(NULL, onIteratorWireless); + // Run loop + CFRunLoopRun(); + // Stop listening + IOObjectRelease(onIteratorOther); + IOObjectRelease(onIteratorWired); + IOObjectRelease(onIteratorWireless); + CFRunLoopRemoveSource(CFRunLoopGetCurrent(), notifySource, kCFRunLoopCommonModes); + CFRunLoopSourceInvalidate(notifySource); + IONotificationPortDestroy(notifyPort); + // End + [pool release]; + return 0; +} diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1 b/360Daemon/360Daemon.xcodeproj/colin.mode1 new file mode 100644 index 00000000..4486b7e0 --- /dev/null +++ b/360Daemon/360Daemon.xcodeproj/colin.mode1 @@ -0,0 +1,1369 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 3BD6F0F30C67F36500574E6A + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3BD6F0F40C67F36500574E6A + PBXProjectModuleLabel + 360Daemon.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BD6F0F50C67F36500574E6A + PBXProjectModuleLabel + 360Daemon.m + _historyCapacity + 0 + bookmark + 3BD3D8CC0CA0B5E7004F332A + history + + 3BE67E5D0C9F4B0700A68607 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {623, 487}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 14 469 623 528 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 08FB7794FE84155DC02AAC07 + 08FB7795FE84155DC02AAC07 + 1AB674ADFE9D54B511CA2CBB + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 3 + 1 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3BD3D8CA0CA0B5E7004F332A + 1CE0B1FE06471DED0097A5F4 + 3BD3D8CB0CA0B5E7004F332A + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3B1C2F880C9E057E00D37DB5 + /Users/colin/Projects2/OSX/360 Controller/360Daemon/360Daemon.xcodeproj + 3BD6F0F40C67F36500574E6A + + WindowString + 295 516 690 397 0 0 1280 1002 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {500, 218}} + RubberWindowFrame + 36 474 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 223}, {500, 236}} + RubberWindowFrame + 36 474 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 459pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3B1C2F880C9E057E00D37DB5 + 3BD3D8CD0CA0B5E7004F332A + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 36 474 500 500 0 0 1280 1002 + WindowToolGUID + 3B1C2F880C9E057E00D37DB5 + WindowToolIsVisible + + + + Identifier + windowTool.debugger + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {317, 164}} + {{317, 0}, {377, 164}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 164}} + {{0, 164}, {694, 216}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 380}} + RubberWindowFrame + 321 238 694 422 0 0 1440 878 + + Module + PBXDebugSessionModule + Proportion + 100% + + + Proportion + 100% + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CD10A99069EF8BA00B06720 + 1C0AD2AB069F1E9B00FABCE6 + 1C162984064C10D400B95A72 + 1C0AD2AC069F1E9B00FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 321 238 694 422 0 0 1440 878 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + 0 + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + Identifier + windowTool.debuggerConsole + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 650 41 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 358pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAAD065D492600B07095 + 1C78EAAE065D492600B07095 + 1C78EAAC065D492600B07095 + + WindowString + 650 41 440 400 0 0 1280 1002 + + + Identifier + windowTool.run + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {460, 159}} + RubberWindowFrame + 316 696 459 200 0 0 1280 1002 + + Module + PBXRunSessionModule + Proportion + 159pt + + + Proportion + 159pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 1C0AD2B4069F1EA900FABCE6 + 1CD0528B0623707200166675 + 1C0AD2B5069F1EA900FABCE6 + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 316 696 459 200 0 0 1280 1002 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 new file mode 100644 index 00000000..b899c42f --- /dev/null +++ b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 @@ -0,0 +1,1444 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + 3B05AB290CE0F60B00DF20B5 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + OpenEditors + + + Content + + PBXProjectModuleGUID + 3B7A8E570CE15573005BB45B + PBXProjectModuleLabel + 360Daemon.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B7A8E580CE15573005BB45B + PBXProjectModuleLabel + 360Daemon.m + _historyCapacity + 0 + bookmark + 3B7A8E720CE15907005BB45B + history + + 3B7A8E6D0CE15840005BB45B + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {623, 487}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 14 469 623 528 0 0 1280 1002 + + + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + active-buildstyle-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-goOrGo + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 08FB7794FE84155DC02AAC07 + 08FB7795FE84155DC02AAC07 + 08FB779DFE84155DC02AAC07 + 1AB674ADFE9D54B511CA2CBB + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 5 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 338}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 356}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + MyNewFile14.java + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {482, 0}} + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 5}, {482, 351}} + RubberWindowFrame + 295 516 690 397 0 0 1280 1002 + + Module + XCDetailModule + Proportion + 351pt + + + Proportion + 482pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3B7A8E550CE15573005BB45B + 1CE0B1FE06471DED0097A5F4 + 3B7A8E560CE15573005BB45B + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3B7A8E630CE15573005BB45B + 3B7A8E640CE15573005BB45B + 3B7A8E650CE15573005BB45B + 1CD10A99069EF8BA00B06720 + /Users/colin/Projects2/OSX/360 Controller/360Daemon/360Daemon.xcodeproj + 3B05AB450CE0FB7A00DF20B5 + 3B7A8E700CE15840005BB45B + 1C78EAAD065D492600B07095 + 3B7A8E570CE15573005BB45B + + WindowString + 295 516 690 397 0 0 1280 1002 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {500, 218}} + RubberWindowFrame + 36 474 500 500 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 218pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 223}, {500, 236}} + RubberWindowFrame + 36 474 500 500 0 0 1280 1002 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 459pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3B05AB450CE0FB7A00DF20B5 + 3B7A8E280CE14E18005BB45B + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowString + 36 474 500 500 0 0 1280 1002 + WindowToolGUID + 3B05AB450CE0FB7A00DF20B5 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {316, 185}} + {{316, 0}, {378, 185}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 185}} + {{0, 185}, {694, 196}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {694, 381}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 120 + Value + 85 + Summary + 148 + + Frame + {{316, 0}, {378, 185}} + RubberWindowFrame + 252 294 694 422 0 0 1280 1002 + + RubberWindowFrame + 252 294 694 422 0 0 1280 1002 + + Module + PBXDebugSessionModule + Proportion + 381pt + + + Proportion + 381pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 3B7A8E5B0CE15573005BB45B + 1C162984064C10D400B95A72 + 3B7A8E5C0CE15573005BB45B + 3B7A8E5D0CE15573005BB45B + 3B7A8E5E0CE15573005BB45B + 3B7A8E5F0CE15573005BB45B + 3B7A8E600CE15573005BB45B + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 252 294 694 422 0 0 1280 1002 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {440, 358}} + RubberWindowFrame + 631 257 440 400 0 0 1280 1002 + + Module + PBXDebugCLIModule + Proportion + 358pt + + + Proportion + 359pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + 3B7A8E610CE15573005BB45B + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 631 257 440 400 0 0 1280 1002 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + FirstTimeWindowDisplayed + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + + Layout + + + Dock + + + BecomeActive + + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/360Daemon/360Daemon.xcodeproj/colin.pbxuser b/360Daemon/360Daemon.xcodeproj/colin.pbxuser new file mode 100644 index 00000000..8d922087 --- /dev/null +++ b/360Daemon/360Daemon.xcodeproj/colin.pbxuser @@ -0,0 +1,207 @@ +// !$*UTF8*$! +{ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + activeArchitecture = ppc; + activeBuildConfigurationName = Debug; + activeExecutable = 3BD6F0E90C67E41F00574E6A /* 360Daemon */; + activeTarget = 8DD76F960486AA7600D96B5E /* 360Daemon */; + addToTargets = ( + 8DD76F960486AA7600D96B5E /* 360Daemon */, + ); + breakpoints = ( + 3B7A8E510CE154B9005BB45B /* 360Daemon.m:94 */, + 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:69 */, + 3B7A8E740CE1595C005BB45B /* 360Daemon.m:82 */, + ); + codeSenseManager = 3BD6F0F00C67E43E00574E6A /* Code sense */; + executables = ( + 3BD6F0E90C67E41F00574E6A /* 360Daemon */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 243, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 216085581; + PBXWorkspaceStateSaveDate = 216085581; + }; + perUserProjectItems = { + 3B7A8E590CE15573005BB45B /* PBXTextBookmark */ = 3B7A8E590CE15573005BB45B /* PBXTextBookmark */; + 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */ = 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */; + 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */ = 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */; + 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */ = 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */; + 3B7A8E720CE15907005BB45B /* PBXTextBookmark */ = 3B7A8E720CE15907005BB45B /* PBXTextBookmark */; + }; + sourceControlManager = 3BD6F0EF0C67E43E00574E6A /* Source Control */; + userBuildSettings = { + }; + }; + 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1670, 1988}}"; + sepNavSelRange = "{3008, 0}"; + sepNavVisRange = "{2016, 1625}"; + sepNavVisRect = "{{0, 1099}, {584, 455}}"; + sepNavWindowFrame = "{{14, 413}, {623, 584}}"; + }; + }; + 3B7A8E510CE154B9005BB45B /* 360Daemon.m:94 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + functionName = "callbackConnected()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 94; + location = 360Daemon; + modificationTime = 216095252.3851; + state = 2; + }; + 3B7A8E590CE15573005BB45B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + rLen = 0; + rLoc = 72; + rType = 1; + }; + 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + name = "360Daemon.m: 71"; + rLen = 0; + rLoc = 2464; + rType = 0; + vrLen = 1191; + vrLoc = 1607; + }; + 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:69 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + functionName = "ShowAlert()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 69; + location = 360Daemon; + modificationTime = 216095252.385363; + state = 2; + }; + 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + rLen = 0; + rLoc = 68; + rType = 1; + }; + 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + name = "360Daemon.m: 68"; + rLen = 0; + rLoc = 2086; + rType = 0; + vrLen = 1228; + vrLoc = 1325; + }; + 3B7A8E720CE15907005BB45B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + name = "360Daemon.m: 87"; + rLen = 0; + rLoc = 3039; + rType = 0; + vrLen = 1625; + vrLoc = 2016; + }; + 3B7A8E740CE1595C005BB45B /* 360Daemon.m:82 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; + functionName = "callbackConnected()"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 82; + location = 360Daemon; + modificationTime = 216095265.934186; + state = 2; + }; + 3BD6F0E90C67E41F00574E6A /* 360Daemon */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = 360Daemon; + savedGlobals = { + }; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + 3BD6F0EF0C67E43E00574E6A /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 3BD6F0F00C67E43E00574E6A /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 8DD76F960486AA7600D96B5E /* 360Daemon */ = { + activeExec = 0; + executables = ( + 3BD6F0E90C67E41F00574E6A /* 360Daemon */, + ); + }; +} diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj new file mode 100644 index 00000000..afc0eb9a --- /dev/null +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -0,0 +1,222 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 3B7A8E2C0CE14E38005BB45B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */; }; + 8DD76F9A0486AA7600D96B5E /* 360Daemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; settings = {ATTRIBUTES = (); }; }; + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; + 8DD76F9F0486AA7600D96B5E /* 360Daemon.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859EA3029092ED04C91782 /* 360Daemon.1 */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 8DD76F9F0486AA7600D96B5E /* 360Daemon.1 in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 360Daemon.m; sourceTree = ""; }; + 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 360Daemon_Prefix.pch; sourceTree = ""; }; + 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 8DD76FA10486AA7600D96B5E /* 360Daemon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = 360Daemon; sourceTree = BUILT_PRODUCTS_DIR; }; + C6859EA3029092ED04C91782 /* 360Daemon.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = 360Daemon.1; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F9B0486AA7600D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */, + 3B7A8E2C0CE14E38005BB45B /* IOKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* 360Daemon */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + C6859EA2029092E104C91782 /* Documentation */, + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = 360Daemon; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */, + 08FB7796FE84155DC02AAC07 /* 360Daemon.m */, + ); + name = Source; + sourceTree = ""; + }; + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */, + 08FB779EFE84155DC02AAC07 /* Foundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76FA10486AA7600D96B5E /* 360Daemon */, + ); + name = Products; + sourceTree = ""; + }; + C6859EA2029092E104C91782 /* Documentation */ = { + isa = PBXGroup; + children = ( + C6859EA3029092ED04C91782 /* 360Daemon.1 */, + ); + name = Documentation; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F960486AA7600D96B5E /* 360Daemon */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "360Daemon" */; + buildPhases = ( + 8DD76F990486AA7600D96B5E /* Sources */, + 8DD76F9B0486AA7600D96B5E /* Frameworks */, + 8DD76F9E0486AA7600D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = 360Daemon; + productInstallPath = "$(HOME)/bin"; + productName = 360Daemon; + productReference = 8DD76FA10486AA7600D96B5E /* 360Daemon */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "360Daemon" */; + compatibilityVersion = "Xcode 2.4"; + hasScannedForEncodings = 1; + mainGroup = 08FB7794FE84155DC02AAC07 /* 360Daemon */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F960486AA7600D96B5E /* 360Daemon */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F990486AA7600D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9A0486AA7600D96B5E /* 360Daemon.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB927508733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = 360Daemon_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = 360Daemon; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB927608733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = 360Daemon_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = 360Daemon; + }; + name = Release; + }; + 1DEB927908733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB927A08733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "360Daemon" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927508733DD40010E9CD /* Debug */, + 1DEB927608733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "360Daemon" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927908733DD40010E9CD /* Debug */, + 1DEB927A08733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/360Daemon/360Daemon_Prefix.pch b/360Daemon/360Daemon_Prefix.pch new file mode 100644 index 00000000..d0b6018a --- /dev/null +++ b/360Daemon/360Daemon_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the '360Daemon' target in the '360Daemon' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/360Daemon/FoundationTool.pbproj/project.pbxproj b/360Daemon/FoundationTool.pbproj/project.pbxproj new file mode 100644 index 00000000..728d4247 --- /dev/null +++ b/360Daemon/FoundationTool.pbproj/project.pbxproj @@ -0,0 +1,259 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 39; + objects = { + 014CEA4F0018CE4811CA2923 = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + ZERO_LINK = YES; + }; + isa = PBXBuildStyle; + name = Development; + }; + 014CEA500018CE4811CA2923 = { + buildRules = ( + ); + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + ZERO_LINK = NO; + }; + isa = PBXBuildStyle; + name = Deployment; + }; +//010 +//011 +//012 +//013 +//014 +//080 +//081 +//082 +//083 +//084 + 08FB7793FE84155DC02AAC07 = { + buildSettings = { + }; + buildStyles = ( + 014CEA4F0018CE4811CA2923, + 014CEA500018CE4811CA2923, + ); + hasScannedForEncodings = 1; + isa = PBXProject; + mainGroup = 08FB7794FE84155DC02AAC07; + projectDirPath = ""; + targets = ( + 8DD76F960486AA7600D96B5E, + ); + }; + 08FB7794FE84155DC02AAC07 = { + children = ( + 08FB7795FE84155DC02AAC07, + C6859EA2029092E104C91782, + 08FB779DFE84155DC02AAC07, + 1AB674ADFE9D54B511CA2CBB, + ); + isa = PBXGroup; + name = "«PROJECTNAME»"; + refType = 4; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 = { + children = ( + 32A70AAB03705E1F00C91783, + 08FB7796FE84155DC02AAC07, + ); + isa = PBXGroup; + name = Source; + refType = 4; + sourceTree = ""; + }; + 08FB7796FE84155DC02AAC07 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.objc; + path = "«PROJECTNAME».m"; + refType = 4; + sourceTree = ""; + }; + 08FB779DFE84155DC02AAC07 = { + children = ( + 08FB779EFE84155DC02AAC07, + ); + isa = PBXGroup; + name = "External Frameworks and Libraries"; + refType = 4; + sourceTree = ""; + }; + 08FB779EFE84155DC02AAC07 = { + fallbackIsa = PBXFileReference; + isa = PBXFrameworkReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = /System/Library/Frameworks/Foundation.framework; + refType = 0; + sourceTree = ""; + }; +//080 +//081 +//082 +//083 +//084 +//1A0 +//1A1 +//1A2 +//1A3 +//1A4 + 1AB674ADFE9D54B511CA2CBB = { + children = ( + 8DD76FA10486AA7600D96B5E, + ); + isa = PBXGroup; + name = Products; + refType = 4; + sourceTree = ""; + }; +//1A0 +//1A1 +//1A2 +//1A3 +//1A4 +//320 +//321 +//322 +//323 +//324 + 32A70AAB03705E1F00C91783 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = file; + path = "«PROJECTNAME»_Prefix.pch"; + refType = 4; + sourceTree = ""; + }; +//320 +//321 +//322 +//323 +//324 +//8D0 +//8D1 +//8D2 +//8D3 +//8D4 + 8DD76F960486AA7600D96B5E = { + buildPhases = ( + 8DD76F990486AA7600D96B5E, + 8DD76F9B0486AA7600D96B5E, + 8DD76F9E0486AA7600D96B5E, + ); + buildRules = ( + ); + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "«PROJECTNAME»_Prefix.pch"; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = "«PROJECTNAME»"; + }; + dependencies = ( + ); + isa = PBXNativeTarget; + name = "«PROJECTNAME»"; + productInstallPath = "$(HOME)/bin"; + productName = "«PROJECTNAME»"; + productReference = 8DD76FA10486AA7600D96B5E; + productType = "com.apple.product-type.tool"; + }; + 8DD76F990486AA7600D96B5E = { + buildActionMask = 2147483647; + files = ( + 8DD76F9A0486AA7600D96B5E, + ); + isa = PBXSourcesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 8DD76F9A0486AA7600D96B5E = { + fileRef = 08FB7796FE84155DC02AAC07; + isa = PBXBuildFile; + settings = { + ATTRIBUTES = ( + ); + }; + }; + 8DD76F9B0486AA7600D96B5E = { + buildActionMask = 2147483647; + files = ( + 8DD76F9C0486AA7600D96B5E, + ); + isa = PBXFrameworksBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; + 8DD76F9C0486AA7600D96B5E = { + fileRef = 08FB779EFE84155DC02AAC07; + isa = PBXBuildFile; + settings = { + }; + }; + 8DD76F9E0486AA7600D96B5E = { + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 8DD76F9F0486AA7600D96B5E, + ); + isa = PBXCopyFilesBuildPhase; + runOnlyForDeploymentPostprocessing = 1; + }; + 8DD76F9F0486AA7600D96B5E = { + fileRef = C6859EA3029092ED04C91782; + isa = PBXBuildFile; + settings = { + }; + }; + 8DD76FA10486AA7600D96B5E = { + explicitFileType = "compiled.mach-o.executable"; + includeInIndex = 0; + isa = PBXFileReference; + path = "«PROJECTNAME»"; + refType = 3; + sourceTree = BUILT_PRODUCTS_DIR; + }; +//8D0 +//8D1 +//8D2 +//8D3 +//8D4 +//C60 +//C61 +//C62 +//C63 +//C64 + C6859EA2029092E104C91782 = { + children = ( + C6859EA3029092ED04C91782, + ); + isa = PBXGroup; + name = Documentation; + refType = 4; + sourceTree = ""; + }; + C6859EA3029092ED04C91782 = { + isa = PBXFileReference; + lastKnownFileType = file; + path = "«PROJECTNAME».1"; + refType = 4; + sourceTree = ""; + }; + }; + rootObject = 08FB7793FE84155DC02AAC07; +} From 4bbc50bd20d26fbca9c03882944f387be6a9efd1 Mon Sep 17 00:00:00 2001 From: colin Date: Wed, 7 Nov 2007 02:47:21 +0000 Subject: [PATCH 09/66] Update the cable name in the info string --- 360Daemon/360Daemon.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 0e2d0496..b98fc000 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -22,7 +22,7 @@ }; NSString *alertStrings[] = { - @"You have attached a Microsoft plug'n'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!", }; void releaseAlert(void) From 7a5927c0be3f1b0fcd8302e02e93841e31bf8821 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 9 Nov 2007 03:00:49 +0000 Subject: [PATCH 10/66] Update code to use settings database instead of device itself to get info, and to rely on daemon instead --- .../Pref360Control.xcodeproj/project.pbxproj | 73 +++---------------- Pref360Control/Pref360ControlPref.m | 11 ++- 2 files changed, 18 insertions(+), 66 deletions(-) diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index 44fee4c3..b7ebf89f 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -12,6 +12,8 @@ 3B47D9F30B93C31400F200B8 /* batt0.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EF0B93C31400F200B8 /* batt0.tif */; }; 3B47D9F40B93C31400F200B8 /* batt3.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9F00B93C31400F200B8 /* batt3.tif */; }; 3B47D9F50B93C31400F200B8 /* batt2.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9F10B93C31400F200B8 /* batt2.tif */; }; + 3B86987F0CE2A22100283CEC /* ControlPrefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B86987D0CE2A22100283CEC /* ControlPrefs.h */; }; + 3B8698800CE2A22100283CEC /* ControlPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B86987E0CE2A22100283CEC /* ControlPrefs.m */; }; 3BBEAB01096B2C4C00F2E37B /* MyAnalogStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; }; 3BBEAB02096B2C4C00F2E37B /* MyAnalogStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; }; 3BBEAB05096B2C5200F2E37B /* MyCentreButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; }; @@ -36,32 +38,6 @@ 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F506C035013D953901CA16C8 /* PreferencePanes.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 06F27B30FFEEEFEF11CA0E56 /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUGGING_SYMBOLS = YES; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - OPTIMIZATION_CFLAGS = "-O0"; - ZERO_LINK = YES; - }; - name = Development; - }; - 06F27B31FFEEEFEF11CA0E56 /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - ZERO_LINK = NO; - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -73,6 +49,8 @@ 3B47D9EF0B93C31400F200B8 /* batt0.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt0.tif; sourceTree = ""; }; 3B47D9F00B93C31400F200B8 /* batt3.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt3.tif; sourceTree = ""; }; 3B47D9F10B93C31400F200B8 /* batt2.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt2.tif; sourceTree = ""; }; + 3B86987D0CE2A22100283CEC /* ControlPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ControlPrefs.h; path = ../360Daemon/ControlPrefs.h; sourceTree = SOURCE_ROOT; }; + 3B86987E0CE2A22100283CEC /* ControlPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ControlPrefs.m; path = ../360Daemon/ControlPrefs.m; sourceTree = SOURCE_ROOT; }; 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyAnalogStick.h; sourceTree = ""; }; 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyAnalogStick.m; sourceTree = ""; }; 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCentreButtons.m; sourceTree = ""; }; @@ -151,6 +129,8 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 3B86987D0CE2A22100283CEC /* ControlPrefs.h */, + 3B86987E0CE2A22100283CEC /* ControlPrefs.m */, F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */, F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */, 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */, @@ -220,6 +200,7 @@ 3BBEAB0D096B2C5B00F2E37B /* MyMainButtons.h in Headers */, 3BBEAB11096B2C6000F2E37B /* MyShoulderButton.h in Headers */, 3BC41F32096C85CB00664A42 /* DeviceItem.h in Headers */, + 3B86987F0CE2A22100283CEC /* ControlPrefs.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -238,35 +219,6 @@ ); buildRules = ( ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ""; - GCC_ENABLE_TRIGRAPHS = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = Pref360Control_Prefix.pch; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - HEADER_SEARCH_PATHS = ""; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; - LIBRARY_SEARCH_PATHS = ""; - LIBRARY_STYLE = Bundle; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-bundle", - "-twolevel_namespace", - ); - OTHER_REZFLAGS = ""; - PRODUCT_NAME = Pref360Control; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = prefPane; - }; dependencies = ( ); name = Pref360Control; @@ -281,15 +233,11 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 3BBDC6A9097946B50023AAD8 /* Build configuration list for PBXProject "Pref360Control" */; - buildSettings = { - }; - buildStyles = ( - 06F27B30FFEEEFEF11CA0E56 /* Development */, - 06F27B31FFEEEFEF11CA0E56 /* Deployment */, - ); + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* Pref360Control */; projectDirPath = ""; + projectRoot = ""; targets = ( 8D202CE80486D31800D8A456 /* Pref360Control */, ); @@ -336,6 +284,7 @@ 3BBEAB0E096B2C5B00F2E37B /* MyMainButtons.m in Sources */, 3BBEAB12096B2C6000F2E37B /* MyShoulderButton.m in Sources */, 3BC41F33096C85CB00664A42 /* DeviceItem.m in Sources */, + 3B8698800CE2A22100283CEC /* ControlPrefs.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -487,7 +436,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 10.3; MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Deployment; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 22ded607..e2ef7f98 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -24,6 +24,7 @@ #include #import "Pref360ControlPref.h" #import "DeviceItem.h" +#import "ControlPrefs.h" #define NO_ITEMS @"No devices found" @@ -285,7 +286,7 @@ - (void)stopDevice if(registryEntry==0) return; [self testMotorsLarge:0 small:0]; [self setMotorOverride:FALSE]; - [self updateLED:0x00]; +// [self updateLED:0x00]; if(hidQueue!=NULL) { CFRunLoopSourceRef eventSource; @@ -431,7 +432,8 @@ - (void)startDevice } // Read existing properties { - CFDictionaryRef dict=(CFDictionaryRef)IORegistryEntryCreateCFProperty(registryEntry,CFSTR("DeviceData"),NULL,0); +// CFDictionaryRef dict=(CFDictionaryRef)IORegistryEntryCreateCFProperty(registryEntry,CFSTR("DeviceData"),NULL,0); + CFDictionaryRef dict = (CFDictionaryRef)[GetController(GetSerialNumber(registryEntry)) retain]; if(dict!=0) { CFBooleanRef boolValue; CFNumberRef intValue; @@ -478,7 +480,7 @@ - (void)startDevice // Enable GUI components [self inputEnable:YES]; // Set LED and manual motor control - [self updateLED:0x0a]; +// [self updateLED:0x0a]; [self setMotorOverride:TRUE]; [self testMotorsLarge:0 small:0]; largeMotor=0; @@ -661,7 +663,8 @@ - (void)changeSetting:(id)sender // Create dictionary dict=CFDictionaryCreate(NULL,(const void**)keys,(const void**)values,sizeof(keys)/sizeof(keys[0]),&kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks); // Set property - IORegistryEntrySetCFProperties(registryEntry,dict); + IORegistryEntrySetCFProperties(registryEntry, dict); + SetController(GetSerialNumber(registryEntry), (NSDictionary*)dict); // Update UI [leftStick setLinked:([leftLinked state]==NSOnState)]; [leftStick setDeadzone:[leftStickDeadzone doubleValue]]; From 1836c4431dcfebb6f624aae8f12b26f42a733208 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 9 Nov 2007 03:04:13 +0000 Subject: [PATCH 11/66] Update daemon to set LED to incremented number, get settings from storage and set controller, and set icon for alert --- 360Daemon/360ControlDaemon | 25 ++++ 360Daemon/360Daemon.m | 75 +++++++++--- 360Daemon/360Daemon.xcodeproj/project.pbxproj | 16 +++ 360Daemon/Alert.tif | Bin 0 -> 12076 bytes 360Daemon/ControlPrefs.h | 26 ++++ 360Daemon/ControlPrefs.m | 69 +++++++++++ 360Daemon/StartupParameters.plist | 21 ++++ .../Install360Controller.packproj | 115 ++++++++++++++++++ 8 files changed, 329 insertions(+), 18 deletions(-) create mode 100644 360Daemon/360ControlDaemon create mode 100644 360Daemon/Alert.tif create mode 100644 360Daemon/ControlPrefs.h create mode 100644 360Daemon/ControlPrefs.m create mode 100644 360Daemon/StartupParameters.plist diff --git a/360Daemon/360ControlDaemon b/360Daemon/360ControlDaemon new file mode 100644 index 00000000..1ed4f4c2 --- /dev/null +++ b/360Daemon/360ControlDaemon @@ -0,0 +1,25 @@ +#!/bin/sh +. /etc/rc.common + +# The start subroutine +StartService() { + /Library/StartupItems/360ControlDaemon/360Daemon & +} + +# The stop subroutine +StopService() { + killall -TERM 360Daemon + sleep 10 + killall -9 360Daemon +} + +# The restart subroutine +RestartService() { + killall -TERM 360Daemon + sleep 10 + killall -9 360Daemon + sleep 10 + /Library/StartupItems/360ControlDaemon/360Daemon & +} + +RunService "$1" diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index b98fc000..636a2426 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -4,6 +4,8 @@ #import #import #include +#import +#include "ControlPrefs.h" #define CHECK_SHOWAGAIN @"Do not show this message again" @@ -13,9 +15,12 @@ io_iterator_t onIteratorWired; io_iterator_t onIteratorWireless; io_iterator_t onIteratorOther; +BOOL foundWirelessReceiver; +int controllerCounter = 0; CFUserNotificationRef activeAlert = nil; CFRunLoopSourceRef activeAlertSource; +int activeAlertIndex; enum { kaPlugNCharge = 0, @@ -25,7 +30,7 @@ @"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!", }; -void releaseAlert(void) +static void releaseAlert(void) { CFRunLoopRemoveSource(CFRunLoopGetCurrent(), activeAlertSource, kCFRunLoopCommonModes); CFRelease(activeAlertSource); @@ -34,14 +39,14 @@ void releaseAlert(void) activeAlert = nil; } -void callbackAlert(CFUserNotificationRef userNotification, CFOptionFlags responseFlags) +static void callbackAlert(CFUserNotificationRef userNotification, CFOptionFlags responseFlags) { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + if (responseFlags & CFUserNotificationCheckBoxChecked(0)) - { - NSLog(@"Checkbox checked!"); - } + SetAlertDisabled(activeAlertIndex); releaseAlert(); - NSLog(@"Alert closed by user"); + [pool release]; } void ShowAlert(int index) @@ -52,22 +57,27 @@ void ShowAlert(int index) (NSString*)kCFUserNotificationAlertHeaderKey, (NSString*)kCFUserNotificationAlertMessageKey, (NSString*)kCFUserNotificationCheckBoxTitlesKey, + (NSString*)kCFUserNotificationIconURLKey, nil]; NSArray *dictValues = [NSArray arrayWithObjects: @"XBox 360 Controller Driver", alertStrings[index], checkBoxes, + [NSURL fileURLWithPath:@"/Library/StartupItems/360ControlDaemon/Resources/Alert.tif"], nil]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:dictValues forKeys:dictKeys]; + if (AlertDisabled(index)) + return; + if (activeAlert != nil) { CFUserNotificationCancel(activeAlert); releaseAlert(); } - + + activeAlertIndex = index; activeAlert = CFUserNotificationCreate(kCFAllocatorDefault, 0, kCFUserNotificationPlainAlertLevel, &error, (CFDictionaryRef)dictionary); - NSLog(@"Error = %i", error); activeAlertSource = CFUserNotificationCreateRunLoopSource(kCFAllocatorDefault, activeAlert, callbackAlert, 0); CFRunLoopAddSource(CFRunLoopGetCurrent(), activeAlertSource, kCFRunLoopCommonModes); } @@ -75,17 +85,35 @@ void ShowAlert(int index) // Supported device - connecting - set settings? static void callbackConnected(void *param,io_iterator_t iterator) { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; io_service_t object = 0; while ((object = IOIteratorNext(iterator)) != 0) { if (IOObjectConformsTo(object, "WirelessHIDDevice") || IOObjectConformsTo(object, "Xbox360ControllerClass")) { + FFDeviceObjectReference forceFeedback; + // Supported device - load settings - if (IOObjectConformsTo(object, "Xbox360ControllerClass")) - NSLog(@"Got wired controller!"); - else - NSLog(@"Got wireless controller!"); + ConfigController(object, GetController(GetSerialNumber(object))); + // Set LEDs + FFCreateDevice(object, &forceFeedback); + if (forceFeedback != 0) + { + FFEFFESCAPE escape; + unsigned char c; + + c = 0x06 + controllerCounter; + controllerCounter = (controllerCounter + 1) % 4; + escape.dwSize = sizeof(escape); + escape.dwCommand = 0x02; + escape.cbInBuffer = sizeof(c); + escape.lpvInBuffer = &c; + escape.cbOutBuffer = 0; + escape.lpvOutBuffer = NULL; + FFDeviceEscape(forceFeedback, &escape); + FFReleaseDevice(forceFeedback); + } } else { @@ -93,14 +121,22 @@ static void callbackConnected(void *param,io_iterator_t iterator) CFTypeRef productID = IORegistryEntrySearchCFProperty(object,kIOServicePlane,CFSTR("idProduct"),kCFAllocatorDefault,kIORegistryIterateRecursively | kIORegistryIterateParents); if ((vendorID != NULL) && (productID != NULL)) { -// UInt32 idVendor = *((UInt32*)CFDataGetBytePtr(vendorID)); UInt32 idVendor = [((NSNumber*)vendorID) unsignedIntValue]; -// UInt32 idProduct = *((UInt32*)CFDataGetBytePtr(productID)); UInt32 idProduct = [((NSNumber*)productID) unsignedIntValue]; - if ((idVendor == 0x045e) && (idProduct == 0x028f)) + if (idVendor == 0x045e) { - // Unsupported - plug'n'charge cable - ShowAlert(kaPlugNCharge); + // Microsoft + if (idProduct == 0x028f) + { + // Unsupported - plug'n'charge cable + if (!foundWirelessReceiver) + ShowAlert(kaPlugNCharge); + } + if (idProduct == 0x0719) + { + // Wireless Gaming Receiver for Windows + foundWirelessReceiver = TRUE; + } } } if (vendorID != NULL) @@ -110,12 +146,15 @@ static void callbackConnected(void *param,io_iterator_t iterator) } IOObjectRelease(object); } + [pool release]; } // Entry point -int main (int argc, const char * argv[]) { +int main (int argc, const char * argv[]) +{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + foundWirelessReceiver = FALSE; // Get master port, for accessing I/O Kit IOMasterPort(MACH_PORT_NULL,&masterPort); // Set up notification of USB device addition/removal diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index afc0eb9a..bf0cab2d 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -7,7 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 3B7905000CE3F6A400ACB699 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B7904FF0CE3F6A400ACB699 /* ForceFeedback.framework */; }; 3B7A8E2C0CE14E38005BB45B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */; }; + 3B8698090CE2903100283CEC /* ControlPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B8698080CE2903100283CEC /* ControlPrefs.m */; }; 8DD76F9A0486AA7600D96B5E /* 360Daemon.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; settings = {ATTRIBUTES = (); }; }; 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; 8DD76F9F0486AA7600D96B5E /* 360Daemon.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859EA3029092ED04C91782 /* 360Daemon.1 */; }; @@ -30,7 +32,13 @@ 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 360Daemon.m; sourceTree = ""; }; 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 360Daemon_Prefix.pch; sourceTree = ""; }; + 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = StartupParameters.plist; sourceTree = ""; }; + 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 360ControlDaemon; sourceTree = ""; }; + 3B7904D50CE3F13700ACB699 /* Alert.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Alert.tif; sourceTree = ""; }; + 3B7904FF0CE3F6A400ACB699 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = /System/Library/Frameworks/ForceFeedback.framework; sourceTree = ""; }; 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 3B8698070CE2903100283CEC /* ControlPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlPrefs.h; sourceTree = ""; }; + 3B8698080CE2903100283CEC /* ControlPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ControlPrefs.m; sourceTree = ""; }; 8DD76FA10486AA7600D96B5E /* 360Daemon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = 360Daemon; sourceTree = BUILT_PRODUCTS_DIR; }; C6859EA3029092ED04C91782 /* 360Daemon.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = 360Daemon.1; sourceTree = ""; }; /* End PBXFileReference section */ @@ -42,6 +50,7 @@ files = ( 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */, 3B7A8E2C0CE14E38005BB45B /* IOKit.framework in Frameworks */, + 3B7905000CE3F6A400ACB699 /* ForceFeedback.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -62,8 +71,13 @@ 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( + 3B7904D50CE3F13700ACB699 /* Alert.tif */, + 3B8698070CE2903100283CEC /* ControlPrefs.h */, + 3B8698080CE2903100283CEC /* ControlPrefs.m */, 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */, 08FB7796FE84155DC02AAC07 /* 360Daemon.m */, + 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */, + 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */, ); name = Source; sourceTree = ""; @@ -71,6 +85,7 @@ 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( + 3B7904FF0CE3F6A400ACB699 /* ForceFeedback.framework */, 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */, 08FB779EFE84155DC02AAC07 /* Foundation.framework */, ); @@ -137,6 +152,7 @@ buildActionMask = 2147483647; files = ( 8DD76F9A0486AA7600D96B5E /* 360Daemon.m in Sources */, + 3B8698090CE2903100283CEC /* ControlPrefs.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/360Daemon/Alert.tif b/360Daemon/Alert.tif new file mode 100644 index 0000000000000000000000000000000000000000..d8d477b630076b30a9cd1f69a9792c0eb197cab9 GIT binary patch literal 12076 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 + +#define DOM_DAEMON CFSTR("com.mice.driver.Xbox360Controller.daemon") +#define DOM_CONTROLLERS CFSTR("com.mice.driver.Xbox360Controller.devices") + +#define D_SHOWONCE @"ShowAlert" + +// Daemon's own settings +void SetAlertDisabled(int index); +BOOL AlertDisabled(int index); + +// Controller settings +void SetController(NSString *serial, NSDictionary *data); +NSDictionary* GetController(NSString *serial); + +// Utility functions +NSString* GetSerialNumber(io_service_t device); +void ConfigController(io_service_t device, NSDictionary *config); diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m new file mode 100644 index 00000000..305e1d41 --- /dev/null +++ b/360Daemon/ControlPrefs.m @@ -0,0 +1,69 @@ +// +// ControlPrefs.m +// 360Daemon +// +// Created by Colin Munro on 8/11/07. +// Copyright 2007 Colin Munro. All rights reserved. +// + +#import "ControlPrefs.h" + +void SetAlertDisabled(int index) +{ + NSString *prop; + NSNumber *value; + + prop = [NSString stringWithFormat:@"%@%i", D_SHOWONCE, index]; + value = [NSNumber numberWithBool:TRUE]; + CFPreferencesSetValue((CFStringRef)prop, value, DOM_DAEMON, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize((CFStringRef)DOM_DAEMON, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); +} + +BOOL AlertDisabled(int index) +{ + NSString *prop; + BOOL result; + CFPropertyListRef value; + + result = FALSE; + prop = [NSString stringWithFormat:@"%@%i", D_SHOWONCE, index]; + value = CFPreferencesCopyValue((CFStringRef)prop, DOM_DAEMON, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost); + if (value != NULL) + { + result = [((NSNumber*)value) boolValue]; + CFRelease(value); + } + return result; +} + +void SetController(NSString *serial, NSDictionary *data) +{ + CFPreferencesSetValue((CFStringRef)serial, data, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); +} + +NSDictionary* GetController(NSString *serial) +{ + CFPropertyListRef value; + + NSLog(@"Syncro-data"); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + NSLog(@"Reading value"); + value = CFPreferencesCopyValue((CFStringRef)serial, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + NSLog(@"Done, returning"); + return [((NSDictionary*)value) autorelease]; +} + +NSString* GetSerialNumber(io_service_t device) +{ + CFTypeRef value; + + value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("SerialNumber"), kCFAllocatorDefault, kIORegistryIterateRecursively); + return [((NSString*)value) autorelease]; +} + +void ConfigController(io_service_t device, NSDictionary *config) +{ + // Ownership? + IORegistryEntrySetCFProperties(device, [config retain]); +} diff --git a/360Daemon/StartupParameters.plist b/360Daemon/StartupParameters.plist new file mode 100644 index 00000000..1e9cbc01 --- /dev/null +++ b/360Daemon/StartupParameters.plist @@ -0,0 +1,21 @@ + + + + + Description + 360 Controller Driver Daemon + Messages + + start + Starting 360 Controller Daemon + stop + Stopping 360 Controller Daemon + + OrderPreference + None + Provides + + 360ControllerDaemon + + + diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index e688d8e6..7bcfa848 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -102,6 +102,121 @@ UID 0 + + Children + + + Children + + + Children + + GID + 0 + Path + ../360Daemon/360ControlDaemon + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + GID + 0 + Path + ../360Daemon/build/Debug/360Daemon + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 0 + Path + ../360Daemon/Alert.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + GID + 0 + Path + Resources + Path Type + 1 + Privileges + 493 + Type + 2 + UID + 0 + + + Children + + GID + 0 + Path + ../360Daemon/StartupParameters.plist + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + GID + 0 + Path + 360ControlDaemon + Path Type + 1 + Privileges + 493 + Type + 2 + UID + 0 + + + GID + 0 + Path + StartupItems + Path Type + 1 + Privileges + 509 + Type + 2 + UID + 0 + GID 80 From 6f84d0c42530bde3e22b4faeee1f73789a6d3e7f Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:34:14 +0000 Subject: [PATCH 12/66] Remove some unnecessary debug output --- 360Daemon/ControlPrefs.m | 3 --- 1 file changed, 3 deletions(-) diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 305e1d41..53d91998 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -46,11 +46,8 @@ void SetController(NSString *serial, NSDictionary *data) { CFPropertyListRef value; - NSLog(@"Syncro-data"); CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - NSLog(@"Reading value"); value = CFPreferencesCopyValue((CFStringRef)serial, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); - NSLog(@"Done, returning"); return [((NSDictionary*)value) autorelease]; } From de498630b4446196eb349d0aca1135b3abe55380 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:34:37 +0000 Subject: [PATCH 13/66] Implement much better LED number assigning. --- 360Daemon/360Daemon.m | 61 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 636a2426..7f7d6e6d 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -15,8 +15,10 @@ io_iterator_t onIteratorWired; io_iterator_t onIteratorWireless; io_iterator_t onIteratorOther; +io_iterator_t offIteratorWired; +io_iterator_t offIteratorWireless; BOOL foundWirelessReceiver; -int controllerCounter = 0; +NSString *leds[4]; CFUserNotificationRef activeAlert = nil; CFRunLoopSourceRef activeAlertSource; @@ -102,9 +104,25 @@ static void callbackConnected(void *param,io_iterator_t iterator) { FFEFFESCAPE escape; unsigned char c; + NSString *serial; + int i; - c = 0x06 + controllerCounter; - controllerCounter = (controllerCounter + 1) % 4; + serial = GetSerialNumber(object); + c = 0x0a; + if (serial != nil) + { + for (i = 0; i < 4; i++) + { + if ((leds[i] == nil) || ([leds[i] caseInsensitiveCompare:serial] == NSOrderedSame)) + { + c = 0x06 + i; + if (leds[i] == nil) + leds[i] = [serial retain]; +// NSLog(@"Added controller with LED %i", i); + break; + } + } + } escape.dwSize = sizeof(escape); escape.dwCommand = 0x02; escape.cbInBuffer = sizeof(c); @@ -149,12 +167,43 @@ static void callbackConnected(void *param,io_iterator_t iterator) [pool release]; } +// Supported device - disconnecting +static void callbackDisconnected(void *param, io_iterator_t iterator) +{ + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + io_service_t object = 0; + NSString *serial; + int i; + + while ((object = IOIteratorNext(iterator)) != 0) + { + serial = GetSerialNumber(object); + if (serial != nil) + { + for (i = 0; i < 4; i++) + { + if (leds[i] == nil) + continue; + if ([leds[i] caseInsensitiveCompare:serial] == NSOrderedSame) + { + [leds[i] release]; + leds[i] = nil; +// NSLog(@"Removed controller with LED %i", i); + } + } + } + IOObjectRelease(object); + } + [pool release]; +} + // Entry point int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; foundWirelessReceiver = FALSE; + memset(leds, 0, sizeof(leds)); // Get master port, for accessing I/O Kit IOMasterPort(MACH_PORT_NULL,&masterPort); // Set up notification of USB device addition/removal @@ -168,15 +217,21 @@ int main (int argc, const char * argv[]) // Wired 360 devices IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360ControllerClass"), callbackConnected, NULL, &onIteratorWired); callbackConnected(NULL, onIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("Xbox360ControllerClass"), callbackDisconnected, NULL, &offIteratorWired); + callbackDisconnected(NULL, offIteratorWired); // Wireless 360 devices IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("WirelessHIDDevice"), callbackConnected, NULL, &onIteratorWireless); callbackConnected(NULL, onIteratorWireless); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("WirelessHIDDevice"), callbackDisconnected, NULL, &offIteratorWireless); + callbackDisconnected(NULL, offIteratorWireless); // Run loop CFRunLoopRun(); // Stop listening IOObjectRelease(onIteratorOther); IOObjectRelease(onIteratorWired); + IOObjectRelease(offIteratorWired); IOObjectRelease(onIteratorWireless); + IOObjectRelease(offIteratorWireless); CFRunLoopRemoveSource(CFRunLoopGetCurrent(), notifySource, kCFRunLoopCommonModes); CFRunLoopSourceInvalidate(notifySource); IONotificationPortDestroy(notifyPort); From 1f24f711fcfe81a174d2d7684363a7cdf105e196 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:35:42 +0000 Subject: [PATCH 14/66] Update documents to new version --- Install360Controller/Text/Welcome.rtf | 62 +++++++++++++++----------- Readme.rtf | 64 +++++++++++++-------------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 00e43093..73718890 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,63 +1,75 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf949 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3} -{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}} +{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4} +{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\f1\b0\fs24 Version 0.05\ +\b0\fs24 Version 0.06\ Copyright (C) 2005-2007 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ -\f0\b Update 0.05: 21/4/2007 -\f1\b0 \ +\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\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'a5 }Improvements to the wireless support\ -{\listtext \'a5 }New increased compatibility with games\ -{\listtext \'a5 }Support for the Guitar Hero controller\ +\ls1\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\ql\qnatural\pardirnatural \cf0 \ -\f0\b Update 0.04: 27/2/2007\ +\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\ql\qnatural\pardirnatural +\ls2\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\ql\qnatural\pardirnatural +\cf0 \ + +\b Update 0.04: 27/2/2007\ -\f1\b0 \ +\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'a5 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ -{\listtext \'a5 }Driver for the above to use the Wireless 360 Controller\ -{\listtext \'a5 }Updates to the Preference Pane to support the Wireless 360 Controller\ +\ls3\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\ql\qnatural\pardirnatural \cf0 \ -\f0\b Update 0.03: 22/7/2006\ +\b Update 0.03: 22/7/2006\ -\f1\b0 \ +\b0 \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'a5 }More 3rd party vendor/product IDs\ +\ls4\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ -\f0\b Update 0.02: 11/2/2006 -\f1\b0 \ +\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\ql\qnatural\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'a5 }Universal binaries, for Intel Mac support\ -{\listtext \'a5 }Additional 3rd party vendor/product IDs (support for matching on interface instead of IDs still isn't working)\ -{\listtext \'a5 }Preference Pane now correctly detects devices being connected/disconnected\ -{\listtext \'a5 }Alternative deadzone mode\ -{\listtext \'a5 }D-pad moved from pointer to plain joypad buttons, for better support in games\ +\ls5\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\ql\qnatural\pardirnatural \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/Readme.rtf b/Readme.rtf index 4a3940b5..25af54cb 100644 --- a/Readme.rtf +++ b/Readme.rtf @@ -1,5 +1,5 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf949 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2}} @@ -8,60 +8,58 @@ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X -\f1\b0\fs24 \ +\b0\fs24 \ Copyright (C) 2006-2007 Colin Munro\ {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ \ -\f0\b About -\f1\b0 \ +\b About +\b0 \ 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.\ \ -\f0\b Licence -\f1\b0 \ +\b Licence +\b0 \ 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.\ \ -\f0\b Installation -\f1\b0 \ +\b Installation +\b0 \ Simply complete the installer package to install the driver. The driver will recommend you restart - if you do not, the driver will only be usable if the controller is already connected or connected within a minute after the installer completes. If you are interested in installing as a developer please see below.\ \ -\f0\b Usage -\f1\b0 \ +\b Usage +\b0 \ 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.\ \ -\f0\b Known Problems/Todo -\f1\b0 \ +\b Known Problems/Todo +\b0 \ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'a5 }The preference pane will turn off the wireless controller LEDs, so you don't know it's on anymore...\ -{\listtext \'a5 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ -{\listtext \'a5 }Settings aren't persistent, I don't think (need to be set when the device connects)\ -{\listtext \'a5 }Force Feedback plugin may make effects run slower (e.g. longer time) than they should\ -{\listtext \'a5 }Driver probably needs to be more resilient to errors and odd cases\ -{\listtext \'a5 }Better Force Feedback "emulation"\ -{\listtext \'a5 }Extra settings? E.g. trigger deadzones, control remapping.\ -{\listtext \'a5 }Someone has requested old Xbox Controller support too.\ +\ls1\ilvl0\cf0 {\listtext \'95 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ +{\listtext \'95 }Force Feedback plugin may make effects run slower (e.g. longer time) than they should\ +{\listtext \'95 }Driver probably needs to be more resilient to errors and odd cases\ +{\listtext \'95 }Better Force Feedback "emulation"\ +{\listtext \'95 }Extra settings? E.g. trigger deadzones, control remapping.\ +{\listtext \'95 }Someone has requested old Xbox Controller support too.\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural \ls2\ilvl0 -\f0\b \cf0 \ +\b \cf0 \ Contact me -\f1\b0 \ +\b0 \ \pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \ls2\ilvl0\cf0 Please feel free to contact me with any comments, questions and so on using the form at the URL at the top of the file.\ \ \pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \ls2\ilvl0 -\f0\b \cf0 Developer info -\f1\b0 \ +\b \cf0 Developer info +\b0 \ Anything below this probably doesn't affect end users, so you can stop reading now if you just want to use the driver.\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ -\f0\b Building -\f1\b0 \ +\b Building +\b0 \ (This section does not yet discuss the source of the wireless drivers)\ 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.\ \ @@ -72,17 +70,17 @@ To debug the driver, sudo cp -R 360Controller.kext /tmp/ to assign the correct p To test the Preference Pane, just double-click the resulting file.\ \ -\f0\b Debugging -\f1\b0 \ +\b Debugging +\b0 \ 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.\ \ -\f0\b Installer -\f1\b0 \ +\b Installer +\b0 \ Included is an installer project for Iceberg. Download Iceberg at {\field{\*\fldinst{HYPERLINK "http://s.sudre.free.fr/Software/Iceberg.html"}}{\fldrslt http://s.sudre.free.fr/Software/Iceberg.html}}\ \ -\f0\b Other information -\f1\b0 \ +\b Other information +\b0 \ I wrote the driver from scratch, using Apple documentation and drivers simply as a reference and not basing it upon any existing source. As such, some things may be done strangely or incorrectly, so excuse any weirdness. I've also tried to include comments to explain generally what's going on :)\ } \ No newline at end of file From c1a4f21e3e11d8aa5890558c08420a23431c417d Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:40:05 +0000 Subject: [PATCH 15/66] Attempt to make the serial number stuff work properly --- WirelessGamingReceiver/WirelessDevice.cpp | 2 + .../WirelessGamingReceiver.cpp | 64 +++++++++++++++++-- .../WirelessGamingReceiver.h | 3 + WirelessGamingReceiver/WirelessHIDDevice.cpp | 14 +++- WirelessGamingReceiver/WirelessHIDDevice.h | 2 +- 5 files changed, 78 insertions(+), 7 deletions(-) diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index 4c67e5c1..c95bf400 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -75,6 +75,8 @@ void WirelessDevice::RegisterWatcher(void *target, WirelessDeviceWatcher functio this->target = target; this->parameter = parameter; this->function = function; + if ((function != NULL) && IsDataAvailable()) + NewData(); } // For internal use, sets this instances index on the wireless gaming receiver diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 387bbd22..4ab17c19 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -105,6 +105,7 @@ bool WirelessGamingReceiver::start(IOService *provider) connections[i].otherOut = NULL; connections[i].inputArray = NULL; connections[i].service = NULL; + connections[i].controllerStarted = false; } pipeRequest.interval = 0; @@ -215,6 +216,22 @@ void WirelessGamingReceiver::stop(IOService *provider) IOService::stop(provider); } +// Handle message from provider +IOReturn WirelessGamingReceiver::message(UInt32 type,IOService *provider,void *argument) +{ +// IOLog("Message\n"); +/* + switch(type) { + case kIOMessageServiceIsTerminated: + case kIOMessageServiceIsRequestingClose: + if(device->isOpen(this)) ReleaseAll(); + return kIOReturnSuccess; + default: + */ + return IOService::message(type,provider,argument); +// } +} + // Queue a read on a controller bool WirelessGamingReceiver::QueueRead(int index) { @@ -371,6 +388,7 @@ void WirelessGamingReceiver::ReleaseAll(void) connections[i].inputArray->release(); connections[i].inputArray = NULL; } + connections[i].controllerStarted = false; } if (device != NULL) { @@ -418,10 +436,12 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data if (connections[index].service != NULL) { connections[index].service->SetIndex(-1); - connections[index].service->terminate(kIOServiceRequired); - connections[index].service->detachAll(gIOServicePlane); + if (connections[index].controllerStarted) + connections[index].service->terminate(kIOServiceRequired | kIOServiceSynchronous); + connections[index].service->detach(this); connections[index].service->release(); connections[index].service = NULL; + connections[index].controllerStarted = false; } } else @@ -429,7 +449,29 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data // Device connected // IOLog("process: Attempting to add new device\n"); if (connections[index].service == NULL) + { + bool ready; + int i, j; + IOMemoryDescriptor *data; + char c; + + ready = false; + j = connections[index].inputArray->getCount(); + for (i = 0; !ready && (i < j); i++) + { + data = OSDynamicCast(IOMemoryDescriptor, connections[index].inputArray->getObject(i)); + data->readBytes(1, &c, 1); + if (c == 0x0f) + ready = true; + } InstantiateService(index); + if (ready) + { +// IOLog("Registering wireless device"); + connections[index].controllerStarted = true; + connections[index].service->registerService(); + } + } } return; } @@ -438,11 +480,25 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data IOMemoryDescriptor *copy = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, 0, length); copy->writeBytes(0, data, length); connections[index].inputArray->setObject(copy); - copy->release(); if (connections[index].service == NULL) InstantiateService(index); if (connections[index].service != NULL) + { connections[index].service->NewData(); + if (!connections[index].controllerStarted) + { + char c; + + copy->readBytes(1, &c, 1); + if (c == 0x0f) + { +// IOLog("Registering wireless device"); + connections[index].controllerStarted = true; + connections[index].service->registerService(); + } + } + } + copy->release(); } // Create a new node for the attached controller @@ -462,7 +518,7 @@ void WirelessGamingReceiver::InstantiateService(int index) { connections[index].service->attach(this); connections[index].service->SetIndex(index); - connections[index].service->registerService(); +// connections[index].service->registerService(); // IOLog("process: Device attached\n"); if (IsDataQueued(index)) connections[index].service->NewData(); diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index 1ff6eb8a..6e0f26a1 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -44,6 +44,7 @@ typedef struct // Runtime data OSArray *inputArray; WirelessDevice *service; + bool controllerStarted; } WIRELESS_CONNECTION; @@ -54,6 +55,8 @@ class WirelessGamingReceiver : public IOService bool start(IOService *provider); void stop(IOService *provider); + IOReturn message(UInt32 type,IOService *provider,void *argument); + // For WirelessDevice to use OSNumber* WirelessGamingReceiver::newLocationIDNumber() const; diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index a72a0d67..f1605686 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -118,6 +118,8 @@ void WirelessHIDDevice::receivedData(void) } } +const char *HexData = "0123456789ABCDEF"; + // Process new data void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) { @@ -133,8 +135,16 @@ void WirelessHIDDevice::receivedMessage(IOMemoryDescriptor *data) case 0x0f: // Initial info if (buf[16] == 0x13) receivedUpdate(0x13, buf + 17); - memcpy(serialString, buf + 0x0A, 4); - serialString[4] = '\0'; + serialString[0] = HexData[(buf[0x0A] & 0xF0) >> 4]; + serialString[1] = HexData[buf[0x0A] & 0x0F]; + serialString[2] = HexData[(buf[0x0B] & 0xF0) >> 4]; + serialString[3] = HexData[buf[0x0B] & 0x0F]; + serialString[4] = HexData[(buf[0x0C] & 0xF0) >> 4]; + serialString[5] = HexData[buf[0x0C] & 0x0F]; + serialString[6] = HexData[(buf[0x0D] & 0xF0) >> 4]; + serialString[7] = HexData[buf[0x0D] & 0x0F]; + serialString[8] = '\0'; + IOLog("Got serial number: %s", serialString); break; case 0x01: // HID info update diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index 5b87cfe6..45270dc6 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -49,7 +49,7 @@ class WirelessHIDDevice : public IOHIDDevice static void _receivedData(void *target, WirelessDevice *sender, void *parameter); unsigned char battery; - char serialString[5]; + char serialString[10]; }; #endif // __WIRELESSHIDDEVICE_H__ From 20eb42c974e70e22299089fdbaf7873d942188cd Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:41:01 +0000 Subject: [PATCH 16/66] Return something for the product/vendor IDs --- Wireless360Controller/Wireless360Controller.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 7f26b6ab..4dd7acfc 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -228,7 +228,7 @@ OSNumber* Wireless360Controller::newPrimaryUsagePageNumber() const OSNumber* Wireless360Controller::newProductIDNumber() const { - return OSNumber::withNumber((unsigned long long)0, 16); + return OSNumber::withNumber((unsigned long long)0x28e, 16); } OSString* Wireless360Controller::newProductString() const @@ -243,6 +243,6 @@ OSString* Wireless360Controller::newTransportString() const OSNumber* Wireless360Controller::newVendorIDNumber() const { - return OSNumber::withNumber((unsigned long long)0, 16); + return OSNumber::withNumber((unsigned long long)0x45e, 16); } From 0cabfdd125c1a90c7b33949a8fab6af82175fb2e Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:43:08 +0000 Subject: [PATCH 17/66] Updating projects for new XCode apparently --- .../360Controller.xcodeproj/project.pbxproj | 48 ++----------------- .../Feedback360.xcodeproj/project.pbxproj | 40 ++-------------- .../project.pbxproj | 27 ++--------- .../project.pbxproj | 27 ++--------- 4 files changed, 12 insertions(+), 130 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 8145e140..13c00b23 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -14,30 +14,6 @@ 3BCE45CA09638EBC00B69EDF /* ControlStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 06AA1265FFB2107B11CA28AA /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - ZERO_LINK = YES; - }; - name = Development; - }; - 06AA1266FFB2107B11CA28AA /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - ZERO_LINK = NO; - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _60Controller.h; sourceTree = ""; }; @@ -148,20 +124,6 @@ ); buildRules = ( ); - buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d1; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_MODEL_TUNING = G5; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; - MODULE_NAME = com.mice.driver.Xbox360Controller; - MODULE_VERSION = 1.0.0d1; - PREBINDING = NO; - PRODUCT_NAME = 360Controller; - WRAPPER_EXTENSION = kext; - }; dependencies = ( ); name = 360Controller; @@ -176,15 +138,11 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */; - buildSettings = { - }; - buildStyles = ( - 06AA1265FFB2107B11CA28AA /* Development */, - 06AA1266FFB2107B11CA28AA /* Deployment */, - ); + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* 360Controller */; projectDirPath = ""; + projectRoot = ""; targets = ( 32D94FC30562CBF700B6AF17 /* 360Controller */, ); @@ -330,7 +288,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 10.2; MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Deployment; diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj index f6962642..937a7729 100644 --- a/Feedback360/Feedback360.xcodeproj/project.pbxproj +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -16,29 +16,6 @@ 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B49A704867FD3000E48DA /* InfoPlist.strings */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA3F0018CDD111CA2923 /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - ZERO_LINK = YES; - }; - name = Development; - }; - 014CEA400018CDD111CA2923 /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - ZERO_LINK = NO; - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 08FB77B6FE84183AC02AAC07 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; @@ -140,13 +117,6 @@ ); buildRules = ( ); - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - PRODUCT_NAME = Feedback360; - WRAPPER_EXTENSION = bundle; - }; dependencies = ( ); name = Feedback360; @@ -161,15 +131,11 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 3BBDC69709793BF60023AAD8 /* Build configuration list for PBXProject "Feedback360" */; - buildSettings = { - }; - buildStyles = ( - 014CEA3F0018CDD111CA2923 /* Development */, - 014CEA400018CDD111CA2923 /* Deployment */, - ); + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* Feedback360 */; projectDirPath = ""; + projectRoot = ""; targets = ( 8D57630D048677EA00EA77CD /* Feedback360 */, ); @@ -269,7 +235,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 10.2; MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Deployment; diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 220c6b52..77243f5d 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -12,21 +12,6 @@ 32D94FCA0562CBF700B6AF17 /* Wireless360Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */; settings = {ATTRIBUTES = (); }; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 06AA1265FFB2107B11CA28AA /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 06AA1266FFB2107B11CA28AA /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wireless360Controller.h; sourceTree = ""; }; @@ -110,8 +95,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = Wireless360Controller; @@ -126,15 +109,11 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "Wireless360Controller" */; - buildSettings = { - }; - buildStyles = ( - 06AA1265FFB2107B11CA28AA /* Debug */, - 06AA1266FFB2107B11CA28AA /* Release */, - ); + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* Wireless360Controller */; projectDirPath = ""; + projectRoot = ""; targets = ( 32D94FC30562CBF700B6AF17 /* Wireless360Controller */, ); @@ -246,7 +225,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.2; MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Release; diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index b4ce9767..cfe9608f 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -17,21 +17,6 @@ 3BE6677B0B91DC55009679FC /* devices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BE6677A0B91DC55009679FC /* devices.h */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 06AA1265FFB2107B11CA28AA /* Debug */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Debug; - }; - 06AA1266FFB2107B11CA28AA /* Release */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Release; - }; -/* End PBXBuildStyle section */ - /* Begin PBXFileReference section */ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessGamingReceiver.h; sourceTree = ""; }; @@ -128,8 +113,6 @@ ); buildRules = ( ); - buildSettings = { - }; dependencies = ( ); name = WirelessGamingReceiver; @@ -144,15 +127,11 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "WirelessGamingReceiver" */; - buildSettings = { - }; - buildStyles = ( - 06AA1265FFB2107B11CA28AA /* Debug */, - 06AA1266FFB2107B11CA28AA /* Release */, - ); + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* WirelessGamingReceiver */; projectDirPath = ""; + projectRoot = ""; targets = ( 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, ); @@ -266,7 +245,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.2; MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; SYMROOT = build; }; From 481a96101c715f584d91f7a144ee8ba9654e3456 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 03:54:02 +0000 Subject: [PATCH 18/66] Update version number for new release --- 360Controller/Info.plist | 2 +- .../Install360Controller.packproj | 8 +- .../Pref360ControlPref.nib/classes.nib | 177 +++++++++++++----- .../Pref360ControlPref.nib/info.nib | 14 +- Wireless360Controller/Info.plist | 2 +- WirelessGamingReceiver/Info.plist | 2 +- 6 files changed, 146 insertions(+), 59 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 90043202..34e34baa 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d3 + 1.0.0d4 IOKitPersonalities Controller diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 7bcfa848..948bf941 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -968,13 +968,13 @@ IFPkgDescriptionTitle XBox 360 Controller Installer IFPkgDescriptionVersion - 0.05 + 0.06 Display Information CFBundleGetInfoString - Install360Controller 0.05 Copyrights © 2006-2007 Colin Munro + Install360Controller 0.06 Copyrights © 2006-2007 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -984,7 +984,7 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.05 + 0.06 Options @@ -1014,7 +1014,7 @@ IFMajorVersion 0 IFMinorVersion - 5 + 6 diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib index 12473c7f..695ad63a 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib @@ -1,46 +1,131 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = MyAnalogStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyCentreButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyDigitalStick; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyMainButtons; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - {CLASS = MyShoulderButton; LANGUAGE = ObjC; SUPERCLASS = NSView; }, - { - ACTIONS = {changeSetting = id; selectDevice = id; }; - CLASS = NSPreferencePane; - LANGUAGE = ObjC; - OUTLETS = { - "_firstKeyView" = id; - "_initialKeyView" = id; - "_lastKeyView" = id; - "_window" = NSWindow; - batteryLevel = NSImageView; - centreButtons = MyCentreButtons; - deviceList = NSPopUpButton; - digiStick = MyDigitalStick; - leftLinked = NSButton; - leftShoulder = MyShoulderButton; - leftStick = MyAnalogStick; - leftStickDeadzone = NSSlider; - leftStickInvertX = NSButton; - leftStickInvertY = NSButton; - leftTrigger = NSProgressIndicator; - leftTriggerDeadzone = NSSlider; - rightButtons = MyMainButtons; - rightLinked = NSButton; - rightShoulder = MyShoulderButton; - rightStick = MyAnalogStick; - rightStickDeadzone = NSSlider; - rightStickInvertX = NSButton; - rightStickInvertY = NSButton; - rightTrigger = NSProgressIndicator; - rightTriggerDeadzone = NSSlider; - rumbleEnable = NSButton; - rumbleTest = NSButton; - }; - SUPERCLASS = NSObject; - } - ); - IBVersion = 1; -} \ No newline at end of file + + + + + IBClasses + + + CLASS + MyMainButtons + LANGUAGE + ObjC + SUPERCLASS + NSView + + + CLASS + MyDigitalStick + LANGUAGE + ObjC + SUPERCLASS + NSView + + + CLASS + MyShoulderButton + LANGUAGE + ObjC + SUPERCLASS + NSView + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + ACTIONS + + changeSetting + id + selectDevice + id + + CLASS + NSPreferencePane + LANGUAGE + ObjC + OUTLETS + + _firstKeyView + id + _initialKeyView + id + _lastKeyView + id + _window + NSWindow + batteryLevel + NSImageView + centreButtons + MyCentreButtons + deviceList + NSPopUpButton + digiStick + MyDigitalStick + leftLinked + NSButton + leftShoulder + MyShoulderButton + leftStick + MyAnalogStick + leftStickDeadzone + NSSlider + leftStickInvertX + NSButton + leftStickInvertY + NSButton + leftTrigger + NSProgressIndicator + leftTriggerDeadzone + NSSlider + rightButtons + MyMainButtons + rightLinked + NSButton + rightShoulder + MyShoulderButton + rightStick + MyAnalogStick + rightStickDeadzone + NSSlider + rightStickInvertX + NSButton + rightStickInvertY + NSButton + rightTrigger + NSProgressIndicator + rightTriggerDeadzone + NSSlider + rumbleEnable + NSButton + rumbleTest + NSButton + + SUPERCLASS + NSObject + + + CLASS + MyAnalogStick + LANGUAGE + ObjC + SUPERCLASS + NSView + + + CLASS + MyCentreButtons + LANGUAGE + ObjC + SUPERCLASS + NSView + + + IBVersion + 1 + + diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib index 3b0dc88b..bf3ddffd 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib @@ -1,16 +1,18 @@ - + - IBDocumentLocation - 99 47 481 349 0 0 1280 1002 IBFramework Version - 443.0 + 629 + IBOldestOS + -100 IBOpenObjects - 12 + 6 IBSystem Version - 8J135 + 9A581 + targetFramework + IBCocoaFramework diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index 3a8a5ba3..d1244a1f 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d1 + 1.0.0d2 IOKitPersonalities Wireless360Controller diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 427d7680..6f4f321a 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d1 + 1.0.0d2 OSBundleCompatibleVersion 1.0.0d1 IOKitPersonalities From e12e5375e35402899f705004ef9fee859b0a8466 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 10 Nov 2007 04:18:23 +0000 Subject: [PATCH 19/66] Miscellanious updates to make release --- .../360Controller.xcodeproj/colin.mode1 | 95 ++++++- .../360Controller.xcodeproj/colin.pbxuser | 28 +- 360Daemon/360Daemon.xcodeproj/colin.mode1v3 | 101 ++----- 360Daemon/360Daemon.xcodeproj/colin.pbxuser | 167 +++++++----- .../Feedback360.xcodeproj/colin.pbxuser | 21 +- .../Install360Controller.packproj | 2 +- .../Pref360ControlPref.nib/info.nib | 4 +- .../Pref360Control.xcodeproj/colin.mode1 | 99 ++++++- .../Pref360Control.xcodeproj/colin.pbxuser | 87 +++--- .../colin.mode1 | 62 ++++- .../colin.pbxuser | 20 +- .../colin.mode1 | 256 +++++++++++++++++- .../colin.pbxuser | 76 +++--- 13 files changed, 722 insertions(+), 296 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 index b5f82de3..6f70e2cd 100644 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ b/360Controller/360Controller.xcodeproj/colin.mode1 @@ -185,7 +185,88 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3BE5273E0BDC379900984E1F + PBXProjectModuleLabel + _60Controller.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE5273F0BDC379900984E1F + PBXProjectModuleLabel + _60Controller.cpp + _historyCapacity + 0 + bookmark + 3BE67E310C9F37E300A68607 + history + + 3BCEBDFE0C67306D00666DBF + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + -9 244 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B216CD50C090EAF000BE7F3 + PBXProjectModuleLabel + Info.plist + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216CD60C090EAF000BE7F3 + PBXProjectModuleLabel + Info.plist + _historyCapacity + 0 + bookmark + 3BE67E320C9F37E300A68607 + history + + 3BCEBDFD0C67306D00666DBF + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 376 119 900 758 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -219,6 +300,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -335,8 +418,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -373,9 +454,9 @@ TableOfContents - 3BCC40910BDA918C00B1619B + 3BE67E2F0C9F37E300A68607 1CE0B1FE06471DED0097A5F4 - 3BCC40920BDA918C00B1619B + 3BE67E300C9F37E300A68607 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -509,8 +590,8 @@ 5 WindowOrderList - 3BCE45C10963706A00B69EDF - 1C530D57069F1CE1000CFCEE + 3B216CD50C090EAF000BE7F3 + 3BE5273E0BDC379900984E1F /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj WindowString diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index a09a9f71..099642e7 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -1,15 +1,14 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { + activeArchitecture = ppc; activeBuildConfigurationName = Deployment; - activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Development */; activeTarget = 32D94FC30562CBF700B6AF17 /* 360Controller */; addToTargets = ( 32D94FC30562CBF700B6AF17 /* 360Controller */, ); breakpoints = ( ); - breakpointsGroup = 3BBDC6B209794B560023AAD8 /* XCBreakpointsBucket */; codeSenseManager = 3BCE45B209633D9A00B69EDF /* Code sense */; perUserDictionary = { PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { @@ -86,8 +85,8 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198862999; - PBXWorkspaceStateSaveDate = 198862999; + PBXPerProjectTemplateStateSaveDate = 216359776; + PBXWorkspaceStateSaveDate = 216359776; }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { @@ -112,9 +111,9 @@ 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {896, 7560}}"; - sepNavSelRange = "{17116, 0}"; - sepNavVisRect = "{{0, 6875}, {861, 685}}"; - sepNavWindowFrame = "{{518, 59}, {900, 814}}"; + sepNavSelRange = "{8336, 22}"; + sepNavVisRect = "{{0, 3575}, {861, 685}}"; + sepNavWindowFrame = "{{-9, 188}, {900, 814}}"; }; }; 32D94FC30562CBF700B6AF17 /* 360Controller */ = { @@ -122,10 +121,11 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 3038}}"; - sepNavSelRange = "{6483, 0}"; - sepNavVisRect = "{{0, 2353}, {861, 685}}"; - sepNavWindowFrame = "{{376, 7}, {900, 814}}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 3038}}"; + sepNavSelRange = "{663, 0}"; + sepNavVisRange = "{0, 1584}"; + sepNavVisRect = "{{0, 2311}, {861, 685}}"; + sepNavWindowFrame = "{{376, 63}, {900, 814}}"; }; }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { @@ -136,12 +136,6 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3BBDC6B209794B560023AAD8 /* XCBreakpointsBucket */ = { - isa = XCBreakpointsBucket; - name = "Project Breakpoints"; - objects = ( - ); - }; 3BBEA711096AFD9F00F2E37B /* Info copy.plist */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 798}}"; diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 index b899c42f..2adba507 100644 --- a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 +++ b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 @@ -195,48 +195,7 @@ Notifications OpenEditors - - - Content - - PBXProjectModuleGUID - 3B7A8E570CE15573005BB45B - PBXProjectModuleLabel - 360Daemon.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B7A8E580CE15573005BB45B - PBXProjectModuleLabel - 360Daemon.m - _historyCapacity - 0 - bookmark - 3B7A8E720CE15907005BB45B - history - - 3B7A8E6D0CE15840005BB45B - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {623, 487}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 14 469 623 528 0 0 1280 1002 - - - + PerspectiveWidths -1 @@ -270,6 +229,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -307,6 +268,7 @@ 08FB7794FE84155DC02AAC07 08FB7795FE84155DC02AAC07 + C6859EA2029092E104C91782 08FB779DFE84155DC02AAC07 1AB674ADFE9D54B511CA2CBB 1C37FABC05509CD000000102 @@ -314,7 +276,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 5 + 16 + 15 0 @@ -338,7 +301,7 @@ 186 RubberWindowFrame - 295 516 690 397 0 0 1280 1002 + 700 140 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -375,7 +338,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 295 516 690 397 0 0 1280 1002 + 700 140 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -383,8 +346,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -397,7 +358,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 295 516 690 397 0 0 1280 1002 + 700 140 690 397 0 0 1280 1002 Module XCDetailModule @@ -421,9 +382,9 @@ TableOfContents - 3B7A8E550CE15573005BB45B + 3B042E760CE56390005851E9 1CE0B1FE06471DED0097A5F4 - 3B7A8E560CE15573005BB45B + 3B042E770CE56390005851E9 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -555,18 +516,12 @@ 5 WindowOrderList - 3B7A8E630CE15573005BB45B - 3B7A8E640CE15573005BB45B - 3B7A8E650CE15573005BB45B + 3B05AB450CE0FB7A00DF20B5 1CD10A99069EF8BA00B06720 /Users/colin/Projects2/OSX/360 Controller/360Daemon/360Daemon.xcodeproj - 3B05AB450CE0FB7A00DF20B5 - 3B7A8E700CE15840005BB45B - 1C78EAAD065D492600B07095 - 3B7A8E570CE15573005BB45B WindowString - 295 516 690 397 0 0 1280 1002 + 700 140 690 397 0 0 1280 1002 WindowToolsV3 @@ -604,8 +559,6 @@ 218pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -645,7 +598,7 @@ TableOfContents 3B05AB450CE0FB7A00DF20B5 - 3B7A8E280CE14E18005BB45B + 3B042E780CE56390005851E9 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -656,7 +609,7 @@ WindowToolGUID 3B05AB450CE0FB7A00DF20B5 WindowToolIsVisible - + FirstTimeWindowDisplayed @@ -687,8 +640,8 @@ yes sizes - {{0, 0}, {316, 185}} - {{316, 0}, {378, 185}} + {{0, 0}, {316, 203}} + {{316, 0}, {378, 203}} VerticalSplitView @@ -703,8 +656,8 @@ yes sizes - {{0, 0}, {694, 185}} - {{0, 185}, {694, 196}} + {{0, 0}, {694, 203}} + {{0, 203}, {694, 178}} @@ -737,7 +690,7 @@ 148 Frame - {{316, 0}, {378, 185}} + {{316, 0}, {378, 203}} RubberWindowFrame 252 294 694 422 0 0 1280 1002 @@ -765,13 +718,13 @@ TableOfContents 1CD10A99069EF8BA00B06720 - 3B7A8E5B0CE15573005BB45B + 3B042E6E0CE56379005851E9 1C162984064C10D400B95A72 - 3B7A8E5C0CE15573005BB45B - 3B7A8E5D0CE15573005BB45B - 3B7A8E5E0CE15573005BB45B - 3B7A8E5F0CE15573005BB45B - 3B7A8E600CE15573005BB45B + 3B042E6F0CE56379005851E9 + 3B042E700CE56379005851E9 + 3B042E710CE56379005851E9 + 3B042E720CE56379005851E9 + 3B042E730CE56379005851E9 ToolbarConfiguration xcode.toolbar.config.debugV3 @@ -939,7 +892,7 @@ TableOfContents 1C78EAAD065D492600B07095 - 3B7A8E610CE15573005BB45B + 3B042D920CE55D5F005851E9 1C78EAAC065D492600B07095 ToolbarConfiguration diff --git a/360Daemon/360Daemon.xcodeproj/colin.pbxuser b/360Daemon/360Daemon.xcodeproj/colin.pbxuser index 8d922087..cf765e18 100644 --- a/360Daemon/360Daemon.xcodeproj/colin.pbxuser +++ b/360Daemon/360Daemon.xcodeproj/colin.pbxuser @@ -2,16 +2,18 @@ { 08FB7793FE84155DC02AAC07 /* Project object */ = { activeArchitecture = ppc; - activeBuildConfigurationName = Debug; + activeBuildConfigurationName = Release; activeExecutable = 3BD6F0E90C67E41F00574E6A /* 360Daemon */; activeTarget = 8DD76F960486AA7600D96B5E /* 360Daemon */; addToTargets = ( 8DD76F960486AA7600D96B5E /* 360Daemon */, ); breakpoints = ( - 3B7A8E510CE154B9005BB45B /* 360Daemon.m:94 */, - 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:69 */, - 3B7A8E740CE1595C005BB45B /* 360Daemon.m:82 */, + 3B7A8E510CE154B9005BB45B /* 360Daemon.m:140 */, + 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:82 */, + 3B7A8E740CE1595C005BB45B /* 360Daemon.m:95 */, + 3B8698420CE29A3100283CEC /* ControlPrefs.m:28 */, + 3B8698440CE29A3300283CEC /* ControlPrefs.m:16 */, ); codeSenseManager = 3BD6F0F00C67E43E00574E6A /* Code sense */; executables = ( @@ -40,15 +42,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216085581; - PBXWorkspaceStateSaveDate = 216085581; - }; - perUserProjectItems = { - 3B7A8E590CE15573005BB45B /* PBXTextBookmark */ = 3B7A8E590CE15573005BB45B /* PBXTextBookmark */; - 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */ = 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */; - 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */ = 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */; - 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */ = 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */; - 3B7A8E720CE15907005BB45B /* PBXTextBookmark */ = 3B7A8E720CE15907005BB45B /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 216359795; + PBXWorkspaceStateSaveDate = 216359795; }; sourceControlManager = 3BD6F0EF0C67E43E00574E6A /* Source Control */; userBuildSettings = { @@ -56,14 +51,38 @@ }; 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1670, 1988}}"; - sepNavSelRange = "{3008, 0}"; - sepNavVisRange = "{2016, 1625}"; + sepNavIntBoundsRect = "{{0, 0}, {1670, 3556}}"; + sepNavSelRange = "{6891, 0}"; + sepNavVisRange = "{6043, 1017}"; sepNavVisRect = "{{0, 1099}, {584, 455}}"; - sepNavWindowFrame = "{{14, 413}, {623, 584}}"; + sepNavWindowFrame = "{{10, 344}, {827, 653}}"; + }; + }; + 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {564, 433}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 160}"; + sepNavWindowFrame = "{{38, 392}, {623, 584}}"; }; }; - 3B7A8E510CE154B9005BB45B /* 360Daemon.m:94 */ = { + 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; + sepNavSelRange = "{541, 0}"; + sepNavVisRange = "{0, 541}"; + sepNavWindowFrame = "{{15, 413}, {623, 584}}"; + }; + }; + 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; + sepNavSelRange = "{402, 0}"; + sepNavVisRange = "{0, 434}"; + sepNavWindowFrame = "{{435, 140}, {623, 584}}"; + }; + }; + 3B7A8E510CE154B9005BB45B /* 360Daemon.m:140 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -75,29 +94,12 @@ functionName = "callbackConnected()"; hitCount = 0; ignoreCount = 0; - lineNumber = 94; + lineNumber = 140; location = 360Daemon; - modificationTime = 216095252.3851; + modificationTime = 216357854.964732; state = 2; }; - 3B7A8E590CE15573005BB45B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - rLen = 0; - rLoc = 72; - rType = 1; - }; - 3B7A8E5A0CE15573005BB45B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - name = "360Daemon.m: 71"; - rLen = 0; - rLoc = 2464; - rType = 0; - vrLen = 1191; - vrLoc = 1607; - }; - 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:69 */ = { + 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:82 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -109,39 +111,12 @@ functionName = "ShowAlert()"; hitCount = 0; ignoreCount = 0; - lineNumber = 69; + lineNumber = 82; location = 360Daemon; - modificationTime = 216095252.385363; + modificationTime = 216357854.964961; state = 2; }; - 3B7A8E6D0CE15840005BB45B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - rLen = 0; - rLoc = 68; - rType = 1; - }; - 3B7A8E6E0CE15840005BB45B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - name = "360Daemon.m: 68"; - rLen = 0; - rLoc = 2086; - rType = 0; - vrLen = 1228; - vrLoc = 1325; - }; - 3B7A8E720CE15907005BB45B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - name = "360Daemon.m: 87"; - rLen = 0; - rLoc = 3039; - rType = 0; - vrLen = 1625; - vrLoc = 2016; - }; - 3B7A8E740CE1595C005BB45B /* 360Daemon.m:82 */ = { + 3B7A8E740CE1595C005BB45B /* 360Daemon.m:95 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -151,13 +126,63 @@ delayBeforeContinue = 0; fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; functionName = "callbackConnected()"; - hitCount = 1; + hitCount = 0; ignoreCount = 0; - lineNumber = 82; + lineNumber = 95; location = 360Daemon; - modificationTime = 216095265.934186; + modificationTime = 216357854.96508; state = 2; }; + 3B8698070CE2903100283CEC /* ControlPrefs.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; + sepNavSelRange = "{599, 15}"; + sepNavVisRange = "{0, 703}"; + sepNavWindowFrame = "{{573, 106}, {623, 584}}"; + }; + }; + 3B8698080CE2903100283CEC /* ControlPrefs.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {872, 938}}"; + sepNavSelRange = "{1606, 0}"; + sepNavVisRange = "{0, 969}"; + sepNavWindowFrame = "{{38, 392}, {623, 584}}"; + }; + }; + 3B8698420CE29A3100283CEC /* ControlPrefs.m:28 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 3B8698080CE2903100283CEC /* ControlPrefs.m */; + functionName = "AlertDisabled()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 28; + location = 360Daemon; + modificationTime = 216357854.965237; + state = 0; + }; + 3B8698440CE29A3300283CEC /* ControlPrefs.m:16 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 3B8698080CE2903100283CEC /* ControlPrefs.m */; + functionName = "SetAlertDisabled()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 16; + location = 360Daemon; + modificationTime = 216357854.965258; + state = 0; + }; 3BD6F0E90C67E41F00574E6A /* 360Daemon */ = { isa = PBXExecutable; activeArgIndices = ( diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 0cacda1b..66ebfa74 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -1,8 +1,8 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { + activeArchitecture = ppc; activeBuildConfigurationName = Deployment; - activeBuildStyle = 014CEA3F0018CDD111CA2923 /* Development */; activeTarget = 8D57630D048677EA00EA77CD /* Feedback360 */; addToTargets = ( 8D57630D048677EA00EA77CD /* Feedback360 */, @@ -33,8 +33,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198873428; - PBXWorkspaceStateSaveDate = 198873428; + PBXPerProjectTemplateStateSaveDate = 216359748; + PBXWorkspaceStateSaveDate = 216359748; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { @@ -50,8 +50,9 @@ }; 08FB77B6FE84183AC02AAC07 /* main.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1226, 6174}}"; - sepNavSelRange = "{2434, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {902, 5978}}"; + sepNavSelRange = "{8090, 79}"; + sepNavVisRange = "{8002, 1846}"; sepNavVisRect = "{{0, 659}, {861, 685}}"; sepNavWindowFrame = "{{253, 96}, {900, 814}}"; }; @@ -102,8 +103,9 @@ }; 3BBA03E2096A29B5008A46C9 /* devlink.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 854}}"; - sepNavSelRange = "{1001, 17}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 868}}"; + sepNavSelRange = "{284, 0}"; + sepNavVisRange = "{0, 1832}"; sepNavVisRect = "{{0, 154}, {861, 685}}"; sepNavWindowFrame = "{{253, 110}, {900, 814}}"; }; @@ -113,8 +115,9 @@ }; 8D576317048677EA00EA77CD /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{1047, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1047}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{325, 66}, {900, 814}}"; }; diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 948bf941..3a08782c 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -130,7 +130,7 @@ GID 0 Path - ../360Daemon/build/Debug/360Daemon + ../360Daemon/build/Release/360Daemon Path Type 2 Privileges diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib index bf3ddffd..7b9cc6e1 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib @@ -4,8 +4,10 @@ IBFramework Version 629 + IBLastKnownRelativeProjectPath + ../../Pref360Control.xcodeproj IBOldestOS - -100 + 5 IBOpenObjects 6 diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 index 3b4a32a5..4042cb9e 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 @@ -204,10 +204,10 @@ _historyCapacity 0 bookmark - 3B40301B0BDA964700D98BAE + 3BE67E3B0C9F380500A68607 history - 3B4030150BDA961800D98BAE + 3B1C2F8C0C9E057F00D37DB5 SplitCount @@ -226,6 +226,86 @@ 221 179 900 758 0 0 1280 1002 + + Content + + PBXProjectModuleGUID + 3B216D690C0E0319000BE7F3 + PBXProjectModuleLabel + Pref360ControlPref.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216D6A0C0E0319000BE7F3 + PBXProjectModuleLabel + Pref360ControlPref.h + _historyCapacity + 0 + bookmark + 3BE67E3C0C9F380500A68607 + history + + 3B1C2F8E0C9E057F00D37DB5 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 138 152 900 758 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B216D660C0E0319000BE7F3 + PBXProjectModuleLabel + DeviceItem.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216D670C0E0319000BE7F3 + PBXProjectModuleLabel + DeviceItem.m + _historyCapacity + 0 + bookmark + 3BE67E3D0C9F380500A68607 + history + + 3B1C2F8F0C9E057F00D37DB5 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {900, 717}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 68 226 900 758 0 0 1280 1002 + + PerspectiveWidths @@ -260,6 +340,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -309,6 +391,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey + 14 + 1 0 @@ -377,8 +461,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -415,9 +497,9 @@ TableOfContents - 3B4030170BDA964700D98BAE + 3BE67E390C9F380500A68607 1CE0B1FE06471DED0097A5F4 - 3B4030180BDA964700D98BAE + 3BE67E3A0C9F380500A68607 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -551,9 +633,10 @@ 5 WindowOrderList - 3BBEAB15096B38D200F2E37B - /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj + 3B216D660C0E0319000BE7F3 + 3B216D690C0E0319000BE7F3 3B4030190BDA964700D98BAE + /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj WindowString 564 128 690 397 0 0 1280 1002 diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser index 23feacb5..c6032499 100644 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser @@ -1,16 +1,15 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { + activeArchitecture = ppc; activeBuildConfigurationName = Deployment; - activeBuildStyle = 06F27B30FFEEEFEF11CA0E56 /* Development */; activeTarget = 8D202CE80486D31800D8A456 /* Pref360Control */; addToTargets = ( 8D202CE80486D31800D8A456 /* Pref360Control */, ); breakpoints = ( - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */, + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:417 */, ); - breakpointsGroup = 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */; codeSenseManager = 3BBEAAF6096B030C00F2E37B /* Code sense */; perUserDictionary = { PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { @@ -57,12 +56,8 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198874637; - PBXWorkspaceStateSaveDate = 198874637; - }; - perUserProjectItems = { - 3B4030150BDA961800D98BAE /* PBXBookmark */ = 3B4030150BDA961800D98BAE /* PBXBookmark */; - 3B40301B0BDA964700D98BAE /* PBXTextBookmark */ = 3B40301B0BDA964700D98BAE /* PBXTextBookmark */; + PBXPerProjectTemplateStateSaveDate = 216360628; + PBXWorkspaceStateSaveDate = 216360628; }; sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; userBuildSettings = { @@ -84,39 +79,30 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3B4030150BDA961800D98BAE /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - }; - 3B40301B0BDA964700D98BAE /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - name = "Pref360ControlPref.m: 621"; - rLen = 0; - rLoc = 20932; - rType = 0; - vrLen = 2115; - vrLoc = 18924; - }; - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */ = { + 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:417 */ = { isa = PBXFileBreakpoint; actions = ( ); + breakpointStyle = 0; continueAfterActions = 0; + countType = 0; delayBeforeContinue = 0; fileReference = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; functionName = "-startDevice"; - hitCount = 1; - lineNumber = 416; - modificationTime = 182909504.480911; + hitCount = 0; + ignoreCount = 0; + lineNumber = 417; + location = Pref360Control; + modificationTime = 216269836.523849; state = 0; }; - 3BBB33C0097B2E9900E8A35A /* XCBreakpointsBucket */ = { - isa = XCBreakpointsBucket; - name = "Project Breakpoints"; - objects = ( - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:416 */, - ); + 3B86987E0CE2A22100283CEC /* ControlPrefs.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {872, 938}}"; + sepNavSelRange = "{1706, 2}"; + sepNavVisRange = "{770, 1303}"; + sepNavWindowFrame = "{{84, 281}, {827, 653}}"; + }; }; 3BBEAAF5096B030C00F2E37B /* Source Control */ = { isa = PBXSourceControlManager; @@ -212,18 +198,20 @@ }; 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{1399, 8}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; + sepNavSelRange = "{1085, 40}"; + sepNavVisRange = "{0, 1442}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{292, 58}, {900, 814}}"; + sepNavWindowFrame = "{{292, 106}, {900, 814}}"; }; }; 3BC41F31096C85CB00664A42 /* DeviceItem.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1036}}"; - sepNavSelRange = "{1219, 0}"; - sepNavVisRect = "{{0, 98}, {861, 685}}"; - sepNavWindowFrame = "{{381, 88}, {900, 814}}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 1036}}"; + sepNavSelRange = "{1952, 31}"; + sepNavVisRange = "{930, 1266}"; + sepNavVisRect = "{{0, 336}, {861, 685}}"; + sepNavWindowFrame = "{{68, 170}, {900, 814}}"; }; }; 8D202CE80486D31800D8A456 /* Pref360Control */ = { @@ -231,25 +219,28 @@ }; 8D202CF70486D31800D8A456 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{844, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 927}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{319, 93}, {900, 814}}"; }; }; F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1190}}"; - sepNavSelRange = "{2150, 0}"; - sepNavVisRect = "{{0, 414}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 1190}}"; + sepNavSelRange = "{2423, 13}"; + sepNavVisRange = "{1227, 1565}"; + sepNavVisRect = "{{0, 238}, {861, 685}}"; sepNavWindowFrame = "{{138, 96}, {900, 814}}"; }; }; F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1022, 9534}}"; - sepNavSelRange = "{20932, 0}"; - sepNavVisRect = "{{0, 8032}, {861, 685}}"; + sepNavIntBoundsRect = "{{0, 0}, {841, 9296}}"; + sepNavSelRange = "{15986, 9}"; + sepNavVisRange = "{14625, 2202}"; + sepNavVisRect = "{{0, 7211}, {861, 685}}"; sepNavWindowFrame = "{{221, 123}, {900, 814}}"; }; }; diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 index 693b0eee..d57d9a7f 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 @@ -185,7 +185,48 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3BE527300BDC35AB00984E1F + PBXProjectModuleLabel + Wireless360Controller.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE527310BDC35AB00984E1F + PBXProjectModuleLabel + Wireless360Controller.cpp + _historyCapacity + 0 + bookmark + 3BD5A2F90C56D76B005B4E24 + history + + 3B4FCA000C49C3B6007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {623, 487}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 113 131 623 528 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -261,6 +302,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey + 3 + 1 0 @@ -284,7 +327,7 @@ 186 RubberWindowFrame - 574 562 690 397 0 0 1280 1002 + 105 479 690 397 0 0 1280 1002 Module PBXSmartGroupTreeModule @@ -321,7 +364,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 574 562 690 397 0 0 1280 1002 + 105 479 690 397 0 0 1280 1002 Module PBXNavigatorGroup @@ -343,7 +386,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 574 562 690 397 0 0 1280 1002 + 105 479 690 397 0 0 1280 1002 Module XCDetailModule @@ -367,9 +410,9 @@ TableOfContents - 3BCC408A0BDA917D00B1619B + 3BD5A2F70C56D76B005B4E24 1CE0B1FE06471DED0097A5F4 - 3BCC408B0BDA917D00B1619B + 3BD5A2F80C56D76B005B4E24 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -503,12 +546,11 @@ 5 WindowOrderList - 3B18E2510B92720F0093FA6E - 1C530D57069F1CE1000CFCEE + 3BE527300BDC35AB00984E1F /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj WindowString - 574 562 690 397 0 0 1280 1002 + 105 479 690 397 0 0 1280 1002 WindowTools @@ -585,7 +627,7 @@ TableOfContents 3B18E2510B92720F0093FA6E - 3BCC408C0BDA917D00B1619B + 3B4FC9DE0C49BD69007CF491 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index 7838c01b..343f99fc 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -1,8 +1,8 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { + activeArchitecture = ppc; activeBuildConfigurationName = Release; - activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Debug */; activeTarget = 32D94FC30562CBF700B6AF17 /* Wireless360Controller */; addToTargets = ( 32D94FC30562CBF700B6AF17 /* Wireless360Controller */, @@ -31,8 +31,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198863039; - PBXWorkspaceStateSaveDate = 198863039; + PBXPerProjectTemplateStateSaveDate = 216359858; + PBXWorkspaceStateSaveDate = 216359858; }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { @@ -56,10 +56,11 @@ }; 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {896, 3486}}"; - sepNavSelRange = "{188, 0}"; - sepNavVisRect = "{{0, 0}, {458, 440}}"; - sepNavWindowFrame = "{{113, 90}, {497, 569}}"; + sepNavIntBoundsRect = "{{0, 0}, {722, 3472}}"; + sepNavSelRange = "{5823, 5}"; + sepNavVisRange = "{5275, 1039}"; + sepNavVisRect = "{{0, 1656}, {584, 455}}"; + sepNavWindowFrame = "{{113, 75}, {623, 584}}"; }; }; 32D94FC30562CBF700B6AF17 /* Wireless360Controller */ = { @@ -67,8 +68,9 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {767, 770}}"; - sepNavSelRange = "{1134, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {747, 742}}"; + sepNavSelRange = "{722, 0}"; + sepNavVisRange = "{0, 1636}"; sepNavVisRect = "{{0, 0}, {767, 645}}"; sepNavWindowFrame = "{{351, 182}, {806, 774}}"; }; diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 index 1d53c5e5..6405cf09 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.mode1 @@ -185,7 +185,248 @@ Notifications OpenEditors - + + + Content + + PBXProjectModuleGUID + 3BE527360BDC379700984E1F + PBXProjectModuleLabel + WirelessGamingReceiver.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BE527370BDC379700984E1F + PBXProjectModuleLabel + WirelessGamingReceiver.cpp + _historyCapacity + 0 + bookmark + 3BD5A2FD0C56D76C005B4E24 + history + + 3BD5A2FC0C56D76C005B4E24 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {806, 677}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 38 258 806 718 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B54B4630BDA9ECF00329AC0 + PBXProjectModuleLabel + WirelessHIDDevice.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B54B4640BDA9ECF00329AC0 + PBXProjectModuleLabel + WirelessHIDDevice.cpp + _historyCapacity + 0 + bookmark + 3BD5A2FE0C56D76C005B4E24 + history + + 3B4FC9F60C49C3B3007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 34 458 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3BD1A9390C49BC33006510F7 + PBXProjectModuleLabel + WirelessHIDDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3BD1A93A0C49BC33006510F7 + PBXProjectModuleLabel + WirelessHIDDevice.h + _historyCapacity + 0 + bookmark + 3BD5A2FF0C56D76C005B4E24 + history + + 3B4FC9F70C49C3B3007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 155 150 1059 544 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B216B380C08E9A4000BE7F3 + PBXProjectModuleLabel + WirelessGamingReceiver.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216B390C08E9A4000BE7F3 + PBXProjectModuleLabel + WirelessGamingReceiver.h + _historyCapacity + 0 + bookmark + 3BD5A3000C56D76C005B4E24 + history + + 3B4FC9F80C49C3B3007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {688, 361}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 481 168 688 402 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B216B3B0C08E9A4000BE7F3 + PBXProjectModuleLabel + IOUSBDevice.cpp + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216B3C0C08E9A4000BE7F3 + PBXProjectModuleLabel + IOUSBDevice.cpp + _historyCapacity + 0 + bookmark + 3BD5A3010C56D76C005B4E24 + history + + 3B4FC9F90C49C3B3007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {806, 677}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 61 237 806 718 0 0 1280 1002 + + + + Content + + PBXProjectModuleGUID + 3B216B410C08E9A4000BE7F3 + PBXProjectModuleLabel + WirelessDevice.h + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 3B216B420C08E9A4000BE7F3 + PBXProjectModuleLabel + WirelessDevice.h + _historyCapacity + 0 + bookmark + 3BD5A3030C56D76C005B4E24 + history + + 3B4FC9FB0C49C3B3007CF491 + + + SplitCount + 1 + + StatusBarVisibility + + + Geometry + + Frame + {{0, 20}, {1059, 503}} + PBXModuleWindowStatusBarHidden2 + + RubberWindowFrame + 175 169 1059 544 0 0 1280 1002 + + + PerspectiveWidths -1 @@ -366,9 +607,9 @@ TableOfContents - 3BCC408E0BDA918500B1619B + 3BD5A2FA0C56D76C005B4E24 1CE0B1FE06471DED0097A5F4 - 3BCC408F0BDA918500B1619B + 3BD5A2FB0C56D76C005B4E24 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -502,9 +743,14 @@ 5 WindowOrderList - 1C530D57069F1CE1000CFCEE 3B21ED2D0B8E33A000B5CACA + 3B216B410C08E9A4000BE7F3 + 3B216B3B0C08E9A4000BE7F3 + 3B216B380C08E9A4000BE7F3 + 3BD1A9390C49BC33006510F7 + 3B54B4630BDA9ECF00329AC0 /Users/colin/Projects2/OSX/360 Controller/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj + 3BE527360BDC379700984E1F WindowString 7 576 690 397 0 0 1280 1002 @@ -584,7 +830,7 @@ TableOfContents 3B21ED2D0B8E33A000B5CACA - 3BCC40320BDA6D7200B1619B + 3BD5A3040C56D76C005B4E24 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser index 61039573..81aac86b 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -1,8 +1,8 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { + activeArchitecture = ppc; activeBuildConfigurationName = Release; - activeBuildStyle = 06AA1265FFB2107B11CA28AA /* Debug */; activeTarget = 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */; addToTargets = ( 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, @@ -11,7 +11,6 @@ 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */, 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */, ); - breakpointsGroup = 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */; codeSenseManager = 3B21EBDB0B8CEAED00B5CACA /* Code sense */; perUserDictionary = { PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { @@ -36,8 +35,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 198861858; - PBXWorkspaceStateSaveDate = 198861858; + PBXPerProjectTemplateStateSaveDate = 216359882; + PBXWorkspaceStateSaveDate = 216359882; }; sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; userBuildSettings = { @@ -45,17 +44,19 @@ }; 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {662, 1218}}"; - sepNavSelRange = "{2745, 0}"; - sepNavVisRect = "{{0, 400}, {649, 329}}"; + sepNavIntBoundsRect = "{{0, 0}, {629, 1288}}"; + sepNavSelRange = "{1435, 7}"; + sepNavVisRange = "{1099, 488}"; + sepNavVisRect = "{{0, 658}, {649, 329}}"; sepNavWindowFrame = "{{481, 112}, {688, 458}}"; }; }; 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {842, 7308}}"; - sepNavSelRange = "{16651, 0}"; - sepNavVisRect = "{{0, 6663}, {767, 645}}"; + sepNavIntBoundsRect = "{{0, 0}, {747, 7924}}"; + sepNavSelRange = "{6221, 5}"; + sepNavVisRange = "{5219, 1665}"; + sepNavVisRect = "{{0, 5898}, {767, 645}}"; sepNavWindowFrame = "{{38, 202}, {806, 774}}"; }; }; @@ -64,10 +65,11 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 784}}"; - sepNavSelRange = "{793, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 756}}"; + sepNavSelRange = "{723, 0}"; + sepNavVisRange = "{0, 1173}"; sepNavVisRect = "{{0, 168}, {1020, 471}}"; - sepNavWindowFrame = "{{45, 58}, {1059, 600}}"; + sepNavWindowFrame = "{{45, 118}, {1059, 600}}"; }; }; 3B21EBDA0B8CEAED00B5CACA /* Source Control */ = { @@ -84,66 +86,68 @@ }; 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 826}}"; - sepNavSelRange = "{1470, 0}"; - sepNavVisRect = "{{0, 355}, {1020, 471}}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 826}}"; + sepNavSelRange = "{1620, 0}"; + sepNavVisRange = "{1013, 848}"; + sepNavVisRect = "{{0, 341}, {1020, 471}}"; sepNavWindowFrame = "{{175, 113}, {1059, 600}}"; }; }; 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 1568}}"; - sepNavSelRange = "{3286, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 1596}}"; + sepNavSelRange = "{2806, 0}"; + sepNavVisRange = "{2269, 938}"; sepNavVisRect = "{{0, 1097}, {1020, 471}}"; - sepNavWindowFrame = "{{107, 264}, {1059, 600}}"; + sepNavWindowFrame = "{{226, 80}, {1059, 600}}"; }; }; - 3BD4A7080B8FF49E0096227D /* XCBreakpointsBucket */ = { - isa = XCBreakpointsBucket; - name = "Project Breakpoints"; - objects = ( - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */, - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */, - ); - }; 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 784}}"; - sepNavSelRange = "{96, 0}"; - sepNavVisRect = "{{0, 313}, {1020, 471}}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 784}}"; + sepNavSelRange = "{1774, 0}"; + sepNavVisRange = "{941, 1025}"; + sepNavVisRect = "{{0, 299}, {1020, 471}}"; sepNavWindowFrame = "{{155, 94}, {1059, 600}}"; }; }; 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 2954}}"; - sepNavSelRange = "{5927, 0}"; - sepNavVisRect = "{{0, 2483}, {1020, 471}}"; - sepNavWindowFrame = "{{34, 402}, {1059, 600}}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 3164}}"; + sepNavSelRange = "{3510, 0}"; + sepNavVisRange = "{2855, 785}"; + sepNavVisRect = "{{0, 1316}, {1020, 471}}"; + sepNavWindowFrame = "{{217, 402}, {1059, 600}}"; }; }; 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */ = { isa = PBXFileBreakpoint; actions = ( ); + breakpointStyle = 0; continueAfterActions = 0; + countType = 0; delayBeforeContinue = 0; fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; hitCount = 0; + ignoreCount = 0; lineNumber = 5; - modificationTime = 194059839.645874; + modificationTime = 216357854.963561; state = 2; }; 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */ = { isa = PBXFileBreakpoint; actions = ( ); + breakpointStyle = 0; continueAfterActions = 0; + countType = 0; delayBeforeContinue = 0; fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; hitCount = 0; + ignoreCount = 0; lineNumber = 5; - modificationTime = 194059838.6863289; + modificationTime = 216357854.964239; state = 2; }; 3BE6677A0B91DC55009679FC /* devices.h */ = { From 7d1951b6be97926cdb7bd475c913e300711bdc10 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 21 Nov 2009 03:07:10 +0000 Subject: [PATCH 20/66] Update to fix Snow Leopard, 64-bit and ChatPad support --- .../360Controller.xcodeproj/colin.pbxuser | 125 +- .../360Controller.xcodeproj/project.pbxproj | 68 +- 360Controller/ChatPad.cpp | 144 ++ 360Controller/ChatPad.h | 37 + 360Controller/Controller.cpp | 190 ++ 360Controller/Controller.h | 37 + 360Controller/English.lproj/InfoPlist.strings | Bin 264 -> 260 bytes 360Controller/Info.plist | 121 +- 360Controller/_60Controller.cpp | 575 +++-- 360Controller/_60Controller.h | 79 +- 360Controller/chatpadhid.h | 35 + 360Controller/chatpadkeys.cpp | 40 + 360Controller/chatpadkeys.h | 10 + 360Daemon/360Daemon.m | 23 + 360Daemon/360Daemon.xcodeproj/colin.mode1v3 | 65 +- 360Daemon/360Daemon.xcodeproj/colin.pbxuser | 37 +- 360Daemon/360Daemon.xcodeproj/project.pbxproj | 8 +- Feedback360/English.lproj/InfoPlist.strings | Bin 260 -> 260 bytes .../Feedback360.xcodeproj/colin.pbxuser | 64 +- .../Feedback360.xcodeproj/project.pbxproj | 12 +- Feedback360/devlink.c | 2 + Feedback360/main.c | 15 +- .../Install360Controller.packproj | 303 ++- Install360Controller/Text/Welcome.rtf | 54 +- .../English.lproj/InfoPlist.strings | Bin 378 -> 388 bytes .../Pref360ControlPref.nib/classes.nib | 131 -- .../Pref360ControlPref.nib/designable.nib | 1955 +++++++++++++++++ .../Pref360ControlPref.nib/info.nib | 20 - .../Pref360ControlPref.nib/keyedobjects.nib | Bin 0 -> 17413 bytes .../Pref360ControlPref.nib/objects.nib | Bin 5816 -> 0 bytes .../Pref360Control.xcodeproj/colin.pbxuser | 84 +- .../Pref360Control.xcodeproj/project.pbxproj | 11 +- Pref360Control/Pref360ControlPref.m | 6 +- Readme.rtf | 9 +- .../English.lproj/InfoPlist.strings | Bin 202 -> 196 bytes Wireless360Controller/Info.plist | 12 +- .../colin.pbxuser | 61 +- .../project.pbxproj | 22 +- .../English.lproj/InfoPlist.strings | Bin 202 -> 196 bytes WirelessGamingReceiver/Info.plist | 10 +- WirelessGamingReceiver/WirelessDevice.h | 2 +- .../WirelessGamingReceiver.cpp | 3 +- .../WirelessGamingReceiver.h | 2 +- .../colin.pbxuser | 90 +- .../project.pbxproj | 24 +- 45 files changed, 3880 insertions(+), 606 deletions(-) create mode 100644 360Controller/ChatPad.cpp create mode 100644 360Controller/ChatPad.h create mode 100644 360Controller/Controller.cpp create mode 100644 360Controller/Controller.h create mode 100755 360Controller/chatpadhid.h create mode 100644 360Controller/chatpadkeys.cpp create mode 100644 360Controller/chatpadkeys.h delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib create mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib delete mode 100644 Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser index 099642e7..9917fe37 100644 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ b/360Controller/360Controller.xcodeproj/colin.pbxuser @@ -1,7 +1,6 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { - activeArchitecture = ppc; activeBuildConfigurationName = Deployment; activeTarget = 32D94FC30562CBF700B6AF17 /* 360Controller */; addToTargets = ( @@ -85,8 +84,17 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216359776; - PBXWorkspaceStateSaveDate = 216359776; + PBXPerProjectTemplateStateSaveDate = 280461271; + PBXWorkspaceStateSaveDate = 280461271; + }; + perUserProjectItems = { + 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */ = 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */; + 3B06F7CC1060663900CACC16 /* PBXTextBookmark */ = 3B06F7CC1060663900CACC16 /* PBXTextBookmark */; + 3B06F83910615C8B00CACC16 /* PBXTextBookmark */ = 3B06F83910615C8B00CACC16 /* PBXTextBookmark */; + 3B36DCD210B781B500FFD769 /* PlistBookmark */ = 3B36DCD210B781B500FFD769 /* PlistBookmark */; + 3B36DCD310B781B500FFD769 /* PBXTextBookmark */ = 3B36DCD310B781B500FFD769 /* PBXTextBookmark */; + 3B36DCD410B781B500FFD769 /* PBXBookmark */ = 3B36DCD410B781B500FFD769 /* PBXBookmark */; + 3B36DCD510B781B500FFD769 /* PBXTextBookmark */ = 3B36DCD510B781B500FFD769 /* PBXTextBookmark */; }; sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; userBuildSettings = { @@ -94,16 +102,18 @@ }; 089C167EFE841241C02AAC07 /* English */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{129, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {444, 226}}"; + sepNavSelRange = "{125, 0}"; + sepNavVisRange = "{0, 129}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{130, 78}, {900, 814}}"; }; }; 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1358}}"; - sepNavSelRange = "{125, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {775, 1196}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{2980, 619}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{389, 134}, {900, 814}}"; }; @@ -121,13 +131,92 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 3038}}"; - sepNavSelRange = "{663, 0}"; - sepNavVisRange = "{0, 1584}"; + sepNavIntBoundsRect = "{{0, 0}, {726, 2912}}"; + sepNavSelRange = "{6083, 64}"; + sepNavVisRange = "{6026, 386}"; sepNavVisRect = "{{0, 2311}, {861, 685}}"; sepNavWindowFrame = "{{376, 63}, {900, 814}}"; }; }; + 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "InfoPlist.strings: 4"; + rLen = 0; + rLoc = 125; + rType = 0; + vrLen = 129; + vrLoc = 0; + }; + 3B06F7CC1060663900CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; + name = "ControlStruct.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 832; + vrLoc = 92; + }; + 3B06F83910615C8B00CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; + name = "_60Controller.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 619; + vrLoc = 2980; + }; + 3B36DCC710B7817E00FFD769 /* ChatPad.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {775, 585}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 278}"; + }; + }; + 3B36DCC810B7817E00FFD769 /* chatpadhid.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {488, 481}}"; + sepNavSelRange = "{305, 0}"; + sepNavVisRange = "{0, 784}"; + }; + }; + 3B36DCD210B781B500FFD769 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/colin/Projects/360 Controller/360Controller/Info.plist"; + rLen = 0; + rLoc = 9223372036854775807; + }; + 3B36DCD310B781B500FFD769 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B36DCC710B7817E00FFD769 /* ChatPad.h */; + name = "ChatPad.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 278; + vrLoc = 0; + }; + 3B36DCD410B781B500FFD769 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3B36DCC810B7817E00FFD769 /* chatpadhid.h */; + }; + 3B36DCD510B781B500FFD769 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3B36DCC810B7817E00FFD769 /* chatpadhid.h */; + name = "chatpadhid.h: 8"; + rLen = 0; + rLoc = 305; + rType = 0; + vrLen = 784; + vrLoc = 0; + }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; @@ -136,19 +225,14 @@ sepNavWindowFrame = "{{15, 183}, {900, 814}}"; }; }; - 3BBEA711096AFD9F00F2E37B /* Info copy.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 798}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 113}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; 3BCE45B109633D9A00B69EDF /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; scmType = ""; }; @@ -158,8 +242,9 @@ }; 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1624}}"; - sepNavSelRange = "{949, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {726, 1508}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{92, 832}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{38, 162}, {900, 814}}"; }; diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 13c00b23..2ac52f22 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -3,13 +3,20 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 32D94FC60562CBF700B6AF17 /* _60Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; }; 32D94FC80562CBF700B6AF17 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; 32D94FCA0562CBF700B6AF17 /* _60Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */; settings = {ATTRIBUTES = (); }; }; + 3B36DCC410B7816F00FFD769 /* Controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B36DCC210B7816F00FFD769 /* Controller.cpp */; }; + 3B36DCC510B7816F00FFD769 /* Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B36DCC310B7816F00FFD769 /* Controller.h */; }; + 3B36DCCB10B7817E00FFD769 /* ChatPad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B36DCC610B7817E00FFD769 /* ChatPad.cpp */; }; + 3B36DCCC10B7817E00FFD769 /* ChatPad.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B36DCC710B7817E00FFD769 /* ChatPad.h */; }; + 3B36DCCD10B7817E00FFD769 /* chatpadhid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B36DCC810B7817E00FFD769 /* chatpadhid.h */; }; + 3B36DCCE10B7817E00FFD769 /* chatpadkeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B36DCC910B7817E00FFD769 /* chatpadkeys.cpp */; }; + 3B36DCCF10B7817E00FFD769 /* chatpadkeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B36DCCA10B7817E00FFD769 /* chatpadkeys.h */; }; 3BB5E09C09641F8200F83598 /* xbox360hid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB5E09B09641F8200F83598 /* xbox360hid.h */; }; 3BCE45CA09638EBC00B69EDF /* ControlStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; }; /* End PBXBuildFile section */ @@ -18,11 +25,17 @@ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _60Controller.h; sourceTree = ""; }; 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = _60Controller.cpp; sourceTree = ""; }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 32D94FD00562CBF700B6AF17 /* 360Controller.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = 360Controller.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 3B0F1276097B395B00127827 /* Feedback360.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Feedback360.bundle; path = ../Feedback360/build/Deployment/Feedback360.bundle; sourceTree = SOURCE_ROOT; }; + 3B36DCC210B7816F00FFD769 /* Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Controller.cpp; sourceTree = ""; }; + 3B36DCC310B7816F00FFD769 /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = ""; }; + 3B36DCC610B7817E00FFD769 /* ChatPad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChatPad.cpp; sourceTree = ""; }; + 3B36DCC710B7817E00FFD769 /* ChatPad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatPad.h; sourceTree = ""; }; + 3B36DCC810B7817E00FFD769 /* chatpadhid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chatpadhid.h; sourceTree = ""; }; + 3B36DCC910B7817E00FFD769 /* chatpadkeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chatpadkeys.cpp; sourceTree = ""; }; + 3B36DCCA10B7817E00FFD769 /* chatpadkeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chatpadkeys.h; sourceTree = ""; }; 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = xbox360hid.h; sourceTree = ""; }; - 3BBEA711096AFD9F00F2E37B /* Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "Info copy.plist"; path = "/Users/colin/Projects/360Controller/Info copy.plist"; sourceTree = ""; }; 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlStruct.h; sourceTree = ""; }; 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -75,7 +88,8 @@ 3B2EF19A0965A03E007BFB7B /* Kernel Driver */ = { isa = PBXGroup; children = ( - 3BB5E09B09641F8200F83598 /* xbox360hid.h */, + 3B36DCC010B7815000FFD769 /* Controller */, + 3B36DCC110B7815700FFD769 /* ChatPad */, 3BCE45C909638EBC00B69EDF /* ControlStruct.h */, 1A224C3EFF42367911CA2CB7 /* _60Controller.h */, 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */, @@ -90,11 +104,32 @@ 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */, 32D94FCF0562CBF700B6AF17 /* Info.plist */, 089C167DFE841241C02AAC07 /* InfoPlist.strings */, - 3BBEA711096AFD9F00F2E37B /* Info copy.plist */, ); name = "Kernel Driver"; sourceTree = ""; }; + 3B36DCC010B7815000FFD769 /* Controller */ = { + isa = PBXGroup; + children = ( + 3B36DCC210B7816F00FFD769 /* Controller.cpp */, + 3B36DCC310B7816F00FFD769 /* Controller.h */, + 3BB5E09B09641F8200F83598 /* xbox360hid.h */, + ); + name = Controller; + sourceTree = ""; + }; + 3B36DCC110B7815700FFD769 /* ChatPad */ = { + isa = PBXGroup; + children = ( + 3B36DCC610B7817E00FFD769 /* ChatPad.cpp */, + 3B36DCC710B7817E00FFD769 /* ChatPad.h */, + 3B36DCC910B7817E00FFD769 /* chatpadkeys.cpp */, + 3B36DCCA10B7817E00FFD769 /* chatpadkeys.h */, + 3B36DCC810B7817E00FFD769 /* chatpadhid.h */, + ); + name = ChatPad; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -105,6 +140,10 @@ 32D94FC60562CBF700B6AF17 /* _60Controller.h in Headers */, 3BCE45CA09638EBC00B69EDF /* ControlStruct.h in Headers */, 3BB5E09C09641F8200F83598 /* xbox360hid.h in Headers */, + 3B36DCC510B7816F00FFD769 /* Controller.h in Headers */, + 3B36DCCC10B7817E00FFD769 /* ChatPad.h in Headers */, + 3B36DCCD10B7817E00FFD769 /* chatpadhid.h in Headers */, + 3B36DCCF10B7817E00FFD769 /* chatpadkeys.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,7 +177,7 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */; - compatibilityVersion = "Xcode 2.4"; + compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* 360Controller */; projectDirPath = ""; @@ -192,6 +231,9 @@ buildActionMask = 2147483647; files = ( 32D94FCA0562CBF700B6AF17 /* _60Controller.cpp in Sources */, + 3B36DCC410B7816F00FFD769 /* Controller.cpp in Sources */, + 3B36DCCB10B7817E00FFD769 /* ChatPad.cpp in Sources */, + 3B36DCCE10B7817E00FFD769 /* chatpadkeys.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -275,21 +317,17 @@ isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; }; name = Development; }; 3BBDC688097938A90023AAD8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; MACOSX_DEPLOYMENT_TARGET = 10.2; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT = macosx10.5; + "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; }; name = Deployment; }; @@ -297,7 +335,7 @@ isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; }; name = Default; }; diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp new file mode 100644 index 00000000..1eb14032 --- /dev/null +++ b/360Controller/ChatPad.cpp @@ -0,0 +1,144 @@ +/* + * ChatPad.cpp + * 360Controller + * + * Created by Colin on 18/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +#include +#include "ChatPad.h" +namespace HID_ChatPad { +#include "chatpadhid.h" +} +#include "chatpadkeys.h" +#include "_60Controller.h" + +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; + buffer->writeBytes(0, HID_ChatPad::ReportDescriptor, sizeof(HID_ChatPad::ReportDescriptor)); + *descriptor = buffer; + return kIOReturnSuccess; +} + +IOReturn ChatPadKeyboardClass::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) +{ + // Maybe add LED support later? + return kIOReturnUnsupported; +} + +IOReturn ChatPadKeyboardClass::getReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) +{ + return kIOReturnUnsupported; +} + +IOReturn ChatPadKeyboardClass::handleReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) +{ + IOBufferMemoryDescriptor *realReport = OSDynamicCast(IOBufferMemoryDescriptor, report); + if (realReport != NULL) + { + unsigned char *data = (unsigned char*)realReport->getBytesNoCopy(); + if (data[0] == 0x00) + { + for (int i = 2; i < 5; i++) + { + data[i] = ChatPad2USB(data[i]); + } + } + } + return IOHIDDevice::handleReport(report, reportType, options); +} + +OSNumber* ChatPadKeyboardClass::newPrimaryUsageNumber() const +{ + return OSNumber::withNumber(HID_ChatPad::ReportDescriptor[3], 8); +} + +OSNumber* ChatPadKeyboardClass::newPrimaryUsagePageNumber() const +{ + return OSNumber::withNumber(HID_ChatPad::ReportDescriptor[1], 8); +} + +OSString* ChatPadKeyboardClass::newProductString() const +{ + return OSString::withCString("ChatPad"); +} + +OSString* ChatPadKeyboardClass::newTransportString() const +{ + return OSString::withCString("Serial"); +} + +OSNumber* ChatPadKeyboardClass::newVendorIDNumber() const +{ + // Same as USB + return OSNumber::withNumber(100, 32); +} + +OSNumber* ChatPadKeyboardClass::newProductIDNumber() const +{ + // Same as USB, plus one + return OSNumber::withNumber(100, 32); +} + +/* +static IOHIDDevice* GetParent(IOService *current) +{ + IOService *parent = current->getProvider(); + if (parent == NULL) + return NULL; + return OSDynamicCast(IOHIDDevice, parent->getProvider()); +} + */ +/* +static IOHIDDevice* GetParent(const IOService *current) +{ + return OSDynamicCast(IOHIDDevice, current->getProvider()); +} + */ +static IOHIDDevice* GetParent(const IOService *current) +{ + Xbox360ControllerClass *owner; + + owner = OSDynamicCast(Xbox360ControllerClass, current->getProvider()); + if (owner == NULL) + return NULL; + return owner->getController(0); +} + +OSString* ChatPadKeyboardClass::newManufacturerString() const +{ + IOHIDDevice *device = GetParent(this); + if (device == NULL) + return NULL; + return device->newManufacturerString(); +} + +OSString* ChatPadKeyboardClass::newSerialNumberString() const +{ + IOHIDDevice *device = GetParent(this); + if (device == NULL) + return NULL; + return device->newSerialNumberString(); +} + +OSNumber* ChatPadKeyboardClass::newLocationIDNumber() const +{ + IOHIDDevice *device = GetParent(this); + if (device == NULL) + return NULL; + OSNumber *number = device->newLocationIDNumber(); + if (number == NULL) + return NULL; + UInt32 value = number->unsigned32BitValue(); + number->release(); + return OSNumber::withNumber(value + 1, 32); +} diff --git a/360Controller/ChatPad.h b/360Controller/ChatPad.h new file mode 100644 index 00000000..db782294 --- /dev/null +++ b/360Controller/ChatPad.h @@ -0,0 +1,37 @@ +/* + * ChatPad.h + * 360Controller + * + * Created by Colin on 18/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +#include + +class ChatPadKeyboardClass : public IOHIDDevice +{ + OSDeclareDefaultStructors(ChatPadKeyboardClass) + +private: + +public: + // 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; + virtual OSNumber* newProductIDNumber() const; + virtual OSString* newProductString() const; + virtual OSString* newSerialNumberString() const; + virtual OSString* newTransportString() const; + virtual OSNumber* newVendorIDNumber() const; + + virtual OSNumber* newLocationIDNumber() const; +}; diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp new file mode 100644 index 00000000..385fa26f --- /dev/null +++ b/360Controller/Controller.cpp @@ -0,0 +1,190 @@ +/* + * Controller.cpp + * 360Controller + * + * Created by Colin on 20/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +#include +#include +#include "Controller.h" +#include "ControlStruct.h" +namespace HID_360 { +#include "xbox360hid.h" +} +#include "_60Controller.h" + +OSDefineMetaClassAndStructors(ControllerClass, IOHIDDevice) + +static Xbox360ControllerClass* GetOwner(IOService *us) +{ + IOService *prov; + + prov = us->getProvider(); + if (prov == NULL) + return NULL; + return OSDynamicCast(Xbox360ControllerClass, prov); +} + +static IOUSBDevice* GetOwnerProvider(const IOService *us) +{ + IOService *prov, *provprov; + + prov = us->getProvider(); + if (prov == NULL) + return NULL; + provprov = prov->getProvider(); + if (provprov == NULL) + return NULL; + return OSDynamicCast(IOUSBDevice, provprov); +} + +IOReturn ControllerClass::setProperties(OSObject *properties) +{ + Xbox360ControllerClass *owner = GetOwner(this); + if (owner == NULL) + return kIOReturnUnsupported; + return owner->setProperties(properties); +} + +// Returns the HID descriptor for this device +IOReturn ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const +{ + IOBufferMemoryDescriptor *buffer; + + 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; + return kIOReturnSuccess; +} + +// Handles a message from the userspace IOHIDDeviceInterface122::setReport function +IOReturn ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +{ + char data[2]; + + report->readBytes(0,data,2); + switch(data[0]) { + case 0x00: // Set force feedback + 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]; + rumble.little=data[1]; + GetOwner(this)->QueueWrite(&rumble,sizeof(rumble)); +// IOLog("Set rumble: big(%d) little(%d)\n", rumble.big, rumble.little); + } + return kIOReturnSuccess; + case 0x01: // Set LEDs + 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]; + GetOwner(this)->QueueWrite(&led,sizeof(led)); +// IOLog("Set LED: %d\n", led.pattern); + } + return kIOReturnSuccess; + default: + IOLog("Unknown escape %d\n", data[0]); + return kIOReturnUnsupported; + } +} + +// Get report +IOReturn ControllerClass::getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +{ + // Doesn't do anything yet ;) + return kIOReturnUnsupported; +} + +// Returns the string for the specified index from the USB device's string list, with an optional default +OSString* ControllerClass::getDeviceString(UInt8 index,const char *def) const +{ + IOReturn err; + char buf[1024]; + const char *string; + + err = GetOwnerProvider(this)->GetStringDescriptor(index,buf,sizeof(buf)); + if(err==kIOReturnSuccess) string=buf; + else { + if(def==NULL) string="Unknown"; + else string=def; + } + return OSString::withCString(string); +} + +OSString* ControllerClass::newManufacturerString() const +{ + return getDeviceString(GetOwnerProvider(this)->GetManufacturerStringIndex()); +} + +OSNumber* ControllerClass::newPrimaryUsageNumber() const +{ + return OSNumber::withNumber(HID_360::ReportDescriptor[3], 8); +} + +OSNumber* ControllerClass::newPrimaryUsagePageNumber() const +{ + return OSNumber::withNumber(HID_360::ReportDescriptor[1], 8); +} + +OSNumber* ControllerClass::newProductIDNumber() const +{ + return OSNumber::withNumber(GetOwnerProvider(this)->GetProductID(),16); +} + +OSString* ControllerClass::newProductString() const +{ + return getDeviceString(GetOwnerProvider(this)->GetProductStringIndex()); +} + +OSString* ControllerClass::newSerialNumberString() const +{ + return getDeviceString(GetOwnerProvider(this)->GetSerialNumberStringIndex()); +} + +OSString* ControllerClass::newTransportString() const +{ + return OSString::withCString("USB"); +} + +OSNumber* ControllerClass::newVendorIDNumber() const +{ + return OSNumber::withNumber(GetOwnerProvider(this)->GetVendorID(),16); +} + +OSNumber* ControllerClass::newLocationIDNumber() const +{ + IOUSBDevice *device; + OSNumber *number; + UInt32 location; + + device = GetOwnerProvider(this); + if (device) + { + if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + { + location = number->unsigned32BitValue(); + } + else + { + // Make up an address + if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) + location |= number->unsigned8BitValue() << 24; + + if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) + location |= number->unsigned8BitValue() << 16; + } + } + + return (location != 0) ? OSNumber::withNumber(location, 32) : 0; +} diff --git a/360Controller/Controller.h b/360Controller/Controller.h new file mode 100644 index 00000000..f8038fc1 --- /dev/null +++ b/360Controller/Controller.h @@ -0,0 +1,37 @@ +/* + * Controller.h + * 360Controller + * + * Created by Colin on 20/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +#include + +class ControllerClass : public IOHIDDevice +{ + OSDeclareDefaultStructors(ControllerClass) + +private: + OSString* getDeviceString(UInt8 index,const char *def=NULL) const; + +public: + 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 OSString* newManufacturerString() const; + virtual OSNumber* newPrimaryUsageNumber() const; + virtual OSNumber* newPrimaryUsagePageNumber() const; + virtual OSNumber* newProductIDNumber() const; + virtual OSString* newProductString() const; + virtual OSString* newSerialNumberString() const; + virtual OSString* newTransportString() const; + virtual OSNumber* newVendorIDNumber() const; + + virtual OSNumber* newLocationIDNumber() const; +}; diff --git a/360Controller/English.lproj/InfoPlist.strings b/360Controller/English.lproj/InfoPlist.strings index 37b3a9e5286475b005ac0687ec9f149660751953..90991d74ced173c0f19f56287f23efcc7ed15d86 100644 GIT binary patch delta 14 VcmeBRYGIo2m)(HDl0k{V8UP=u18V>P delta 18 XcmZo+>R_7im)nTJ00_+(lo+f5E-VAi diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 34e34baa..939b0b0c 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion @@ -17,18 +17,18 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d4 + 1.0.0d9 IOKitPersonalities Controller CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -44,11 +44,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -64,11 +64,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -84,11 +84,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -104,11 +104,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -124,11 +124,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -144,11 +144,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -164,11 +164,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -184,11 +184,11 @@ CFBundleIdentifier com.mice.driver.Xbox360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass Xbox360ControllerClass IOKitDebug @@ -200,6 +200,23 @@ idVendor 5168 + ChatPadKeyboardEvents + + CFBundleIdentifier + com.apple.iokit.IOHIDFamily + IOClass + IOHIDEventDriver + IOProviderClass + IOHIDInterface + VendorID + 100 + + OSBundleLibraries @@ -207,10 +224,12 @@ 1.2 com.apple.iokit.IOUSBFamily 1.8 - com.apple.kernel.libkern - 6.9.9 - com.apple.kernel.mach - 6.9.9 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + com.apple.kpi.iokit + 8.0.0 diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 9efe0846..dae5250d 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -22,14 +22,19 @@ */ #include #include +#include #include "_60Controller.h" #include "ControlStruct.h" -#include "xbox360hid.h" +#include "SerialDriver.h" +#include "ChatPad.h" +#include "Controller.h" #define kDriverSettingKey "DeviceData" -OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOHIDDevice) -#define super IOHIDDevice +#define kIOSerialDeviceType "Serial360Device" + +OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOService) +#define super IOService // Find the maximum packet size of this pipe static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) @@ -41,6 +46,148 @@ static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) else return ed->wMaxPacketSize; } +void Xbox360ControllerClass::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); +} + +void Xbox360ControllerClass::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 +} + +void Xbox360ControllerClass::SendToggle(void) +{ + SendSpecial(serialToggle ? 0x1F : 0x1E); + serialToggle = !serialToggle; +} + +void Xbox360ControllerClass::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) +{ + Xbox360ControllerClass *controller; + + controller = OSDynamicCast(Xbox360ControllerClass, owner); + controller->ChatPadTimerAction(sender); +} + +void Xbox360ControllerClass::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; + } +} + // Read the settings from the registry void Xbox360ControllerClass::readSettings(void) { @@ -83,6 +230,12 @@ bool Xbox360ControllerClass::init(OSDictionary *propTable) inPipe=NULL; outPipe=NULL; inBuffer=NULL; + padHandler = NULL; + serialIn = NULL; + serialInPipe = NULL; + serialInBuffer = NULL; + serialTimer = NULL; + serialHandler = NULL; // Default settings invertLeftX=invertLeftY=FALSE; invertRightX=invertRightY=FALSE; @@ -100,21 +253,17 @@ void Xbox360ControllerClass::free(void) super::free(); } -IOService* Xbox360ControllerClass::probe(IOService *provider, SInt32 *score ) -{ - IOService *res=super::probe(provider,score); - return res; -} - -//bool Xbox360ControllerClass::start(IOService *provider) -bool Xbox360ControllerClass::handleStart(IOService *provider) +bool Xbox360ControllerClass::start(IOService *provider) { const IOUSBConfigurationDescriptor *cd; IOUSBFindInterfaceRequest intf; IOUSBFindEndpointRequest pipe; + IOUSBDevRequest controlReq; + char controlBuf[2]; XBOX360_OUT_LED led; - if(!super::handleStart(provider)) return false; + if (!super::start(provider)) + return false; // Get device device=OSDynamicCast(IOUSBDevice,provider); if(device==NULL) { @@ -179,14 +328,113 @@ bool Xbox360ControllerClass::handleStart(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"); + 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; + } + if (getWorkLoop()->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' + controlReq.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBVendor, kUSBDevice); + controlReq.bRequest = 0xa1; + controlReq.wValue = 0x0000; + controlReq.wIndex = 0xe416; + controlReq.wLength = sizeof(controlBuf); + controlReq.pData = controlBuf; + if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) + { + IOLog("start - failed to read chatpad setting\n"); + goto fail; + } +// IOLog("start - read: %.2x %.2x\n", controlBuf[0], controlBuf[1]); + controlBuf[0] = 0x01; + controlBuf[1] = 0x02; + controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice); + controlReq.bRequest = 0xa1; + controlReq.wValue = 0x0000; + controlReq.wIndex = 0xe416; + controlReq.wLength = sizeof(controlBuf); + controlReq.pData = controlBuf; + if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) + { + IOLog("start - failed to write chatpad setting\n"); + goto fail; + } +// IOLog("start - write: %.2x %.2x\n", controlBuf[0], controlBuf[1]); + controlReq.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBVendor, kUSBDevice); + controlReq.bRequest = 0xa1; + controlReq.wValue = 0x0000; + controlReq.wIndex = 0xe416; + controlReq.wLength = sizeof(controlBuf); + controlReq.pData = controlBuf; + if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) + { + IOLog("start - failed to read chatpad setting\n"); + goto fail; + } +// IOLog("start - read: %.2x %.2x\n", controlBuf[0], controlBuf[1]); + // Begin toggle + serialHeard = false; + serialActive = false; + serialToggle = false; + serialResetCount = 0; + serialTimerState = tsToggle; + serialTimer->setTimeoutMS(1000); // Begin reading - if(!QueueRead()) goto fail; + if (!QueueRead()) + goto fail; + if (!QueueSerialRead()) + goto fail; // Disable LED Xbox360_Prepare(led,outLed); led.pattern=ledOff; QueueWrite(&led,sizeof(led)); // Done readSettings(); + PadConnect(); + registerService(); return true; fail: ReleaseAll(); @@ -210,6 +458,26 @@ bool Xbox360ControllerClass::QueueRead(void) } } +bool Xbox360ControllerClass::QueueSerialRead(void) +{ + IOUSBCompletion complete; + IOReturn err; + + complete.target = this; + complete.action = SerialReadCompleteInternal; + complete.parameter = serialInBuffer; + err = serialInPipe->Read(serialInBuffer, 0, 0, serialInBuffer->getLength(), &complete); + if (err == kIOReturnSuccess) + { + return true; + } + else + { + IOLog("read - failed to start for chatpad (0x%.8x\n",err); + return false; + } +} + // Set up an asynchronous write bool Xbox360ControllerClass::QueueWrite(const void *bytes,UInt32 length) { @@ -234,17 +502,41 @@ bool Xbox360ControllerClass::QueueWrite(const void *bytes,UInt32 length) } } -//void Xbox360ControllerClass::stop(IOService *provider) -void Xbox360ControllerClass::handleStop(IOService *provider) +void Xbox360ControllerClass::stop(IOService *provider) { // IOLog("Stopping\n"); ReleaseAll(); - super::handleStop(provider); + super::stop(provider); } // Releases all the objects used void Xbox360ControllerClass::ReleaseAll(void) { + 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(); @@ -337,6 +629,12 @@ void Xbox360ControllerClass::ReadCompleteInternal(void *target,void *parameter,I ((Xbox360ControllerClass*)target)->ReadComplete(parameter,status,bufferSizeRemaining); } +void Xbox360ControllerClass::SerialReadCompleteInternal(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +{ + if (target != NULL) + ((Xbox360ControllerClass*)target)->SerialReadComplete(parameter, status, bufferSizeRemaining); +} + // This forwards a completed write notification to a member function void Xbox360ControllerClass::WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { @@ -360,7 +658,7 @@ void Xbox360ControllerClass::ReadComplete(void *parameter,IOReturn status,UInt32 const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { fiddleReport(inBuffer); - err=handleReport(inBuffer,kIOHIDReportTypeInput); + err = padHandler->handleReport(inBuffer, kIOHIDReportTypeInput); if(err!=kIOReturnSuccess) { IOLog("read - failed to handle report: 0x%.8x\n",err); } @@ -378,6 +676,34 @@ void Xbox360ControllerClass::ReadComplete(void *parameter,IOReturn status,UInt32 if(reread) QueueRead(); } +void Xbox360ControllerClass::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +{ + bool reread = !isInactive(); + + switch (status) + { + case kIOReturnOverrun: + IOLog("read (serial) - kIOReturnOverrun, clearing stall\n"); + serialInPipe->ClearStall(); + // Fall through + case kIOReturnSuccess: + serialHeard = true; + 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 void Xbox360ControllerClass::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { @@ -388,152 +714,125 @@ void Xbox360ControllerClass::WriteComplete(void *parameter,IOReturn status,UInt3 memory->release(); } -// Returns the HID descriptor for this device -IOReturn Xbox360ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const -{ - IOBufferMemoryDescriptor *buffer; - - buffer=IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task,0,sizeof(ReportDescriptor)); - if(buffer==NULL) return kIOReturnNoResources; - buffer->writeBytes(0,ReportDescriptor,sizeof(ReportDescriptor)); - *descriptor=buffer; - return kIOReturnSuccess; -} - -// Handles a message from the userspace IOHIDDeviceInterface122::setReport function -IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) -{ - char data[2]; - - report->readBytes(0,data,2); - switch(data[0]) { - case 0x00: // Set force feedback - 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]; - rumble.little=data[1]; - QueueWrite(&rumble,sizeof(rumble)); - } - return kIOReturnSuccess; - case 0x01: // Set LEDs - 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]; - QueueWrite(&led,sizeof(led)); - } - return kIOReturnSuccess; - default: - return kIOReturnUnsupported; - } -} - -// Get report -IOReturn Xbox360ControllerClass::getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) -{ - // Doesn't do anything yet ;) - return kIOReturnUnsupported; -} -// Returns the string for the specified index from the USB device's string list, with an optional default -OSString* Xbox360ControllerClass::getDeviceString(UInt8 index,const char *def) const +// Called by the userspace IORegistryEntrySetCFProperties function +IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) { - IOReturn err; - char buf[1024]; - const char *string; + OSDictionary *dictionary; - err=device->GetStringDescriptor(index,buf,sizeof(buf)); - if(err==kIOReturnSuccess) string=buf; - else { - if(def==NULL) string="Unknown"; - else string=def; - } - return OSString::withCString(string); -} - -OSString* Xbox360ControllerClass::newManufacturerString() const -{ - return getDeviceString(device->GetManufacturerStringIndex()); -} - -OSNumber* Xbox360ControllerClass::newPrimaryUsageNumber() const -{ - // Gamepad - return OSNumber::withNumber(0x05,8); -} - -OSNumber* Xbox360ControllerClass::newPrimaryUsagePageNumber() const -{ - // Generic Desktop - return OSNumber::withNumber(0x01,8); + dictionary=OSDynamicCast(OSDictionary,properties); + if(dictionary!=NULL) { + setProperty(kDriverSettingKey,dictionary); + readSettings(); + return kIOReturnSuccess; + } else return kIOReturnBadArgument; } -OSNumber* Xbox360ControllerClass::newProductIDNumber() const +IOHIDDevice* Xbox360ControllerClass::getController(int index) { - return OSNumber::withNumber(device->GetProductID(),16); + switch (index) + { + case 0: + return padHandler; + case 1: + return serialHandler; + default: + return NULL; + } } -OSString* Xbox360ControllerClass::newProductString() const -{ - return getDeviceString(device->GetProductStringIndex()); -} +// Main controller support -OSString* Xbox360ControllerClass::newSerialNumberString() const +void Xbox360ControllerClass::PadConnect(void) { - return getDeviceString(device->GetSerialNumberStringIndex()); + PadDisconnect(); + padHandler = new ControllerClass; + if (padHandler != NULL) + { + const OSString *keys[] = { + OSString::withCString(kIOSerialDeviceType), + OSString::withCString("IOCFPlugInTypes"), + OSString::withCString("IOKitDebug"), + }; + const OSObject *objects[] = { + OSNumber::withNumber((unsigned long long)1, 32), + getProperty("IOCFPlugInTypes"), + OSNumber::withNumber((unsigned long long)65535, 32), + }; + OSDictionary *dictionary = OSDictionary::withObjects(objects, keys, sizeof(keys) / sizeof(keys[0]), 0); + if (padHandler->init(dictionary)) + { + padHandler->attach(this); + padHandler->start(this); + // No registerService() - IOHIDDevice does that in start() + } + else + { + padHandler->release(); + padHandler = NULL; + } + } } -OSString* Xbox360ControllerClass::newTransportString() const +void Xbox360ControllerClass::PadDisconnect(void) { - return OSString::withCString("USB"); + if (padHandler != NULL) + { + padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + padHandler->detach(this); + padHandler->release(); + padHandler = NULL; + } } -OSNumber* Xbox360ControllerClass::newVendorIDNumber() const -{ - return OSNumber::withNumber(device->GetVendorID(),16); -} +// Serial peripheral support -OSNumber* Xbox360ControllerClass::newLocationIDNumber() const +void Xbox360ControllerClass::SerialConnect(void) { - OSNumber *number; - UInt32 location; - - if (device) + SerialDisconnect(); +// serialHandler = new Serial360Device; + serialHandler = new ChatPadKeyboardClass; + if (serialHandler != NULL) { - if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + const OSString *keys[] = { + OSString::withCString(kIOSerialDeviceType), + }; + const OSObject *objects[] = { + OSNumber::withNumber((unsigned long long)0, 32), + }; + OSDictionary *dictionary = OSDictionary::withObjects(objects, keys, sizeof(keys) / sizeof(keys[0]), 0); + if (serialHandler->init(dictionary)) { - location = number->unsigned32BitValue(); + serialHandler->attach(this); + serialHandler->start(this); +// serialHandler->registerService(); } 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; + serialHandler->release(); + serialHandler = NULL; } } - - return (location != 0) ? OSNumber::withNumber(location, 32) : 0; } -// Called by the userspace IORegistryEntrySetCFProperties function -IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) +void Xbox360ControllerClass::SerialDisconnect(void) { - OSDictionary *dictionary; - - dictionary=OSDynamicCast(OSDictionary,properties); - if(dictionary!=NULL) { - setProperty(kDriverSettingKey,dictionary); - readSettings(); - return kIOReturnSuccess; - } else return kIOReturnBadArgument; + if (serialHandler != NULL) + { + serialHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + serialHandler->detach(this); + serialHandler->release(); + serialHandler = NULL; + } +} + +void Xbox360ControllerClass::SerialMessage(IOBufferMemoryDescriptor *data, size_t length) +{ + if (serialHandler != NULL) + { + char *buffer = (char*)data->getBytesNoCopy(); + if ((length == 5) && (buffer[0] == 0x00)) +// serialHandler->SendPacket(data); + serialHandler->handleReport(data, kIOHIDReportTypeInput); + } } diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 28f81241..dd96528e 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -27,70 +27,99 @@ #include #include -class Xbox360ControllerClass : public IOHIDDevice +//class Serial360Device; +class ControllerClass; +class ChatPadKeyboardClass; + +class Xbox360ControllerClass : public IOService { OSDeclareDefaultStructors(Xbox360ControllerClass) private: void ReleaseAll(void); bool QueueRead(void); - bool QueueWrite(const void *bytes,UInt32 length); + bool QueueSerialRead(void); - OSString* getDeviceString(UInt8 index,const char *def=NULL) const; - + 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 fiddleReport(IOBufferMemoryDescriptor *buffer); 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); + + void PadConnect(void); + void PadDisconnect(void); + + void SerialConnect(void); + void SerialDisconnect(void); + void SerialMessage(IOBufferMemoryDescriptor *data, size_t length); + protected: + typedef enum { + tsToggle, + tsReset1, + tsReset2, + tsMiniToggle, + tsSet1, + tsSet2, + tsSet3, + } TIMER_STATE; + IOUSBDevice *device; + + // Joypad IOUSBInterface *interface; IOUSBPipe *inPipe,*outPipe; IOBufferMemoryDescriptor *inBuffer; + + // Keyboard + IOUSBInterface *serialIn; + IOUSBPipe *serialInPipe; + IOBufferMemoryDescriptor *serialInBuffer; + IOTimerEventSource *serialTimer; + bool serialToggle, serialHeard, serialActive; + int serialResetCount; + TIMER_STATE serialTimerState; +// Serial360Device *serialHandler; + ChatPadKeyboardClass *serialHandler; // Settings bool invertLeftX,invertLeftY; bool invertRightX,invertRightY; short deadzoneLeft,deadzoneRight; bool relativeLeft,relativeRight; + ControllerClass *padHandler; public: // 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 IOService* probe(IOService *provider, SInt32 *score ); virtual IOReturn setProperties(OSObject *properties); virtual IOReturn message(UInt32 type, IOService *provider, void *argument); + // Hooks virtual void ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); virtual void WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining); - - // 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 OSString* newManufacturerString() const; - virtual OSNumber* newPrimaryUsageNumber() const; - virtual OSNumber* newPrimaryUsagePageNumber() const; - virtual OSNumber* newProductIDNumber() const; - virtual OSString* newProductString() const; - virtual OSString* newSerialNumberString() const; - virtual OSString* newTransportString() const; - virtual OSNumber* newVendorIDNumber() const; - - virtual OSNumber* newLocationIDNumber() const; -protected: - virtual bool handleStart(IOService *provider); - virtual void handleStop(IOService *provider); + + bool QueueWrite(const void *bytes,UInt32 length); + + IOHIDDevice* getController(int index); }; #endif /* __XBOX360CONTROLLER_H__ */ diff --git a/360Controller/chatpadhid.h b/360Controller/chatpadhid.h new file mode 100755 index 00000000..104edc35 --- /dev/null +++ b/360Controller/chatpadhid.h @@ -0,0 +1,35 @@ +// F:\Documents and Settings\Desktop\hid\ChatPad_Keyboard.h + + +char ReportDescriptor[58] = { + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xa1, 0x01, // COLLECTION (Application) + 0x25, 0x00, // LOGICAL_MAXIMUM (0) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x09, 0xe1, // USAGE (Keyboard LeftShift) + 0x09, 0xe0, // USAGE (Keyboard LeftControl) + 0x09, 0xe2, // USAGE (Keyboard LeftAlt) + 0x09, 0xe3, // USAGE (Keyboard Left GUI) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x08, // REPORT_SIZE (8) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x26, 0xe7, 0x00, // LOGICAL_MAXIMUM (231) + 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) + 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0 // END_COLLECTION +}; + diff --git a/360Controller/chatpadkeys.cpp b/360Controller/chatpadkeys.cpp new file mode 100644 index 00000000..72bcabe7 --- /dev/null +++ b/360Controller/chatpadkeys.cpp @@ -0,0 +1,40 @@ +/* + * chatpadkeys.cpp + * 360Controller + * + * Created by Colin on 18/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +#include "chatpadkeys.h" + +#define ROW_SIZE 8 + +typedef struct MAP_DATA { + unsigned char row[ROW_SIZE]; +} MAP_DATA; + +static const MAP_DATA columns[] = { +{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +{0x00, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1F, 0x1E}, +{0x00, 0x18, 0x1C, 0x17, 0x15, 0x08, 0x1A, 0x14}, +{0x00, 0x0D, 0x0B, 0x0A, 0x09, 0x07, 0x16, 0x04}, +{0x00, 0x11, 0x05, 0x19, 0x06, 0x1B, 0x1D, 0x00}, +{0x00, 0x4F, 0x10, 0x37, 0x2C, 0x50, 0x00, 0x00}, +{0x00, 0x00, 0x36, 0x28, 0x13, 0x27, 0x26, 0x25}, +{0x00, 0x2A, 0x0F, 0x00, 0x00, 0x12, 0x0C, 0x0E}, +}; + +unsigned char ChatPad2USB(unsigned char input) +{ + unsigned char row, column; + + row = input & 0x0F; + if (row >= ROW_SIZE) + return 0x00; + column = (input & 0xF0) >> 4; + if (column >= (sizeof(columns) / sizeof(columns[0]))) + return 0x00; + return columns[column].row[row]; +} diff --git a/360Controller/chatpadkeys.h b/360Controller/chatpadkeys.h new file mode 100644 index 00000000..5a7446d3 --- /dev/null +++ b/360Controller/chatpadkeys.h @@ -0,0 +1,10 @@ +/* + * chatpadkeys.h + * 360Controller + * + * Created by Colin on 18/11/2009. + * Copyright 2009 __MyCompanyName__. All rights reserved. + * + */ + +unsigned char ChatPad2USB(unsigned char input); diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 7f7d6e6d..91054185 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -92,10 +92,28 @@ static void callbackConnected(void *param,io_iterator_t iterator) while ((object = IOIteratorNext(iterator)) != 0) { + /* + CFStringRef bob = IOObjectCopyClass(object); + NSLog(@"Found %p: %@", object, bob); + CFRelease(bob); + */ if (IOObjectConformsTo(object, "WirelessHIDDevice") || IOObjectConformsTo(object, "Xbox360ControllerClass")) { FFDeviceObjectReference forceFeedback; + if (IOObjectConformsTo(object, "Xbox360ControllerClass")) + { + io_iterator_t iter; + + if (IORegistryEntryGetChildIterator(object, kIOServicePlane, &iter) != kIOReturnSuccess) + continue; + while ((object = IOIteratorNext(iter)) != 0) + if (IOObjectConformsTo(object, "ControllerClass")) + break; + IOObjectRelease(iter); + if (object == 0) + continue; + } // Supported device - load settings ConfigController(object, GetController(GetSerialNumber(object))); // Set LEDs @@ -177,6 +195,11 @@ static void callbackDisconnected(void *param, io_iterator_t iterator) while ((object = IOIteratorNext(iterator)) != 0) { + /* + CFStringRef bob = IOObjectCopyClass(object); + NSLog(@"Lost %p: %@", object, bob); + CFRelease(bob); + */ serial = GetSerialNumber(object); if (serial != nil) { diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 index 2adba507..3dfaf80e 100644 --- a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 +++ b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 @@ -206,15 +206,13 @@ ChosenToolbarItems - active-target-popup - active-buildstyle-popup + active-combo-popup action NSToolbarFlexibleSpaceItem - buildOrClean - build-and-goOrGo + debugger-enable-breakpoints + build-and-go com.apple.ide.PBXToolbarStopButton get-info - toggle-editor NSToolbarFlexibleSpaceItem com.apple.pbx.toolbar.searchfield @@ -229,15 +227,12 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 @@ -276,8 +271,6 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 16 - 15 0 @@ -301,7 +294,7 @@ 186 RubberWindowFrame - 700 140 690 397 0 0 1280 1002 + 490 176 690 397 0 0 1280 778 Module PBXSmartGroupTreeModule @@ -317,7 +310,7 @@ PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel - MyNewFile14.java + PBXSplitModuleInNavigatorKey Split0 @@ -325,7 +318,7 @@ PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel - MyNewFile14.java + SplitCount 1 @@ -338,7 +331,7 @@ Frame {{0, 0}, {482, 0}} RubberWindowFrame - 700 140 690 397 0 0 1280 1002 + 490 176 690 397 0 0 1280 778 Module PBXNavigatorGroup @@ -346,6 +339,8 @@ 0pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -358,7 +353,7 @@ Frame {{0, 5}, {482, 351}} RubberWindowFrame - 700 140 690 397 0 0 1280 1002 + 490 176 690 397 0 0 1280 778 Module XCDetailModule @@ -382,12 +377,14 @@ TableOfContents - 3B042E760CE56390005851E9 + 3B36DCE710B7821B00FFD769 1CE0B1FE06471DED0097A5F4 - 3B042E770CE56390005851E9 + 3B36DCE810B7821B00FFD769 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 + ToolbarConfigUserDefaultsMinorVersion + 2 ToolbarConfiguration xcode.toolbar.config.defaultV3 @@ -516,12 +513,12 @@ 5 WindowOrderList - 3B05AB450CE0FB7A00DF20B5 1CD10A99069EF8BA00B06720 - /Users/colin/Projects2/OSX/360 Controller/360Daemon/360Daemon.xcodeproj + 3B05AB450CE0FB7A00DF20B5 + /Users/colin/Projects/360 Controller/360Daemon/360Daemon.xcodeproj WindowString - 700 140 690 397 0 0 1280 1002 + 490 176 690 397 0 0 1280 778 WindowToolsV3 @@ -551,7 +548,7 @@ Frame {{0, 0}, {500, 218}} RubberWindowFrame - 36 474 500 500 0 0 1280 1002 + 36 264 500 500 0 0 1280 778 Module PBXNavigatorGroup @@ -564,7 +561,7 @@ PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel - Build + Build Results XCBuildResultsTrigger_Collapse 1021 XCBuildResultsTrigger_Open @@ -575,7 +572,7 @@ Frame {{0, 223}, {500, 236}} RubberWindowFrame - 36 474 500 500 0 0 1280 1002 + 36 264 500 500 0 0 1280 778 Module PBXBuildResultsModule @@ -598,14 +595,14 @@ TableOfContents 3B05AB450CE0FB7A00DF20B5 - 3B042E780CE56390005851E9 + 3B36DCE910B7821B00FFD769 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID ToolbarConfiguration xcode.toolbar.config.buildV3 WindowString - 36 474 500 500 0 0 1280 1002 + 36 264 500 500 0 0 1280 778 WindowToolGUID 3B05AB450CE0FB7A00DF20B5 WindowToolIsVisible @@ -692,10 +689,10 @@ Frame {{316, 0}, {378, 203}} RubberWindowFrame - 252 294 694 422 0 0 1280 1002 + 252 192 694 422 0 0 1280 778 RubberWindowFrame - 252 294 694 422 0 0 1280 1002 + 252 192 694 422 0 0 1280 778 Module PBXDebugSessionModule @@ -718,18 +715,18 @@ TableOfContents 1CD10A99069EF8BA00B06720 - 3B042E6E0CE56379005851E9 + 3B36DCEA10B7821B00FFD769 1C162984064C10D400B95A72 - 3B042E6F0CE56379005851E9 - 3B042E700CE56379005851E9 - 3B042E710CE56379005851E9 - 3B042E720CE56379005851E9 - 3B042E730CE56379005851E9 + 3B36DCEB10B7821B00FFD769 + 3B36DCEC10B7821B00FFD769 + 3B36DCED10B7821B00FFD769 + 3B36DCEE10B7821B00FFD769 + 3B36DCEF10B7821B00FFD769 ToolbarConfiguration xcode.toolbar.config.debugV3 WindowString - 252 294 694 422 0 0 1280 1002 + 252 192 694 422 0 0 1280 778 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible diff --git a/360Daemon/360Daemon.xcodeproj/colin.pbxuser b/360Daemon/360Daemon.xcodeproj/colin.pbxuser index cf765e18..dc7eec9b 100644 --- a/360Daemon/360Daemon.xcodeproj/colin.pbxuser +++ b/360Daemon/360Daemon.xcodeproj/colin.pbxuser @@ -1,7 +1,6 @@ // !$*UTF8*$! { 08FB7793FE84155DC02AAC07 /* Project object */ = { - activeArchitecture = ppc; activeBuildConfigurationName = Release; activeExecutable = 3BD6F0E90C67E41F00574E6A /* 360Daemon */; activeTarget = 8DD76F960486AA7600D96B5E /* 360Daemon */; @@ -42,8 +41,8 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216359795; - PBXWorkspaceStateSaveDate = 216359795; + PBXPerProjectTemplateStateSaveDate = 280461357; + PBXWorkspaceStateSaveDate = 280461357; }; sourceControlManager = 3BD6F0EF0C67E43E00574E6A /* Source Control */; userBuildSettings = { @@ -51,11 +50,11 @@ }; 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1670, 3556}}"; - sepNavSelRange = "{6891, 0}"; - sepNavVisRange = "{6043, 1017}"; + sepNavIntBoundsRect = "{{0, 0}, {1951, 3237}}"; + sepNavSelRange = "{5747, 0}"; + sepNavVisRange = "{7116, 2143}"; sepNavVisRect = "{{0, 1099}, {584, 455}}"; - sepNavWindowFrame = "{{10, 344}, {827, 653}}"; + sepNavWindowFrame = "{{10, 125}, {827, 653}}"; }; }; 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = { @@ -97,6 +96,7 @@ lineNumber = 140; location = 360Daemon; modificationTime = 216357854.964732; + originalNumberOfMultipleMatches = 0; state = 2; }; 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:82 */ = { @@ -114,6 +114,7 @@ lineNumber = 82; location = 360Daemon; modificationTime = 216357854.964961; + originalNumberOfMultipleMatches = 0; state = 2; }; 3B7A8E740CE1595C005BB45B /* 360Daemon.m:95 */ = { @@ -131,6 +132,7 @@ lineNumber = 95; location = 360Daemon; modificationTime = 216357854.96508; + originalNumberOfMultipleMatches = 0; state = 2; }; 3B8698070CE2903100283CEC /* ControlPrefs.h */ = { @@ -143,10 +145,10 @@ }; 3B8698080CE2903100283CEC /* ControlPrefs.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {872, 938}}"; - sepNavSelRange = "{1606, 0}"; - sepNavVisRange = "{0, 969}"; - sepNavWindowFrame = "{{38, 392}, {623, 584}}"; + sepNavIntBoundsRect = "{{0, 0}, {852, 910}}"; + sepNavSelRange = "{648, 0}"; + sepNavVisRange = "{0, 0}"; + sepNavWindowFrame = "{{38, 194}, {623, 584}}"; }; }; 3B8698420CE29A3100283CEC /* ControlPrefs.m:28 */ = { @@ -162,8 +164,9 @@ hitCount = 0; ignoreCount = 0; lineNumber = 28; - location = 360Daemon; + location = Pref360Control; modificationTime = 216357854.965237; + originalNumberOfMultipleMatches = 1; state = 0; }; 3B8698440CE29A3300283CEC /* ControlPrefs.m:16 */ = { @@ -179,8 +182,9 @@ hitCount = 0; ignoreCount = 0; lineNumber = 16; - location = 360Daemon; + location = Pref360Control; modificationTime = 216357854.965258; + originalNumberOfMultipleMatches = 1; state = 0; }; 3BD6F0E90C67E41F00574E6A /* 360Daemon */ = { @@ -194,6 +198,9 @@ configStateDict = { }; customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; @@ -206,6 +213,7 @@ name = 360Daemon; savedGlobals = { }; + showTypeColumn = 0; sourceDirectories = ( ); variableFormatDictionary = { @@ -216,6 +224,9 @@ fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; scmType = ""; }; diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index bf0cab2d..cf14d917 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -178,10 +178,6 @@ 1DEB927608733DD40010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -204,10 +200,12 @@ 1DEB927A08733DD40010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; }; name = Release; }; diff --git a/Feedback360/English.lproj/InfoPlist.strings b/Feedback360/English.lproj/InfoPlist.strings index 12350c0adbaba8678bcedb021a614f60429a4d56..4bf2c0928b22cccccad72a4d21b77af0e7ebceb3 100644 GIT binary patch delta 12 TcmZo+YGIo2pVg8(iNP8G7}5hY diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser index 66ebfa74..35293323 100644 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ b/Feedback360/Feedback360.xcodeproj/colin.pbxuser @@ -1,7 +1,6 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { - activeArchitecture = ppc; activeBuildConfigurationName = Deployment; activeTarget = 8D57630D048677EA00EA77CD /* Feedback360 */; addToTargets = ( @@ -16,7 +15,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 243, + 287, 20, 48, 43, @@ -33,8 +32,13 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216359748; - PBXWorkspaceStateSaveDate = 216359748; + PBXPerProjectTemplateStateSaveDate = 280461345; + PBXWorkspaceStateSaveDate = 280461345; + }; + perUserProjectItems = { + 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */ = 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */; + 3B90DB321059D9AC00CC39D4 /* PlistBookmark */ = 3B90DB321059D9AC00CC39D4 /* PlistBookmark */; + 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */ = 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */; }; sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; userBuildSettings = { @@ -42,17 +46,18 @@ }; 089C167EFE841241C02AAC07 /* English */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{127, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {465, 98}}"; + sepNavSelRange = "{126, 0}"; + sepNavVisRange = "{0, 129}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{38, 162}, {900, 814}}"; + sepNavWindowFrame = "{{38, 61}, {900, 717}}"; }; }; 08FB77B6FE84183AC02AAC07 /* main.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {902, 5978}}"; - sepNavSelRange = "{8090, 79}"; - sepNavVisRange = "{8002, 1846}"; + sepNavIntBoundsRect = "{{0, 0}, {670, 5759}}"; + sepNavSelRange = "{9315, 0}"; + sepNavVisRange = "{0, 0}"; sepNavVisRect = "{{0, 659}, {861, 685}}"; sepNavWindowFrame = "{{253, 96}, {900, 814}}"; }; @@ -62,6 +67,9 @@ fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; scmType = ""; }; @@ -71,12 +79,44 @@ }; 3B2EF5440965B3C7007BFB7B /* main.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 784}}"; + sepNavIntBoundsRect = "{{0, 0}, {551, 715}}"; sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 610}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; sepNavWindowFrame = "{{7, 68}, {900, 814}}"; }; }; + 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "InfoPlist.strings: 4"; + rLen = 0; + rLoc = 126; + rType = 0; + vrLen = 129; + vrLoc = 0; + }; + 3B90DB321059D9AC00CC39D4 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D576317048677EA00EA77CD /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/colin/Projects/360 Controller/Feedback360/Info.plist"; + rLen = 0; + rLoc = 9223372036854775808; + }; + 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "InfoPlist.strings: 4"; + rLen = 0; + rLoc = 126; + rType = 0; + vrLen = 129; + vrLoc = 0; + }; 3BBA037B09697D80008A46C9 /* emulator.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; @@ -119,7 +159,7 @@ sepNavSelRange = "{0, 0}"; sepNavVisRange = "{0, 1047}"; sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{325, 66}, {900, 814}}"; + sepNavWindowFrame = "{{325, 61}, {900, 717}}"; }; }; } diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj index 937a7729..b0c801df 100644 --- a/Feedback360/Feedback360.xcodeproj/project.pbxproj +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -28,7 +28,7 @@ 3BBA03E1096A29B5008A46C9 /* devlink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = devlink.h; sourceTree = ""; }; 3BBA03E2096A29B5008A46C9 /* devlink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = devlink.c; sourceTree = ""; }; 8D576316048677EA00EA77CD /* Feedback360.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Feedback360.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D576317048677EA00EA77CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 8D576317048677EA00EA77CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -229,14 +229,10 @@ 3BBDC69909793BF60023AAD8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); - MACOSX_DEPLOYMENT_TARGET = 10.2; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + MACOSX_DEPLOYMENT_TARGET = 10.5; SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Deployment; }; diff --git a/Feedback360/devlink.c b/Feedback360/devlink.c index ed0d5684..25526e42 100644 --- a/Feedback360/devlink.c +++ b/Feedback360/devlink.c @@ -55,6 +55,8 @@ bool Device_Send(DeviceLink *link,void *data,int length) if(link->interface==NULL) return FALSE; else { IOReturn res=(*link->interface)->setReport(link->interface,kIOHIDReportTypeOutput,0,data,length,10000,NULL,NULL,NULL); + if (res != kIOReturnSuccess) + fprintf(stderr, "Device_Send failed: 0x%.8x\n", res); return res==kIOReturnSuccess; } } diff --git a/Feedback360/main.c b/Feedback360/main.c index 47c6e742..2857f234 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -72,7 +72,8 @@ static ULONG Feedback360Release(void *that) static IOReturn Feedback360Probe(void *that,CFDictionaryRef propertyTable,io_service_t service,SInt32 *order) { if ((service==0) - || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) +// || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) + || ((!IOObjectConformsTo(service,"ControllerClass")) && (!IOObjectConformsTo(service,"Wireless360Controller")))) return kIOReturnBadArgument; return S_OK; } @@ -125,7 +126,8 @@ static HRESULT Feedback360InitializeTerminate(void *that,NumVersion APIversion,i } // From probe if( (hidDevice==0) - || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) +// || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) + || ((!IOObjectConformsTo(hidDevice,"ControllerClass")) && (!IOObjectConformsTo(hidDevice,"Wireless360Controller"))) ) { // fprintf(stderr,"Feedback: Invalid device\n"); @@ -247,7 +249,7 @@ static HRESULT Feedback360Escape(void *that,FFEffectDownloadID downloadID,FFEFFE } break; default: - fprintf(stderr,"Xbox360Controller FF plugin: Unknown escape (%i)\n",escape->dwCommand); + fprintf(stderr, "Xbox360Controller FF plugin: Unknown escape (%i)\n", (int)escape->dwCommand); return FFERR_UNSUPPORTED; } return FF_OK; @@ -336,9 +338,10 @@ static HRESULT Feedback360SetProperty(void *that,FFProperty property,void *value switch(property) { case FFPROP_FFGAIN: { - UInt32 value=*((UInt32*)value); - if(value>10000) return FFERR_INVALIDPARAM; - Emulate_SetGain(&this->emulator,value,10000); + UInt32 uValue = *((UInt32*)value); + if (uValue > 10000) + return FFERR_INVALIDPARAM; + Emulate_SetGain(&this->emulator, uValue, 10000); } return FF_OK; default: diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 3a08782c..3a89f7f9 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -74,7 +74,246 @@ Children - + + + Children + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Info.plist + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacOS/Pref360Control + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacOS + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt0.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt1.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt2.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt3.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/battNone.tif + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj/InfoPlist.strings + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj/Pref360ControlPref.nib + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/Pref360ControlPref.tiff + Path Type + 2 + Privileges + 420 + Type + 3 + UID + 0 + + + Expanded + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + + + Expanded + GID 80 Path @@ -475,7 +714,7 @@ Path Type 2 Privileges - 438 + 420 Type 3 UID @@ -618,7 +857,7 @@ Path Type 2 Privileges - 438 + 420 Type 3 UID @@ -896,6 +1135,54 @@ Split Forks + Plugins + + PluginsList + + + Path + Introduction + Type + 0 + + + Path + ReadMe + Type + 0 + + + Path + License + Type + 0 + + + Path + Target + Type + 0 + + + Path + PackageSelection + Type + 0 + + + Path + Install + Type + 0 + + + Path + FinishUp + Type + 0 + + + Scripts Additional Resources @@ -968,13 +1255,13 @@ IFPkgDescriptionTitle XBox 360 Controller Installer IFPkgDescriptionVersion - 0.06 + 0.08 Display Information CFBundleGetInfoString - Install360Controller 0.06 Copyrights © 2006-2007 Colin Munro + Install360Controller 0.08 Copyrights © 2006-2009 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -984,7 +1271,7 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.06 + 0.08 Options @@ -994,8 +1281,6 @@ 2 IFPkgFlagFollowLinks - IFPkgFlagInstallFat - IFPkgFlagIsRequired IFPkgFlagOverwritePermissions @@ -1014,7 +1299,7 @@ IFMajorVersion 0 IFMinorVersion - 6 + 8 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 73718890..6fdb5def 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,29 +1,63 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949 +{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3} {\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4} -{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}} +{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5} +{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid6} +{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid7} +{\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid8}} +{\*\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}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\b0\fs24 Version 0.06\ -Copyright (C) 2005-2007 Colin Munro\ +\b0\fs24 Version 0.09\ +Copyright (C) 2005-2009 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\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\ql\qnatural\pardirnatural +\ls1\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\ql\qnatural\pardirnatural + +\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\ql\qnatural\pardirnatural +\ls2\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\ql\qnatural\pardirnatural +\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\ql\qnatural\pardirnatural +\ls3\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\ql\qnatural\pardirnatural +\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\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls4\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\ql\qnatural\pardirnatural @@ -34,7 +68,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls5\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\ql\qnatural\pardirnatural @@ -45,7 +79,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\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls6\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\ql\qnatural\pardirnatural @@ -56,7 +90,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\ql\qnatural\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls7\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ @@ -65,7 +99,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls5\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls8\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/English.lproj/InfoPlist.strings b/Pref360Control/English.lproj/InfoPlist.strings index 1618a65769b7dd58345fcbeaa9d8d7894b0b02b9..27a17ca774bf8aaa6db9a0404f8c39f424152ca8 100644 GIT binary patch delta 19 Zcmeyx)WSUBH>WOx5rY8`T2B1c002G{1{(kX delta 10 RcmZo+{>3!m_heSadH@(s1SbFh diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib deleted file mode 100644 index 695ad63a..00000000 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/classes.nib +++ /dev/null @@ -1,131 +0,0 @@ - - - - - IBClasses - - - CLASS - MyMainButtons - LANGUAGE - ObjC - SUPERCLASS - NSView - - - CLASS - MyDigitalStick - LANGUAGE - ObjC - SUPERCLASS - NSView - - - CLASS - MyShoulderButton - LANGUAGE - ObjC - SUPERCLASS - NSView - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - ACTIONS - - changeSetting - id - selectDevice - id - - CLASS - NSPreferencePane - LANGUAGE - ObjC - OUTLETS - - _firstKeyView - id - _initialKeyView - id - _lastKeyView - id - _window - NSWindow - batteryLevel - NSImageView - centreButtons - MyCentreButtons - deviceList - NSPopUpButton - digiStick - MyDigitalStick - leftLinked - NSButton - leftShoulder - MyShoulderButton - leftStick - MyAnalogStick - leftStickDeadzone - NSSlider - leftStickInvertX - NSButton - leftStickInvertY - NSButton - leftTrigger - NSProgressIndicator - leftTriggerDeadzone - NSSlider - rightButtons - MyMainButtons - rightLinked - NSButton - rightShoulder - MyShoulderButton - rightStick - MyAnalogStick - rightStickDeadzone - NSSlider - rightStickInvertX - NSButton - rightStickInvertY - NSButton - rightTrigger - NSProgressIndicator - rightTriggerDeadzone - NSSlider - rumbleEnable - NSButton - rumbleTest - NSButton - - SUPERCLASS - NSObject - - - CLASS - MyAnalogStick - LANGUAGE - ObjC - SUPERCLASS - NSView - - - CLASS - MyCentreButtons - LANGUAGE - ObjC - SUPERCLASS - NSView - - - IBVersion - 1 - - diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib new file mode 100644 index 00000000..146aba75 --- /dev/null +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -0,0 +1,1955 @@ + + + + 1050 + 10A432 + 732 + 1038 + 437.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 732 + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + NSPreferencePane + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{240, 597}, {595, 304}} + 1081606144 + << do not localize >> + NSWindow + + View + + {1.79769e+308, 1.79769e+308} + {595, 10} + + + 256 + + + + 256 + {{107, 260}, {471, 26}} + + YES + + -2076049856 + 2048 + + LucidaGrande + 13 + 1044 + + + 109199615 + 1 + + LucidaGrande + 13 + 16 + + + + + + 400 + 75 + + + Item1 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + + OtherViews + + + + + + Item2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item3 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 3 + YES + YES + 1 + + + + + 256 + {{17, 266}, {88, 17}} + + YES + + 67239424 + 71303168 + RGV2aWNlOgo + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 256 + {{43, 117}, {77, 77}} + + MyAnalogStick + NSView + + + + 256 + {{123, 43}, {77, 77}} + + MyDigitalStick + NSView + + + + 256 + {{226, 43}, {77, 77}} + + MyAnalogStick + NSView + + + + 256 + {{306, 117}, {77, 77}} + + MyMainButtons + NSView + + + + 256 + {{151, 141}, {126, 39}} + + MyCentreButtons + NSView + + + + 256 + {{43, 202}, {77, 18}} + + MyShoulderButton + NSView + + + + 256 + {{306, 202}, {77, 18}} + + MyShoulderButton + NSView + + + + 1280 + + {{41, 224}, {161, 20}} + + 16392 + 255 + + + + 1280 + + {{224, 224}, {161, 20}} + + 16392 + 255 + + + + 256 + {{41, 93}, {71, 18}} + + YES + + 67239424 + 0 + Invert X + + + 1211912703 + 2 + + NSSwitch + + + + 200 + 25 + + + + + 256 + {{41, 73}, {71, 18}} + + YES + + 67239424 + 0 + Invert Y + + + 1211912703 + 2 + + + + 200 + 25 + + + + + 256 + {{309, 81}, {71, 18}} + + YES + + 67239424 + 0 + Invert X + + + 1211912703 + 2 + + + + 200 + 25 + + + + + 256 + {{309, 61}, {71, 18}} + + YES + + 67239424 + 0 + Invert Y + + + 1211912703 + 2 + + + + 200 + 25 + + + + + 256 + {{224, 16}, {161, 21}} + + YES + + 67239424 + 0 + + + + + Helvetica + 12 + 16 + + + 32768 + 0.0 + 50 + 0.0 + 0 + 1 + NO + NO + + + + + 256 + {{41, 53}, {64, 18}} + + YES + + 67239424 + 0 + Linked + + + 1211912703 + 2 + + + + 200 + 25 + + + + + 256 + {{309, 41}, {64, 18}} + + YES + + 67239424 + 0 + Linked + + + 1211912703 + 2 + + + + 200 + 25 + + + + + 256 + + + + 256 + + + + 256 + {{13, 193}, {153, 14}} + + YES + + 67239424 + 272629760 + Xbox 360 Controller Driver + + LucidaGrande + 11 + 3100 + + + + + + + + + 256 + {{13, 177}, {129, 13}} + + YES + + 67239424 + 272629760 + Version 0.08 + + LucidaGrande + 10 + 2843 + + + + + + + + + 256 + {{13, 157}, {129, 17}} + + YES + + 67239424 + 272629760 + (C) 2006-09 Colin Munro + + + + + + + + + 256 + {{10, 138}, {129, 14}} + + YES + + 69336577 + 272629760 + http://tattiebogle.net/ + + + + + + + + + 256 + {{10, 116}, {153, 14}} + + YES + + 69336577 + 272629760 + http://mice-software.com/ + + + + + + + + + 256 + {{13, 11}, {150, 97}} + + YES + + 67239424 + 272629760 + Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIsIHBsZWFzZSBzZWUgdGhlIHN1cHBsaWVk +IFJlYWRtZSBhbmQgTGljZW5jZSBkb2N1bWVudHMuCgpQbGVhc2UgY29uc2lkZXIgZG9uYXRpbmcgaWYg +eW91IGVuam95IHRoaXMgZHJpdmVyIQ + + + + + + + + {{2, 2}, {179, 218}} + + + + {{395, 16}, {183, 235}} + + {0, 0} + + 67239424 + 0 + About + + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + + 3 + 0 + 2 + NO + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{197, 190}, {32, 24}} + + YES + + 130560 + 33554432 + + NSImage + battNone + + 0 + 1 + 0 + YES + + YES + + + + 268 + {{17, 40}, {21, 156}} + + YES + + 67239424 + 0 + + + 32768 + 0.0 + 50 + 0.0 + 0 + 0 + NO + YES + + + + {595, 304} + + + {{0, 0}, {1280, 1002}} + {595, 32} + {1.79769e+308, 1.79769e+308} + + + + + + + _window + + + + 26 + + + + leftStickInvertY + + + + 127 + + + + rightStickInvertX + + + + 128 + + + + rightStickInvertY + + + + 129 + + + + deviceList + + + + 130 + + + + rightStickDeadzone + + + + 134 + + + + rightStick + + + + 136 + + + + leftTrigger + + + + 137 + + + + rightTrigger + + + + 138 + + + + leftShoulder + + + + 139 + + + + rightShoulder + + + + 140 + + + + digiStick + + + + 141 + + + + centreButtons + + + + 142 + + + + rightButtons + + + + 143 + + + + leftStick + + + + 144 + + + + leftStickInvertX + + + + 145 + + + + selectDevice: + + + + 146 + + + + changeSetting: + + + + 151 + + + + changeSetting: + + + + 152 + + + + changeSetting: + + + + 153 + + + + changeSetting: + + + + 154 + + + + changeSetting: + + + + 155 + + + + leftLinked + + + + 169 + + + + rightLinked + + + + 170 + + + + changeSetting: + + + + 171 + + + + changeSetting: + + + + 172 + + + + batteryLevel + + + + 175 + + + + changeSetting: + + + + 196 + + + + leftStickDeadzone + + + + 197 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 12 + + + + + + PrefPane + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 98 + + + + + + + + 103 + + + + + + + + 104 + + + + + 105 + + + + + 106 + + + + + 107 + + + + + 108 + + + + + 109 + + + + + 110 + + + + + 111 + + + + + 112 + + + + + 114 + + + + + + + + 115 + + + + + + + + 116 + + + + + + + + 117 + + + + + + + + 120 + + + + + + + + 156 + + + + + + + + 157 + + + + + + + + 158 + + + + + + + + + + + + + 174 + + + + + + + + 177 + + + + + + + + 178 + + + + + 179 + + + + + 180 + + + + + 181 + + + + + 182 + + + + + 184 + + + + + 185 + + + + + 186 + + + + + 193 + + + + + 99 + + + + + + + + + + 102 + + + + + 101 + + + + + 100 + + + + + -3 + + + Application + + + 161 + + + + + + + + 187 + + + + + 163 + + + + + + + + 188 + + + + + 165 + + + + + + + + 189 + + + + + 166 + + + + + + + + 190 + + + + + 167 + + + + + + + + 191 + + + + + 168 + + + + + + + + 192 + + + + + 194 + + + + + + + + 195 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + {{0, 441}, {595, 304}} + com.apple.InterfaceBuilder.CocoaPlugin + {{0, 441}, {595, 304}} + + + {595, 10} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + 197 + + + + + FirstResponder + NSObject + + IBUserSource + + + + + MyAnalogStick + NSView + + IBProjectSource + MyAnalogStick.h + + + + MyAnalogStick + NSView + + IBUserSource + + + + + MyCentreButtons + NSView + + IBProjectSource + MyCentreButtons.h + + + + MyCentreButtons + NSView + + IBUserSource + + + + + MyDigitalStick + NSView + + IBProjectSource + MyDigitalStick.h + + + + MyDigitalStick + NSView + + IBUserSource + + + + + MyMainButtons + NSView + + IBProjectSource + MyMainButtons.h + + + + MyMainButtons + NSView + + IBUserSource + + + + + MyShoulderButton + NSView + + IBProjectSource + MyShoulderButton.h + + + + MyShoulderButton + NSView + + IBUserSource + + + + + NSPreferencePane + NSObject + + id + id + + + NSImageView + MyCentreButtons + NSPopUpButton + MyDigitalStick + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + NSSlider + MyMainButtons + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + NSSlider + NSButton + NSButton + + + IBUserSource + + + + + + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSPreferencePane + NSObject + + NSView + NSView + NSView + NSWindow + + + IBFrameworkSource + PreferencePanes.framework/Headers/NSPreferencePane.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSSlider + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSSlider.h + + + + NSSliderCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSSliderCell.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + + 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + ../Pref360Control.xcodeproj + 3 + + diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib deleted file mode 100644 index 7b9cc6e1..00000000 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/info.nib +++ /dev/null @@ -1,20 +0,0 @@ - - - - - IBFramework Version - 629 - IBLastKnownRelativeProjectPath - ../../Pref360Control.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - 6 - - IBSystem Version - 9A581 - targetFramework - IBCocoaFramework - - diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..3a645a19c3cafec784cdaa6df28e993e365deb3a GIT binary patch literal 17413 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 literal 0 HcmV?d00001 diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/objects.nib deleted file mode 100644 index 76995e5c52c3c87f03b0ea03a2be4066337e2145..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5816 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 com.mice.driver.WirelessGamingReceiver 1.0.0d1 - com.apple.kernel.libkern - 6.9.9 - com.apple.kernel.mach - 6.9.9 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + com.apple.kpi.iokit + 8.0.0 + com.apple.iokit.IOHIDFamily + 1.2 diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index 343f99fc..6dfa9bb5 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -1,7 +1,6 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { - activeArchitecture = ppc; activeBuildConfigurationName = Release; activeTarget = 32D94FC30562CBF700B6AF17 /* Wireless360Controller */; addToTargets = ( @@ -14,7 +13,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 243, + 369, 20, 48, 43, @@ -31,8 +30,13 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216359858; - PBXWorkspaceStateSaveDate = 216359858; + PBXPerProjectTemplateStateSaveDate = 280461383; + PBXWorkspaceStateSaveDate = 280461383; + }; + perUserProjectItems = { + 3B06F84110615CA500CACC16 /* PBXTextBookmark */ = 3B06F84110615CA500CACC16 /* PBXTextBookmark */; + 3B06F84310615CA500CACC16 /* PBXTextBookmark */ = 3B06F84310615CA500CACC16 /* PBXTextBookmark */; + 3B36DCB410B7813600FFD769 /* PlistBookmark */ = 3B36DCB410B7813600FFD769 /* PlistBookmark */; }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { @@ -40,10 +44,11 @@ }; 089C167EFE841241C02AAC07 /* English */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {458, 440}}"; - sepNavSelRange = "{0, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {547, 122}}"; + sepNavSelRange = "{86, 0}"; + sepNavVisRange = "{0, 97}"; sepNavVisRect = "{{0, 0}, {458, 440}}"; - sepNavWindowFrame = "{{107, 344}, {497, 569}}"; + sepNavWindowFrame = "{{107, 209}, {497, 569}}"; }; }; 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = { @@ -68,18 +73,41 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {747, 742}}"; - sepNavSelRange = "{722, 0}"; - sepNavVisRange = "{0, 1636}"; + sepNavIntBoundsRect = "{{0, 0}, {621, 793}}"; + sepNavSelRange = "{1875, 0}"; + sepNavVisRange = "{1603, 281}"; sepNavVisRect = "{{0, 0}, {767, 645}}"; - sepNavWindowFrame = "{{351, 182}, {806, 774}}"; + sepNavWindowFrame = "{{351, 61}, {806, 717}}"; }; }; + 3B06F84110615CA500CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "InfoPlist.strings: 3"; + rLen = 0; + rLoc = 86; + rType = 0; + vrLen = 97; + vrLoc = 0; + }; + 3B06F84310615CA500CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + name = "Info.plist: 56"; + rLen = 0; + rLoc = 1875; + rType = 0; + vrLen = 281; + vrLoc = 1603; + }; 3B18E24B0B92718C0093FA6E /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; scmType = ""; }; @@ -87,4 +115,15 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; + 3B36DCB410B7813600FFD769 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/colin/Projects/360 Controller/Wireless360Controller/Info.plist"; + rLen = 0; + rLoc = 9223372036854775807; + }; } diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 77243f5d..5149446a 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -16,7 +16,7 @@ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wireless360Controller.h; sourceTree = ""; }; 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Wireless360Controller.cpp; sourceTree = ""; }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 32D94FD00562CBF700B6AF17 /* Wireless360Controller.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wireless360Controller.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 8DA8362C06AD9B9200E5AC22 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = /System/Library/Frameworks/Kernel.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -109,7 +109,7 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "Wireless360Controller" */; - compatibilityVersion = "Xcode 2.4"; + compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* Wireless360Controller */; projectDirPath = ""; @@ -186,10 +186,6 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); CURRENT_PROJECT_VERSION = 1.0.0d1; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; @@ -209,24 +205,20 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.2; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; }; name = Debug; }; 1DEB91DF08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.2; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT = macosx10.5; + "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; }; name = Release; }; diff --git a/WirelessGamingReceiver/English.lproj/InfoPlist.strings b/WirelessGamingReceiver/English.lproj/InfoPlist.strings index 414ca3b2f5e172a126dc6cbaee8e9f490a11acf8..6f816f1314920f5c8cd69cbc7682b3343e60aa85 100644 GIT binary patch delta 50 zcmX@bc!Y7nOl@a|e1;r`OoluL1qNS+QXpLf6wv|lj2H}n(40XRNLn%|F<1itC8!A# delta 56 zcmX@Yc#3htOv8AFcm`jFN(N_!e1=?x0)|9}JRr{xNar%70_EZvbQlyEj2H}n(40Yu G!5RR6W(xNJ diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 6f4f321a..baf0e96e 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -46,10 +46,12 @@ 1.2 com.apple.iokit.IOUSBFamily 1.8 - com.apple.kernel.libkern - 6.9.9 - com.apple.kernel.mach - 6.9.9 + com.apple.kpi.libkern + 8.0.0 + com.apple.kpi.mach + 8.0.0 + com.apple.kpi.iokit + 8.0.0 diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h index 6a88a7b2..306c5f9a 100644 --- a/WirelessGamingReceiver/WirelessDevice.h +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -43,7 +43,7 @@ class WirelessDevice : public IOService void RegisterWatcher(void *target, WirelessDeviceWatcher function, void *parameter); - OSNumber* WirelessDevice::newLocationIDNumber() const; + OSNumber* newLocationIDNumber() const; private: friend class WirelessGamingReceiver; void SetIndex(int i); diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 4ab17c19..25e42ef9 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -522,10 +522,11 @@ void WirelessGamingReceiver::InstantiateService(int index) // IOLog("process: Device attached\n"); if (IsDataQueued(index)) connections[index].service->NewData(); + connections[index].service->start(this); } else { - connections[index].service->free(); + connections[index].service->release(); connections[index].service = NULL; // IOLog("process: Device attach failure\n"); } diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index 6e0f26a1..60980baf 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -58,7 +58,7 @@ class WirelessGamingReceiver : public IOService IOReturn message(UInt32 type,IOService *provider,void *argument); // For WirelessDevice to use - OSNumber* WirelessGamingReceiver::newLocationIDNumber() const; + OSNumber* newLocationIDNumber() const; private: friend class WirelessDevice; diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser index 81aac86b..dc09c5a8 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser @@ -1,7 +1,6 @@ // !$*UTF8*$! { 089C1669FE841209C02AAC07 /* Project object */ = { - activeArchitecture = ppc; activeBuildConfigurationName = Release; activeTarget = 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */; addToTargets = ( @@ -18,7 +17,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 243, + 282, 20, 48, 43, @@ -35,29 +34,41 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 216359882; - PBXWorkspaceStateSaveDate = 216359882; + PBXPerProjectTemplateStateSaveDate = 280461377; + PBXWorkspaceStateSaveDate = 280461377; + }; + perUserProjectItems = { + 3B06F80510606E4D00CACC16 /* PBXTextBookmark */ = 3B06F80510606E4D00CACC16 /* PBXTextBookmark */; + 3B36DCDE10B781DC00FFD769 /* PlistBookmark */ = 3B36DCDE10B781DC00FFD769 /* PlistBookmark */; }; sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; userBuildSettings = { }; }; + 089C167EFE841241C02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {830, 524}}"; + sepNavSelRange = "{86, 0}"; + sepNavVisRange = "{0, 97}"; + sepNavWindowFrame = "{{15, 121}, {889, 652}}"; + }; + }; 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {629, 1288}}"; - sepNavSelRange = "{1435, 7}"; - sepNavVisRange = "{1099, 488}"; + sepNavIntBoundsRect = "{{0, 0}, {421, 1300}}"; + sepNavSelRange = "{1828, 0}"; + sepNavVisRange = "{0, 0}"; sepNavVisRect = "{{0, 658}, {649, 329}}"; sepNavWindowFrame = "{{481, 112}, {688, 458}}"; }; }; 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {747, 7924}}"; - sepNavSelRange = "{6221, 5}"; - sepNavVisRange = "{5219, 1665}"; + sepNavIntBoundsRect = "{{0, 0}, {845, 7449}}"; + sepNavSelRange = "{15821, 11}"; + sepNavVisRange = "{14963, 1502}"; sepNavVisRect = "{{0, 5898}, {767, 645}}"; - sepNavWindowFrame = "{{38, 202}, {806, 774}}"; + sepNavWindowFrame = "{{38, 61}, {806, 717}}"; }; }; 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */ = { @@ -65,18 +76,31 @@ }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 756}}"; - sepNavSelRange = "{723, 0}"; - sepNavVisRange = "{0, 1173}"; + sepNavIntBoundsRect = "{{0, 0}, {460, 806}}"; + sepNavSelRange = "{1716, 58}"; + sepNavVisRange = "{1570, 224}"; sepNavVisRect = "{{0, 168}, {1020, 471}}"; sepNavWindowFrame = "{{45, 118}, {1059, 600}}"; }; }; + 3B06F80510606E4D00CACC16 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + name = "Info.plist: 53"; + rLen = 58; + rLoc = 1716; + rType = 0; + vrLen = 224; + vrLoc = 1570; + }; 3B21EBDA0B8CEAED00B5CACA /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; scmType = ""; }; @@ -86,22 +110,33 @@ }; 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 826}}"; - sepNavSelRange = "{1620, 0}"; - sepNavVisRange = "{1013, 848}"; + sepNavIntBoundsRect = "{{0, 0}, {663, 767}}"; + sepNavSelRange = "{1561, 0}"; + sepNavVisRange = "{1202, 572}"; sepNavVisRect = "{{0, 341}, {1020, 471}}"; - sepNavWindowFrame = "{{175, 113}, {1059, 600}}"; + sepNavWindowFrame = "{{100, 80}, {1059, 600}}"; }; }; 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1000, 1596}}"; sepNavSelRange = "{2806, 0}"; - sepNavVisRange = "{2269, 938}"; + sepNavVisRange = "{0, 1238}"; sepNavVisRect = "{{0, 1097}, {1020, 471}}"; sepNavWindowFrame = "{{226, 80}, {1059, 600}}"; }; }; + 3B36DCDE10B781DC00FFD769 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/colin/Projects/360 Controller/WirelessGamingReceiver/Info.plist"; + rLen = 0; + rLoc = 9223372036854775807; + }; 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1000, 784}}"; @@ -113,11 +148,11 @@ }; 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 3164}}"; - sepNavSelRange = "{3510, 0}"; - sepNavVisRange = "{2855, 785}"; + sepNavIntBoundsRect = "{{0, 0}, {1000, 3094}}"; + sepNavSelRange = "{6463, 0}"; + sepNavVisRange = "{0, 1352}"; sepNavVisRect = "{{0, 1316}, {1020, 471}}"; - sepNavWindowFrame = "{{217, 402}, {1059, 600}}"; + sepNavWindowFrame = "{{217, 178}, {1059, 600}}"; }; }; 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */ = { @@ -133,6 +168,7 @@ ignoreCount = 0; lineNumber = 5; modificationTime = 216357854.963561; + originalNumberOfMultipleMatches = 0; state = 2; }; 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */ = { @@ -148,14 +184,16 @@ ignoreCount = 0; lineNumber = 5; modificationTime = 216357854.964239; + originalNumberOfMultipleMatches = 0; state = 2; }; 3BE6677A0B91DC55009679FC /* devices.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 471}}"; - sepNavSelRange = "{1030, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {720, 434}}"; + sepNavSelRange = "{1011, 17}"; + sepNavVisRange = "{673, 406}"; sepNavVisRect = "{{0, 0}, {1020, 471}}"; - sepNavWindowFrame = "{{61, 355}, {1059, 600}}"; + sepNavWindowFrame = "{{61, 178}, {1059, 600}}"; }; }; } diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index cfe9608f..6fbf570e 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -21,7 +21,7 @@ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessGamingReceiver.h; sourceTree = ""; }; 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WirelessGamingReceiver.cpp; sourceTree = ""; }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 32D94FD00562CBF700B6AF17 /* WirelessGamingReceiver.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WirelessGamingReceiver.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WirelessDevice.h; sourceTree = ""; }; 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WirelessDevice.cpp; sourceTree = ""; }; @@ -127,7 +127,7 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "WirelessGamingReceiver" */; - compatibilityVersion = "Xcode 2.4"; + compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* WirelessGamingReceiver */; projectDirPath = ""; @@ -206,10 +206,6 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); CURRENT_PROJECT_VERSION = 1.0.0d1; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; @@ -229,24 +225,20 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.2; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.2.8.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; }; name = Debug; }; 1DEB91DF08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - ppc, - i386, - ); + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.2; - MACOSX_DEPLOYMENT_TARGET_i386 = 10.4; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT = macosx10.5; + "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; SYMROOT = build; }; name = Release; From 2f0d99a7598a4402f9163dc95dc4a4c5662f3e77 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 01:30:56 +0000 Subject: [PATCH 21/66] Add the DealExtreme adapter to the config --- WirelessGamingReceiver/Info.plist | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index baf0e96e..53181afd 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -39,6 +39,21 @@ idVendor 1118 + WirelessGamingReceiverForWindowsAlternate + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 657 + idVendor + 1118 + OSBundleLibraries From 20b04d7e9dc6d68a0170fae4cd26f988ad3ffe58 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 01:33:39 +0000 Subject: [PATCH 22/66] Twiddle the user files --- .../colin.pbxuser | 199 ------------------ .../project.pbxproj | 7 + 2 files changed, 7 insertions(+), 199 deletions(-) delete mode 100644 WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser deleted file mode 100644 index dc09c5a8..00000000 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,199 +0,0 @@ -// !$*UTF8*$! -{ - 089C1669FE841209C02AAC07 /* Project object */ = { - activeBuildConfigurationName = Release; - activeTarget = 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */; - addToTargets = ( - 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */, - ); - breakpoints = ( - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */, - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */, - ); - codeSenseManager = 3B21EBDB0B8CEAED00B5CACA /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 282, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 280461377; - PBXWorkspaceStateSaveDate = 280461377; - }; - perUserProjectItems = { - 3B06F80510606E4D00CACC16 /* PBXTextBookmark */ = 3B06F80510606E4D00CACC16 /* PBXTextBookmark */; - 3B36DCDE10B781DC00FFD769 /* PlistBookmark */ = 3B36DCDE10B781DC00FFD769 /* PlistBookmark */; - }; - sourceControlManager = 3B21EBDA0B8CEAED00B5CACA /* Source Control */; - userBuildSettings = { - }; - }; - 089C167EFE841241C02AAC07 /* English */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {830, 524}}"; - sepNavSelRange = "{86, 0}"; - sepNavVisRange = "{0, 97}"; - sepNavWindowFrame = "{{15, 121}, {889, 652}}"; - }; - }; - 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {421, 1300}}"; - sepNavSelRange = "{1828, 0}"; - sepNavVisRange = "{0, 0}"; - sepNavVisRect = "{{0, 658}, {649, 329}}"; - sepNavWindowFrame = "{{481, 112}, {688, 458}}"; - }; - }; - 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {845, 7449}}"; - sepNavSelRange = "{15821, 11}"; - sepNavVisRange = "{14963, 1502}"; - sepNavVisRect = "{{0, 5898}, {767, 645}}"; - sepNavWindowFrame = "{{38, 61}, {806, 717}}"; - }; - }; - 32D94FC30562CBF700B6AF17 /* WirelessGamingReceiver */ = { - activeExec = 0; - }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {460, 806}}"; - sepNavSelRange = "{1716, 58}"; - sepNavVisRange = "{1570, 224}"; - sepNavVisRect = "{{0, 168}, {1020, 471}}"; - sepNavWindowFrame = "{{45, 118}, {1059, 600}}"; - }; - }; - 3B06F80510606E4D00CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - name = "Info.plist: 53"; - rLen = 58; - rLoc = 1716; - rType = 0; - vrLen = 224; - vrLoc = 1570; - }; - 3B21EBDA0B8CEAED00B5CACA /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3B21EBDB0B8CEAED00B5CACA /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {663, 767}}"; - sepNavSelRange = "{1561, 0}"; - sepNavVisRange = "{1202, 572}"; - sepNavVisRect = "{{0, 341}, {1020, 471}}"; - sepNavWindowFrame = "{{100, 80}, {1059, 600}}"; - }; - }; - 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 1596}}"; - sepNavSelRange = "{2806, 0}"; - sepNavVisRange = "{0, 1238}"; - sepNavVisRect = "{{0, 1097}, {1020, 471}}"; - sepNavWindowFrame = "{{226, 80}, {1059, 600}}"; - }; - }; - 3B36DCDE10B781DC00FFD769 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/Projects/360 Controller/WirelessGamingReceiver/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; - 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 784}}"; - sepNavSelRange = "{1774, 0}"; - sepNavVisRange = "{941, 1025}"; - sepNavVisRect = "{{0, 299}, {1020, 471}}"; - sepNavWindowFrame = "{{155, 94}, {1059, 600}}"; - }; - }; - 3BE6671B0B910A02009679FC /* WirelessHIDDevice.cpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1000, 3094}}"; - sepNavSelRange = "{6463, 0}"; - sepNavVisRange = "{0, 1352}"; - sepNavVisRect = "{{0, 1316}, {1020, 471}}"; - sepNavWindowFrame = "{{217, 178}, {1059, 600}}"; - }; - }; - 3BE667220B910BB9009679FC /* WirelessHIDDevice.h:5 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - hitCount = 0; - ignoreCount = 0; - lineNumber = 5; - modificationTime = 216357854.963561; - originalNumberOfMultipleMatches = 0; - state = 2; - }; - 3BE6673C0B911E3C009679FC /* WirelessHIDDevice.h:5 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */; - hitCount = 0; - ignoreCount = 0; - lineNumber = 5; - modificationTime = 216357854.964239; - originalNumberOfMultipleMatches = 0; - state = 2; - }; - 3BE6677A0B91DC55009679FC /* devices.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {720, 434}}"; - sepNavSelRange = "{1011, 17}"; - sepNavVisRange = "{673, 406}"; - sepNavVisRect = "{{0, 0}, {1020, 471}}"; - sepNavWindowFrame = "{{61, 178}, {1059, 600}}"; - }; - }; -} diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index 6fbf570e..5f3a854e 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -128,7 +128,14 @@ isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "WirelessGamingReceiver" */; compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 089C166AFE841209C02AAC07 /* WirelessGamingReceiver */; projectDirPath = ""; projectRoot = ""; From 98caa4db6c80c362808391221c294d4923585d3a Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 01:36:10 +0000 Subject: [PATCH 23/66] Fix user files --- .../Feedback360.xcodeproj/colin.pbxuser | 165 ------------------ 1 file changed, 165 deletions(-) delete mode 100644 Feedback360/Feedback360.xcodeproj/colin.pbxuser diff --git a/Feedback360/Feedback360.xcodeproj/colin.pbxuser b/Feedback360/Feedback360.xcodeproj/colin.pbxuser deleted file mode 100644 index 35293323..00000000 --- a/Feedback360/Feedback360.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,165 +0,0 @@ -// !$*UTF8*$! -{ - 089C1669FE841209C02AAC07 /* Project object */ = { - activeBuildConfigurationName = Deployment; - activeTarget = 8D57630D048677EA00EA77CD /* Feedback360 */; - addToTargets = ( - 8D57630D048677EA00EA77CD /* Feedback360 */, - ); - breakpoints = ( - ); - codeSenseManager = 3B2EF5370965A149007BFB7B /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 287, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 280461345; - PBXWorkspaceStateSaveDate = 280461345; - }; - perUserProjectItems = { - 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */ = 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */; - 3B90DB321059D9AC00CC39D4 /* PlistBookmark */ = 3B90DB321059D9AC00CC39D4 /* PlistBookmark */; - 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */ = 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */; - }; - sourceControlManager = 3B2EF5360965A149007BFB7B /* Source Control */; - userBuildSettings = { - }; - }; - 089C167EFE841241C02AAC07 /* English */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {465, 98}}"; - sepNavSelRange = "{126, 0}"; - sepNavVisRange = "{0, 129}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{38, 61}, {900, 717}}"; - }; - }; - 08FB77B6FE84183AC02AAC07 /* main.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {670, 5759}}"; - sepNavSelRange = "{9315, 0}"; - sepNavVisRange = "{0, 0}"; - sepNavVisRect = "{{0, 659}, {861, 685}}"; - sepNavWindowFrame = "{{253, 96}, {900, 814}}"; - }; - }; - 3B2EF5360965A149007BFB7B /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3B2EF5370965A149007BFB7B /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 3B2EF5440965B3C7007BFB7B /* main.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {551, 715}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 610}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{7, 68}, {900, 814}}"; - }; - }; - 3B36DCAA10B780FE00FFD769 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 089C167EFE841241C02AAC07 /* English */; - name = "InfoPlist.strings: 4"; - rLen = 0; - rLoc = 126; - rType = 0; - vrLen = 129; - vrLoc = 0; - }; - 3B90DB321059D9AC00CC39D4 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 8D576317048677EA00EA77CD /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/Projects/360 Controller/Feedback360/Info.plist"; - rLen = 0; - rLoc = 9223372036854775808; - }; - 3B90DB341059D9AC00CC39D4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 089C167EFE841241C02AAC07 /* English */; - name = "InfoPlist.strings: 4"; - rLen = 0; - rLoc = 126; - rType = 0; - vrLen = 129; - vrLoc = 0; - }; - 3BBA037B09697D80008A46C9 /* emulator.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1582}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{284, 88}, {900, 814}}"; - }; - }; - 3BBA037C09697D80008A46C9 /* emulator.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 4816}}"; - sepNavSelRange = "{1235, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{345, 63}, {900, 814}}"; - }; - }; - 3BBA03E1096A29B5008A46C9 /* devlink.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {488, 588}}"; - sepNavSelRange = "{1342, 0}"; - sepNavVisRect = "{{0, 402}, {459, 186}}"; - sepNavWindowFrame = "{{107, 99}, {900, 814}}"; - }; - }; - 3BBA03E2096A29B5008A46C9 /* devlink.c */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 868}}"; - sepNavSelRange = "{284, 0}"; - sepNavVisRange = "{0, 1832}"; - sepNavVisRect = "{{0, 154}, {861, 685}}"; - sepNavWindowFrame = "{{253, 110}, {900, 814}}"; - }; - }; - 8D57630D048677EA00EA77CD /* Feedback360 */ = { - activeExec = 0; - }; - 8D576317048677EA00EA77CD /* Info.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 1047}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{325, 61}, {900, 717}}"; - }; - }; -} From 503d28f34cc456314f00559db45703b16395a35f Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 01:38:16 +0000 Subject: [PATCH 24/66] Twiddle the user files --- 360Daemon/360Daemon.xcodeproj/colin.mode1 | 1369 ---------------- 360Daemon/360Daemon.xcodeproj/colin.mode1v3 | 1394 ----------------- 360Daemon/360Daemon.xcodeproj/colin.pbxuser | 243 --- 360Daemon/360Daemon.xcodeproj/project.pbxproj | 7 + 4 files changed, 7 insertions(+), 3006 deletions(-) delete mode 100644 360Daemon/360Daemon.xcodeproj/colin.mode1 delete mode 100644 360Daemon/360Daemon.xcodeproj/colin.mode1v3 delete mode 100644 360Daemon/360Daemon.xcodeproj/colin.pbxuser diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1 b/360Daemon/360Daemon.xcodeproj/colin.mode1 deleted file mode 100644 index 4486b7e0..00000000 --- a/360Daemon/360Daemon.xcodeproj/colin.mode1 +++ /dev/null @@ -1,1369 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXRunSessionModule - Name - Run Log - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1 - FavBarConfig - - PBXProjectModuleGUID - 3BD6F0F30C67F36500574E6A - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1 - MajorVersion - 31 - MinorVersion - 1 - Name - Default - Notifications - - OpenEditors - - - Content - - PBXProjectModuleGUID - 3BD6F0F40C67F36500574E6A - PBXProjectModuleLabel - 360Daemon.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BD6F0F50C67F36500574E6A - PBXProjectModuleLabel - 360Daemon.m - _historyCapacity - 0 - bookmark - 3BD3D8CC0CA0B5E7004F332A - history - - 3BE67E5D0C9F4B0700A68607 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {623, 487}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 14 469 623 528 0 0 1280 1002 - - - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-target-popup - active-buildstyle-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-runOrDebug - com.apple.ide.PBXToolbarStopButton - get-info - toggle-editor - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 08FB7794FE84155DC02AAC07 - 08FB7795FE84155DC02AAC07 - 1AB674ADFE9D54B511CA2CBB - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 3 - 1 - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 338}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 356}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 295 516 690 397 0 0 1280 1002 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {482, 0}} - RubberWindowFrame - 295 516 690 397 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {482, 351}} - RubberWindowFrame - 295 516 690 397 0 0 1280 1002 - - Module - XCDetailModule - Proportion - 351pt - - - Proportion - 482pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3BD3D8CA0CA0B5E7004F332A - 1CE0B1FE06471DED0097A5F4 - 3BD3D8CB0CA0B5E7004F332A - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.short - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - 3B1C2F880C9E057E00D37DB5 - /Users/colin/Projects2/OSX/360 Controller/360Daemon/360Daemon.xcodeproj - 3BD6F0F40C67F36500574E6A - - WindowString - 295 516 690 397 0 0 1280 1002 - WindowTools - - - FirstTimeWindowDisplayed - - Identifier - windowTool.build - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {500, 218}} - RubberWindowFrame - 36 474 500 500 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - ContentConfiguration - - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - XCBuildResultsTrigger_Collapse - 1021 - XCBuildResultsTrigger_Open - 1011 - - GeometryConfiguration - - Frame - {{0, 223}, {500, 236}} - RubberWindowFrame - 36 474 500 500 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 459pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - - TableOfContents - - 3B1C2F880C9E057E00D37DB5 - 3BD3D8CD0CA0B5E7004F332A - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.build - WindowString - 36 474 500 500 0 0 1280 1002 - WindowToolGUID - 3B1C2F880C9E057E00D37DB5 - WindowToolIsVisible - - - - Identifier - windowTool.debugger - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {317, 164}} - {{317, 0}, {377, 164}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 164}} - {{0, 164}, {694, 216}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 380}} - RubberWindowFrame - 321 238 694 422 0 0 1440 878 - - Module - PBXDebugSessionModule - Proportion - 100% - - - Proportion - 100% - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CD10A99069EF8BA00B06720 - 1C0AD2AB069F1E9B00FABCE6 - 1C162984064C10D400B95A72 - 1C0AD2AC069F1E9B00FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.debug - WindowString - 321 238 694 422 0 0 1440 878 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - 0 - - - Identifier - windowTool.find - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {781, 167}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 50% - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{8, 0}, {773, 254}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXProjectFindModule - Proportion - 50% - - - Proportion - 428pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE - 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 - 1CD0528E0623707200166675 - - WindowString - 62 385 781 470 0 0 1440 878 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - 0 - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 650 41 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 358pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - WindowString - 650 41 440 400 0 0 1280 1002 - - - Identifier - windowTool.run - Layout - - - Dock - - - ContentConfiguration - - LauncherConfigVersion - 3 - PBXProjectModuleGUID - 1CD0528B0623707200166675 - PBXProjectModuleLabel - Run - Runner - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {493, 167}} - {{0, 176}, {493, 267}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {405, 443}} - {{414, 0}, {514, 443}} - - - - - GeometryConfiguration - - Frame - {{0, 0}, {460, 159}} - RubberWindowFrame - 316 696 459 200 0 0 1280 1002 - - Module - PBXRunSessionModule - Proportion - 159pt - - - Proportion - 159pt - - - Name - Run Log - ServiceClasses - - PBXRunSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C0AD2B3069F1EA900FABCE6 - 1C0AD2B4069F1EA900FABCE6 - 1CD0528B0623707200166675 - 1C0AD2B5069F1EA900FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.run - WindowString - 316 696 459 200 0 0 1280 1002 - WindowToolGUID - 1C0AD2B3069F1EA900FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - 0 - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 0 - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 2 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpoints - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - 1 - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - 1 - ToolbarConfiguration - xcode.toolbar.config.debugAnimator - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - - diff --git a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 b/360Daemon/360Daemon.xcodeproj/colin.mode1v3 deleted file mode 100644 index 3dfaf80e..00000000 --- a/360Daemon/360Daemon.xcodeproj/colin.mode1v3 +++ /dev/null @@ -1,1394 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCProjectFormatConflictsModule - Name - Project Format Conflicts List - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - BundleLoadPath - - MaxInstances - n - Module - XCSnapshotModule - Name - Snapshots Tool - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1v3 - FavBarConfig - - PBXProjectModuleGUID - 3B05AB290CE0F60B00DF20B5 - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1v3 - MajorVersion - 33 - MinorVersion - 0 - Name - Default - Notifications - - OpenEditors - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-combo-popup - action - NSToolbarFlexibleSpaceItem - debugger-enable-breakpoints - build-and-go - com.apple.ide.PBXToolbarStopButton - get-info - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 08FB7794FE84155DC02AAC07 - 08FB7795FE84155DC02AAC07 - C6859EA2029092E104C91782 - 08FB779DFE84155DC02AAC07 - 1AB674ADFE9D54B511CA2CBB - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 338}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 356}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 490 176 690 397 0 0 1280 778 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {482, 0}} - RubberWindowFrame - 490 176 690 397 0 0 1280 778 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {482, 351}} - RubberWindowFrame - 490 176 690 397 0 0 1280 778 - - Module - XCDetailModule - Proportion - 351pt - - - Proportion - 482pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3B36DCE710B7821B00FFD769 - 1CE0B1FE06471DED0097A5F4 - 3B36DCE810B7821B00FFD769 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfigUserDefaultsMinorVersion - 2 - ToolbarConfiguration - xcode.toolbar.config.defaultV3 - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.shortV3 - - - PerspectivesBarVisible - - ShelfIsVisible - - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - 1CD10A99069EF8BA00B06720 - 3B05AB450CE0FB7A00DF20B5 - /Users/colin/Projects/360 Controller/360Daemon/360Daemon.xcodeproj - - WindowString - 490 176 690 397 0 0 1280 778 - WindowToolsV3 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.build - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {500, 218}} - RubberWindowFrame - 36 264 500 500 0 0 1280 778 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - ContentConfiguration - - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build Results - XCBuildResultsTrigger_Collapse - 1021 - XCBuildResultsTrigger_Open - 1011 - - GeometryConfiguration - - Frame - {{0, 223}, {500, 236}} - RubberWindowFrame - 36 264 500 500 0 0 1280 778 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 459pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - - TableOfContents - - 3B05AB450CE0FB7A00DF20B5 - 3B36DCE910B7821B00FFD769 - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.buildV3 - WindowString - 36 264 500 500 0 0 1280 778 - WindowToolGUID - 3B05AB450CE0FB7A00DF20B5 - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - windowTool.debugger - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {316, 203}} - {{316, 0}, {378, 203}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 203}} - {{0, 203}, {694, 178}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 381}} - PBXDebugSessionStackFrameViewKey - - DebugVariablesTableConfiguration - - Name - 120 - Value - 85 - Summary - 148 - - Frame - {{316, 0}, {378, 203}} - RubberWindowFrame - 252 192 694 422 0 0 1280 778 - - RubberWindowFrame - 252 192 694 422 0 0 1280 778 - - Module - PBXDebugSessionModule - Proportion - 381pt - - - Proportion - 381pt - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - - TableOfContents - - 1CD10A99069EF8BA00B06720 - 3B36DCEA10B7821B00FFD769 - 1C162984064C10D400B95A72 - 3B36DCEB10B7821B00FFD769 - 3B36DCEC10B7821B00FFD769 - 3B36DCED10B7821B00FFD769 - 3B36DCEE10B7821B00FFD769 - 3B36DCEF10B7821B00FFD769 - - ToolbarConfiguration - xcode.toolbar.config.debugV3 - WindowString - 252 192 694 422 0 0 1280 778 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - windowTool.find - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CD0528D0623707200166675 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {781, 167}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 50% - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{8, 0}, {773, 254}} - RubberWindowFrame - 62 385 781 470 0 0 1440 878 - - Module - PBXProjectFindModule - Proportion - 50% - - - Proportion - 428pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - - TableOfContents - - 1C530D57069F1CE1000CFCEE - 1C530D58069F1CE1000CFCEE - 1C530D59069F1CE1000CFCEE - 1CDD528C0622207200134675 - 1C530D5A069F1CE1000CFCEE - 1CE0B1FE06471DED0097A5F4 - 1CD0528E0623707200166675 - - WindowString - 62 385 781 470 0 0 1440 878 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - MENUSEPARATOR - - - FirstTimeWindowDisplayed - - Identifier - windowTool.debuggerConsole - IsVertical - - Layout - - - Dock - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 631 257 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 359pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - - TableOfContents - - 1C78EAAD065D492600B07095 - 3B042D920CE55D5F005851E9 - 1C78EAAC065D492600B07095 - - ToolbarConfiguration - xcode.toolbar.config.consoleV3 - WindowString - 631 257 440 400 0 0 1280 1002 - WindowToolGUID - 1C78EAAD065D492600B07095 - WindowToolIsVisible - - - - Identifier - windowTool.snapshots - Layout - - - Dock - - - Module - XCSnapshotModule - Proportion - 100% - - - Proportion - 100% - - - Name - Snapshots - ServiceClasses - - XCSnapshotModule - - StatusbarIsVisible - Yes - ToolbarConfiguration - xcode.toolbar.config.snapshots - WindowString - 315 824 300 550 0 0 1440 878 - WindowToolIsVisible - Yes - - - FirstTimeWindowDisplayed - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.breakpoints - IsVertical - - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 0 - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 3 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpointsV3 - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - - ToolbarConfiguration - xcode.toolbar.config.debugAnimatorV3 - WindowString - 100 100 700 500 0 0 1280 1002 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.projectFormatConflicts - Layout - - - Dock - - - Module - XCProjectFormatConflictsModule - Proportion - 100% - - - Proportion - 100% - - - Name - Project Format Conflicts - ServiceClasses - - XCProjectFormatConflictsModule - - StatusbarIsVisible - - WindowContentMinSize - 450 300 - WindowString - 50 850 472 307 0 0 1440 877 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - - - - Identifier - windowTool.refactoring - IncludeInToolsMenu - - Layout - - - Dock - - - BecomeActive - - GeometryConfiguration - - Frame - {0, 0}, {500, 335} - RubberWindowFrame - {0, 0}, {500, 335} - - Module - XCRefactoringModule - Proportion - 100% - - - Proportion - 100% - - - Name - Refactoring - ServiceClasses - - XCRefactoringModule - - WindowString - 200 200 500 356 0 0 1920 1200 - - - - diff --git a/360Daemon/360Daemon.xcodeproj/colin.pbxuser b/360Daemon/360Daemon.xcodeproj/colin.pbxuser deleted file mode 100644 index dc7eec9b..00000000 --- a/360Daemon/360Daemon.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,243 +0,0 @@ -// !$*UTF8*$! -{ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - activeBuildConfigurationName = Release; - activeExecutable = 3BD6F0E90C67E41F00574E6A /* 360Daemon */; - activeTarget = 8DD76F960486AA7600D96B5E /* 360Daemon */; - addToTargets = ( - 8DD76F960486AA7600D96B5E /* 360Daemon */, - ); - breakpoints = ( - 3B7A8E510CE154B9005BB45B /* 360Daemon.m:140 */, - 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:82 */, - 3B7A8E740CE1595C005BB45B /* 360Daemon.m:95 */, - 3B8698420CE29A3100283CEC /* ControlPrefs.m:28 */, - 3B8698440CE29A3300283CEC /* ControlPrefs.m:16 */, - ); - codeSenseManager = 3BD6F0F00C67E43E00574E6A /* Code sense */; - executables = ( - 3BD6F0E90C67E41F00574E6A /* 360Daemon */, - ); - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 243, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 280461357; - PBXWorkspaceStateSaveDate = 280461357; - }; - sourceControlManager = 3BD6F0EF0C67E43E00574E6A /* Source Control */; - userBuildSettings = { - }; - }; - 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1951, 3237}}"; - sepNavSelRange = "{5747, 0}"; - sepNavVisRange = "{7116, 2143}"; - sepNavVisRect = "{{0, 1099}, {584, 455}}"; - sepNavWindowFrame = "{{10, 125}, {827, 653}}"; - }; - }; - 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {564, 433}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 160}"; - sepNavWindowFrame = "{{38, 392}, {623, 584}}"; - }; - }; - 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; - sepNavSelRange = "{541, 0}"; - sepNavVisRange = "{0, 541}"; - sepNavWindowFrame = "{{15, 413}, {623, 584}}"; - }; - }; - 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; - sepNavSelRange = "{402, 0}"; - sepNavVisRange = "{0, 434}"; - sepNavWindowFrame = "{{435, 140}, {623, 584}}"; - }; - }; - 3B7A8E510CE154B9005BB45B /* 360Daemon.m:140 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - functionName = "callbackConnected()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 140; - location = 360Daemon; - modificationTime = 216357854.964732; - originalNumberOfMultipleMatches = 0; - state = 2; - }; - 3B7A8E6B0CE157EC005BB45B /* 360Daemon.m:82 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - functionName = "ShowAlert()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 82; - location = 360Daemon; - modificationTime = 216357854.964961; - originalNumberOfMultipleMatches = 0; - state = 2; - }; - 3B7A8E740CE1595C005BB45B /* 360Daemon.m:95 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 08FB7796FE84155DC02AAC07 /* 360Daemon.m */; - functionName = "callbackConnected()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 95; - location = 360Daemon; - modificationTime = 216357854.96508; - originalNumberOfMultipleMatches = 0; - state = 2; - }; - 3B8698070CE2903100283CEC /* ControlPrefs.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {564, 456}}"; - sepNavSelRange = "{599, 15}"; - sepNavVisRange = "{0, 703}"; - sepNavWindowFrame = "{{573, 106}, {623, 584}}"; - }; - }; - 3B8698080CE2903100283CEC /* ControlPrefs.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {852, 910}}"; - sepNavSelRange = "{648, 0}"; - sepNavVisRange = "{0, 0}"; - sepNavWindowFrame = "{{38, 194}, {623, 584}}"; - }; - }; - 3B8698420CE29A3100283CEC /* ControlPrefs.m:28 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 3B8698080CE2903100283CEC /* ControlPrefs.m */; - functionName = "AlertDisabled()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 28; - location = Pref360Control; - modificationTime = 216357854.965237; - originalNumberOfMultipleMatches = 1; - state = 0; - }; - 3B8698440CE29A3300283CEC /* ControlPrefs.m:16 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = 3B8698080CE2903100283CEC /* ControlPrefs.m */; - functionName = "SetAlertDisabled()"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 16; - location = Pref360Control; - modificationTime = 216357854.965258; - originalNumberOfMultipleMatches = 1; - state = 0; - }; - 3BD6F0E90C67E41F00574E6A /* 360Daemon */ = { - isa = PBXExecutable; - activeArgIndices = ( - ); - argumentStrings = ( - ); - autoAttachOnCrash = 1; - breakpointsEnabled = 1; - configStateDict = { - }; - customDataFormattersEnabled = 1; - dataTipCustomDataFormattersEnabled = 1; - dataTipShowTypeColumn = 1; - dataTipSortType = 0; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = ""; - enableDebugStr = 1; - environmentEntries = ( - ); - executableSystemSymbolLevel = 0; - executableUserSymbolLevel = 0; - libgmallocEnabled = 0; - name = 360Daemon; - savedGlobals = { - }; - showTypeColumn = 0; - sourceDirectories = ( - ); - variableFormatDictionary = { - }; - }; - 3BD6F0EF0C67E43E00574E6A /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3BD6F0F00C67E43E00574E6A /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 8DD76F960486AA7600D96B5E /* 360Daemon */ = { - activeExec = 0; - executables = ( - 3BD6F0E90C67E41F00574E6A /* 360Daemon */, - ); - }; -} diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index cf14d917..7ce4059b 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -136,7 +136,14 @@ isa = PBXProject; buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "360Daemon" */; compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 08FB7794FE84155DC02AAC07 /* 360Daemon */; projectDirPath = ""; projectRoot = ""; From afcfd6361f7869e13c7bb75d22aa9a7c80393640 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 02:06:38 +0000 Subject: [PATCH 25/66] Some tweaking to the daemon to fix memory leaks and things --- 360Daemon/360Daemon.m | 82 ++++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 91054185..1f284368 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -84,6 +84,35 @@ void ShowAlert(int index) CFRunLoopAddSource(CFRunLoopGetCurrent(), activeAlertSource, kCFRunLoopCommonModes); } +static void ConfigureDevice(io_service_t object) +{ + IOCFPlugInInterface **iodev; + IOUSBDeviceInterface **dev; + IOReturn err; + SInt32 score; + + if ((!IOCreatePlugInInterfaceForService(object, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score))&&iodev) + { + err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBDeviceInterfaceID), (LPVOID)&dev); + (*iodev)->Release(iodev); + if ((!err) && dev) + { + if ((*dev)->USBDeviceOpen(dev) == 0) + { + IOUSBConfigurationDescriptorPtr confDesc; + + if ((*dev)->GetConfigurationDescriptorPtr(dev, 0, &confDesc) == 0) + { + (*dev)->SetConfiguration(dev, confDesc->bConfigurationValue); + // Open interface? Hopefully not necessary + } + (*dev)->USBDeviceClose(dev); + } + (*dev)->Release(dev); + } + } +} + // Supported device - connecting - set settings? static void callbackConnected(void *param,io_iterator_t iterator) { @@ -100,42 +129,54 @@ static void callbackConnected(void *param,io_iterator_t iterator) if (IOObjectConformsTo(object, "WirelessHIDDevice") || IOObjectConformsTo(object, "Xbox360ControllerClass")) { FFDeviceObjectReference forceFeedback; + NSString *serialNumber; if (IOObjectConformsTo(object, "Xbox360ControllerClass")) { io_iterator_t iter; + kern_return_t res; + io_service_t found; - if (IORegistryEntryGetChildIterator(object, kIOServicePlane, &iter) != kIOReturnSuccess) + res = IORegistryEntryGetChildIterator(object, kIOServicePlane, &iter); + IOObjectRelease(object); + if (res != kIOReturnSuccess) continue; + found = 0; while ((object = IOIteratorNext(iter)) != 0) - if (IOObjectConformsTo(object, "ControllerClass")) - break; + { + if ((found == 0) && IOObjectConformsTo(object, "ControllerClass")) + found = object; + else + IOObjectRelease(object); + } IOObjectRelease(iter); - if (object == 0) + if (found == 0) continue; + object = found; } + serialNumber = GetSerialNumber(object); // Supported device - load settings - ConfigController(object, GetController(GetSerialNumber(object))); + ConfigController(object, GetController(serialNumber)); // Set LEDs - FFCreateDevice(object, &forceFeedback); + forceFeedback = 0; + if (FFCreateDevice(object, &forceFeedback) != FF_OK) + forceFeedback = 0; if (forceFeedback != 0) { FFEFFESCAPE escape; unsigned char c; - NSString *serial; int i; - serial = GetSerialNumber(object); c = 0x0a; - if (serial != nil) + if (serialNumber != nil) { for (i = 0; i < 4; i++) { - if ((leds[i] == nil) || ([leds[i] caseInsensitiveCompare:serial] == NSOrderedSame)) + if ((leds[i] == nil) || ([leds[i] caseInsensitiveCompare:serialNumber] == NSOrderedSame)) { c = 0x06 + i; if (leds[i] == nil) - leds[i] = [serial retain]; + leds[i] = [serialNumber retain]; // NSLog(@"Added controller with LED %i", i); break; } @@ -162,16 +203,17 @@ static void callbackConnected(void *param,io_iterator_t iterator) if (idVendor == 0x045e) { // Microsoft - if (idProduct == 0x028f) + switch (idProduct) { - // Unsupported - plug'n'charge cable - if (!foundWirelessReceiver) - ShowAlert(kaPlugNCharge); - } - if (idProduct == 0x0719) - { - // Wireless Gaming Receiver for Windows - foundWirelessReceiver = TRUE; + case 0x028f: // Plug'n'charge cable + if (!foundWirelessReceiver) + ShowAlert(kaPlugNCharge); + ConfigureDevice(object); + break; + case 0x0719: // Microsoft Wireless Gaming Receiver + case 0x0291: // Third party Wireless Gaming Receiver + foundWirelessReceiver = TRUE; + break; } } } From 0bd5b0cde94b37b90f3c4b78ee8be8b28666f018 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 02:08:10 +0000 Subject: [PATCH 26/66] Updated project file to have correct build options --- .../Pref360Control.xcodeproj/colin.mode1 | 1461 ----------------- .../Pref360Control.xcodeproj/colin.pbxuser | 304 ---- .../Pref360Control.xcodeproj/project.pbxproj | 18 +- 3 files changed, 14 insertions(+), 1769 deletions(-) delete mode 100644 Pref360Control/Pref360Control.xcodeproj/colin.mode1 delete mode 100644 Pref360Control/Pref360Control.xcodeproj/colin.pbxuser diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 b/Pref360Control/Pref360Control.xcodeproj/colin.mode1 deleted file mode 100644 index 4042cb9e..00000000 --- a/Pref360Control/Pref360Control.xcodeproj/colin.mode1 +++ /dev/null @@ -1,1461 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXRunSessionModule - Name - Run Log - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1 - FavBarConfig - - PBXProjectModuleGUID - 3BBEAB4A096B786700F2E37B - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1 - MajorVersion - 31 - MinorVersion - 1 - Name - Default - Notifications - - OpenEditors - - - Content - - PBXProjectModuleGUID - 3B4030190BDA964700D98BAE - PBXProjectModuleLabel - Pref360ControlPref.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B40301A0BDA964700D98BAE - PBXProjectModuleLabel - Pref360ControlPref.m - _historyCapacity - 0 - bookmark - 3BE67E3B0C9F380500A68607 - history - - 3B1C2F8C0C9E057F00D37DB5 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 221 179 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B216D690C0E0319000BE7F3 - PBXProjectModuleLabel - Pref360ControlPref.h - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B216D6A0C0E0319000BE7F3 - PBXProjectModuleLabel - Pref360ControlPref.h - _historyCapacity - 0 - bookmark - 3BE67E3C0C9F380500A68607 - history - - 3B1C2F8E0C9E057F00D37DB5 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 138 152 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B216D660C0E0319000BE7F3 - PBXProjectModuleLabel - DeviceItem.m - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B216D670C0E0319000BE7F3 - PBXProjectModuleLabel - DeviceItem.m - _historyCapacity - 0 - bookmark - 3BE67E3D0C9F380500A68607 - history - - 3B1C2F8F0C9E057F00D37DB5 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 68 226 900 758 0 0 1280 1002 - - - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-target-popup - active-buildstyle-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-runOrDebug - com.apple.ide.PBXToolbarStopButton - get-info - toggle-editor - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 089C166AFE841209C02AAC07 - 08FB77AFFE84173DC02AAC07 - 32DBCFA10370C40200C91783 - 089C167CFE841241C02AAC07 - 089C1671FE841209C02AAC07 - 1058C7ACFEA557BF11CA2CBB - 1058C7AEFEA557BF11CA2CBB - 19C28FB8FE9D52D311CA2CBB - 1C37FBAC04509CD000000102 - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 14 - 1 - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 338}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 356}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 564 128 690 397 0 0 1280 1002 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {482, 0}} - RubberWindowFrame - 564 128 690 397 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {482, 351}} - RubberWindowFrame - 564 128 690 397 0 0 1280 1002 - - Module - XCDetailModule - Proportion - 351pt - - - Proportion - 482pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3BE67E390C9F380500A68607 - 1CE0B1FE06471DED0097A5F4 - 3BE67E3A0C9F380500A68607 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.short - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - 3B216D660C0E0319000BE7F3 - 3B216D690C0E0319000BE7F3 - 3B4030190BDA964700D98BAE - /Users/colin/Projects2/OSX/360 Controller/Pref360Control/Pref360Control.xcodeproj - - WindowString - 564 128 690 397 0 0 1280 1002 - WindowTools - - - FirstTimeWindowDisplayed - - Identifier - windowTool.build - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {500, 218}} - RubberWindowFrame - 105 411 500 500 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - ContentConfiguration - - PBXBuildLogShowsTranscriptDefaultKey - {{0, 5}, {500, 231}} - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - XCBuildResultsTrigger_Collapse - 1021 - XCBuildResultsTrigger_Open - 1011 - - GeometryConfiguration - - Frame - {{0, 223}, {500, 236}} - RubberWindowFrame - 105 411 500 500 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 459pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - - TableOfContents - - 3BBEAB15096B38D200F2E37B - 3B40301C0BDA964700D98BAE - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.build - WindowString - 105 411 500 500 0 0 1280 1002 - WindowToolGUID - 3BBEAB15096B38D200F2E37B - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - windowTool.debugger - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {305, 162}} - {{305, 0}, {389, 162}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 162}} - {{0, 162}, {694, 219}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 381}} - RubberWindowFrame - 348 444 694 422 0 0 1280 1002 - - Module - PBXDebugSessionModule - Proportion - 381pt - - - Proportion - 381pt - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - - TableOfContents - - 1CD10A99069EF8BA00B06720 - 3BBB33F9097B301C00E8A35A - 1C162984064C10D400B95A72 - 3BBB33FA097B301C00E8A35A - 3BBB33FB097B301C00E8A35A - 3BBB33FC097B301C00E8A35A - 3BBB33FD097B301C00E8A35A - 3BBB33FE097B301C00E8A35A - 3BBB33FF097B301C00E8A35A - - ToolbarConfiguration - xcode.toolbar.config.debug - WindowString - 348 444 694 422 0 0 1280 1002 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - - - - FirstTimeWindowDisplayed - - Identifier - windowTool.find - IsVertical - - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {781, 212}} - RubberWindowFrame - 126 418 781 470 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 212pt - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{0, 217}, {781, 212}} - RubberWindowFrame - 126 418 781 470 0 0 1280 1002 - - Module - PBXProjectFindModule - Proportion - 212pt - - - Proportion - 429pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - - TableOfContents - - 1C530D57069F1CE1000CFCEE - 3BCC405B0BDA6E0B00B1619B - 3BCC405C0BDA6E0B00B1619B - 1CDD528C0622207200134675 - 1CD0528E0623707200166675 - - WindowString - 126 418 781 470 0 0 1280 1002 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 650 41 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 358pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - WindowString - 650 41 440 400 0 0 1280 1002 - - - Identifier - windowTool.run - Layout - - - Dock - - - ContentConfiguration - - LauncherConfigVersion - 3 - PBXProjectModuleGUID - 1CD0528B0623707200166675 - PBXProjectModuleLabel - Run - Runner - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {493, 167}} - {{0, 176}, {493, 267}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {405, 443}} - {{414, 0}, {514, 443}} - - - - - GeometryConfiguration - - Frame - {{0, 0}, {460, 159}} - RubberWindowFrame - 316 696 459 200 0 0 1280 1002 - - Module - PBXRunSessionModule - Proportion - 159pt - - - Proportion - 159pt - - - Name - Run Log - ServiceClasses - - PBXRunSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C0AD2B3069F1EA900FABCE6 - 1C0AD2B4069F1EA900FABCE6 - 1CD0528B0623707200166675 - 1C0AD2B5069F1EA900FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.run - WindowString - 316 696 459 200 0 0 1280 1002 - WindowToolGUID - 1C0AD2B3069F1EA900FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - - Layout - - - Dock - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 2 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpoints - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - - ToolbarConfiguration - xcode.toolbar.config.debugAnimator - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - - diff --git a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser b/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser deleted file mode 100644 index c20af645..00000000 --- a/Pref360Control/Pref360Control.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,304 +0,0 @@ -// !$*UTF8*$! -{ - 089C1669FE841209C02AAC07 /* Project object */ = { - activeBuildConfigurationName = Deployment; - activeTarget = 8D202CE80486D31800D8A456 /* Pref360Control */; - addToTargets = ( - 8D202CE80486D31800D8A456 /* Pref360Control */, - ); - breakpoints = ( - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:417 */, - ); - codeSenseManager = 3BBEAAF6096B030C00F2E37B /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 243, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 200, - 63, - 20, - 48.1626, - 43, - 43, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXTargetDataSource_PrimaryAttribute, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 280461366; - PBXWorkspaceStateSaveDate = 280461366; - }; - perUserProjectItems = { - 3B36DCF610B7831F00FFD769 /* PBXTextBookmark */ = 3B36DCF610B7831F00FFD769 /* PBXTextBookmark */; - 3B36DCF710B7831F00FFD769 /* PlistBookmark */ = 3B36DCF710B7831F00FFD769 /* PlistBookmark */; - 3B36DCF810B7831F00FFD769 /* PlistBookmark */ = 3B36DCF810B7831F00FFD769 /* PlistBookmark */; - 3B90DB351059D9B600CC39D4 /* PBXTextBookmark */ = 3B90DB351059D9B600CC39D4 /* PBXTextBookmark */; - }; - sourceControlManager = 3BBEAAF5096B030C00F2E37B /* Source Control */; - userBuildSettings = { - }; - }; - 089C167EFE841241C02AAC07 /* English */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {481, 78}}"; - sepNavSelRange = "{129, 0}"; - sepNavVisRange = "{0, 193}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{156, 129}, {900, 814}}"; - }; - }; - 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; - 3B36DCF610B7831F00FFD769 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - name = "Pref360ControlPref.m: 91"; - rLen = 0; - rLoc = 2855; - rType = 0; - vrLen = 430; - vrLoc = 2698; - }; - 3B36DCF710B7831F00FFD769 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 8D202CF70486D31800D8A456 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/Projects/360 Controller/Pref360Control/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; - 3B36DCF810B7831F00FFD769 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 8D202CF70486D31800D8A456 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/Projects/360 Controller/Pref360Control/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; - 3B4499F90AC8B9880013FDC6 /* Pref360ControlPref.m:417 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - countType = 0; - delayBeforeContinue = 0; - fileReference = F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */; - functionName = "-startDevice"; - hitCount = 0; - ignoreCount = 0; - lineNumber = 417; - location = Pref360Control; - modificationTime = 216269836.523849; - originalNumberOfMultipleMatches = 1; - state = 0; - }; - 3B86987E0CE2A22100283CEC /* ControlPrefs.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {876, 938}}"; - sepNavSelRange = "{1656, 0}"; - sepNavVisRange = "{703, 1371}"; - sepNavWindowFrame = "{{84, 125}, {827, 653}}"; - }; - }; - 3B90DB351059D9B600CC39D4 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 089C167EFE841241C02AAC07 /* English */; - name = "InfoPlist.strings: 4"; - rLen = 0; - rLoc = 129; - rType = 0; - vrLen = 193; - vrLoc = 0; - }; - 3BBEAAF5096B030C00F2E37B /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3BBEAAF6096B030C00F2E37B /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{1265, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{196, 146}, {900, 814}}"; - }; - }; - 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {866, 1876}}"; - sepNavSelRange = "{3005, 0}"; - sepNavVisRect = "{{0, 1184}, {861, 685}}"; - sepNavWindowFrame = "{{84, 120}, {900, 814}}"; - }; - }; - 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1344}}"; - sepNavSelRange = "{1909, 0}"; - sepNavVisRect = "{{0, 1}, {861, 685}}"; - sepNavWindowFrame = "{{61, 141}, {900, 814}}"; - }; - }; - 3BBEAB04096B2C5200F2E37B /* MyCentreButtons.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{162, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{84, 120}, {900, 814}}"; - }; - }; - 3BBEAB07096B2C5600F2E37B /* MyDigitalStick.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1862}}"; - sepNavSelRange = "{151, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{107, 99}, {900, 814}}"; - }; - }; - 3BBEAB08096B2C5600F2E37B /* MyDigitalStick.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{161, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{130, 78}, {900, 814}}"; - }; - }; - 3BBEAB0B096B2C5B00F2E37B /* MyMainButtons.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{148, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{123, 104}, {900, 814}}"; - }; - }; - 3BBEAB0C096B2C5B00F2E37B /* MyMainButtons.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1680}}"; - sepNavSelRange = "{151, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; - 3BBEAB0F096B2C6000F2E37B /* MyShoulderButton.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 685}}"; - sepNavSelRange = "{147, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{130, 78}, {900, 814}}"; - }; - }; - 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 840}}"; - sepNavSelRange = "{153, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{107, 99}, {900, 814}}"; - }; - }; - 3BC41F30096C85CB00664A42 /* DeviceItem.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; - sepNavSelRange = "{1085, 40}"; - sepNavVisRange = "{0, 1442}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{292, 106}, {900, 814}}"; - }; - }; - 3BC41F31096C85CB00664A42 /* DeviceItem.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 1036}}"; - sepNavSelRange = "{1952, 31}"; - sepNavVisRange = "{930, 1266}"; - sepNavVisRect = "{{0, 336}, {861, 685}}"; - sepNavWindowFrame = "{{68, 170}, {900, 814}}"; - }; - }; - 8D202CE80486D31800D8A456 /* Pref360Control */ = { - activeExec = 0; - }; - 8D202CF70486D31800D8A456 /* Info.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 686}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 927}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{319, 93}, {900, 814}}"; - }; - }; - F506C03C013D9D7901CA16C8 /* Pref360ControlPref.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {841, 1190}}"; - sepNavSelRange = "{2479, 38}"; - sepNavVisRange = "{544, 1524}"; - sepNavVisRect = "{{0, 238}, {861, 685}}"; - sepNavWindowFrame = "{{138, 61}, {900, 717}}"; - }; - }; - F506C03D013D9D7901CA16C8 /* Pref360ControlPref.m */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {537, 9165}}"; - sepNavSelRange = "{2855, 0}"; - sepNavVisRange = "{2698, 430}"; - sepNavVisRect = "{{0, 7211}, {861, 685}}"; - sepNavWindowFrame = "{{221, 61}, {900, 717}}"; - }; - }; - F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */ = { - uiCtxt = { - sepNavWindowFrame = "{{130, 78}, {900, 814}}"; - }; - }; -} diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index c73e45cd..f90d15a7 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 44; objects = { /* Begin PBXBuildFile section */ @@ -234,7 +234,14 @@ isa = PBXProject; buildConfigurationList = 3BBDC6A9097946B50023AAD8 /* Build configuration list for PBXProject "Pref360Control" */; compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 089C166AFE841209C02AAC07 /* Pref360Control */; projectDirPath = ""; projectRoot = ""; @@ -318,6 +325,7 @@ FRAMEWORK_SEARCH_PATHS = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; + "GCC_ENABLE_OBJC_GC[arch=x86_64]" = supported; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -355,6 +363,7 @@ COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_ENABLE_FIX_AND_CONTINUE = NO; + "GCC_ENABLE_OBJC_GC[arch=x86_64]" = supported; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -389,6 +398,7 @@ isa = XCBuildConfiguration; buildSettings = { FRAMEWORK_SEARCH_PATHS = ""; + "GCC_ENABLE_OBJC_GC[arch=x86_64]" = supported; GCC_ENABLE_TRIGRAPHS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -422,7 +432,7 @@ isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk"; }; name = Development; }; @@ -432,7 +442,7 @@ ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; MACOSX_DEPLOYMENT_TARGET = 10.5; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; }; name = Deployment; }; @@ -440,7 +450,7 @@ isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk"; }; name = Default; }; From 5a66a532f274c5c4aa3eada945a1faeaebf4fdb3 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 02:08:30 +0000 Subject: [PATCH 27/66] Fix version number in prefpane --- .../Pref360ControlPref.nib/designable.nib | 153 ++++++++++++++++-- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 17413 -> 17394 bytes 2 files changed, 142 insertions(+), 11 deletions(-) diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index 146aba75..b4cb77a4 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -2,13 +2,13 @@ 1050 - 10A432 - 732 - 1038 - 437.00 + 10J869 + 823 + 1038.35 + 461.00 com.apple.InterfaceBuilder.CocoaPlugin - 732 + 823 @@ -16,7 +16,10 @@ com.apple.InterfaceBuilder.CocoaPlugin - + + PluginDependencyRecalculationVersion + + NSPreferencePane @@ -419,13 +422,13 @@ 256 - {{13, 177}, {129, 13}} + {{13, 173}, {129, 17}} YES 67239424 272629760 - Version 0.08 + Version 0.10 LucidaGrande 10 @@ -445,7 +448,7 @@ 67239424 272629760 - (C) 2006-09 Colin Munro + (C) 2006-11 Colin Munro @@ -1236,9 +1239,9 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin - {{0, 441}, {595, 304}} + {{326, 482}, {595, 304}} com.apple.InterfaceBuilder.CocoaPlugin - {{0, 441}, {595, 304}} + {{326, 482}, {595, 304}} {595, 10} @@ -1392,6 +1395,16 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ id id + + + changeSetting: + id + + + selectDevice: + id + + NSImageView MyCentreButtons @@ -1417,6 +1430,100 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ NSButton NSButton + + + batteryLevel + NSImageView + + + centreButtons + MyCentreButtons + + + deviceList + NSPopUpButton + + + digiStick + MyDigitalStick + + + leftLinked + NSButton + + + leftShoulder + MyShoulderButton + + + leftStick + MyAnalogStick + + + leftStickDeadzone + NSSlider + + + leftStickInvertX + NSButton + + + leftStickInvertY + NSButton + + + leftTrigger + NSProgressIndicator + + + leftTriggerDeadzone + NSSlider + + + rightButtons + MyMainButtons + + + rightLinked + NSButton + + + rightShoulder + MyShoulderButton + + + rightStick + MyAnalogStick + + + rightStickDeadzone + NSSlider + + + rightStickInvertX + NSButton + + + rightStickInvertY + NSButton + + + rightTrigger + NSProgressIndicator + + + rightTriggerDeadzone + NSSlider + + + rumbleEnable + NSButton + + + rumbleTest + NSButton + + IBUserSource @@ -1832,6 +1939,24 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ NSView NSWindow + + + _firstKeyView + NSView + + + _initialKeyView + NSView + + + _lastKeyView + NSView + + + _window + NSWindow + + IBFrameworkSource PreferencePanes.framework/Headers/NSPreferencePane.h @@ -1940,6 +2065,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 0 + IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx @@ -1951,5 +2077,10 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES ../Pref360Control.xcodeproj 3 + + {9, 8} + {7, 2} + {32, 24} + diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index 3a645a19c3cafec784cdaa6df28e993e365deb3a..91875bd4fce62b2dcc5204398da5e6f530e06311 100644 GIT binary patch delta 5318 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 delta 5370 zcmai033wCL+MXnnrCCpw$u?Ogd(uhTrZXo65fKW=A_!F3DP0I9bfryM3fxQ)5Jj;N zL_iRf-3q0&WtB~#AYLv4B5?7#fnH<>6_DljKP~$F-v9p3|0mCP=9@D!=bZO@&->2Y zd4)G;9*df}v&=la!Z_K{QQ!K+z;HU7@_!*&0*dy7E9}{mDZWT6(#K{Ie#pk`8 zJi%v^LcsuWy=aT5QPkWtOfZp`I*$`^_iA|zC*=6GyjN>^nYBDv%X{ZRIDh5BdMXHwbdEjRG87gKZG>!&>-H^K-BduuWJ4*2Hhc zY6MoSQLql%!PjHW*gkA6|B(R0iUbisrQi&x0JJSW7?smVd;3{B!_dqjTxBJy`rKd zR+t};m6x5u7>wl&!M}K)Hw4T2qX=g^ih#9X7qJ>_ZAV*!vTZ0@Fbb``hW`-dHT-{} zwgKDPo_GA4u_FE>lx;_`1;rW^EgjE17GMc%2Rdy+QG=?}*l__(fB@PNDA>_zP*#Ov z7NTe=I?hF*K_$^3@TDDj`*{MvosW+7DDqGcC}wp$Q-?~i3!P0zp+Uu|=;%k|BWQ_s zf`y89Y%KpVqL=;u2*x(G6O1TrC-`ZEw-pg={SSiAv{Q`s);d%b#4x{&-@uQdsy$)2 z9&y~k@WlUv;z1o0H+N86j8~2jLuYcc}c8{8cz zs9!xGT2@Wi^lDnJf>QJAnbysGhN+SUkUk%8ADci^l?e_Jn9* zG1a4dDtf+ba+De-kC&HKCHIHYsWF4fE2x($e(xLGaZ~rQ{F3sbC$lEGaL_fXW6JIY<<;>H7}L;P zW%0`BA0v$g#^kMZy&)7H3p8k!oC)RCCGAUkGE;JRFqEtd;mH$0B6%~N;ExC-zfHHM zJRd77j*deJk~7oEc!~P zIOXpdog6ESJ|#uZng8tq8l(#8kjh9yHui1CYGU}H%INq(`DM{jf2tRPr!)Ao15{>4 zMkMs_OeTdHYaOF|$4a8UD(ZzPWzouZ3a3$jE)QC}ATurbR!D2q{U`ADdiavJL%QUv zX+$zRXh>cP66qrl;y*Tn|AqL3Xl46Osrp|wNEr3mlPiMOL@4~bg$NtC2dn?cxBV$^ zY2TlNvEf(_GKg(hA8aHNRUVSr4rC^yu;-D`9%COOhd|=N`XcWwLQ-0Td^8sujErXh z^41O52&_N80ULyzw;whJIdHw;4F4f=?8I|Og~PC+SR-m^O(e%( zkwAALBf7<%LgrG3d|J~kJMOPY)KVlu0vXTG3GOT8T3;Yz?$2H4K1W9WcVydt|3VJWvUyf;Yf2 zup1l#E#PCY9xMlk!3wYrl!GX!0GmJz$ia3{05*bp@B!EW7J?=)5iA9D+O{XZ$KXv+ z0_KCaK`AH$pMdwkcrXjJg4aMTs0M3519%!$pC2A3E z&mEZ4x5oo<($MtyF|N_10(jt2*Fsv z2ZBR_vw|N4_izC&#l1L-cgOqSL+~+pF+LN26<>!p;Ro?Ucq@Js{|rCg@hx)(KZjqy z|ABvte~(|nf5d;nuj1G7yF$JY7m9=?p;H(VMufeD{e(Hf@xpRpjc|r=rf{w>DO@gG zE!-rm7hV=#5nfB)h`@wX#E80x`ih2#UK9-#4Hu0RB}J>zhtN*ZVbKZEWznx!{w%#Ky(hgdeIR`#Q^<5OQs$O< zWqw&$#>%?O`pE{%hRPB}vY4z`7MD$yO_6c3S+bX9TV=as$7N?^-^eb@ewOp(O1WNc zlw0L?xkK)fd*nWOP@X2wkav~$mG_qqkiQ^*NnRkIB(IWJ%csZ_@`du{^3C#X^8NCI z@=xT4<>%zrvS zP}C`QDfTE1C_YvkQnV_LDvl{mC{8L)E6yvfEAA?VO1V;}v?|@ofHG6rTbZLQP?jra zC|_2-u3WC%pxmn5tvskauDqeVsl2WHS^2B-zVdIh0gwPSFaaB200dc} zGw1>af>B@$$U}Oa4rU{jE=5AzjD&X{`~dz5egap)b#M#Z0l$E|YNgtu_NX(}UDTu1 zx#~Q1fqI;}NF7V4i`Av-IqJpg7WEGGF7+PuUiAU>$Ld4sR`u8FHVscB&2M$Ue>&&*{<2C*{%6VvrltS^NHrL=7{DS%^j^) zOK1&Rla|!lw3ODVb!)q73$&%$8trWDTTV zcZ?5B5))yvm^`L5Q)g2TQ=w^`X}oEIX`-prRGu(RGF6#gGwnAWG_{&OGaWabFr74= zHk~n@HJvwIFnwx8 z1!OTz@*(+{Y_sqz0*lZh zwzw_Ol4a>^>0#+*8E+}F#4N>@QcH!U(h|2!w!CTCYH6|TwtQsSXE|W`*mB6yYB_DW zWckr@*>XE!`Nc|D^;V*@oFh*hbmn zwzq7{ZL4hW+1A+B**4fV+3IaaY?p06*%DW6*KId#cWl4d?%M9#fjw-G*t^)f+Pm4i z+q3Px?9bWH*>BqK+uJA;MNwU;9#l`NH`RygM?Fssp^B&&RZNvq<TyK;&eK*o&B9T&QZ?s&SGbUv(g!NRy$`oXFKOQ=Q$TTmpj)xH#?i1d!3&; zzi|HQyz9L0eBgZKY;*Bk0+-Nbbq#S1bB%C~a*cD9x+c4(xTd;lTray8xYoP2x=y&x zxvsiyx$e7p?u5~8cc;0#xx2fw-M!q;xnFcg-9_%0yVzaop6-6#y}(`PUgTcvUgh5E z-sWz0Z+Gu>f9yW(KI1;?KJUKZ{?UEU{hRxt`?0&tBllQ6c8|m3@_0Pyo@YHhJUuQkr`j{mv&{33XQgMA=RHre=WxPv#Pg}=GtY6)dCwKkHO~#tEzccK zn-_RBUY%F(HG17%=*{wW_IB}h_4fCU_U3x?yanEI-f}PJo#mbFo$HW9`j!C{=@r?_dD-J?>(QyC-upFN+0l9eQCZ7U#5@sMSMMd1AI|miEp}Z*z3Lp zzB=C`-(ueyU$bw!Z>Mj!?<3!F-wEGI-)Y|&-;ch_zAL_Kz8k(aKhH1l3;klh(Qo!! z{5C)35BnKE^k?}y`}_Hy_Yd?B@(=On`zQKKl54w-u!jQafpCBcz(7`@bD&G0XP|eW zPhe_1cSjB z6Ty-o7hD-^3?2<$2>ue{hn%5)p`oGKp(UZiq0^xs($s0zv~b$((2OIrR_`m zEbUU-<8)hkMta}$y!4srOVXP%hGdM&D9T8NBjN1uu<)$#lJMs6+3=0bluT=8I5Q`6 zbY^bm*vtu;6Ell5}qxmyPn;| ze#kbk+t?O%C%cE;#~x%4u}9cr>~Z#U_B8t?d!GG@{f7OX{eivAUS)5vx7lCVdu-wX z`xs(S07Wnb%ApEsAOVe#gf{4aZs>!lFa$Fo10%3Ad>VFxJzy``2lj^p;b8b890o_i zF)$Anz;SRqoB$`n5?BT+U?q&h$#5#HfivJ=AO~l`*>EnL2VaA)!v(MoE`p2U61WsD zPrw!MUAP) Date: Sun, 8 May 2011 02:16:58 +0000 Subject: [PATCH 28/66] Fiddle user files, make code neater --- .../360Controller.xcodeproj/colin.mode1 | 1408 ----------------- .../360Controller.xcodeproj/colin.pbxuser | 252 --- .../360Controller.xcodeproj/project.pbxproj | 12 + 360Controller/_60Controller.cpp | 8 +- 360Controller/_60Controller.h | 6 +- 5 files changed, 18 insertions(+), 1668 deletions(-) delete mode 100644 360Controller/360Controller.xcodeproj/colin.mode1 delete mode 100644 360Controller/360Controller.xcodeproj/colin.pbxuser diff --git a/360Controller/360Controller.xcodeproj/colin.mode1 b/360Controller/360Controller.xcodeproj/colin.mode1 deleted file mode 100644 index 6f70e2cd..00000000 --- a/360Controller/360Controller.xcodeproj/colin.mode1 +++ /dev/null @@ -1,1408 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXRunSessionModule - Name - Run Log - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1 - FavBarConfig - - PBXProjectModuleGUID - 3BCE45D40963972A00B69EDF - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1 - MajorVersion - 31 - MinorVersion - 1 - Name - Default - Notifications - - OpenEditors - - - Content - - PBXProjectModuleGUID - 3BE5273E0BDC379900984E1F - PBXProjectModuleLabel - _60Controller.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BE5273F0BDC379900984E1F - PBXProjectModuleLabel - _60Controller.cpp - _historyCapacity - 0 - bookmark - 3BE67E310C9F37E300A68607 - history - - 3BCEBDFE0C67306D00666DBF - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - -9 244 900 758 0 0 1280 1002 - - - - Content - - PBXProjectModuleGUID - 3B216CD50C090EAF000BE7F3 - PBXProjectModuleLabel - Info.plist - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3B216CD60C090EAF000BE7F3 - PBXProjectModuleLabel - Info.plist - _historyCapacity - 0 - bookmark - 3BE67E320C9F37E300A68607 - history - - 3BCEBDFD0C67306D00666DBF - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {900, 717}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 376 119 900 758 0 0 1280 1002 - - - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-target-popup - active-buildstyle-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-runOrDebug - com.apple.ide.PBXToolbarStopButton - get-info - toggle-editor - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 089C166AFE841209C02AAC07 - 247142CAFF3F8F9811CA285C - 3B2EF19A0965A03E007BFB7B - 089C167CFE841241C02AAC07 - 3B2EF52A0965A0AE007BFB7B - 8DA8362C06AD9B9200E5AC22 - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 367}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 385}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 47 137 713 426 0 0 1280 1002 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {505, 0}} - RubberWindowFrame - 47 137 713 426 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {505, 380}} - RubberWindowFrame - 47 137 713 426 0 0 1280 1002 - - Module - XCDetailModule - Proportion - 380pt - - - Proportion - 505pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3BE67E2F0C9F37E300A68607 - 1CE0B1FE06471DED0097A5F4 - 3BE67E300C9F37E300A68607 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.short - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - 3B216CD50C090EAF000BE7F3 - 3BE5273E0BDC379900984E1F - /Users/colin/Projects2/OSX/360 Controller/360Controller/360Controller.xcodeproj - - WindowString - 47 137 713 426 0 0 1280 1002 - WindowTools - - - FirstTimeWindowDisplayed - - Identifier - windowTool.build - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {1024, 323}} - RubberWindowFrame - 101 235 1024 583 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 323pt - - - ContentConfiguration - - PBXBuildLogShowsTranscriptDefaultKey - {{0, 5}, {1024, 209}} - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - XCBuildResultsTrigger_Collapse - 1021 - XCBuildResultsTrigger_Open - 1011 - - GeometryConfiguration - - Frame - {{0, 328}, {1024, 214}} - RubberWindowFrame - 101 235 1024 583 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 214pt - - - Proportion - 542pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - - TableOfContents - - 3BCE45C10963706A00B69EDF - 3BCC40930BDA918C00B1619B - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.build - WindowString - 101 235 1024 583 0 0 1280 1002 - WindowToolGUID - 3BCE45C10963706A00B69EDF - WindowToolIsVisible - - - - Identifier - windowTool.debugger - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {317, 164}} - {{317, 0}, {377, 164}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 164}} - {{0, 164}, {694, 216}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 380}} - RubberWindowFrame - 321 238 694 422 0 0 1440 878 - - Module - PBXDebugSessionModule - Proportion - 100% - - - Proportion - 100% - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CD10A99069EF8BA00B06720 - 1C0AD2AB069F1E9B00FABCE6 - 1C162984064C10D400B95A72 - 1C0AD2AC069F1E9B00FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.debug - WindowString - 321 238 694 422 0 0 1440 878 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - 0 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.find - IsVertical - - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {781, 212}} - RubberWindowFrame - 126 418 781 470 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 212pt - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{0, 217}, {781, 212}} - RubberWindowFrame - 126 418 781 470 0 0 1280 1002 - - Module - PBXProjectFindModule - Proportion - 212pt - - - Proportion - 429pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - - TableOfContents - - 1C530D57069F1CE1000CFCEE - 3BCC40440BDA6D9500B1619B - 3BCC40450BDA6D9500B1619B - 1CDD528C0622207200134675 - 1CD0528E0623707200166675 - - WindowString - 126 418 781 470 0 0 1280 1002 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 650 41 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 358pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - WindowString - 650 41 440 400 0 0 1280 1002 - - - Identifier - windowTool.run - Layout - - - Dock - - - ContentConfiguration - - LauncherConfigVersion - 3 - PBXProjectModuleGUID - 1CD0528B0623707200166675 - PBXProjectModuleLabel - Run - Runner - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {493, 167}} - {{0, 176}, {493, 267}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {405, 443}} - {{414, 0}, {514, 443}} - - - - - GeometryConfiguration - - Frame - {{0, 0}, {460, 159}} - RubberWindowFrame - 316 696 459 200 0 0 1280 1002 - - Module - PBXRunSessionModule - Proportion - 159pt - - - Proportion - 159pt - - - Name - Run Log - ServiceClasses - - PBXRunSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C0AD2B3069F1EA900FABCE6 - 1C0AD2B4069F1EA900FABCE6 - 1CD0528B0623707200166675 - 1C0AD2B5069F1EA900FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.run - WindowString - 316 696 459 200 0 0 1280 1002 - WindowToolGUID - 1C0AD2B3069F1EA900FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - - Layout - - - Dock - - - BecomeActive - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 2 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpoints - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - - ToolbarConfiguration - xcode.toolbar.config.debugAnimator - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - - diff --git a/360Controller/360Controller.xcodeproj/colin.pbxuser b/360Controller/360Controller.xcodeproj/colin.pbxuser deleted file mode 100644 index 9917fe37..00000000 --- a/360Controller/360Controller.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,252 +0,0 @@ -// !$*UTF8*$! -{ - 089C1669FE841209C02AAC07 /* Project object */ = { - activeBuildConfigurationName = Deployment; - activeTarget = 32D94FC30562CBF700B6AF17 /* 360Controller */; - addToTargets = ( - 32D94FC30562CBF700B6AF17 /* 360Controller */, - ); - breakpoints = ( - ); - codeSenseManager = 3BCE45B209633D9A00B69EDF /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 300, - 156, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXErrorsWarningsDataSource_TypeID, - PBXErrorsWarningsDataSource_MessageID, - PBXErrorsWarningsDataSource_LocationID, - ); - }; - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 266, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; - PBXFileTableDataSourceColumnWidthsKey = ( - 16, - 200, - 50, - 206, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXSymbolsDataSource_SymbolTypeIconID, - PBXSymbolsDataSource_SymbolNameID, - PBXSymbolsDataSource_SymbolTypeID, - PBXSymbolsDataSource_ReferenceNameID, - ); - }; - PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 200, - 86, - 20, - 48, - 43, - 43, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXTargetDataSource_PrimaryAttribute, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 280461271; - PBXWorkspaceStateSaveDate = 280461271; - }; - perUserProjectItems = { - 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */ = 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */; - 3B06F7CC1060663900CACC16 /* PBXTextBookmark */ = 3B06F7CC1060663900CACC16 /* PBXTextBookmark */; - 3B06F83910615C8B00CACC16 /* PBXTextBookmark */ = 3B06F83910615C8B00CACC16 /* PBXTextBookmark */; - 3B36DCD210B781B500FFD769 /* PlistBookmark */ = 3B36DCD210B781B500FFD769 /* PlistBookmark */; - 3B36DCD310B781B500FFD769 /* PBXTextBookmark */ = 3B36DCD310B781B500FFD769 /* PBXTextBookmark */; - 3B36DCD410B781B500FFD769 /* PBXBookmark */ = 3B36DCD410B781B500FFD769 /* PBXBookmark */; - 3B36DCD510B781B500FFD769 /* PBXTextBookmark */ = 3B36DCD510B781B500FFD769 /* PBXTextBookmark */; - }; - sourceControlManager = 3BCE45B109633D9A00B69EDF /* Source Control */; - userBuildSettings = { - }; - }; - 089C167EFE841241C02AAC07 /* English */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {444, 226}}"; - sepNavSelRange = "{125, 0}"; - sepNavVisRange = "{0, 129}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{130, 78}, {900, 814}}"; - }; - }; - 1A224C3EFF42367911CA2CB7 /* _60Controller.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {775, 1196}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{2980, 619}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{389, 134}, {900, 814}}"; - }; - }; - 1A224C3FFF42367911CA2CB7 /* _60Controller.cpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {896, 7560}}"; - sepNavSelRange = "{8336, 22}"; - sepNavVisRect = "{{0, 3575}, {861, 685}}"; - sepNavWindowFrame = "{{-9, 188}, {900, 814}}"; - }; - }; - 32D94FC30562CBF700B6AF17 /* 360Controller */ = { - activeExec = 0; - }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {726, 2912}}"; - sepNavSelRange = "{6083, 64}"; - sepNavVisRange = "{6026, 386}"; - sepNavVisRect = "{{0, 2311}, {861, 685}}"; - sepNavWindowFrame = "{{376, 63}, {900, 814}}"; - }; - }; - 3B06F7AB10605DE300CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 089C167EFE841241C02AAC07 /* English */; - name = "InfoPlist.strings: 4"; - rLen = 0; - rLoc = 125; - rType = 0; - vrLen = 129; - vrLoc = 0; - }; - 3B06F7CC1060663900CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3BCE45C909638EBC00B69EDF /* ControlStruct.h */; - name = "ControlStruct.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 832; - vrLoc = 92; - }; - 3B06F83910615C8B00CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 1A224C3EFF42367911CA2CB7 /* _60Controller.h */; - name = "_60Controller.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 619; - vrLoc = 2980; - }; - 3B36DCC710B7817E00FFD769 /* ChatPad.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {775, 585}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 278}"; - }; - }; - 3B36DCC810B7817E00FFD769 /* chatpadhid.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {488, 481}}"; - sepNavSelRange = "{305, 0}"; - sepNavVisRange = "{0, 784}"; - }; - }; - 3B36DCD210B781B500FFD769 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/Projects/360 Controller/360Controller/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; - 3B36DCD310B781B500FFD769 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B36DCC710B7817E00FFD769 /* ChatPad.h */; - name = "ChatPad.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 278; - vrLoc = 0; - }; - 3B36DCD410B781B500FFD769 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = 3B36DCC810B7817E00FFD769 /* chatpadhid.h */; - }; - 3B36DCD510B781B500FFD769 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3B36DCC810B7817E00FFD769 /* chatpadhid.h */; - name = "chatpadhid.h: 8"; - rLen = 0; - rLoc = 305; - rType = 0; - vrLen = 784; - vrLoc = 0; - }; - 3BB5E09B09641F8200F83598 /* xbox360hid.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {861, 1750}}"; - sepNavSelRange = "{926, 0}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{15, 183}, {900, 814}}"; - }; - }; - 3BCE45B109633D9A00B69EDF /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3BCE45B209633D9A00B69EDF /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 3BCE45C909638EBC00B69EDF /* ControlStruct.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {726, 1508}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{92, 832}"; - sepNavVisRect = "{{0, 0}, {861, 685}}"; - sepNavWindowFrame = "{{38, 162}, {900, 814}}"; - }; - }; -} diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 2ac52f22..f9716423 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -179,6 +179,12 @@ buildConfigurationList = 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 089C166AFE841209C02AAC07 /* 360Controller */; projectDirPath = ""; projectRoot = ""; @@ -277,6 +283,11 @@ 3BBDC684097938A90023AAD8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = ( + ppc, + i386, + x86_64, + ); COPY_PHASE_STRIP = YES; CURRENT_PROJECT_VERSION = 1.0.0d1; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -325,6 +336,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_VERSION = 4.0; MACOSX_DEPLOYMENT_TARGET = 10.2; SDKROOT = macosx10.5; "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index dae5250d..23991f80 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -241,7 +241,7 @@ bool Xbox360ControllerClass::init(OSDictionary *propTable) invertRightX=invertRightY=FALSE; deadzoneLeft=deadzoneRight=0; relativeLeft=relativeRight=FALSE; - readSettings(); +// readSettings(); // Done return res; } @@ -453,7 +453,7 @@ bool Xbox360ControllerClass::QueueRead(void) err=inPipe->Read(inBuffer,0,0,inBuffer->getLength(),&complete); if(err==kIOReturnSuccess) return true; else { - IOLog("read - failed to start (0x%.8x\n",err); + IOLog("read - failed to start (0x%.8x)\n",err); return false; } } @@ -473,7 +473,7 @@ bool Xbox360ControllerClass::QueueSerialRead(void) } else { - IOLog("read - failed to start for chatpad (0x%.8x\n",err); + IOLog("read - failed to start for chatpad (0x%.8x)\n",err); return false; } } @@ -779,6 +779,7 @@ void Xbox360ControllerClass::PadDisconnect(void) if (padHandler != NULL) { padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); + padHandler->stop(this); padHandler->detach(this); padHandler->release(); padHandler = NULL; @@ -790,7 +791,6 @@ void Xbox360ControllerClass::PadDisconnect(void) void Xbox360ControllerClass::SerialConnect(void) { SerialDisconnect(); -// serialHandler = new Serial360Device; serialHandler = new ChatPadKeyboardClass; if (serialHandler != NULL) { diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index dd96528e..fdedeab5 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -27,7 +27,6 @@ #include #include -//class Serial360Device; class ControllerClass; class ChatPadKeyboardClass; @@ -89,15 +88,14 @@ class Xbox360ControllerClass : public IOService bool serialToggle, serialHeard, serialActive; int serialResetCount; TIMER_STATE serialTimerState; -// Serial360Device *serialHandler; ChatPadKeyboardClass *serialHandler; - + ControllerClass *padHandler; + // Settings bool invertLeftX,invertLeftY; bool invertRightX,invertRightY; short deadzoneLeft,deadzoneRight; bool relativeLeft,relativeRight; - ControllerClass *padHandler; public: // this is from the IORegistryEntry - no provider yet From 8cb28f24cc81e6c9ee81552cd951481c27454cb9 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 17:46:59 +0000 Subject: [PATCH 29/66] Add the new driver-customising functionality, update various version fields --- .../360Controller.xcodeproj/project.pbxproj | 1 + 360Controller/Info.plist | 8 +- 360Daemon/ControlPrefs.h | 5 + 360Daemon/ControlPrefs.m | 28 +- DriverTool/DriverTool.1 | 79 ++ DriverTool/DriverTool.m | 177 +++++ .../DriverTool.xcodeproj/project.pbxproj | 229 ++++++ .../Feedback360.xcodeproj/project.pbxproj | 7 + .../Install360Controller.packproj | 26 +- Install360Controller/Text/Welcome.rtf | 52 +- Pref360Control/DeviceLister.h | 27 + Pref360Control/DeviceLister.m | 507 +++++++++++++ .../Pref360ControlPref.nib/designable.nib | 678 +++++++++++++++++- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 17394 -> 24309 bytes Pref360Control/Info.plist | 4 +- .../Pref360Control.xcodeproj/project.pbxproj | 22 +- Pref360Control/Pref360ControlPref.h | 7 + Pref360Control/Pref360ControlPref.m | 11 + Readme.rtf | 4 +- Wireless360Controller/Info.plist | 48 +- .../colin.pbxuser | 47 +- .../project.pbxproj | 7 + WirelessGamingReceiver/Info.plist | 78 +- 23 files changed, 1914 insertions(+), 138 deletions(-) create mode 100644 DriverTool/DriverTool.1 create mode 100644 DriverTool/DriverTool.m create mode 100644 DriverTool/DriverTool.xcodeproj/project.pbxproj create mode 100644 Pref360Control/DeviceLister.h create mode 100644 Pref360Control/DeviceLister.m diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index f9716423..1b99abf9 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -178,6 +178,7 @@ isa = PBXProject; buildConfigurationList = 3BBDC686097938A90023AAD8 /* Build configuration list for PBXProject "360Controller" */; compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 939b0b0c..cfcc0a39 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d9 + 1.0.0d10 IOKitPersonalities Controller @@ -210,12 +210,6 @@ IOHIDInterface VendorID 100 - OSBundleLibraries diff --git a/360Daemon/ControlPrefs.h b/360Daemon/ControlPrefs.h index 4f6527f4..744ca952 100644 --- a/360Daemon/ControlPrefs.h +++ b/360Daemon/ControlPrefs.h @@ -12,6 +12,7 @@ #define DOM_CONTROLLERS CFSTR("com.mice.driver.Xbox360Controller.devices") #define D_SHOWONCE @"ShowAlert" +#define D_KNOWNDEV @"KnownDevices" // Daemon's own settings void SetAlertDisabled(int index); @@ -21,6 +22,10 @@ BOOL AlertDisabled(int index); void SetController(NSString *serial, NSDictionary *data); NSDictionary* GetController(NSString *serial); +// Configuration settings +void SetKnownDevices(NSDictionary *devices); +NSDictionary* GetKnownDevices(void); + // Utility functions NSString* GetSerialNumber(io_service_t device); void ConfigController(io_service_t device, NSDictionary *config); diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 53d91998..8df48dbd 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -55,12 +55,34 @@ void SetController(NSString *serial, NSDictionary *data) { CFTypeRef value; - value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("SerialNumber"), kCFAllocatorDefault, kIORegistryIterateRecursively); + value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("USB Serial Number"), kCFAllocatorDefault, kIORegistryIterateRecursively); + if (value == NULL) + value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, CFSTR("SerialNumber"), kCFAllocatorDefault, kIORegistryIterateRecursively); return [((NSString*)value) autorelease]; } void ConfigController(io_service_t device, NSDictionary *config) { - // Ownership? - IORegistryEntrySetCFProperties(device, [config retain]); + IORegistryEntrySetCFProperties(device, config); +} + +void SetKnownDevices(NSDictionary *devices) +{ + // Setting the dictionary should work? + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:devices]; + CFPreferencesSetValue((CFStringRef)D_KNOWNDEV, data, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); +} + +NSDictionary* GetKnownDevices(void) +{ + CFPropertyListRef value; + NSData *data; + + CFPreferencesSynchronize(DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + value = CFPreferencesCopyValue((CFStringRef)D_KNOWNDEV, DOM_CONTROLLERS, kCFPreferencesAnyUser, kCFPreferencesCurrentHost); + data = [(NSData*)value autorelease]; + if (data == nil) + return nil; + return [NSKeyedUnarchiver unarchiveObjectWithData:data]; } diff --git a/DriverTool/DriverTool.1 b/DriverTool/DriverTool.1 new file mode 100644 index 00000000..f5b4c86f --- /dev/null +++ b/DriverTool/DriverTool.1 @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 8/05/2011 \" DATE +.Dt DriverTool 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm DriverTool, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m new file mode 100644 index 00000000..449ba1da --- /dev/null +++ b/DriverTool/DriverTool.m @@ -0,0 +1,177 @@ +#import + +#define DRIVER_NAME @"360Controller.kext" + +static NSDictionary *infoPlistAttributes = nil; + +static NSString* GetDriverDirectory(void) +{ + NSArray *data = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSSystemDomainMask, YES); + return [[data objectAtIndex:0] stringByAppendingPathComponent:@"Extensions"]; +} + +static NSString* GetDriverConfigPath(NSString *driver) +{ + NSString *root = GetDriverDirectory(); + NSString *driverPath = [root stringByAppendingPathComponent:driver]; + NSString *contents = [driverPath stringByAppendingPathComponent:@"Contents"]; + return [contents stringByAppendingPathComponent:@"Info.plist"]; +} + +static id ReadDriverConfig(NSString *driver) +{ + NSString *filename; + NSError *error = nil; + NSData *data; + NSDictionary *config; + + filename = GetDriverConfigPath(driver); + infoPlistAttributes = [[[NSFileManager defaultManager] attributesOfItemAtPath:filename error:&error] retain]; + if (infoPlistAttributes == nil) + { + NSLog(@"Warning: Failed to read attributes of '%@': %@", + filename, error); + } + data = [NSData dataWithContentsOfFile:filename]; + config = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:0 format:NULL errorDescription:NULL]; + return config; +} + +static void WriteDriverConfig(NSString *driver, id config) +{ + NSString *filename; + NSString *errorString; + NSData *data; + + filename = GetDriverConfigPath(driver); + errorString = nil; + data = [NSPropertyListSerialization dataFromPropertyList:config format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorString]; + if (data == nil) + NSLog(@"Error writing config for driver: %@", errorString); + [errorString release]; + if (![data writeToFile:filename atomically:NO]) + NSLog(@"Failed to write file!"); + if (infoPlistAttributes != nil) + { + NSError *error = nil; + if (![[NSFileManager defaultManager] setAttributes:infoPlistAttributes ofItemAtPath:filename error:&error]) + { + NSLog(@"Error setting attributes on '%@': %@", + filename, error); + } + } +} + +static void ScrubDevices(NSMutableDictionary *devices) +{ + NSMutableArray *deviceKeys; + NSArray *keys; + + deviceKeys = [NSMutableArray arrayWithCapacity:10]; + + // Find all the devices in the list + keys = [devices allKeys]; + for (NSString *key in keys) + { + NSDictionary *device = [devices objectForKey:key]; + if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360ControllerClass"] == NSOrderedSame) + [deviceKeys addObject:key]; + } + + // Scrub all found devices + for (NSString *key in deviceKeys) + [devices removeObjectForKey:key]; +} + +static id MakeMutableCopy(id object) +{ + return [(id)CFPropertyListCreateDeepCopy( + kCFAllocatorDefault, + (CFTypeRef)object, + kCFPropertyListMutableContainers) autorelease]; +} + +static void AddDevice(NSMutableDictionary *personalities, NSString *name, int vendor, int product) +{ + NSMutableDictionary *controller; + + controller = [NSMutableDictionary dictionaryWithCapacity:10]; + + // Standard + [controller setObject:@"com.mice.driver.Xbox360Controller" + forKey:@"CFBundleIdentifier"]; + [controller setObject:[NSDictionary dictionaryWithObject:@"360Controller.kext/Contents/PlugIns/Feedback360.plugin" + forKey:@"F4545CE5-BF5B-11D6-A4BB-0003933E3E3E"] + forKey:@"IOCFPlugInTypes"]; + [controller setObject:@"Xbox360ControllerClass" + forKey:@"IOClass"]; + [controller setObject:@"IOUSBDevice" + forKey:@"IOProviderClass"]; + [controller setObject:[NSNumber numberWithInt:65535] + forKey:@"IOKitDebug"]; + + // Device-specific + [controller setObject:[NSNumber numberWithInt:vendor] + forKey:@"idVendor"]; + [controller setObject:[NSNumber numberWithInt:product] + forKey:@"idProduct"]; + + // Add it to the tree + [personalities setObject:controller + forKey:name]; +} + +static void AddDevices(NSMutableDictionary *personalities, int argc, const char *argv[]) +{ + int i, count; + + count = (argc - 1) / 3; + for (i = 0; i < count; i++) + { + NSString *name = [NSString stringWithCString:argv[(i * 3) + 1] encoding:NSUTF8StringEncoding]; + int vendor = atoi(argv[(i * 3) + 2]); + int product = atoi(argv[(i * 3) + 3]); + AddDevice(personalities, name, vendor, product); + } +} + +int main (int argc, const char * argv[]) { + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + NSDictionary *config = ReadDriverConfig(DRIVER_NAME); + if (argc == 1) + { + // Print out current types + NSDictionary *types; + NSArray *keys; + + types = [config objectForKey:@"IOKitPersonalities"]; + keys = [types allKeys]; + for (NSString *key in keys) + { + NSDictionary *device = [types objectForKey:key]; + if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360ControllerClass"] != NSOrderedSame) + continue; + fprintf(stdout, "%s,%i,%i\n", + [key UTF8String], + [[device objectForKey:@"idVendor"] intValue], + [[device objectForKey:@"idProduct"] intValue]); + } + } + else if (((argc - 1) % 3) == 0) + { + NSMutableDictionary *saving; + NSMutableDictionary *devices; + + saving = MakeMutableCopy(config); + devices = [saving objectForKey:@"IOKitPersonalities"]; + ScrubDevices(devices); + AddDevices(devices, argc, argv); + WriteDriverConfig(DRIVER_NAME, saving); + } + else + NSLog(@"Invalid number of parameters (%i)", argc); + + [pool drain]; + return 0; +} diff --git a/DriverTool/DriverTool.xcodeproj/project.pbxproj b/DriverTool/DriverTool.xcodeproj/project.pbxproj new file mode 100644 index 00000000..853cc2f0 --- /dev/null +++ b/DriverTool/DriverTool.xcodeproj/project.pbxproj @@ -0,0 +1,229 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 8DD76F9A0486AA7600D96B5E /* DriverTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* DriverTool.m */; settings = {ATTRIBUTES = (); }; }; + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; + 8DD76F9F0486AA7600D96B5E /* DriverTool.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859EA3029092ED04C91782 /* DriverTool.1 */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 8DD76F9F0486AA7600D96B5E /* DriverTool.1 in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 08FB7796FE84155DC02AAC07 /* DriverTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DriverTool.m; sourceTree = ""; }; + 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 32A70AAB03705E1F00C91783 /* DriverTool_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DriverTool_Prefix.pch; sourceTree = ""; }; + 8DD76FA10486AA7600D96B5E /* DriverTool */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = DriverTool; sourceTree = BUILT_PRODUCTS_DIR; }; + C6859EA3029092ED04C91782 /* DriverTool.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = DriverTool.1; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F9B0486AA7600D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* DriverTool */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + C6859EA2029092E104C91782 /* Documentation */, + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = DriverTool; + sourceTree = ""; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 32A70AAB03705E1F00C91783 /* DriverTool_Prefix.pch */, + 08FB7796FE84155DC02AAC07 /* DriverTool.m */, + ); + name = Source; + sourceTree = ""; + }; + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 08FB779EFE84155DC02AAC07 /* Foundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76FA10486AA7600D96B5E /* DriverTool */, + ); + name = Products; + sourceTree = ""; + }; + C6859EA2029092E104C91782 /* Documentation */ = { + isa = PBXGroup; + children = ( + C6859EA3029092ED04C91782 /* DriverTool.1 */, + ); + name = Documentation; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F960486AA7600D96B5E /* DriverTool */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "DriverTool" */; + buildPhases = ( + 8DD76F990486AA7600D96B5E /* Sources */, + 8DD76F9B0486AA7600D96B5E /* Frameworks */, + 8DD76F9E0486AA7600D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DriverTool; + productInstallPath = "$(HOME)/bin"; + productName = DriverTool; + productReference = 8DD76FA10486AA7600D96B5E /* DriverTool */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "DriverTool" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* DriverTool */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F960486AA7600D96B5E /* DriverTool */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F990486AA7600D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9A0486AA7600D96B5E /* DriverTool.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB927508733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = DriverTool_Prefix.pch; + INSTALL_PATH = /usr/local/bin; + PRODUCT_NAME = DriverTool; + }; + name = Debug; + }; + 1DEB927608733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = DriverTool_Prefix.pch; + INSTALL_PATH = /usr/local/bin; + PRODUCT_NAME = DriverTool; + SDKROOT = macosx10.5; + }; + name = Release; + }; + 1DEB927908733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = macosx10.6; + }; + name = Debug; + }; + 1DEB927A08733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.6; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "DriverTool" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927508733DD40010E9CD /* Debug */, + 1DEB927608733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "DriverTool" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927908733DD40010E9CD /* Debug */, + 1DEB927A08733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj index b0c801df..506bdf55 100644 --- a/Feedback360/Feedback360.xcodeproj/project.pbxproj +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -132,7 +132,14 @@ isa = PBXProject; buildConfigurationList = 3BBDC69709793BF60023AAD8 /* Build configuration list for PBXProject "Feedback360" */; compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 089C166AFE841209C02AAC07 /* Feedback360 */; projectDirPath = ""; projectRoot = ""; diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 3a89f7f9..3da1a774 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -212,6 +212,22 @@ UID 0 + + Children + + GID + 80 + Path + ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool + Path Type + 2 + Privileges + 493 + Type + 3 + UID + 0 + Children @@ -1255,13 +1271,13 @@ IFPkgDescriptionTitle XBox 360 Controller Installer IFPkgDescriptionVersion - 0.08 + 0.10 Display Information CFBundleGetInfoString - Install360Controller 0.08 Copyrights © 2006-2009 Colin Munro + Install360Controller 0.10 Copyrights © 2006-2011 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -1271,12 +1287,12 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.08 + 0.10 Options IFPkgFlagAllowBackRev - + IFPkgFlagAuthorizationAction 2 IFPkgFlagFollowLinks @@ -1299,7 +1315,7 @@ IFMajorVersion 0 IFMinorVersion - 8 + 10 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 6fdb5def..ed65bfba 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,32 +1,44 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350 +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid1} -{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid2} -{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid3} -{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid4} -{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid5} -{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid6} -{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid7} -{\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid0\'02\'05.;}{\levelnumbers\'01;}}{\listname ;}\listid8}} -{\*\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}} +{\*\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} +{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid4} +{\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid5} +{\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid6} +{\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid7} +{\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid8} +{\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid9}} +{\*\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}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\b0\fs24 Version 0.09\ -Copyright (C) 2005-2009 Colin Munro\ +\b0\fs24 Version 0.10\ +Copyright (C) 2005-2011 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\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\ql\qnatural\pardirnatural +\ls1\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\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\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\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls2\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\ql\qnatural\pardirnatural @@ -36,7 +48,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\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls3\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\ql\qnatural\pardirnatural @@ -47,7 +59,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\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls4\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\ql\qnatural\pardirnatural \cf0 \ @@ -57,7 +69,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls5\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\ql\qnatural\pardirnatural @@ -68,7 +80,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls5\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls6\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\ql\qnatural\pardirnatural @@ -79,7 +91,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\ql\qnatural\pardirnatural -\ls6\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls7\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\ql\qnatural\pardirnatural @@ -90,7 +102,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\ql\qnatural\pardirnatural -\ls7\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls8\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ @@ -99,7 +111,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls8\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls9\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/DeviceLister.h b/Pref360Control/DeviceLister.h new file mode 100644 index 00000000..71e84b26 --- /dev/null +++ b/Pref360Control/DeviceLister.h @@ -0,0 +1,27 @@ +// +// DeviceLister.h +// Pref360Control +// +// Created by Colin Munro on 8/05/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import + +@class Pref360ControlPref; + +@interface DeviceLister : NSObject { + Pref360ControlPref *owner; + IBOutlet NSWindow *sheet; + IBOutlet NSTableView *list; + + NSMutableDictionary *entries; + NSMutableArray *connected, *enabled; + + BOOL changed; +} + +- (void)showWithOwner:(Pref360ControlPref*)pane; +- (IBAction)done:(id)sender; + +@end diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m new file mode 100644 index 00000000..f11b587e --- /dev/null +++ b/Pref360Control/DeviceLister.m @@ -0,0 +1,507 @@ +// +// DeviceLister.m +// Pref360Control +// +// Created by Colin Munro on 8/05/2011. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import +#import "DeviceLister.h" +#import "Pref360ControlPref.h" +#import "ControlPrefs.h" + +#define TOOL_FILENAME @"DriverTool" + +// Get some sort of CF type for a field in the IORegistry +static id GetDeviceValue(io_service_t device, NSString *key) +{ + CFTypeRef value; + + value = IORegistryEntrySearchCFProperty(device, kIOServicePlane, (CFStringRef)key, kCFAllocatorDefault, kIORegistryIterateRecursively); + return [((NSObject*)value) autorelease]; +} + +// Make sure a name is as nice as possible for eventually going into the XML for the driver +static NSString* SanitiseName(NSString *name) +{ + NSMutableString *output; + int i; + + output = [NSMutableString stringWithCapacity:100]; + for (i = 0; i < [name length]; i++) + { + unichar c = [name characterAtIndex:i]; + if (c == ' ') + c = '_'; + else if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= '0') && (c <= '9')) || (c == '_'))) + continue; + [output appendFormat:@"%C", c]; + } + return output; +} + +// Get the Device interface for a given IO service +static IOUSBDeviceInterface** GetDeviceInterface(io_service_t device) +{ + IOCFPlugInInterface **iodev; + IOUSBDeviceInterface **dev; + IOReturn err; + SInt32 score; + + if ((IOCreatePlugInInterfaceForService(device, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score) == kIOReturnSuccess) && (iodev != NULL)) + { + err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBDeviceInterfaceID), (LPVOID)&dev); + (*iodev)->Release(iodev); + if (err == kIOReturnSuccess) + return dev; + } + return NULL; +} + +// Get the Interface interface for a given IO service +static IOUSBInterfaceInterface** GetInterfaceInterface(io_service_t interface) +{ + IOCFPlugInInterface **iodev; + IOUSBInterfaceInterface **intf; + IOReturn err; + SInt32 score; + + if ((IOCreatePlugInInterfaceForService(interface, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &iodev, &score) == kIOReturnSuccess) && (iodev != NULL)) + { + err = (*iodev)->QueryInterface(iodev, CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID), (LPVOID)&intf); + (*iodev)->Release(iodev); + if (err == kIOReturnSuccess) + return intf; + } + return NULL; +} + +// List of interfaces we expect on a normal Microsoft controller +const struct { + int numEndpoints; + UInt8 classNum, subClassNum, protocolNum; +} ControllerInterfaces[] = { +// Endpoints Class Subclass Protocol + {2, 255, 93, 1}, + {4, 255, 93, 3}, + {1, 255, 93, 2}, + {0, 255, 253, 19}, +}; + +// Detect if an IO service object is a Microsoft controller by running through and checking some things +static BOOL IsXBox360Controller(io_service_t device) +{ + IOUSBDeviceInterface **interface; + IOUSBFindInterfaceRequest iRq; + 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 + interface = GetDeviceInterface(device); + if (interface == NULL) + return NO; + (*interface)->GetDeviceClass(interface, &classNum); + (*interface)->GetDeviceSubClass(interface, &subClassNum); + (*interface)->GetDeviceProtocol(interface, &protocolNum); + devValid = (classNum == 0xFF) && (subClassNum == 0xFF) && (protocolNum == 0xFF); + + // Search the interfaces + iRq.bInterfaceClass = kIOUSBFindInterfaceDontCare; + iRq.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; + iRq.bInterfaceProtocol = kIOUSBFindInterfaceDontCare; + iRq.bAlternateSetting = kIOUSBFindInterfaceDontCare; + interfaceCount = 0; + if ((*interface)->CreateInterfaceIterator(interface, &iRq, &iterator) == kIOReturnSuccess) + { + while ((devInterface = IOIteratorNext(iterator)) != 0) + { + interfaceInterface = GetInterfaceInterface(devInterface); + if (interfaceInterface != NULL) + { + (*interfaceInterface)->GetInterfaceNumber(interfaceInterface, &interfaceNum); + (*interfaceInterface)->GetInterfaceClass(interfaceInterface, &classNum); + (*interfaceInterface)->GetInterfaceSubClass(interfaceInterface, &subClassNum); + (*interfaceInterface)->GetInterfaceProtocol(interfaceInterface, &protocolNum); + (*interfaceInterface)->GetNumEndpoints(interfaceInterface, &endpointCount); + if (interfaceNum < (sizeof(ControllerInterfaces) / sizeof(ControllerInterfaces[0]))) + { + if ( + (ControllerInterfaces[interfaceNum].classNum == classNum) + && + (ControllerInterfaces[interfaceNum].subClassNum == subClassNum) + && + (ControllerInterfaces[interfaceNum].protocolNum == protocolNum) + && + (ControllerInterfaces[interfaceNum].numEndpoints == endpointCount) + ) + { + // Found another interface in the right place + interfaceCount++; + } + } + (*interfaceInterface)->Release(interfaceInterface); + } + IOObjectRelease(devInterface); + } + IOObjectRelease(iterator); + } + + // Done + (*interface)->Release(interface); + + return devValid && (interfaceCount >= 3); // Only 3 in case the security descriptor is missing? +} + +@implementation DeviceLister + +- init +{ + if (self = [super init]) + { + entries = [[NSMutableDictionary dictionaryWithCapacity:10] retain]; + connected = [[NSMutableArray arrayWithCapacity:10] retain]; + enabled = [[NSMutableArray arrayWithCapacity:10] retain]; + } + return self; +} + +- (void)dealloc +{ + [entries release]; + [connected release]; + [enabled release]; + [super dealloc]; +} + +- (NSString*)toolPath +{ + // Find the path of our tool in our bundle - should it be in the driver's bundle? + return [[[owner bundle] resourcePath] stringByAppendingPathComponent:TOOL_FILENAME]; +} + +- (OSStatus)writeToolWithAuthorisation:(AuthorizationRef)authorisationRef +{ + OSStatus result; + NSString *toolPath; + NSMutableArray *parameters; + const char **argv; + int i; + + toolPath = [self toolPath]; + + // Build array of parameters + parameters = [NSMutableArray arrayWithCapacity:10]; + + for (NSNumber *key in enabled) + { + NSString *name = [entries objectForKey:key]; + NSUInteger keyValue = [key unsignedIntValue]; + UInt16 vendor = (keyValue >> 16) & 0xFFFF; + UInt16 product = keyValue & 0xFFFF; + [parameters addObject:name]; + [parameters addObject:[NSString stringWithFormat:@"%i", vendor]]; + [parameters addObject:[NSString stringWithFormat:@"%i", product]]; + } + + // Convert parameters to a C array + argv = malloc(sizeof(char*) * ([parameters count] + 1)); + i = 0; + for (NSString *item in parameters) + argv[i++] = [item UTF8String]; + argv[i] = NULL; + + // Execute the command + result = AuthorizationExecuteWithPrivileges(authorisationRef, + [toolPath UTF8String], + kAuthorizationFlagDefaults, + (char**)argv, + NULL); + + // Done + free(argv); + return result; +} + +- (NSString*)readTool +{ + NSTask *task; + NSPipe *pipe, *error; + NSData *data; + NSString *response; + NSArray *lines; + + // Prepare to run the tool + task = [[[NSTask alloc] init] autorelease]; + [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] autorelease]; + } + + // Read the data back + data = [[pipe fileHandleForReading] readDataToEndOfFile]; + response = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; + + // Parse the results + lines = [response componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + for (NSString *line in lines) + { + NSArray *values = [line componentsSeparatedByString:@","]; + if ([values count] != 3) + continue; + NSUInteger vendor = [[values objectAtIndex:1] intValue]; + NSUInteger product = [[values objectAtIndex:2] intValue]; + NSNumber *key = [NSNumber numberWithUnsignedInt:(vendor << 16) | product]; + [enabled addObject:key]; + if ([entries objectForKey:key] == nil) + [entries setObject:SanitiseName([values objectAtIndex:0]) forKey:key]; + } + + return nil; +} + +// Get the list of devices we've seen from the settings +- (NSString*)readKnownDevices +{ + NSDictionary *known; + NSArray *keys; + + known = GetKnownDevices(); + keys = [known allKeys]; + for (NSNumber *key in keys) + { + if ([entries objectForKey:key] == nil) + [entries setObject:[known objectForKey:key] forKey:key]; + } + return nil; +} + +// Find any matching devices currently plugged in +- (NSString*)readIOKit +{ + io_iterator_t iterator; + io_service_t object; + + iterator = 0; + IOServiceGetMatchingServices([owner masterPort], IOServiceMatching(kIOUSBDeviceClassName), &iterator); + if (iterator != 0) + { + while ((object = IOIteratorNext(iterator)) != 0) + { + if (IsXBox360Controller(object)) + { + 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; + + key = [NSNumber numberWithUnsignedInt:(vendor << 16) | product]; + [connected addObject:key]; + if ([entries objectForKey:key] == nil) + { + NSString *name = GetDeviceValue(object, @"USB Product Name"); + if (name == nil) + name = [NSString stringWithFormat:@"Unknown_%.4x_%.4x", vendor, product]; + else + name = SanitiseName(name); + [entries setObject:name forKey:key]; + } + } + } + IOObjectRelease(object); + } + IOObjectRelease(iterator); + } + return nil; +} + +- (void)showFailure:(NSString*)message +{ + NSAlert *alert = [NSAlert alertWithMessageText:nil + defaultButton:nil + alternateButton:nil + otherButton:nil + informativeTextWithFormat:message]; + [alert runModal]; +} + +- (BOOL)loadDevices +{ + NSString *error; + + // Initialise + error = nil; + [entries removeAllObjects]; + [connected removeAllObjects]; + [enabled removeAllObjects]; + + // These can be done in any order, depending on the behaviour desired + if (error == nil) + error = [self readKnownDevices]; + if (error == nil) + 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]; + changed = NO; + return YES; +} + +// attempt to authenticate so we can edit the driver's list of supported devices as root +- (BOOL)trySave +{ + OSStatus status; + AuthorizationRef authorisationRef; + BOOL success = NO; + + status = AuthorizationCreate(NULL, + kAuthorizationEmptyEnvironment, + kAuthorizationFlagDefaults, + &authorisationRef); + if (status != errAuthorizationSuccess) + { + [self showFailure:NSLocalizedString(@"Unable to create authorisation request", @"")]; + return NO; + } + + AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights rights = {1, &right}; + status = AuthorizationCopyRights(authorisationRef, + &rights, + NULL, + kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights, + NULL); + if (status != errAuthorizationSuccess) + { + [self showFailure:NSLocalizedString(@"Unable to acquire authorisation", @"")]; + goto fail; + } + + status = [self writeToolWithAuthorisation:authorisationRef]; + if (status != errAuthorizationSuccess) + { + [self showFailure:NSLocalizedString(@"Failed to execute the driver tool", @"")]; + goto fail; + } + + success = YES; + +fail: + AuthorizationFree(authorisationRef, kAuthorizationFlagDestroyRights); + return success; +} + +- (void)showWithOwner:(Pref360ControlPref*)pane; +{ + owner = pane; + if (![self loadDevices]) + return; + [NSApp beginSheet:sheet + modalForWindow:[NSApp mainWindow] + modalDelegate:nil + didEndSelector:nil + contextInfo:NULL]; +} + +- (IBAction)done:(id)sender +{ + if (changed) + [self trySave]; + [NSApp endSheet:sheet]; + [sheet close]; +} + +// NSTableView data source + +- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView +{ + return [entries count]; +} + +- (id)tableView:(NSTableView*)aTableView objectValueForTableColumn:(NSTableColumn*)aTableColumn row:(NSInteger)rowIndex +{ + NSString *identifier = [aTableColumn identifier]; + NSString *key = [[entries allKeys] objectAtIndex:rowIndex]; + if ([identifier compare:@"enable"] == NSOrderedSame) + { + return [NSNumber numberWithBool:[enabled containsObject:key]]; + } + if ([identifier compare:@"name"] == NSOrderedSame) + { + NSColor *colour; + + if ([connected containsObject:key]) + colour = [NSColor blueColor]; + else + colour = [NSColor blackColor]; + return [[[NSAttributedString alloc] initWithString:[entries objectForKey:key] + attributes:[NSDictionary dictionaryWithObject:colour forKey:NSForegroundColorAttributeName]] autorelease]; + } + return nil; +} + +- (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)aTableColumn row:(NSInteger)rowIndex +{ + if ([(NSString*)[aTableColumn identifier] compare:@"enable"] == NSOrderedSame) + { + NSString *key = [[entries allKeys] objectAtIndex:rowIndex]; + BOOL contains = [enabled containsObject:key]; + if ([(NSNumber*)anObject boolValue]) + { + if (!contains) + { + [enabled addObject:key]; + changed = YES; + } + } + else + { + if (contains) + { + [enabled removeObject:key]; + changed = YES; + } + } + + } +} + +@end diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index b4cb77a4..8e05e448 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -12,6 +12,7 @@ + com.apple.InterfaceBuilder.CocoaPlugin @@ -22,7 +23,7 @@ - NSPreferencePane + Pref360ControlPref FirstResponder @@ -132,7 +133,7 @@ 256 - {{17, 266}, {88, 17}} + {{40, 266}, {65, 17}} YES @@ -145,7 +146,7 @@ 6 System controlColor - + 3 MC42NjY2NjY2NjY3AA @@ -154,7 +155,7 @@ 6 System controlTextColor - + 3 MAA @@ -522,7 +523,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 6 System textBackgroundColor - + 3 MQA @@ -587,6 +588,30 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES + + + 268 + {{8, 254}, {39, 38}} + + YES + + 67239424 + 134217728 + + + + LucidaGrande + 18 + 16 + + + -2034499329 + 7 + + + 200 + 25 + + {595, 304} @@ -595,6 +620,242 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {595, 32} {1.79769e+308, 1.79769e+308} + + 15 + 2 + {{131, 166}, {519, 336}} + 1685585920 + Window + NSWindow + + {1.79769e+308, 1.79769e+308} + {490, 150} + + + 256 + + + + 274 + + + + 2304 + + + + 256 + {477, 229} + + YES + + + -2147483392 + {{224, 0}, {16, 17}} + + + + enable + 20 + 20 + 20 + + 75628096 + 2048 + + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + + + + 67239424 + 131072 + + + + 1211912703 + 2 + + NSImage + NSSwitch + + + + + 200 + 25 + + 1 + YES + YES + + + + name + 451 + 40 + 1000 + + 75628096 + 2048 + + + + + + + 337772096 + 2048 + Text Cell + + + + 6 + System + controlBackgroundColor + + + + + 1 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -700448768 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 1}, {477, 229}} + + + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + _doScroller: + 0.9925373134328358 + + + + -2147483392 + {{-100, -100}, {223, 15}} + + 1 + + _doScroller: + 0.57142859697341919 + + + {{20, 60}, {479, 231}} + + + 530 + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{17, 299}, {355, 17}} + + YES + + 68288064 + 272630784 + Select the devices you would like to use with the driver: + + + + + + + + + 289 + {{409, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Done + + + -2038284033 + 129 + + + 200 + 25 + + + + + 292 + {{17, 16}, {323, 28}} + + YES + + 68288064 + 272630784 + To save changes to this list, you must enter your password.
A restart will be required for changes to take effect. + + LucidaGrande + 11 + 16 + + + + + + + + {519, 336} + + + {{0, 0}, {1280, 1002}} + {490, 172} + {1.79769e+308, 1.79769e+308} + + + DeviceLister + @@ -830,6 +1091,54 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 197 + + + showDeviceList: + + + + 220 + + + + done: + + + + 222 + + + + sheet + + + + 223 + + + + list + + + + 224 + + + + dataSource + + + + 225 + + + + deviceLister + + + + 226 + @@ -885,6 +1194,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + @@ -1201,6 +1511,138 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + + 198 + + + + + + + + 199 + + + + + 200 + + + + + + DeviceSheet + + + 201 + + + + + + + + + + + 202 + + + + + + + + + + 203 + + + + + 204 + + + + + 205 + + + + + + + + + 207 + + + + + + + + 208 + + + + + + + + 209 + + + + + 211 + + + + + 214 + + + + + + + + 215 + + + + + 216 + + + + + + + + 217 + + + + + 218 + + + + + + + + 219 + + + + + 221 + + + @@ -1285,6 +1727,42 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBAAAAw5EAAA + + com.apple.InterfaceBuilder.CocoaPlugin + {{349, 211}, {519, 336}} + com.apple.InterfaceBuilder.CocoaPlugin + {{349, 211}, {519, 336}} + + + {490, 150} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBoAAAw5CAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDzIAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwjAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1296,10 +1774,43 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ - 197 + 226 + + DeviceLister + NSObject + + done: + id + + + done: + + done: + id + + + + NSTableView + NSWindow + + + + list + NSTableView + + + sheet + NSWindow + + + + IBProjectSource + DeviceLister.h + + FirstResponder NSObject @@ -1529,6 +2040,129 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + + Pref360ControlPref + NSPreferencePane + + showDeviceList: + id + + + showDeviceList: + + showDeviceList: + id + + + + NSImageView + MyCentreButtons + NSPopUpButton + DeviceLister + MyDigitalStick + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + MyMainButtons + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + + + + batteryLevel + NSImageView + + + centreButtons + MyCentreButtons + + + deviceList + NSPopUpButton + + + deviceLister + DeviceLister + + + digiStick + MyDigitalStick + + + leftLinked + NSButton + + + leftShoulder + MyShoulderButton + + + leftStick + MyAnalogStick + + + leftStickDeadzone + NSSlider + + + leftStickInvertX + NSButton + + + leftStickInvertY + NSButton + + + leftTrigger + NSProgressIndicator + + + rightButtons + MyMainButtons + + + rightLinked + NSButton + + + rightShoulder + MyShoulderButton + + + rightStick + MyAnalogStick + + + rightStickDeadzone + NSSlider + + + rightStickInvertX + NSButton + + + rightStickInvertY + NSButton + + + rightTrigger + NSProgressIndicator + + + + IBProjectSource + Pref360ControlPref.h + + @@ -1762,7 +2396,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ NSObject - + IBFrameworkSource AppKit.framework/Headers/NSTableView.h @@ -1985,6 +2619,22 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ AppKit.framework/Headers/NSResponder.h + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + NSSlider NSControl @@ -2001,6 +2651,19 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ AppKit.framework/Headers/NSSliderCell.h + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableView + NSControl + + NSTextField NSControl @@ -2080,6 +2743,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {9, 8} {7, 2} + {15, 15} {32, 24} diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index 91875bd4fce62b2dcc5204398da5e6f530e06311..edd1c2e0fc0f4590d6b1a5bad54e30f59d01f5b2 100644 GIT binary patch literal 24309 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 literal 17394 zcmd5@d0bT0+dt=S3^2fDVAuwR0S1@_+3s9$E%(wyQCtugWEpW3W^iV3!OU~j)XJr7 z(^50{(p+*cvrWwwP0iG-%(TqP)XdCZrM}O-GlQu3d*44__$V{?KKD7#dA9RC&vR~N zeXYae&CNZEFrpBR7{nru+s17#HIB2pJr0+%)aa@lZLjir1{*8fRihkmxxdlts@EVq zW9f!S{3HrOD%1+)p?uUDwLu+FCsctP=y5ay%|x@%Z1gmG2F(YmrDzA*gZ83d&=vFt zx`zHi|Dszs3diAitjEdNfYWd$HeoZ)!Z}#P9dRez85iN+xDPJD1Mx6ijq9)zH{wb7 zaXbUh#82V5_*wiMei1Liui)44>$noH#q05QyaVsVAK(x1XZQdznF_$zz{pT$4m z-|$8J557TRilR7*r!-U)l}IH~7RpNHP`Q*q6;f@e&Quqw4^>PJrpl<1l#8mT9;F_q zW>5>MMbxX*GHMOAj@n9XqduTMq&}k#P+w6OsLRxK8q*>2}=>$5BHqx!=Y+9h( z(;evU^h0zp-Ip$-htSouop#bLdICL>o=Q)nr_(d≠4r9{n`^JpBT_kX}T;La(E@ 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 - + CFBundleDevelopmentRegion @@ -9,7 +9,7 @@ CFBundleIconFile CFBundleIdentifier - com.apple.prefpanel + com.mice.driver.360Controller.Prefs CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index f90d15a7..7fa5573e 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 3B04BE7313763D04005FA9F8 /* DeviceLister.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B04BE7113763D04005FA9F8 /* DeviceLister.h */; }; + 3B04BE7413763D04005FA9F8 /* DeviceLister.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B04BE7213763D04005FA9F8 /* DeviceLister.m */; }; + 3B04BEA61376416D005FA9F8 /* DriverTool in Resources */ = {isa = PBXBuildFile; fileRef = 3B04BEA51376416D005FA9F8 /* DriverTool */; }; 3B47D9ED0B93C2BF00F200B8 /* battNone.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EC0B93C2BF00F200B8 /* battNone.tif */; }; 3B47D9F20B93C31400F200B8 /* batt1.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EE0B93C31400F200B8 /* batt1.tif */; }; 3B47D9F30B93C31400F200B8 /* batt0.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9EF0B93C31400F200B8 /* batt0.tif */; }; @@ -14,6 +17,7 @@ 3B47D9F50B93C31400F200B8 /* batt2.tif in Resources */ = {isa = PBXBuildFile; fileRef = 3B47D9F10B93C31400F200B8 /* batt2.tif */; }; 3B86987F0CE2A22100283CEC /* ControlPrefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B86987D0CE2A22100283CEC /* ControlPrefs.h */; }; 3B8698800CE2A22100283CEC /* ControlPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B86987E0CE2A22100283CEC /* ControlPrefs.m */; }; + 3B8B91321376FC120047D446 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B8B91311376FC120047D446 /* Security.framework */; }; 3BBEAB01096B2C4C00F2E37B /* MyAnalogStick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */; }; 3BBEAB02096B2C4C00F2E37B /* MyAnalogStick.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */; }; 3BBEAB05096B2C5200F2E37B /* MyCentreButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */; }; @@ -44,6 +48,9 @@ 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pref360Control_Prefix.pch; sourceTree = ""; }; + 3B04BE7113763D04005FA9F8 /* DeviceLister.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceLister.h; sourceTree = ""; }; + 3B04BE7213763D04005FA9F8 /* DeviceLister.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceLister.m; sourceTree = ""; }; + 3B04BEA51376416D005FA9F8 /* DriverTool */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = DriverTool; path = ../DriverTool/build/Release/DriverTool; sourceTree = SOURCE_ROOT; }; 3B47D9EC0B93C2BF00F200B8 /* battNone.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = battNone.tif; sourceTree = ""; }; 3B47D9EE0B93C31400F200B8 /* batt1.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt1.tif; sourceTree = ""; }; 3B47D9EF0B93C31400F200B8 /* batt0.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt0.tif; sourceTree = ""; }; @@ -51,6 +58,7 @@ 3B47D9F10B93C31400F200B8 /* batt2.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = batt2.tif; sourceTree = ""; }; 3B86987D0CE2A22100283CEC /* ControlPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ControlPrefs.h; path = ../360Daemon/ControlPrefs.h; sourceTree = SOURCE_ROOT; }; 3B86987E0CE2A22100283CEC /* ControlPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ControlPrefs.m; path = ../360Daemon/ControlPrefs.m; sourceTree = SOURCE_ROOT; }; + 3B8B91311376FC120047D446 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 3BBEAAFF096B2C4C00F2E37B /* MyAnalogStick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyAnalogStick.h; sourceTree = ""; }; 3BBEAB00096B2C4C00F2E37B /* MyAnalogStick.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyAnalogStick.m; sourceTree = ""; }; 3BBEAB03096B2C5200F2E37B /* MyCentreButtons.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyCentreButtons.m; sourceTree = ""; }; @@ -83,6 +91,7 @@ 8D202CF40486D31800D8A456 /* PreferencePanes.framework in Frameworks */, 3BBEAB2D096B6EDE00F2E37B /* IOKit.framework in Frameworks */, 3BC41F47096C8D0300664A42 /* ForceFeedback.framework in Frameworks */, + 3B8B91321376FC120047D446 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -113,6 +122,7 @@ 089C167CFE841241C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( + 3B04BEA51376416D005FA9F8 /* DriverTool */, 8D202CF70486D31800D8A456 /* Info.plist */, 089C167DFE841241C02AAC07 /* InfoPlist.strings */, F506C040013D9D8001CA16C8 /* Pref360ControlPref.tiff */, @@ -145,6 +155,8 @@ 3BBEAB10096B2C6000F2E37B /* MyShoulderButton.m */, 3BC41F30096C85CB00664A42 /* DeviceItem.h */, 3BC41F31096C85CB00664A42 /* DeviceItem.m */, + 3B04BE7113763D04005FA9F8 /* DeviceLister.h */, + 3B04BE7213763D04005FA9F8 /* DeviceLister.m */, ); name = Classes; sourceTree = ""; @@ -156,6 +168,7 @@ 3BBEAB2C096B6EDE00F2E37B /* IOKit.framework */, 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, F506C035013D953901CA16C8 /* PreferencePanes.framework */, + 3B8B91311376FC120047D446 /* Security.framework */, ); name = "Linked Frameworks"; sourceTree = ""; @@ -201,6 +214,7 @@ 3BBEAB11096B2C6000F2E37B /* MyShoulderButton.h in Headers */, 3BC41F32096C85CB00664A42 /* DeviceItem.h in Headers */, 3B86987F0CE2A22100283CEC /* ControlPrefs.h in Headers */, + 3B04BE7313763D04005FA9F8 /* DeviceLister.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -233,7 +247,7 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 3BBDC6A9097946B50023AAD8 /* Build configuration list for PBXProject "Pref360Control" */; - compatibilityVersion = "Xcode 2.4"; + compatibilityVersion = "Xcode 3.0"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( @@ -264,6 +278,7 @@ 3B47D9F30B93C31400F200B8 /* batt0.tif in Resources */, 3B47D9F40B93C31400F200B8 /* batt3.tif in Resources */, 3B47D9F50B93C31400F200B8 /* batt2.tif in Resources */, + 3B04BEA61376416D005FA9F8 /* DriverTool in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -292,6 +307,7 @@ 3BBEAB12096B2C6000F2E37B /* MyShoulderButton.m in Sources */, 3BC41F33096C85CB00664A42 /* DeviceItem.m in Sources */, 3B8698800CE2A22100283CEC /* ControlPrefs.m in Sources */, + 3B04BE7413763D04005FA9F8 /* DeviceLister.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -320,6 +336,8 @@ 3BBDC6A6097946B50023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; COPY_PHASE_STRIP = NO; DEBUGGING_SYMBOLS = YES; FRAMEWORK_SEARCH_PATHS = ""; @@ -339,6 +357,7 @@ INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; LIBRARY_SEARCH_PATHS = ""; LIBRARY_STYLE = Bundle; + MACOSX_DEPLOYMENT_TARGET = 10.5; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-bundle", @@ -346,6 +365,7 @@ ); OTHER_REZFLAGS = ""; PRODUCT_NAME = Pref360Control; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 78e39a1c..7596adca 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -35,6 +35,8 @@ #include "MyMainButtons.h" #include "MyShoulderButton.h" +@class DeviceLister; + @interface Pref360ControlPref : NSPreferencePane { // Window components @@ -57,6 +59,7 @@ IBOutlet NSButton *rightStickInvertY; IBOutlet NSProgressIndicator *rightTrigger; IBOutlet NSImageView *batteryLevel; + IBOutlet DeviceLister *deviceLister; // Internal info mach_port_t masterPort; NSMutableArray *deviceArray; @@ -81,4 +84,8 @@ - (void)handleDeviceChange; +- (IBAction)showDeviceList:(id)sender; + +- (mach_port_t)masterPort; + @end diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index d9efabb6..e8f967dd 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -25,6 +25,7 @@ #import "Pref360ControlPref.h" #import "DeviceItem.h" #import "ControlPrefs.h" +#import "DeviceLister.h" #define NO_ITEMS @"No devices found" @@ -629,6 +630,11 @@ - (void)dealloc [super dealloc]; } +- (mach_port_t)masterPort +{ + return masterPort; +} + // Handle selection from drop down menu - (void)selectDevice:(id)sender { @@ -682,4 +688,9 @@ - (void)handleDeviceChange [self updateDeviceList]; } +- (IBAction)showDeviceList:(id)sender +{ + [deviceLister showWithOwner:self]; +} + @end diff --git a/Readme.rtf b/Readme.rtf index 27ec88da..f6a242ab 100644 --- a/Readme.rtf +++ b/Readme.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038 +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 {\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} @@ -9,7 +9,7 @@ \f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X \b0\fs24 \ -Copyright (C) 2006-2009 Colin Munro\ +Copyright (C) 2006-2011 Colin Munro\ {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ \ diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index c38910ac..dd676bf4 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion @@ -19,32 +19,32 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d2 + 1.0.0d10 IOKitPersonalities - - Wireless360Controller - - CFBundleIdentifier - com.mice.driver.Wireless360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Wireless360Controller - IOKitDebug - 65536 - IOProviderClass - WirelessDevice - Wireless360Device - 0 - + + Wireless360Controller + + CFBundleIdentifier + com.mice.driver.Wireless360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Wireless360Controller + IOKitDebug + 65536 + IOProviderClass + WirelessDevice + Wireless360Device + 0 + OSBundleLibraries - - com.mice.driver.WirelessGamingReceiver - 1.0.0d1 + + com.mice.driver.WirelessGamingReceiver + 1.0.0d1 com.apple.kpi.libkern 8.0.0 com.apple.kpi.mach diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser index 6dfa9bb5..3cab81b4 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser @@ -13,7 +13,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 369, + 243, 20, 48, 43, @@ -30,13 +30,12 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 280461383; - PBXWorkspaceStateSaveDate = 280461383; + PBXPerProjectTemplateStateSaveDate = 326569052; + PBXWorkspaceStateSaveDate = 326569052; }; perUserProjectItems = { - 3B06F84110615CA500CACC16 /* PBXTextBookmark */ = 3B06F84110615CA500CACC16 /* PBXTextBookmark */; - 3B06F84310615CA500CACC16 /* PBXTextBookmark */ = 3B06F84310615CA500CACC16 /* PBXTextBookmark */; - 3B36DCB410B7813600FFD769 /* PlistBookmark */ = 3B36DCB410B7813600FFD769 /* PlistBookmark */; + 3B8B920A13770C6B0047D446 /* PlistBookmark */ = 3B8B920A13770C6B0047D446 /* PlistBookmark */; + 3B8B920B13770C6B0047D446 /* PlistBookmark */ = 3B8B920B13770C6B0047D446 /* PlistBookmark */; }; sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; userBuildSettings = { @@ -80,26 +79,6 @@ sepNavWindowFrame = "{{351, 61}, {806, 717}}"; }; }; - 3B06F84110615CA500CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 089C167EFE841241C02AAC07 /* English */; - name = "InfoPlist.strings: 3"; - rLen = 0; - rLoc = 86; - rType = 0; - vrLen = 97; - vrLoc = 0; - }; - 3B06F84310615CA500CACC16 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - name = "Info.plist: 56"; - rLen = 0; - rLoc = 1875; - rType = 0; - vrLen = 281; - vrLoc = 1603; - }; 3B18E24B0B92718C0093FA6E /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; @@ -115,14 +94,26 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; - 3B36DCB410B7813600FFD769 /* PlistBookmark */ = { + 3B8B920A13770C6B0047D446 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/colin/OSX/360 Controller/Wireless360Controller/Info.plist"; + rLen = 0; + rLoc = 9223372036854775807; + }; + 3B8B920B13770C6B0047D446 /* PlistBookmark */ = { isa = PlistBookmark; fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; fallbackIsa = PBXBookmark; isK = 0; kPath = ( + CFBundleVersion, ); - name = "/Users/colin/Projects/360 Controller/Wireless360Controller/Info.plist"; + name = "/Users/colin/OSX/360 Controller/Wireless360Controller/Info.plist"; rLen = 0; rLoc = 9223372036854775807; }; diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 5149446a..109733d6 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -110,7 +110,14 @@ isa = PBXProject; buildConfigurationList = 1DEB91DD08733DB10010E9CD /* Build configuration list for PBXProject "Wireless360Controller" */; compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 089C166AFE841209C02AAC07 /* Wireless360Controller */; projectDirPath = ""; projectRoot = ""; diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index 53181afd..f71faf50 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion @@ -19,54 +19,54 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d2 - OSBundleCompatibleVersion - 1.0.0d1 + 1.0.0d10 + OSBundleCompatibleVersion + 1.0.0d1 IOKitPersonalities - WirelessGamingReceiverForWindows - - CFBundleIdentifier - com.mice.driver.WirelessGamingReceiver - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 1817 - idVendor - 1118 - - WirelessGamingReceiverForWindowsAlternate - - CFBundleIdentifier - com.mice.driver.WirelessGamingReceiver - IOClass - WirelessGamingReceiver - IOKitDebug - 65535 - IOProviderClass - IOUSBDevice - idProduct - 657 - idVendor - 1118 - - + WirelessGamingReceiverForWindows + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 1817 + idVendor + 1118 + + WirelessGamingReceiverForWindowsAlternate + + CFBundleIdentifier + com.mice.driver.WirelessGamingReceiver + IOClass + WirelessGamingReceiver + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 657 + idVendor + 1118 + + OSBundleLibraries - + com.apple.iokit.IOHIDFamily 1.2 - com.apple.iokit.IOUSBFamily - 1.8 + com.apple.iokit.IOUSBFamily + 1.8 com.apple.kpi.libkern 8.0.0 com.apple.kpi.mach 8.0.0 com.apple.kpi.iokit 8.0.0 - + From 72542f122d8672e576943b9f8bde9ca9b3a0ddce Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:09:42 +0000 Subject: [PATCH 30/66] Useful build script --- build | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 build diff --git a/build b/build new file mode 100755 index 00000000..cdcad4c8 --- /dev/null +++ b/build @@ -0,0 +1,53 @@ +#!/bin/bash +cd Feedback360 +xcodebuild -configuration Deployment +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../DriverTool +xcodebuild -configuration Release +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../360Controller +xcodebuild -configuration Deployment +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../360Daemon +xcodebuild -configuration Release +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../WirelessGamingReceiver +xcodebuild -configuration Release +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../Wireless360Controller +xcodebuild -configuration Release +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../Pref360Control +xcodebuild -configuration Deployment +if [ $? -ne 0 ] + then + echo "******** BUILD FAILED ********" + exit 1 +fi +cd ../Install360Controller +freeze Install360Controller.packproj +echo "*** DONE ***" From 1165a97066e8ad3e1f65743ec032dbf8ab6ee51b Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:43:08 +0000 Subject: [PATCH 31/66] Update automatic build, fiddle with installer script, make build actually work --- 360Controller/_60Controller.cpp | 1 - DriverTool/DriverTool.xcodeproj/project.pbxproj | 2 +- DriverTool/DriverTool_Prefix.pch | 7 +++++++ Install360Controller/Scripts/finish.sh | 8 ++++---- build | 4 ++++ 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 DriverTool/DriverTool_Prefix.pch diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 23991f80..6d4bbfca 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -25,7 +25,6 @@ #include #include "_60Controller.h" #include "ControlStruct.h" -#include "SerialDriver.h" #include "ChatPad.h" #include "Controller.h" diff --git a/DriverTool/DriverTool.xcodeproj/project.pbxproj b/DriverTool/DriverTool.xcodeproj/project.pbxproj index 853cc2f0..bc17585b 100644 --- a/DriverTool/DriverTool.xcodeproj/project.pbxproj +++ b/DriverTool/DriverTool.xcodeproj/project.pbxproj @@ -198,7 +198,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; - SDKROOT = macosx10.6; + SDKROOT = macosx10.5; }; name = Release; }; diff --git a/DriverTool/DriverTool_Prefix.pch b/DriverTool/DriverTool_Prefix.pch new file mode 100644 index 00000000..eee065ec --- /dev/null +++ b/DriverTool/DriverTool_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'DriverTool' target in the 'DriverTool' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh index 6d6e507d..9bc0e9b2 100644 --- a/Install360Controller/Scripts/finish.sh +++ b/Install360Controller/Scripts/finish.sh @@ -1,12 +1,12 @@ #!/bin/sh installdir="$3" -newer=`ps -ax | awk '{print $1" "$5}' | grep kextd | awk '{print $1}'` -if [ "$newer" == "" ] +newer=`ps auxw | grep kextd | grep -v grep | wc -l` +if [ $newer -eq 0 ] then cd "$installdir" cd System/Library/Extensions kextload 360Controller.kext else -/bin/kill -1 $newer +/bin/killall -1 kextd fi -exit $? +exit 0 diff --git a/build b/build index cdcad4c8..a95b675c 100755 --- a/build +++ b/build @@ -1,4 +1,5 @@ #!/bin/bash +zip -r ../360ControllerSource.zip * cd Feedback360 xcodebuild -configuration Deployment if [ $? -ne 0 ] @@ -50,4 +51,7 @@ if [ $? -ne 0 ] fi cd ../Install360Controller freeze Install360Controller.packproj +mv build 360ControllerInstall +hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg +mv 360ControllerInstall build echo "*** DONE ***" From a6815485539d87b3c986ebb1f8b087d68a14e897 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:50:45 +0000 Subject: [PATCH 32/66] Fix installer name --- Install360Controller/Install360Controller.packproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index 3da1a774..c52a5f08 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -1269,7 +1269,7 @@ IFPkgDescriptionDescription Installs the driver for the XBox 360 Controller for MacOS X. IFPkgDescriptionTitle - XBox 360 Controller Installer + XBox 360 Controller IFPkgDescriptionVersion 0.10 From daaef8b1efd867aa41558d54799fc7f7cd9d46fb Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:54:40 +0000 Subject: [PATCH 33/66] Some sanity checking in the build --- build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build b/build index a95b675c..e7ca2721 100755 --- a/build +++ b/build @@ -55,3 +55,10 @@ mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build echo "*** DONE ***" +lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/MacOS/360Controller +lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS/Feedback360 +lipo -info 360Daemon/build/Release/360Daemon +lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacOS/Pref360Control +lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool +lipo -info WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver +lipo -info Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller From 69a03866022d73b76013efb7f0aef5a85d298af8 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:55:51 +0000 Subject: [PATCH 34/66] Fix mistake in build --- build | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build b/build index e7ca2721..e06b8163 100755 --- a/build +++ b/build @@ -54,7 +54,8 @@ freeze Install360Controller.packproj mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build -echo "*** DONE ***" +cd .. +echo ** File contents ** lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/MacOS/360Controller lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS/Feedback360 lipo -info 360Daemon/build/Release/360Daemon @@ -62,3 +63,4 @@ lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacO lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool lipo -info WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver lipo -info Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller +echo "*** DONE ***" From 12aa5a42952a4d01c06371de069741cc19540c95 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 18:57:37 +0000 Subject: [PATCH 35/66] Silly --- build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build b/build index e06b8163..cc66737c 100755 --- a/build +++ b/build @@ -55,7 +55,7 @@ mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build cd .. -echo ** File contents ** +echo "** File contents **" lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/MacOS/360Controller lipo -info 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS/Feedback360 lipo -info 360Daemon/build/Release/360Daemon From 8c2e171d9583825c23c6bda0bbbd2ff669acd2e4 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 21:37:07 +0000 Subject: [PATCH 36/66] Fix compatibility with Bioshock --- 360Controller/ChatPad.cpp | 4 +- 360Controller/Controller.cpp | 36 +- 360Controller/Controller.h | 4 +- 360Controller/Info.plist | 18 +- 360Controller/_60Controller.cpp | 74 +- 360Controller/_60Controller.h | 8 +- 360Daemon/360Daemon.m | 27 +- DriverTool/DriverTool.m | 6 +- Pref360Control/Pref360ControlPref.m | 2 +- .../colin.mode1 | 1361 ----------------- .../colin.pbxuser | 120 -- 11 files changed, 78 insertions(+), 1582 deletions(-) delete mode 100644 Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 delete mode 100644 Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp index 1eb14032..0cde8b6e 100644 --- a/360Controller/ChatPad.cpp +++ b/360Controller/ChatPad.cpp @@ -106,9 +106,9 @@ static IOHIDDevice* GetParent(const IOService *current) */ static IOHIDDevice* GetParent(const IOService *current) { - Xbox360ControllerClass *owner; + Xbox360Peripheral *owner; - owner = OSDynamicCast(Xbox360ControllerClass, current->getProvider()); + owner = OSDynamicCast(Xbox360Peripheral, current->getProvider()); if (owner == NULL) return NULL; return owner->getController(0); diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 385fa26f..0b5ee457 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -16,16 +16,16 @@ namespace HID_360 { } #include "_60Controller.h" -OSDefineMetaClassAndStructors(ControllerClass, IOHIDDevice) +OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOHIDDevice) -static Xbox360ControllerClass* GetOwner(IOService *us) +static Xbox360Peripheral* GetOwner(IOService *us) { IOService *prov; prov = us->getProvider(); if (prov == NULL) return NULL; - return OSDynamicCast(Xbox360ControllerClass, prov); + return OSDynamicCast(Xbox360Peripheral, prov); } static IOUSBDevice* GetOwnerProvider(const IOService *us) @@ -41,16 +41,16 @@ static IOUSBDevice* GetOwnerProvider(const IOService *us) return OSDynamicCast(IOUSBDevice, provprov); } -IOReturn ControllerClass::setProperties(OSObject *properties) +IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) { - Xbox360ControllerClass *owner = GetOwner(this); + Xbox360Peripheral *owner = GetOwner(this); if (owner == NULL) return kIOReturnUnsupported; return owner->setProperties(properties); } // Returns the HID descriptor for this device -IOReturn ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const +IOReturn Xbox360ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) const { IOBufferMemoryDescriptor *buffer; @@ -62,7 +62,7 @@ IOReturn ControllerClass::newReportDescriptor(IOMemoryDescriptor **descriptor) c } // Handles a message from the userspace IOHIDDeviceInterface122::setReport function -IOReturn ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +IOReturn Xbox360ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) { char data[2]; @@ -100,14 +100,14 @@ IOReturn ControllerClass::setReport(IOMemoryDescriptor *report,IOHIDReportType r } // Get report -IOReturn ControllerClass::getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) +IOReturn Xbox360ControllerClass::getReport(IOMemoryDescriptor *report,IOHIDReportType reportType,IOOptionBits options) { // Doesn't do anything yet ;) return kIOReturnUnsupported; } // Returns the string for the specified index from the USB device's string list, with an optional default -OSString* ControllerClass::getDeviceString(UInt8 index,const char *def) const +OSString* Xbox360ControllerClass::getDeviceString(UInt8 index,const char *def) const { IOReturn err; char buf[1024]; @@ -122,47 +122,47 @@ OSString* ControllerClass::getDeviceString(UInt8 index,const char *def) const return OSString::withCString(string); } -OSString* ControllerClass::newManufacturerString() const +OSString* Xbox360ControllerClass::newManufacturerString() const { return getDeviceString(GetOwnerProvider(this)->GetManufacturerStringIndex()); } -OSNumber* ControllerClass::newPrimaryUsageNumber() const +OSNumber* Xbox360ControllerClass::newPrimaryUsageNumber() const { return OSNumber::withNumber(HID_360::ReportDescriptor[3], 8); } -OSNumber* ControllerClass::newPrimaryUsagePageNumber() const +OSNumber* Xbox360ControllerClass::newPrimaryUsagePageNumber() const { return OSNumber::withNumber(HID_360::ReportDescriptor[1], 8); } -OSNumber* ControllerClass::newProductIDNumber() const +OSNumber* Xbox360ControllerClass::newProductIDNumber() const { return OSNumber::withNumber(GetOwnerProvider(this)->GetProductID(),16); } -OSString* ControllerClass::newProductString() const +OSString* Xbox360ControllerClass::newProductString() const { return getDeviceString(GetOwnerProvider(this)->GetProductStringIndex()); } -OSString* ControllerClass::newSerialNumberString() const +OSString* Xbox360ControllerClass::newSerialNumberString() const { return getDeviceString(GetOwnerProvider(this)->GetSerialNumberStringIndex()); } -OSString* ControllerClass::newTransportString() const +OSString* Xbox360ControllerClass::newTransportString() const { return OSString::withCString("USB"); } -OSNumber* ControllerClass::newVendorIDNumber() const +OSNumber* Xbox360ControllerClass::newVendorIDNumber() const { return OSNumber::withNumber(GetOwnerProvider(this)->GetVendorID(),16); } -OSNumber* ControllerClass::newLocationIDNumber() const +OSNumber* Xbox360ControllerClass::newLocationIDNumber() const { IOUSBDevice *device; OSNumber *number; diff --git a/360Controller/Controller.h b/360Controller/Controller.h index f8038fc1..b1af407a 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -9,9 +9,9 @@ #include -class ControllerClass : public IOHIDDevice +class Xbox360ControllerClass : public IOHIDDevice { - OSDeclareDefaultStructors(ControllerClass) + OSDeclareDefaultStructors(Xbox360ControllerClass) private: OSString* getDeviceString(UInt8 index,const char *def=NULL) const; diff --git a/360Controller/Info.plist b/360Controller/Info.plist index cfcc0a39..1cd75bd1 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -30,7 +30,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -50,7 +50,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -70,7 +70,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -90,7 +90,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -110,7 +110,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -130,7 +130,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -150,7 +150,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -170,7 +170,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass @@ -190,7 +190,7 @@ 360Controller.kext/Contents/PlugIns/Feedback360.plugin IOClass - Xbox360ControllerClass + Xbox360Peripheral IOKitDebug 65535 IOProviderClass diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 6d4bbfca..a334bcc5 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -32,7 +32,7 @@ #define kIOSerialDeviceType "Serial360Device" -OSDefineMetaClassAndStructors(Xbox360ControllerClass, IOService) +OSDefineMetaClassAndStructors(Xbox360Peripheral, IOService) #define super IOService // Find the maximum packet size of this pipe @@ -45,7 +45,7 @@ static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) else return ed->wMaxPacketSize; } -void Xbox360ControllerClass::SendSpecial(UInt16 value) +void Xbox360Peripheral::SendSpecial(UInt16 value) { IOUSBDevRequest controlReq; @@ -59,7 +59,7 @@ void Xbox360ControllerClass::SendSpecial(UInt16 value) IOLog("Failed to send special message %.4x\n", value); } -void Xbox360ControllerClass::SendInit(UInt16 value, UInt16 index) +void Xbox360Peripheral::SendInit(UInt16 value, UInt16 index) { IOUSBDevRequest controlReq; @@ -72,21 +72,21 @@ void Xbox360ControllerClass::SendInit(UInt16 value, UInt16 index) device->DeviceRequest(&controlReq, 100, 100, NULL); // Will fail - but device should still act on it } -void Xbox360ControllerClass::SendToggle(void) +void Xbox360Peripheral::SendToggle(void) { SendSpecial(serialToggle ? 0x1F : 0x1E); serialToggle = !serialToggle; } -void Xbox360ControllerClass::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) +void Xbox360Peripheral::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) { - Xbox360ControllerClass *controller; + Xbox360Peripheral *controller; - controller = OSDynamicCast(Xbox360ControllerClass, owner); + controller = OSDynamicCast(Xbox360Peripheral, owner); controller->ChatPadTimerAction(sender); } -void Xbox360ControllerClass::ChatPadTimerAction(IOTimerEventSource *sender) +void Xbox360Peripheral::ChatPadTimerAction(IOTimerEventSource *sender) { int nextTime, serialGot; @@ -188,7 +188,7 @@ void Xbox360ControllerClass::ChatPadTimerAction(IOTimerEventSource *sender) } // Read the settings from the registry -void Xbox360ControllerClass::readSettings(void) +void Xbox360Peripheral::readSettings(void) { OSDictionary *dataDictionary; OSBoolean *value; @@ -213,7 +213,7 @@ void Xbox360ControllerClass::readSettings(void) value=OSDynamicCast(OSBoolean,dataDictionary->getObject("RelativeRight")); if(value!=NULL) relativeRight=value->getValue(); /* - IOLog("Xbox360ControllerClass preferences loaded:\n invertLeft X: %s, Y: %s\n invertRight X: %s, Y:%s\n deadzone Left: %d, Right: %d\n\n", + 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); @@ -221,7 +221,7 @@ void Xbox360ControllerClass::readSettings(void) } // Initialise the extension -bool Xbox360ControllerClass::init(OSDictionary *propTable) +bool Xbox360Peripheral::init(OSDictionary *propTable) { bool res=super::init(propTable); device=NULL; @@ -246,13 +246,13 @@ bool Xbox360ControllerClass::init(OSDictionary *propTable) } // Free the extension -void Xbox360ControllerClass::free(void) +void Xbox360Peripheral::free(void) { // Don't actually do anything yet super::free(); } -bool Xbox360ControllerClass::start(IOService *provider) +bool Xbox360Peripheral::start(IOService *provider) { const IOUSBConfigurationDescriptor *cd; IOUSBFindInterfaceRequest intf; @@ -441,7 +441,7 @@ bool Xbox360ControllerClass::start(IOService *provider) } // Set up an asynchronous read -bool Xbox360ControllerClass::QueueRead(void) +bool Xbox360Peripheral::QueueRead(void) { IOUSBCompletion complete; IOReturn err; @@ -457,7 +457,7 @@ bool Xbox360ControllerClass::QueueRead(void) } } -bool Xbox360ControllerClass::QueueSerialRead(void) +bool Xbox360Peripheral::QueueSerialRead(void) { IOUSBCompletion complete; IOReturn err; @@ -478,7 +478,7 @@ bool Xbox360ControllerClass::QueueSerialRead(void) } // Set up an asynchronous write -bool Xbox360ControllerClass::QueueWrite(const void *bytes,UInt32 length) +bool Xbox360Peripheral::QueueWrite(const void *bytes,UInt32 length) { IOBufferMemoryDescriptor *outBuffer; IOUSBCompletion complete; @@ -501,7 +501,7 @@ bool Xbox360ControllerClass::QueueWrite(const void *bytes,UInt32 length) } } -void Xbox360ControllerClass::stop(IOService *provider) +void Xbox360Peripheral::stop(IOService *provider) { // IOLog("Stopping\n"); ReleaseAll(); @@ -509,7 +509,7 @@ void Xbox360ControllerClass::stop(IOService *provider) } // Releases all the objects used -void Xbox360ControllerClass::ReleaseAll(void) +void Xbox360Peripheral::ReleaseAll(void) { SerialDisconnect(); PadDisconnect(); @@ -561,7 +561,7 @@ void Xbox360ControllerClass::ReleaseAll(void) } // Handle message sent to the driver -IOReturn Xbox360ControllerClass::message(UInt32 type,IOService *provider,void *argument) +IOReturn Xbox360Peripheral::message(UInt32 type,IOService *provider,void *argument) { // IOLog("Message\n"); switch(type) { @@ -590,7 +590,7 @@ static inline XBox360_SShort getAbsolute(XBox360_SShort value) } // Adjusts the report for any settings speciified by the user -void Xbox360ControllerClass::fiddleReport(IOBufferMemoryDescriptor *buffer) +void Xbox360Peripheral::fiddleReport(IOBufferMemoryDescriptor *buffer) { XBOX360_IN_REPORT *report=(XBOX360_IN_REPORT*)buffer->getBytesNoCopy(); if(invertLeftX) report->left.x=~report->left.x; @@ -622,27 +622,27 @@ void Xbox360ControllerClass::fiddleReport(IOBufferMemoryDescriptor *buffer) } // This forwards a completed read notification to a member function -void Xbox360ControllerClass::ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +void Xbox360Peripheral::ReadCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { if(target!=NULL) - ((Xbox360ControllerClass*)target)->ReadComplete(parameter,status,bufferSizeRemaining); + ((Xbox360Peripheral*)target)->ReadComplete(parameter,status,bufferSizeRemaining); } -void Xbox360ControllerClass::SerialReadCompleteInternal(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +void Xbox360Peripheral::SerialReadCompleteInternal(void *target, void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { if (target != NULL) - ((Xbox360ControllerClass*)target)->SerialReadComplete(parameter, status, bufferSizeRemaining); + ((Xbox360Peripheral*)target)->SerialReadComplete(parameter, status, bufferSizeRemaining); } // This forwards a completed write notification to a member function -void Xbox360ControllerClass::WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +void Xbox360Peripheral::WriteCompleteInternal(void *target,void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { if(target!=NULL) - ((Xbox360ControllerClass*)target)->WriteComplete(parameter,status,bufferSizeRemaining); + ((Xbox360Peripheral*)target)->WriteComplete(parameter,status,bufferSizeRemaining); } // This handles a completed asynchronous read -void Xbox360ControllerClass::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { IOReturn err; bool reread=!isInactive(); @@ -675,7 +675,7 @@ void Xbox360ControllerClass::ReadComplete(void *parameter,IOReturn status,UInt32 if(reread) QueueRead(); } -void Xbox360ControllerClass::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) +void Xbox360Peripheral::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { bool reread = !isInactive(); @@ -704,7 +704,7 @@ void Xbox360ControllerClass::SerialReadComplete(void *parameter, IOReturn status } // Handle a completed asynchronous write -void Xbox360ControllerClass::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) +void Xbox360Peripheral::WriteComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { IOMemoryDescriptor *memory=(IOMemoryDescriptor*)parameter; if(status!=kIOReturnSuccess) { @@ -715,7 +715,7 @@ void Xbox360ControllerClass::WriteComplete(void *parameter,IOReturn status,UInt3 // Called by the userspace IORegistryEntrySetCFProperties function -IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) +IOReturn Xbox360Peripheral::setProperties(OSObject *properties) { OSDictionary *dictionary; @@ -727,7 +727,7 @@ IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) } else return kIOReturnBadArgument; } -IOHIDDevice* Xbox360ControllerClass::getController(int index) +IOHIDDevice* Xbox360Peripheral::getController(int index) { switch (index) { @@ -742,10 +742,10 @@ IOHIDDevice* Xbox360ControllerClass::getController(int index) // Main controller support -void Xbox360ControllerClass::PadConnect(void) +void Xbox360Peripheral::PadConnect(void) { PadDisconnect(); - padHandler = new ControllerClass; + padHandler = new Xbox360ControllerClass; if (padHandler != NULL) { const OSString *keys[] = { @@ -773,7 +773,7 @@ void Xbox360ControllerClass::PadConnect(void) } } -void Xbox360ControllerClass::PadDisconnect(void) +void Xbox360Peripheral::PadDisconnect(void) { if (padHandler != NULL) { @@ -787,7 +787,7 @@ void Xbox360ControllerClass::PadDisconnect(void) // Serial peripheral support -void Xbox360ControllerClass::SerialConnect(void) +void Xbox360Peripheral::SerialConnect(void) { SerialDisconnect(); serialHandler = new ChatPadKeyboardClass; @@ -814,7 +814,7 @@ void Xbox360ControllerClass::SerialConnect(void) } } -void Xbox360ControllerClass::SerialDisconnect(void) +void Xbox360Peripheral::SerialDisconnect(void) { if (serialHandler != NULL) { @@ -825,7 +825,7 @@ void Xbox360ControllerClass::SerialDisconnect(void) } } -void Xbox360ControllerClass::SerialMessage(IOBufferMemoryDescriptor *data, size_t length) +void Xbox360Peripheral::SerialMessage(IOBufferMemoryDescriptor *data, size_t length) { if (serialHandler != NULL) { diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index fdedeab5..69d43340 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -27,12 +27,12 @@ #include #include -class ControllerClass; +class Xbox360ControllerClass; class ChatPadKeyboardClass; -class Xbox360ControllerClass : public IOService +class Xbox360Peripheral : public IOService { - OSDeclareDefaultStructors(Xbox360ControllerClass) + OSDeclareDefaultStructors(Xbox360Peripheral) private: void ReleaseAll(void); @@ -89,7 +89,7 @@ class Xbox360ControllerClass : public IOService int serialResetCount; TIMER_STATE serialTimerState; ChatPadKeyboardClass *serialHandler; - ControllerClass *padHandler; + Xbox360ControllerClass *padHandler; // Settings bool invertLeftX,invertLeftY; diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 1f284368..345cf617 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -131,29 +131,6 @@ static void callbackConnected(void *param,io_iterator_t iterator) FFDeviceObjectReference forceFeedback; NSString *serialNumber; - if (IOObjectConformsTo(object, "Xbox360ControllerClass")) - { - io_iterator_t iter; - kern_return_t res; - io_service_t found; - - res = IORegistryEntryGetChildIterator(object, kIOServicePlane, &iter); - IOObjectRelease(object); - if (res != kIOReturnSuccess) - continue; - found = 0; - while ((object = IOIteratorNext(iter)) != 0) - { - if ((found == 0) && IOObjectConformsTo(object, "ControllerClass")) - found = object; - else - IOObjectRelease(object); - } - IOObjectRelease(iter); - if (found == 0) - continue; - object = found; - } serialNumber = GetSerialNumber(object); // Supported device - load settings ConfigController(object, GetController(serialNumber)); @@ -280,9 +257,9 @@ int main (int argc, const char * argv[]) IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName), callbackConnected, NULL, &onIteratorOther); callbackConnected(NULL, onIteratorOther); // Wired 360 devices - IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360ControllerClass"), callbackConnected, NULL, &onIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360Peripheral"), callbackConnected, NULL, &onIteratorWired); callbackConnected(NULL, onIteratorWired); - IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("Xbox360ControllerClass"), callbackDisconnected, NULL, &offIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("Xbox360Peripheral"), callbackDisconnected, NULL, &offIteratorWired); callbackDisconnected(NULL, offIteratorWired); // Wireless 360 devices IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("WirelessHIDDevice"), callbackConnected, NULL, &onIteratorWireless); diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 449ba1da..74c8d22d 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -74,7 +74,7 @@ static void ScrubDevices(NSMutableDictionary *devices) for (NSString *key in keys) { NSDictionary *device = [devices objectForKey:key]; - if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360ControllerClass"] == NSOrderedSame) + if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360Peripheral"] == NSOrderedSame) [deviceKeys addObject:key]; } @@ -103,7 +103,7 @@ static void AddDevice(NSMutableDictionary *personalities, NSString *name, int ve [controller setObject:[NSDictionary dictionaryWithObject:@"360Controller.kext/Contents/PlugIns/Feedback360.plugin" forKey:@"F4545CE5-BF5B-11D6-A4BB-0003933E3E3E"] forKey:@"IOCFPlugInTypes"]; - [controller setObject:@"Xbox360ControllerClass" + [controller setObject:@"Xbox360Peripheral" forKey:@"IOClass"]; [controller setObject:@"IOUSBDevice" forKey:@"IOProviderClass"]; @@ -150,7 +150,7 @@ int main (int argc, const char * argv[]) { for (NSString *key in keys) { NSDictionary *device = [types objectForKey:key]; - if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360ControllerClass"] != NSOrderedSame) + if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360Peripheral"] != NSOrderedSame) continue; fprintf(stdout, "%s,%i,%i\n", [key UTF8String], diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index e8f967dd..62f38d6a 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -542,7 +542,7 @@ - (void)updateDeviceList while(hidDevice=IOIteratorNext(iterator)) { parent = 0; IORegistryEntryGetParentEntry(hidDevice, kIOServicePlane, &parent); - BOOL deviceWired = IOObjectConformsTo(parent, "Xbox360ControllerClass") && IOObjectConformsTo(hidDevice, "ControllerClass"); + BOOL deviceWired = IOObjectConformsTo(parent, "Xbox360Peripheral") && IOObjectConformsTo(hidDevice, "Xbox360ControllerClass"); BOOL deviceWireless = IOObjectConformsTo(hidDevice, "WirelessHIDDevice"); if ((!deviceWired) && (!deviceWireless)) { diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 deleted file mode 100644 index d57d9a7f..00000000 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.mode1 +++ /dev/null @@ -1,1361 +0,0 @@ - - - - - ActivePerspectiveName - Project - AllowedModules - - - BundleLoadPath - - MaxInstances - n - Module - PBXSmartGroupTreeModule - Name - Groups and Files Outline View - - - BundleLoadPath - - MaxInstances - n - Module - PBXNavigatorGroup - Name - Editor - - - BundleLoadPath - - MaxInstances - n - Module - XCTaskListModule - Name - Task List - - - BundleLoadPath - - MaxInstances - n - Module - XCDetailModule - Name - File and Smart Group Detail Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXBuildResultsModule - Name - Detailed Build Results Viewer - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXProjectFindModule - Name - Project Batch Find Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXRunSessionModule - Name - Run Log - - - BundleLoadPath - - MaxInstances - n - Module - PBXBookmarksModule - Name - Bookmarks Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXClassBrowserModule - Name - Class Browser - - - BundleLoadPath - - MaxInstances - n - Module - PBXCVSModule - Name - Source Code Control Tool - - - BundleLoadPath - - MaxInstances - n - Module - PBXDebugBreakpointsModule - Name - Debug Breakpoints Tool - - - BundleLoadPath - - MaxInstances - n - Module - XCDockableInspector - Name - Inspector - - - BundleLoadPath - - MaxInstances - n - Module - PBXOpenQuicklyModule - Name - Open Quickly Tool - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugSessionModule - Name - Debugger - - - BundleLoadPath - - MaxInstances - 1 - Module - PBXDebugCLIModule - Name - Debug Console - - - Description - DefaultDescriptionKey - DockingSystemVisible - - Extension - mode1 - FavBarConfig - - PBXProjectModuleGUID - 3B18E2550B9272120093FA6E - XCBarModuleItemNames - - XCBarModuleItems - - - FirstTimeWindowDisplayed - - Identifier - com.apple.perspectives.project.mode1 - MajorVersion - 31 - MinorVersion - 1 - Name - Default - Notifications - - OpenEditors - - - Content - - PBXProjectModuleGUID - 3BE527300BDC35AB00984E1F - PBXProjectModuleLabel - Wireless360Controller.cpp - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 3BE527310BDC35AB00984E1F - PBXProjectModuleLabel - Wireless360Controller.cpp - _historyCapacity - 0 - bookmark - 3BD5A2F90C56D76B005B4E24 - history - - 3B4FCA000C49C3B6007CF491 - - - SplitCount - 1 - - StatusBarVisibility - - - Geometry - - Frame - {{0, 20}, {623, 487}} - PBXModuleWindowStatusBarHidden2 - - RubberWindowFrame - 113 131 623 528 0 0 1280 1002 - - - - PerspectiveWidths - - -1 - -1 - - Perspectives - - - ChosenToolbarItems - - active-target-popup - active-buildstyle-popup - action - NSToolbarFlexibleSpaceItem - buildOrClean - build-and-runOrDebug - com.apple.ide.PBXToolbarStopButton - get-info - toggle-editor - NSToolbarFlexibleSpaceItem - com.apple.pbx.toolbar.searchfield - - ControllerClassBaseName - - IconName - WindowOfProjectWithEditor - Identifier - perspective.project - IsVertical - - Layout - - - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 089C166AFE841209C02AAC07 - 247142CAFF3F8F9811CA285C - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 3 - 1 - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 338}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 356}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 105 479 690 397 0 0 1280 1002 - - Module - PBXSmartGroupTreeModule - Proportion - 203pt - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20306471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1CE0B20406471E060097A5F4 - PBXProjectModuleLabel - MyNewFile14.java - - SplitCount - 1 - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {482, 0}} - RubberWindowFrame - 105 479 690 397 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1CE0B20506471E060097A5F4 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{0, 5}, {482, 351}} - RubberWindowFrame - 105 479 690 397 0 0 1280 1002 - - Module - XCDetailModule - Proportion - 351pt - - - Proportion - 482pt - - - Name - Project - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - XCModuleDock - PBXNavigatorGroup - XCDetailModule - - TableOfContents - - 3BD5A2F70C56D76B005B4E24 - 1CE0B1FE06471DED0097A5F4 - 3BD5A2F80C56D76B005B4E24 - 1CE0B20306471E060097A5F4 - 1CE0B20506471E060097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default - - - ControllerClassBaseName - - IconName - WindowOfProject - Identifier - perspective.morph - IsVertical - 0 - Layout - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C37FBAC04509CD000000102 - 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD - 1C37FABC05509CD000000102 - 1C37FABC05539CD112110102 - E2644B35053B69B200211256 - 1C37FABC04509CD000100104 - 1CC0EA4004350EF90044410B - 1CC0EA4004350EF90041110B - - PBXProjectModuleGUID - 11E0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - yes - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 186 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 29B97314FDCFA39411CA2CEA - 1C37FABC05509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 337}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 1 - XCSharingToken - com.apple.Xcode.GFSharingToken - - GeometryConfiguration - - Frame - {{0, 0}, {203, 355}} - GroupTreeTableConfiguration - - MainColumn - 186 - - RubberWindowFrame - 373 269 690 397 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 100% - - - Name - Morph - PreferredWidth - 300 - ServiceClasses - - XCModuleDock - PBXSmartGroupTreeModule - - TableOfContents - - 11E0B1FE06471DED0097A5F4 - - ToolbarConfiguration - xcode.toolbar.config.default.short - - - PerspectivesBarVisible - - ShelfIsVisible - - SourceDescription - file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' - StatusbarIsVisible - - TimeStamp - 0.0 - ToolbarDisplayMode - 1 - ToolbarIsVisible - - ToolbarSizeMode - 1 - Type - Perspectives - UpdateMessage - The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? - WindowJustification - 5 - WindowOrderList - - 3BE527300BDC35AB00984E1F - /Users/colin/Projects2/OSX/360 Controller/Wireless360Controller/Wireless360Controller.xcodeproj - - WindowString - 105 479 690 397 0 0 1280 1002 - WindowTools - - - FirstTimeWindowDisplayed - - Identifier - windowTool.build - IsVertical - - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528F0623707200166675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {500, 218}} - RubberWindowFrame - 59 453 500 500 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 218pt - - - ContentConfiguration - - PBXProjectModuleGUID - XCMainBuildResultsModuleGUID - PBXProjectModuleLabel - Build - XCBuildResultsTrigger_Collapse - 1021 - XCBuildResultsTrigger_Open - 1011 - - GeometryConfiguration - - Frame - {{0, 223}, {500, 236}} - RubberWindowFrame - 59 453 500 500 0 0 1280 1002 - - Module - PBXBuildResultsModule - Proportion - 236pt - - - Proportion - 459pt - - - Name - Build Results - ServiceClasses - - PBXBuildResultsModule - - StatusbarIsVisible - - TableOfContents - - 3B18E2510B92720F0093FA6E - 3B4FC9DE0C49BD69007CF491 - 1CD0528F0623707200166675 - XCMainBuildResultsModuleGUID - - ToolbarConfiguration - xcode.toolbar.config.build - WindowString - 59 453 500 500 0 0 1280 1002 - WindowToolGUID - 3B18E2510B92720F0093FA6E - WindowToolIsVisible - - - - Identifier - windowTool.debugger - Layout - - - Dock - - - ContentConfiguration - - Debugger - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {317, 164}} - {{317, 0}, {377, 164}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {694, 164}} - {{0, 164}, {694, 216}} - - - - LauncherConfigVersion - 8 - PBXProjectModuleGUID - 1C162984064C10D400B95A72 - PBXProjectModuleLabel - Debug - GLUTExamples (Underwater) - - GeometryConfiguration - - DebugConsoleDrawerSize - {100, 120} - DebugConsoleVisible - None - DebugConsoleWindowFrame - {{200, 200}, {500, 300}} - DebugSTDIOWindowFrame - {{200, 200}, {500, 300}} - Frame - {{0, 0}, {694, 380}} - RubberWindowFrame - 321 238 694 422 0 0 1440 878 - - Module - PBXDebugSessionModule - Proportion - 100% - - - Proportion - 100% - - - Name - Debugger - ServiceClasses - - PBXDebugSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CD10A99069EF8BA00B06720 - 1C0AD2AB069F1E9B00FABCE6 - 1C162984064C10D400B95A72 - 1C0AD2AC069F1E9B00FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.debug - WindowString - 321 238 694 422 0 0 1440 878 - WindowToolGUID - 1CD10A99069EF8BA00B06720 - WindowToolIsVisible - 0 - - - FirstTimeWindowDisplayed - - Identifier - windowTool.find - IsVertical - - Layout - - - Dock - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1CDD528C0622207200134675 - PBXProjectModuleLabel - - StatusBarVisibility - - - GeometryConfiguration - - Frame - {{0, 0}, {781, 212}} - RubberWindowFrame - 134 166 781 470 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 781pt - - - Proportion - 212pt - - - BecomeActive - - ContentConfiguration - - PBXProjectModuleGUID - 1CD0528E0623707200166675 - PBXProjectModuleLabel - Project Find - - GeometryConfiguration - - Frame - {{0, 217}, {781, 212}} - RubberWindowFrame - 134 166 781 470 0 0 1280 1002 - - Module - PBXProjectFindModule - Proportion - 212pt - - - Proportion - 429pt - - - Name - Project Find - ServiceClasses - - PBXProjectFindModule - - StatusbarIsVisible - - TableOfContents - - 1C530D57069F1CE1000CFCEE - 3BCC40370BDA6D8600B1619B - 3BCC40380BDA6D8600B1619B - 1CDD528C0622207200134675 - 1CD0528E0623707200166675 - - WindowString - 134 166 781 470 0 0 1280 1002 - WindowToolGUID - 1C530D57069F1CE1000CFCEE - WindowToolIsVisible - - - - Identifier - MENUSEPARATOR - - - Identifier - windowTool.debuggerConsole - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAAC065D492600B07095 - PBXProjectModuleLabel - Debugger Console - - GeometryConfiguration - - Frame - {{0, 0}, {440, 358}} - RubberWindowFrame - 650 41 440 400 0 0 1280 1002 - - Module - PBXDebugCLIModule - Proportion - 358pt - - - Proportion - 358pt - - - Name - Debugger Console - ServiceClasses - - PBXDebugCLIModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAAD065D492600B07095 - 1C78EAAE065D492600B07095 - 1C78EAAC065D492600B07095 - - WindowString - 650 41 440 400 0 0 1280 1002 - - - Identifier - windowTool.run - Layout - - - Dock - - - ContentConfiguration - - LauncherConfigVersion - 3 - PBXProjectModuleGUID - 1CD0528B0623707200166675 - PBXProjectModuleLabel - Run - Runner - - HorizontalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {493, 167}} - {{0, 176}, {493, 267}} - - - VerticalSplitView - - _collapsingFrameDimension - 0.0 - _indexOfCollapsedView - 0 - _percentageOfCollapsedView - 0.0 - isCollapsed - yes - sizes - - {{0, 0}, {405, 443}} - {{414, 0}, {514, 443}} - - - - - GeometryConfiguration - - Frame - {{0, 0}, {460, 159}} - RubberWindowFrame - 316 696 459 200 0 0 1280 1002 - - Module - PBXRunSessionModule - Proportion - 159pt - - - Proportion - 159pt - - - Name - Run Log - ServiceClasses - - PBXRunSessionModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C0AD2B3069F1EA900FABCE6 - 1C0AD2B4069F1EA900FABCE6 - 1CD0528B0623707200166675 - 1C0AD2B5069F1EA900FABCE6 - - ToolbarConfiguration - xcode.toolbar.config.run - WindowString - 316 696 459 200 0 0 1280 1002 - WindowToolGUID - 1C0AD2B3069F1EA900FABCE6 - WindowToolIsVisible - 0 - - - Identifier - windowTool.scm - Layout - - - Dock - - - ContentConfiguration - - PBXProjectModuleGUID - 1C78EAB2065D492600B07095 - PBXProjectModuleLabel - <No Editor> - PBXSplitModuleInNavigatorKey - - Split0 - - PBXProjectModuleGUID - 1C78EAB3065D492600B07095 - - SplitCount - 1 - - StatusBarVisibility - 1 - - GeometryConfiguration - - Frame - {{0, 0}, {452, 0}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - - Module - PBXNavigatorGroup - Proportion - 0pt - - - BecomeActive - 1 - ContentConfiguration - - PBXProjectModuleGUID - 1CD052920623707200166675 - PBXProjectModuleLabel - SCM - - GeometryConfiguration - - ConsoleFrame - {{0, 259}, {452, 0}} - Frame - {{0, 7}, {452, 259}} - RubberWindowFrame - 743 379 452 308 0 0 1280 1002 - TableConfiguration - - Status - 30 - FileName - 199 - Path - 197.09500122070312 - - TableFrame - {{0, 0}, {452, 250}} - - Module - PBXCVSModule - Proportion - 262pt - - - Proportion - 266pt - - - Name - SCM - ServiceClasses - - PBXCVSModule - - StatusbarIsVisible - 1 - TableOfContents - - 1C78EAB4065D492600B07095 - 1C78EAB5065D492600B07095 - 1C78EAB2065D492600B07095 - 1CD052920623707200166675 - - ToolbarConfiguration - xcode.toolbar.config.scm - WindowString - 743 379 452 308 0 0 1280 1002 - - - Identifier - windowTool.breakpoints - IsVertical - 0 - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - PBXBottomSmartGroupGIDs - - 1C77FABC04509CD000000102 - - PBXProjectModuleGUID - 1CE0B1FE06471DED0097A5F4 - PBXProjectModuleLabel - Files - PBXProjectStructureProvided - no - PBXSmartGroupTreeModuleColumnData - - PBXSmartGroupTreeModuleColumnWidthsKey - - 168 - - PBXSmartGroupTreeModuleColumnsKey_v4 - - MainColumn - - - PBXSmartGroupTreeModuleOutlineStateKey_v7 - - PBXSmartGroupTreeModuleOutlineStateExpansionKey - - 1C77FABC04509CD000000102 - - PBXSmartGroupTreeModuleOutlineStateSelectionKey - - - 0 - - - PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {168, 350}} - - PBXTopSmartGroupGIDs - - XCIncludePerspectivesSwitch - 0 - - GeometryConfiguration - - Frame - {{0, 0}, {185, 368}} - GroupTreeTableConfiguration - - MainColumn - 168 - - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - PBXSmartGroupTreeModule - Proportion - 185pt - - - ContentConfiguration - - PBXProjectModuleGUID - 1CA1AED706398EBD00589147 - PBXProjectModuleLabel - Detail - - GeometryConfiguration - - Frame - {{190, 0}, {554, 368}} - RubberWindowFrame - 315 424 744 409 0 0 1440 878 - - Module - XCDetailModule - Proportion - 554pt - - - Proportion - 368pt - - - MajorVersion - 2 - MinorVersion - 0 - Name - Breakpoints - ServiceClasses - - PBXSmartGroupTreeModule - XCDetailModule - - StatusbarIsVisible - 1 - TableOfContents - - 1CDDB66807F98D9800BB5817 - 1CDDB66907F98D9800BB5817 - 1CE0B1FE06471DED0097A5F4 - 1CA1AED706398EBD00589147 - - ToolbarConfiguration - xcode.toolbar.config.breakpoints - WindowString - 315 424 744 409 0 0 1440 878 - WindowToolGUID - 1CDDB66807F98D9800BB5817 - WindowToolIsVisible - 1 - - - Identifier - windowTool.debugAnimator - Layout - - - Dock - - - Module - PBXNavigatorGroup - Proportion - 100% - - - Proportion - 100% - - - Name - Debug Visualizer - ServiceClasses - - PBXNavigatorGroup - - StatusbarIsVisible - 1 - ToolbarConfiguration - xcode.toolbar.config.debugAnimator - WindowString - 100 100 700 500 0 0 1280 1002 - - - Identifier - windowTool.bookmarks - Layout - - - Dock - - - Module - PBXBookmarksModule - Proportion - 100% - - - Proportion - 100% - - - Name - Bookmarks - ServiceClasses - - PBXBookmarksModule - - StatusbarIsVisible - 0 - WindowString - 538 42 401 187 0 0 1280 1002 - - - Identifier - windowTool.classBrowser - Layout - - - Dock - - - BecomeActive - 1 - ContentConfiguration - - OptionsSetName - Hierarchy, all classes - PBXProjectModuleGUID - 1CA6456E063B45B4001379D8 - PBXProjectModuleLabel - Class Browser - NSObject - - GeometryConfiguration - - ClassesFrame - {{0, 0}, {374, 96}} - ClassesTreeTableConfiguration - - PBXClassNameColumnIdentifier - 208 - PBXClassBookColumnIdentifier - 22 - - Frame - {{0, 0}, {630, 331}} - MembersFrame - {{0, 105}, {374, 395}} - MembersTreeTableConfiguration - - PBXMemberTypeIconColumnIdentifier - 22 - PBXMemberNameColumnIdentifier - 216 - PBXMemberTypeColumnIdentifier - 97 - PBXMemberBookColumnIdentifier - 22 - - PBXModuleWindowStatusBarHidden2 - 1 - RubberWindowFrame - 385 179 630 352 0 0 1440 878 - - Module - PBXClassBrowserModule - Proportion - 332pt - - - Proportion - 332pt - - - Name - Class Browser - ServiceClasses - - PBXClassBrowserModule - - StatusbarIsVisible - 0 - TableOfContents - - 1C0AD2AF069F1E9B00FABCE6 - 1C0AD2B0069F1E9B00FABCE6 - 1CA6456E063B45B4001379D8 - - ToolbarConfiguration - xcode.toolbar.config.classbrowser - WindowString - 385 179 630 352 0 0 1440 878 - WindowToolGUID - 1C0AD2AF069F1E9B00FABCE6 - WindowToolIsVisible - 0 - - - - diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser b/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser deleted file mode 100644 index 3cab81b4..00000000 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/colin.pbxuser +++ /dev/null @@ -1,120 +0,0 @@ -// !$*UTF8*$! -{ - 089C1669FE841209C02AAC07 /* Project object */ = { - activeBuildConfigurationName = Release; - activeTarget = 32D94FC30562CBF700B6AF17 /* Wireless360Controller */; - addToTargets = ( - 32D94FC30562CBF700B6AF17 /* Wireless360Controller */, - ); - codeSenseManager = 3B18E24C0B92718C0093FA6E /* Code sense */; - perUserDictionary = { - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 243, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 326569052; - PBXWorkspaceStateSaveDate = 326569052; - }; - perUserProjectItems = { - 3B8B920A13770C6B0047D446 /* PlistBookmark */ = 3B8B920A13770C6B0047D446 /* PlistBookmark */; - 3B8B920B13770C6B0047D446 /* PlistBookmark */ = 3B8B920B13770C6B0047D446 /* PlistBookmark */; - }; - sourceControlManager = 3B18E24B0B92718C0093FA6E /* Source Control */; - userBuildSettings = { - }; - }; - 089C167EFE841241C02AAC07 /* English */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {547, 122}}"; - sepNavSelRange = "{86, 0}"; - sepNavVisRange = "{0, 97}"; - sepNavVisRect = "{{0, 0}, {458, 440}}"; - sepNavWindowFrame = "{{107, 209}, {497, 569}}"; - }; - }; - 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1020, 868}}"; - sepNavSelRange = "{138, 0}"; - sepNavVisRect = "{{0, 0}, {1020, 471}}"; - sepNavWindowFrame = "{{81, 256}, {1059, 600}}"; - }; - }; - 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {722, 3472}}"; - sepNavSelRange = "{5823, 5}"; - sepNavVisRange = "{5275, 1039}"; - sepNavVisRect = "{{0, 1656}, {584, 455}}"; - sepNavWindowFrame = "{{113, 75}, {623, 584}}"; - }; - }; - 32D94FC30562CBF700B6AF17 /* Wireless360Controller */ = { - activeExec = 0; - }; - 32D94FCF0562CBF700B6AF17 /* Info.plist */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {621, 793}}"; - sepNavSelRange = "{1875, 0}"; - sepNavVisRange = "{1603, 281}"; - sepNavVisRect = "{{0, 0}, {767, 645}}"; - sepNavWindowFrame = "{{351, 61}, {806, 717}}"; - }; - }; - 3B18E24B0B92718C0093FA6E /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - repositoryNamesForRoots = { - "" = ""; - }; - }; - scmType = ""; - }; - 3B18E24C0B92718C0093FA6E /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 3B8B920A13770C6B0047D446 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - name = "/Users/colin/OSX/360 Controller/Wireless360Controller/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; - 3B8B920B13770C6B0047D446 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 32D94FCF0562CBF700B6AF17 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - CFBundleVersion, - ); - name = "/Users/colin/OSX/360 Controller/Wireless360Controller/Info.plist"; - rLen = 0; - rLoc = 9223372036854775807; - }; -} From 89188b8605191e262ab3913498a1d8263e2b19f5 Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 21:39:44 +0000 Subject: [PATCH 37/66] Add mention of the Bioshock fix --- Install360Controller/Text/Welcome.rtf | 1 + 1 file changed, 1 insertion(+) diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index ed65bfba..f7d68910 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -30,6 +30,7 @@ This update includes:\ \ls1\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\ql\qnatural\pardirnatural \cf0 \ From 4acbd402fb95a2b9592110efa0175ad06ed8ef1c Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 22:50:26 +0000 Subject: [PATCH 38/66] Fix a couple of issues with device names --- 360Daemon/360Daemon.m | 4 ++-- 360Daemon/360Daemon.xcodeproj/project.pbxproj | 3 +++ Feedback360/main.c | 3 +-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 345cf617..f7b26f10 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -257,9 +257,9 @@ int main (int argc, const char * argv[]) IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName), callbackConnected, NULL, &onIteratorOther); callbackConnected(NULL, onIteratorOther); // Wired 360 devices - IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360Peripheral"), callbackConnected, NULL, &onIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("Xbox360ControllerClass"), callbackConnected, NULL, &onIteratorWired); callbackConnected(NULL, onIteratorWired); - IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("Xbox360Peripheral"), callbackDisconnected, NULL, &offIteratorWired); + IOServiceAddMatchingNotification(notifyPort, kIOTerminatedNotification, IOServiceMatching("Xbox360ControllerClass"), callbackDisconnected, NULL, &offIteratorWired); callbackDisconnected(NULL, offIteratorWired); // Wireless 360 devices IOServiceAddMatchingNotification(notifyPort, kIOFirstMatchNotification, IOServiceMatching("WirelessHIDDevice"), callbackConnected, NULL, &onIteratorWireless); diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index 7ce4059b..80532f84 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -169,6 +169,8 @@ 1DEB927508733DD40010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -178,6 +180,7 @@ GCC_PREFIX_HEADER = 360Daemon_Prefix.pch; INSTALL_PATH = "$(HOME)/bin"; PRODUCT_NAME = 360Daemon; + SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; ZERO_LINK = YES; }; name = Debug; diff --git a/Feedback360/main.c b/Feedback360/main.c index 2857f234..5c5ed317 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -72,8 +72,7 @@ static ULONG Feedback360Release(void *that) static IOReturn Feedback360Probe(void *that,CFDictionaryRef propertyTable,io_service_t service,SInt32 *order) { if ((service==0) -// || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) - || ((!IOObjectConformsTo(service,"ControllerClass")) + || ((!IOObjectConformsTo(service,"Xbox360ControllerClass")) && (!IOObjectConformsTo(service,"Wireless360Controller")))) return kIOReturnBadArgument; return S_OK; } From 3957241950ba76d1b7b1ee26555afd48b6bde35f Mon Sep 17 00:00:00 2001 From: colin Date: Sun, 8 May 2011 23:02:53 +0000 Subject: [PATCH 39/66] Fix error in force feedback that prevents it connecting --- Feedback360/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Feedback360/main.c b/Feedback360/main.c index 5c5ed317..9ee43758 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -125,8 +125,7 @@ static HRESULT Feedback360InitializeTerminate(void *that,NumVersion APIversion,i } // From probe if( (hidDevice==0) -// || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) - || ((!IOObjectConformsTo(hidDevice,"ControllerClass")) + || ((!IOObjectConformsTo(hidDevice,"Xbox360ControllerClass")) && (!IOObjectConformsTo(hidDevice,"Wireless360Controller"))) ) { // fprintf(stderr,"Feedback: Invalid device\n"); From 0b658f15015c5d99d560bef54ebc7c817c4f6601 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 13 May 2011 00:45:09 +0000 Subject: [PATCH 40/66] Fix the memory management of the kernel driver, improve the installer and the driver tool --- 360Controller/_60Controller.cpp | 10 +------- DriverTool/DriverTool.m | 12 ++++++---- .../Install360Controller.packproj | 2 +- Install360Controller/Scripts/finish.sh | 23 +++++++++++-------- Install360Controller/Scripts/upgrade.sh | 5 ++-- Pref360Control/DeviceLister.m | 1 + 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index a334bcc5..ea22e665 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -240,7 +240,6 @@ bool Xbox360Peripheral::init(OSDictionary *propTable) invertRightX=invertRightY=FALSE; deadzoneLeft=deadzoneRight=0; relativeLeft=relativeRight=FALSE; -// readSettings(); // Done return res; } @@ -503,7 +502,6 @@ bool Xbox360Peripheral::QueueWrite(const void *bytes,UInt32 length) void Xbox360Peripheral::stop(IOService *provider) { -// IOLog("Stopping\n"); ReleaseAll(); super::stop(provider); } @@ -563,7 +561,6 @@ void Xbox360Peripheral::ReleaseAll(void) // Handle message sent to the driver IOReturn Xbox360Peripheral::message(UInt32 type,IOService *provider,void *argument) { -// IOLog("Message\n"); switch(type) { case kIOMessageServiceIsTerminated: case kIOMessageServiceIsRequestingClose: @@ -763,7 +760,6 @@ void Xbox360Peripheral::PadConnect(void) { padHandler->attach(this); padHandler->start(this); - // No registerService() - IOHIDDevice does that in start() } else { @@ -778,8 +774,6 @@ void Xbox360Peripheral::PadDisconnect(void) if (padHandler != NULL) { padHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); - padHandler->stop(this); - padHandler->detach(this); padHandler->release(); padHandler = NULL; } @@ -804,7 +798,6 @@ void Xbox360Peripheral::SerialConnect(void) { serialHandler->attach(this); serialHandler->start(this); -// serialHandler->registerService(); } else { @@ -818,8 +811,8 @@ void Xbox360Peripheral::SerialDisconnect(void) { if (serialHandler != NULL) { + // Hope it's okay to terminate twice... serialHandler->terminate(kIOServiceRequired | kIOServiceSynchronous); - serialHandler->detach(this); serialHandler->release(); serialHandler = NULL; } @@ -831,7 +824,6 @@ void Xbox360Peripheral::SerialMessage(IOBufferMemoryDescriptor *data, size_t len { char *buffer = (char*)data->getBytesNoCopy(); if ((length == 5) && (buffer[0] == 0x00)) -// serialHandler->SendPacket(data); serialHandler->handleReport(data, kIOHIDReportTypeInput); } } diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 74c8d22d..2f3e5e1a 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -125,12 +125,12 @@ static void AddDevices(NSMutableDictionary *personalities, int argc, const char { int i, count; - count = (argc - 1) / 3; + count = (argc - 2) / 3; for (i = 0; i < count; i++) { - NSString *name = [NSString stringWithCString:argv[(i * 3) + 1] encoding:NSUTF8StringEncoding]; - int vendor = atoi(argv[(i * 3) + 2]); - int product = atoi(argv[(i * 3) + 3]); + NSString *name = [NSString stringWithCString:argv[(i * 3) + 2] encoding:NSUTF8StringEncoding]; + int vendor = atoi(argv[(i * 3) + 3]); + int product = atoi(argv[(i * 3) + 4]); AddDevice(personalities, name, vendor, product); } } @@ -158,7 +158,7 @@ int main (int argc, const char * argv[]) { [[device objectForKey:@"idProduct"] intValue]); } } - else if (((argc - 1) % 3) == 0) + else if ((argc > 1) && (strcmp(argv[1], "edit") == 0) && (((argc - 2) % 3) == 0)) { NSMutableDictionary *saving; NSMutableDictionary *devices; @@ -168,6 +168,8 @@ int main (int argc, const char * argv[]) { ScrubDevices(devices); AddDevices(devices, argc, argv); WriteDriverConfig(DRIVER_NAME, saving); + + system("/sbin/kextunload /System/Library/Extensions/360Controller.kext; /sbin/kextload /System/Library/Extensions/360Controller.kext"); } else NSLog(@"Invalid number of parameters (%i)", argc); diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index c52a5f08..506b69d3 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -1304,7 +1304,7 @@ IFPkgFlagRelocatable IFPkgFlagRestartAction - 1 + 0 IFPkgFlagRootVolumeOnly IFPkgFlagUpdateInstalledLanguages diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh index 9bc0e9b2..bb5095de 100644 --- a/Install360Controller/Scripts/finish.sh +++ b/Install360Controller/Scripts/finish.sh @@ -1,12 +1,17 @@ #!/bin/sh -installdir="$3" -newer=`ps auxw | grep kextd | grep -v grep | wc -l` -if [ $newer -eq 0 ] -then -cd "$installdir" +##installdir="$3" +##newer=`ps auxw | grep kextd | grep -v grep | wc -l` +##if [ $newer -eq 0 ] +##then +##cd "$installdir" +##cd System/Library/Extensions +##kextload 360Controller.kext +##else +#/bin/killall -1 kextd +##fi + +cd "$3" cd System/Library/Extensions -kextload 360Controller.kext -else -/bin/killall -1 kextd -fi +/sbin/kextload 360Controller.kext + exit 0 diff --git a/Install360Controller/Scripts/upgrade.sh b/Install360Controller/Scripts/upgrade.sh index 7a903ab0..dc5cf7d3 100644 --- a/Install360Controller/Scripts/upgrade.sh +++ b/Install360Controller/Scripts/upgrade.sh @@ -2,6 +2,5 @@ cd $3 cd System/Library/Extensions kextunload 360Controller.kext -#Fail if didn't unload? Currently, don't. -#exit $? -exit 0 +# If we can't unload the driver, the user risks kernel panics +exit $? diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index f11b587e..a7058bf5 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -198,6 +198,7 @@ - (OSStatus)writeToolWithAuthorisation:(AuthorizationRef)authorisationRef // Build array of parameters parameters = [NSMutableArray arrayWithCapacity:10]; + [parameters addObject:@"edit"]; for (NSNumber *key in enabled) { From 618b3ab4ba45b1245e921a8b010cf614b69d4e64 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 16 Jun 2011 17:21:00 +0000 Subject: [PATCH 41/66] Protect against some potential crashes --- .../360Controller.xcodeproj/project.pbxproj | 3 ++ 360Controller/ChatPad.cpp | 7 ++++ 360Controller/ChatPad.h | 2 + 360Controller/Controller.cpp | 7 ++++ 360Controller/Controller.h | 2 + 360Controller/_60Controller.cpp | 42 ++++++++++++++++--- 360Controller/_60Controller.h | 1 + 7 files changed, 58 insertions(+), 6 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 1b99abf9..28d04a92 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -261,6 +261,7 @@ 3BBDC683097938A90023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.0.0d1; GCC_DYNAMIC_NO_PIC = NO; @@ -276,6 +277,7 @@ MODULE_VERSION = 1.0.0d1; PREBINDING = NO; PRODUCT_NAME = 360Controller; + SDKROOT = macosx10.6; WRAPPER_EXTENSION = kext; ZERO_LINK = YES; }; @@ -298,6 +300,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; + LD_GENERATE_MAP_FILE = NO; MODULE_NAME = com.mice.driver.Xbox360Controller; MODULE_VERSION = 1.0.0d1; PREBINDING = NO; diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp index 0cde8b6e..406a66b4 100644 --- a/360Controller/ChatPad.cpp +++ b/360Controller/ChatPad.cpp @@ -114,6 +114,13 @@ static IOHIDDevice* GetParent(const IOService *current) return owner->getController(0); } +bool ChatPadKeyboardClass::start(IOService *provider) +{ + if (!IOHIDDevice::start(provider)) + return false; + return OSDynamicCast(Xbox360Peripheral, provider) != NULL; +} + OSString* ChatPadKeyboardClass::newManufacturerString() const { IOHIDDevice *device = GetParent(this); diff --git a/360Controller/ChatPad.h b/360Controller/ChatPad.h index db782294..0a85ef0f 100644 --- a/360Controller/ChatPad.h +++ b/360Controller/ChatPad.h @@ -16,6 +16,8 @@ class ChatPadKeyboardClass : public IOHIDDevice private: public: + virtual bool start(IOService *provider); + // IOHidDevice methods virtual IOReturn newReportDescriptor(IOMemoryDescriptor **descriptor) const; diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index 0b5ee457..e3490c23 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -41,6 +41,13 @@ static IOUSBDevice* GetOwnerProvider(const IOService *us) return OSDynamicCast(IOUSBDevice, provprov); } +bool Xbox360ControllerClass::start(IOService *provider) +{ + if (!IOHIDDevice::start(provider)) + return false; + return OSDynamicCast(Xbox360Peripheral, provider) != NULL; +} + IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) { Xbox360Peripheral *owner = GetOwner(this); diff --git a/360Controller/Controller.h b/360Controller/Controller.h index b1af407a..ed8664bc 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -17,6 +17,8 @@ class Xbox360ControllerClass : public IOHIDDevice 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; diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index ea22e665..482af90f 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -35,6 +35,22 @@ OSDefineMetaClassAndStructors(Xbox360Peripheral, IOService) #define super IOService +class LockRequired +{ +private: + IOLock *_lock; +public: + LockRequired(IOLock *lock) + { + _lock = lock; + IOLockLock(_lock); + } + ~LockRequired() + { + IOLockUnlock(_lock); + } +}; + // Find the maximum packet size of this pipe static UInt32 GetMaxPacketSize(IOUSBPipe *pipe) { @@ -224,6 +240,7 @@ void Xbox360Peripheral::readSettings(void) bool Xbox360Peripheral::init(OSDictionary *propTable) { bool res=super::init(propTable); + mainLock = IOLockAlloc(); device=NULL; interface=NULL; inPipe=NULL; @@ -247,7 +264,7 @@ bool Xbox360Peripheral::init(OSDictionary *propTable) // Free the extension void Xbox360Peripheral::free(void) { - // Don't actually do anything yet + IOLockFree(mainLock); super::free(); } @@ -259,6 +276,7 @@ bool Xbox360Peripheral::start(IOService *provider) IOUSBDevRequest controlReq; char controlBuf[2]; XBOX360_OUT_LED led; + IOWorkLoop *workloop = NULL; if (!super::start(provider)) return false; @@ -364,7 +382,8 @@ bool Xbox360Peripheral::start(IOService *provider) IOLog("start - failed to create timer for chatpad\n"); goto fail; } - if (getWorkLoop()->addEventSource(serialTimer) != kIOReturnSuccess) + workloop = getWorkLoop(); + if ((workloop == NULL) || (workloop->addEventSource(serialTimer) != kIOReturnSuccess)) { IOLog("start - failed to connect timer for chatpad\n"); goto fail; @@ -430,7 +449,6 @@ bool Xbox360Peripheral::start(IOService *provider) led.pattern=ledOff; QueueWrite(&led,sizeof(led)); // Done - readSettings(); PadConnect(); registerService(); return true; @@ -445,6 +463,8 @@ bool Xbox360Peripheral::QueueRead(void) IOUSBCompletion complete; IOReturn err; + if ((inPipe == NULL) || (inBuffer == NULL)) + return false; complete.target=this; complete.action=ReadCompleteInternal; complete.parameter=inBuffer; @@ -461,6 +481,8 @@ bool Xbox360Peripheral::QueueSerialRead(void) IOUSBCompletion complete; IOReturn err; + if ((serialInPipe == NULL) || (serialInBuffer == NULL)) + return false; complete.target = this; complete.action = SerialReadCompleteInternal; complete.parameter = serialInBuffer; @@ -509,6 +531,8 @@ void Xbox360Peripheral::stop(IOService *provider) // Releases all the objects used void Xbox360Peripheral::ReleaseAll(void) { + LockRequired locker(mainLock); + SerialDisconnect(); PadDisconnect(); if (serialTimer != NULL) @@ -641,15 +665,18 @@ void Xbox360Peripheral::WriteCompleteInternal(void *target,void *parameter,IORet // This handles a completed asynchronous read void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { + LockRequired locker(mainLock); IOReturn err; bool reread=!isInactive(); switch(status) { case kIOReturnOverrun: IOLog("read - kIOReturnOverrun, clearing stall\n"); - inPipe->ClearStall(); + if (inPipe != NULL) + inPipe->ClearStall(); // Fall through case kIOReturnSuccess: + if (inBuffer != NULL) { const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { @@ -674,17 +701,20 @@ void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 buff void Xbox360Peripheral::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { + LockRequired locker(mainLock); bool reread = !isInactive(); switch (status) { case kIOReturnOverrun: IOLog("read (serial) - kIOReturnOverrun, clearing stall\n"); - serialInPipe->ClearStall(); + if (serialInPipe != NULL) + serialInPipe->ClearStall(); // Fall through case kIOReturnSuccess: serialHeard = true; - SerialMessage(serialInBuffer, serialInBuffer->getCapacity() - bufferSizeRemaining); + if (serialInBuffer != NULL) + SerialMessage(serialInBuffer, serialInBuffer->getCapacity() - bufferSizeRemaining); break; case kIOReturnNotResponding: diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 69d43340..fafb44a0 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -74,6 +74,7 @@ class Xbox360Peripheral : public IOService } TIMER_STATE; IOUSBDevice *device; + IOLock *mainLock; // Joypad IOUSBInterface *interface; From 7c556184182e13635e48607de081783ffd623585 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 25 Jun 2011 22:26:03 +0000 Subject: [PATCH 42/66] Fix the safety check on start() and fix the installer --- 360Controller/Controller.cpp | 4 ++-- Install360Controller/Scripts/upgrade.sh | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index e3490c23..f57bca6d 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -43,9 +43,9 @@ static IOUSBDevice* GetOwnerProvider(const IOService *us) bool Xbox360ControllerClass::start(IOService *provider) { - if (!IOHIDDevice::start(provider)) + if (OSDynamicCast(Xbox360Peripheral, provider) == NULL) return false; - return OSDynamicCast(Xbox360Peripheral, provider) != NULL; + return IOHIDDevice::start(provider); } IOReturn Xbox360ControllerClass::setProperties(OSObject *properties) diff --git a/Install360Controller/Scripts/upgrade.sh b/Install360Controller/Scripts/upgrade.sh index dc5cf7d3..6483b7fa 100644 --- a/Install360Controller/Scripts/upgrade.sh +++ b/Install360Controller/Scripts/upgrade.sh @@ -1,6 +1,8 @@ #!/bin/sh +echo "installer got 0: '$0' 1: '$1' 2: '$2' 3: '$3'" cd $3 cd System/Library/Extensions +kextload 360Controller.kext kextunload 360Controller.kext -# If we can't unload the driver, the user risks kernel panics -exit $? +# If we can't unload the driver, the user risks kernel panics (not anymore) +exit 0 From 0528cbf5fcda864a6ed245683a13cff7b6d58b63 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 22 Dec 2011 09:07:34 +0000 Subject: [PATCH 43/66] Add third party temporary fix for locking issue --- 360Controller/_60Controller.cpp | 121 +++++++++++++++++--------------- 1 file changed, 64 insertions(+), 57 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 482af90f..6c2c6b76 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1,6 +1,7 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2011 Colin Munro + Bug fixes contributed by Cody "codeman38" Boisclair _60Controller.cpp - main source of the driver @@ -665,69 +666,75 @@ void Xbox360Peripheral::WriteCompleteInternal(void *target,void *parameter,IORet // This handles a completed asynchronous read void Xbox360Peripheral::ReadComplete(void *parameter,IOReturn status,UInt32 bufferSizeRemaining) { - LockRequired locker(mainLock); - IOReturn err; - bool reread=!isInactive(); - - switch(status) { - case kIOReturnOverrun: - IOLog("read - kIOReturnOverrun, clearing stall\n"); - if (inPipe != NULL) - inPipe->ClearStall(); - // Fall through - case kIOReturnSuccess: - if (inBuffer != NULL) - { - const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); - if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { - fiddleReport(inBuffer); - err = padHandler->handleReport(inBuffer, kIOHIDReportTypeInput); - if(err!=kIOReturnSuccess) { - IOLog("read - failed to handle report: 0x%.8x\n",err); - } - } - } - break; - case kIOReturnNotResponding: - IOLog("read - kIOReturnNotResponding\n"); - reread=false; - break; - default: - reread=false; - break; + if (padHandler != NULL) // avoid deadlock with release + { + LockRequired locker(mainLock); + IOReturn err; + bool reread=!isInactive(); + + switch(status) { + case kIOReturnOverrun: + IOLog("read - kIOReturnOverrun, clearing stall\n"); + if (inPipe != NULL) + inPipe->ClearStall(); + // Fall through + case kIOReturnSuccess: + if (inBuffer != NULL) + { + const XBOX360_IN_REPORT *report=(const XBOX360_IN_REPORT*)inBuffer->getBytesNoCopy(); + if((report->header.command==inReport)&&(report->header.size==sizeof(XBOX360_IN_REPORT))) { + fiddleReport(inBuffer); + err = padHandler->handleReport(inBuffer, kIOHIDReportTypeInput); + if(err!=kIOReturnSuccess) { + IOLog("read - failed to handle report: 0x%.8x\n",err); + } + } + } + break; + case kIOReturnNotResponding: + IOLog("read - kIOReturnNotResponding\n"); + reread=false; + break; + default: + reread=false; + break; + } + if(reread) QueueRead(); } - if(reread) QueueRead(); } void Xbox360Peripheral::SerialReadComplete(void *parameter, IOReturn status, UInt32 bufferSizeRemaining) { - LockRequired locker(mainLock); - bool reread = !isInactive(); - - switch (status) + if (padHandler != NULL) // avoid deadlock with release { - 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; + 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 (reread) - QueueSerialRead(); } // Handle a completed asynchronous write From 46e1c5f0314509f342edc4e310e96d77f76702fc Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 22 Dec 2011 09:17:41 +0000 Subject: [PATCH 44/66] Alter driver update tool to invalid the driver cache instead of trying to reload the driver --- DriverTool/DriverTool.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 2f3e5e1a..3ac1e64b 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -169,7 +169,7 @@ int main (int argc, const char * argv[]) { AddDevices(devices, argc, argv); WriteDriverConfig(DRIVER_NAME, saving); - system("/sbin/kextunload /System/Library/Extensions/360Controller.kext; /sbin/kextload /System/Library/Extensions/360Controller.kext"); + system("/usr/bin/touch /System/Library/Extensions"); } else NSLog(@"Invalid number of parameters (%i)", argc); From a73beb871acc1ee7d972fb841fbe90bfd9b05172 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 22 Dec 2011 09:25:11 +0000 Subject: [PATCH 45/66] Update to version 0.11 --- 360Controller/ControlStruct.h | 2 +- 360Controller/English.lproj/InfoPlist.strings | Bin 260 -> 260 bytes 360Controller/Info.plist | 116 +- 360Controller/_60Controller.h | 2 +- Feedback360/English.lproj/InfoPlist.strings | Bin 260 -> 260 bytes .../Install360Controller.packproj | 8 +- Install360Controller/Text/Welcome.rtf | 35 +- .../English.lproj/InfoPlist.strings | Bin 388 -> 388 bytes .../Pref360ControlPref.nib/designable.nib | 1030 +---------------- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 24309 -> 21724 bytes .../English.lproj/InfoPlist.strings | Bin 196 -> 196 bytes Wireless360Controller/Info.plist | 39 +- .../Wireless360Controller.cpp | 2 +- .../English.lproj/InfoPlist.strings | Bin 196 -> 196 bytes WirelessGamingReceiver/Info.plist | 30 +- 15 files changed, 173 insertions(+), 1091 deletions(-) diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index 0d12a92b..89bf60c8 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2011 Colin Munro ControlStruct.h - Structures used by the device diff --git a/360Controller/English.lproj/InfoPlist.strings b/360Controller/English.lproj/InfoPlist.strings index 90991d74ced173c0f19f56287f23efcc7ed15d86..fa15bb8105ce2d47387d2b2e398f99f8d70f3a4b 100644 GIT binary patch delta 14 VcmZo+YGIo2m)(%TkU@#T8UPCFBundleSignature ???? CFBundleVersion - 1.0.0d10 + 1.0.0d11 IOKitPersonalities - Controller + BigBenController CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 1537 + idVendor + 5227 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -35,15 +39,26 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 654 - idVendor - 1118 - DOA4Stick + ChatPadKeyboardEvents + + CFBundleIdentifier + com.apple.iokit.IOHIDFamily + IOClass + IOHIDEventDriver + IOProviderClass + IOHIDInterface + VendorID + 100 + + Controller CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 654 + idVendor + 1118 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -55,15 +70,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 10 - idVendor - 3853 - JoytekXbox360 + DOA4Stick CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 10 + idVendor + 3853 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -75,15 +90,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 48879 - idVendor - 5678 - TSZPelican + GuitarHero CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 18248 + idVendor + 5168 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -95,15 +110,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 513 - idVendor - 3695 - MadCatzGamepad + JoytekXbox360 CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 48879 + idVendor + 5678 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -115,15 +130,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 18198 - idVendor - 1848 - MadCatzProGamepad + MadCatzGamepad CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 18198 + idVendor + 1848 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -135,15 +150,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 18214 - idVendor - 1848 MadCatzMicroConGamepad CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 18230 + idVendor + 1848 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -155,15 +170,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 18230 - idVendor - 1848 - BigBenController + MadCatzProGamepad CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 18214 + idVendor + 1848 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -175,15 +190,15 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 1537 - idVendor - 5227 - GuitarHero + TSZPelican CFBundleIdentifier com.mice.driver.Xbox360Controller + idProduct + 513 + idVendor + 3695 IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -195,21 +210,6 @@ 65535 IOProviderClass IOUSBDevice - idProduct - 18248 - idVendor - 5168 - - ChatPadKeyboardEvents - - CFBundleIdentifier - com.apple.iokit.IOHIDFamily - IOClass - IOHIDEventDriver - IOProviderClass - IOHIDInterface - VendorID - 100 OSBundleLibraries @@ -218,12 +218,12 @@ 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 - com.apple.kpi.iokit - 8.0.0 diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index fafb44a0..92e7a3c4 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2011 Colin Munro _60Controller.h - declaration of the driver main class diff --git a/Feedback360/English.lproj/InfoPlist.strings b/Feedback360/English.lproj/InfoPlist.strings index 4bf2c0928b22cccccad72a4d21b77af0e7ebceb3..566f95e381aff7ec0a1511eb86b01043830c7296 100644 GIT binary patch delta 14 VcmZo+YGIo2m)(%TkU@#T8UPIFPkgDescriptionTitle XBox 360 Controller IFPkgDescriptionVersion - 0.10 + 0.11 Display Information CFBundleGetInfoString - Install360Controller 0.10 Copyrights © 2006-2011 Colin Munro + Install360Controller 0.11 Copyrights © 2006-2011 Colin Munro CFBundleIconFile CFBundleIconFile Path Type @@ -1287,7 +1287,7 @@ CFBundleName XBox 360 Controller Driver Installer CFBundleShortVersionString - 0.10 + 0.11 Options @@ -1315,7 +1315,7 @@ IFMajorVersion 0 IFMinorVersion - 10 + 11 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index f7d68910..1eda3a43 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -9,25 +9,36 @@ {\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid6} {\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid7} {\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid8} -{\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid9}} -{\*\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}} +{\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid9} +{\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid10}} +{\*\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}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\b0\fs24 Version 0.10\ +\b0\fs24 Version 0.11\ Copyright (C) 2005-2011 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\b Update 0.11: 22/12/2011\ + +\b0 \ +This update includes:\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\ls1\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\ql\qnatural\pardirnatural +\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\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\ls2\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\ @@ -39,7 +50,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\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\ls3\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\ql\qnatural\pardirnatural @@ -49,7 +60,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\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }64-bit support (untested)\ +\ls4\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\ql\qnatural\pardirnatural @@ -60,7 +71,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\ql\qnatural\pardirnatural -\ls4\ilvl0\cf0 {\listtext \'95 }10.4 bugfix\ +\ls5\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\ql\qnatural\pardirnatural \cf0 \ @@ -70,7 +81,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls5\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls6\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\ql\qnatural\pardirnatural @@ -81,7 +92,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls6\ilvl0\cf0 {\listtext \'95 }Improvements to the wireless support\ +\ls7\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\ql\qnatural\pardirnatural @@ -92,7 +103,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\ql\qnatural\pardirnatural -\ls7\ilvl0\cf0 {\listtext \'95 }Driver for the Microsoft Wireless Gaming Receiver for Windows\ +\ls8\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\ql\qnatural\pardirnatural @@ -103,7 +114,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\ql\qnatural\pardirnatural -\ls8\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\ls9\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \cf0 \ @@ -112,7 +123,7 @@ This update includes:\ \ This update includes:\ \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls9\ilvl0\cf0 {\listtext \'95 }Universal binaries, for Intel Mac support\ +\ls10\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/English.lproj/InfoPlist.strings b/Pref360Control/English.lproj/InfoPlist.strings index 27a17ca774bf8aaa6db9a0404f8c39f424152ca8..2f661f107c58a30a2dc063f9ca053a03e59bece8 100644 GIT binary patch delta 15 WcmZo+ZeiZQ$jEHSU^tnDu>k-Zt^+;* delta 15 WcmZo+ZeiZQ$jEHKU^$tEu>k-Z&jUpO diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index 8e05e448..82ad18ce 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -3,16 +3,36 @@ 1050 10J869 - 823 + 1306 1038.35 461.00 com.apple.InterfaceBuilder.CocoaPlugin - 823 + 1306 - - - + + NSMenu + NSSliderCell + NSButton + NSCustomObject + NSImageView + NSImageCell + NSSlider + NSCustomView + NSTableView + NSTextField + NSWindowTemplate + NSTextFieldCell + NSButtonCell + NSTableColumn + NSBox + NSView + NSPopUpButtonCell + NSScrollView + NSProgressIndicator + NSPopUpButton + NSMenuItem + NSScroller com.apple.InterfaceBuilder.CocoaPlugin @@ -41,7 +61,6 @@ View - {1.79769e+308, 1.79769e+308} {595, 10} @@ -52,6 +71,7 @@ 256 {{107, 260}, {471, 26}} + YES -2076049856 @@ -135,6 +155,7 @@ 256 {{40, 266}, {65, 17}} + YES 67239424 @@ -167,6 +188,7 @@ 256 {{43, 117}, {77, 77}} + MyAnalogStick NSView @@ -175,6 +197,7 @@ 256 {{123, 43}, {77, 77}} + MyDigitalStick NSView @@ -183,6 +206,7 @@ 256 {{226, 43}, {77, 77}} + MyAnalogStick NSView @@ -191,6 +215,7 @@ 256 {{306, 117}, {77, 77}} + MyMainButtons NSView @@ -199,6 +224,7 @@ 256 {{151, 141}, {126, 39}} + MyCentreButtons NSView @@ -207,6 +233,7 @@ 256 {{43, 202}, {77, 18}} + MyShoulderButton NSView @@ -215,6 +242,7 @@ 256 {{306, 202}, {77, 18}} + MyShoulderButton NSView @@ -224,6 +252,7 @@ {{41, 224}, {161, 20}} + 16392 255 @@ -233,6 +262,7 @@ {{224, 224}, {161, 20}} + 16392 255 @@ -241,6 +271,7 @@ 256 {{41, 93}, {71, 18}} + YES 67239424 @@ -264,6 +295,7 @@ 256 {{41, 73}, {71, 18}} + YES 67239424 @@ -285,6 +317,7 @@ 256 {{309, 81}, {71, 18}} + YES 67239424 @@ -306,6 +339,7 @@ 256 {{309, 61}, {71, 18}} + YES 67239424 @@ -327,6 +361,7 @@ 256 {{224, 16}, {161, 21}} + YES 67239424 @@ -355,6 +390,7 @@ 256 {{41, 53}, {64, 18}} + YES 67239424 @@ -376,6 +412,7 @@ 256 {{309, 41}, {64, 18}} + YES 67239424 @@ -405,6 +442,7 @@ 256 {{13, 193}, {153, 14}} + YES 67239424 @@ -425,11 +463,12 @@ 256 {{13, 173}, {129, 17}} + YES 67239424 272629760 - Version 0.10 + Version 0.11 LucidaGrande 10 @@ -445,6 +484,7 @@ 256 {{13, 157}, {129, 17}} + YES 67239424 @@ -461,6 +501,7 @@ 256 {{10, 138}, {129, 14}} + YES 69336577 @@ -477,6 +518,7 @@ 256 {{10, 116}, {153, 14}} + YES 69336577 @@ -493,6 +535,7 @@ 256 {{13, 11}, {150, 97}} + YES 67239424 @@ -509,10 +552,12 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{2, 2}, {179, 218}} + {{395, 16}, {183, 235}} + {0, 0} 67239424 @@ -552,6 +597,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{197, 190}, {32, 24}} + YES 130560 @@ -572,6 +618,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 268 {{17, 40}, {21, 156}} + YES 67239424 @@ -593,6 +640,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 268 {{8, 254}, {39, 38}} + YES 67239424 @@ -613,12 +661,13 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ - {595, 304} + {{7, 11}, {595, 304}} + {{0, 0}, {1280, 1002}} {595, 32} - {1.79769e+308, 1.79769e+308} + {1e+13, 1e+13} 15 @@ -628,10 +677,9 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ Window NSWindow - {1.79769e+308, 1.79769e+308} {490, 150} - + 256 @@ -847,11 +895,10 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {519, 336} - {{0, 0}, {1280, 1002}} {490, 172} - {1.79769e+308, 1.79769e+308} + {1e+13, 1e+13} DeviceLister @@ -1685,8 +1732,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin {{326, 482}, {595, 304}} - - {595, 10} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1736,8 +1781,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin {{349, 211}, {519, 336}} - - {490, 150} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1776,957 +1819,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 226 - - - - DeviceLister - NSObject - - done: - id - - - done: - - done: - id - - - - NSTableView - NSWindow - - - - list - NSTableView - - - sheet - NSWindow - - - - IBProjectSource - DeviceLister.h - - - - FirstResponder - NSObject - - IBUserSource - - - - - MyAnalogStick - NSView - - IBProjectSource - MyAnalogStick.h - - - - MyAnalogStick - NSView - - IBUserSource - - - - - MyCentreButtons - NSView - - IBProjectSource - MyCentreButtons.h - - - - MyCentreButtons - NSView - - IBUserSource - - - - - MyDigitalStick - NSView - - IBProjectSource - MyDigitalStick.h - - - - MyDigitalStick - NSView - - IBUserSource - - - - - MyMainButtons - NSView - - IBProjectSource - MyMainButtons.h - - - - MyMainButtons - NSView - - IBUserSource - - - - - MyShoulderButton - NSView - - IBProjectSource - MyShoulderButton.h - - - - MyShoulderButton - NSView - - IBUserSource - - - - - NSPreferencePane - NSObject - - id - id - - - - changeSetting: - id - - - selectDevice: - id - - - - NSImageView - MyCentreButtons - NSPopUpButton - MyDigitalStick - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - NSSlider - MyMainButtons - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - NSSlider - NSButton - NSButton - - - - batteryLevel - NSImageView - - - centreButtons - MyCentreButtons - - - deviceList - NSPopUpButton - - - digiStick - MyDigitalStick - - - leftLinked - NSButton - - - leftShoulder - MyShoulderButton - - - leftStick - MyAnalogStick - - - leftStickDeadzone - NSSlider - - - leftStickInvertX - NSButton - - - leftStickInvertY - NSButton - - - leftTrigger - NSProgressIndicator - - - leftTriggerDeadzone - NSSlider - - - rightButtons - MyMainButtons - - - rightLinked - NSButton - - - rightShoulder - MyShoulderButton - - - rightStick - MyAnalogStick - - - rightStickDeadzone - NSSlider - - - rightStickInvertX - NSButton - - - rightStickInvertY - NSButton - - - rightTrigger - NSProgressIndicator - - - rightTriggerDeadzone - NSSlider - - - rumbleEnable - NSButton - - - rumbleTest - NSButton - - - - IBUserSource - - - - - Pref360ControlPref - NSPreferencePane - - showDeviceList: - id - - - showDeviceList: - - showDeviceList: - id - - - - NSImageView - MyCentreButtons - NSPopUpButton - DeviceLister - MyDigitalStick - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - MyMainButtons - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - - - - batteryLevel - NSImageView - - - centreButtons - MyCentreButtons - - - deviceList - NSPopUpButton - - - deviceLister - DeviceLister - - - digiStick - MyDigitalStick - - - leftLinked - NSButton - - - leftShoulder - MyShoulderButton - - - leftStick - MyAnalogStick - - - leftStickDeadzone - NSSlider - - - leftStickInvertX - NSButton - - - leftStickInvertY - NSButton - - - leftTrigger - NSProgressIndicator - - - rightButtons - MyMainButtons - - - rightLinked - NSButton - - - rightShoulder - MyShoulderButton - - - rightStick - MyAnalogStick - - - rightStickDeadzone - NSSlider - - - rightStickInvertX - NSButton - - - rightStickInvertY - NSButton - - - rightTrigger - NSProgressIndicator - - - - IBProjectSource - Pref360ControlPref.h - - - - - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSBox - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSBox.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSButtonCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSButtonCell.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSImageCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSImageCell.h - - - - NSImageView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSImageView.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMenuItemCell - NSButtonCell - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItemCell.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSPopUpButtonCell - NSMenuItemCell - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButtonCell.h - - - - NSPreferencePane - NSObject - - NSView - NSView - NSView - NSWindow - - - - _firstKeyView - NSView - - - _initialKeyView - NSView - - - _lastKeyView - NSView - - - _window - NSWindow - - - - IBFrameworkSource - PreferencePanes.framework/Headers/NSPreferencePane.h - - - - NSProgressIndicator - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSProgressIndicator.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSScrollView - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSScrollView.h - - - - NSScroller - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSScroller.h - - - - NSSlider - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSSlider.h - - - - NSSliderCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSSliderCell.h - - - - NSTableColumn - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableColumn.h - - - - NSTableView - NSControl - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - + 0 IBCocoaFramework @@ -2738,7 +1831,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES - ../Pref360Control.xcodeproj 3 {9, 8} diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index edd1c2e0fc0f4590d6b1a5bad54e30f59d01f5b2..9f4b3b3fb6ba71e638fa3f7681a523c37cc4ce57 100644 GIT binary patch literal 21724 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 literal 24309 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 diff --git a/Wireless360Controller/English.lproj/InfoPlist.strings b/Wireless360Controller/English.lproj/InfoPlist.strings index 6f816f1314920f5c8cd69cbc7682b3343e60aa85..7abb052bc4df775fbdc07f8b8145c74fee30e266 100644 GIT binary patch delta 14 VcmX@Yc!Y7nUUowULk1-VYXBp71D*f? delta 14 VcmX@Yc!Y7nUUmZpO9mwdYXBpe1El}} diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index dd676bf4..3709f9f4 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -6,53 +6,32 @@ English CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleName - ${PRODUCT_NAME} CFBundleIconFile CFBundleIdentifier com.mice.driver.Wireless360Controller CFBundleInfoDictionaryVersion 6.0 + CFBundleName + ${PRODUCT_NAME} CFBundlePackageType KEXT CFBundleSignature ???? CFBundleVersion - 1.0.0d10 - IOKitPersonalities - - Wireless360Controller - - CFBundleIdentifier - com.mice.driver.Wireless360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Wireless360Controller - IOKitDebug - 65536 - IOProviderClass - WirelessDevice - Wireless360Device - 0 - - + 1.0.0d11 OSBundleLibraries - com.mice.driver.WirelessGamingReceiver - 1.0.0d1 + com.apple.iokit.IOHIDFamily + 1.2 + com.apple.kpi.iokit + 8.0.0 com.apple.kpi.libkern 8.0.0 com.apple.kpi.mach 8.0.0 - com.apple.kpi.iokit - 8.0.0 - com.apple.iokit.IOHIDFamily - 1.2 + com.mice.driver.WirelessGamingReceiver + 1.0.0d1 diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 4dd7acfc..3d04ef4e 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2011 Colin Munro Wireless360Controller.cpp - main source of the standard wireless controller driver diff --git a/WirelessGamingReceiver/English.lproj/InfoPlist.strings b/WirelessGamingReceiver/English.lproj/InfoPlist.strings index 6f816f1314920f5c8cd69cbc7682b3343e60aa85..7abb052bc4df775fbdc07f8b8145c74fee30e266 100644 GIT binary patch delta 14 VcmX@Yc!Y7nUUowULk1-VYXBp71D*f? delta 14 VcmX@Yc!Y7nUUmZpO9mwdYXBpe1El}} diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index f71faf50..cd79a99b 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -6,67 +6,67 @@ English CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleName - ${PRODUCT_NAME} CFBundleIconFile CFBundleIdentifier com.mice.driver.WirelessGamingReceiver CFBundleInfoDictionaryVersion 6.0 + CFBundleName + ${PRODUCT_NAME} CFBundlePackageType KEXT CFBundleSignature ???? CFBundleVersion - 1.0.0d10 - OSBundleCompatibleVersion - 1.0.0d1 + 1.0.0d11 IOKitPersonalities WirelessGamingReceiverForWindows CFBundleIdentifier com.mice.driver.WirelessGamingReceiver + idProduct + 1817 + idVendor + 1118 IOClass WirelessGamingReceiver IOKitDebug 65535 IOProviderClass IOUSBDevice - idProduct - 1817 - idVendor - 1118 WirelessGamingReceiverForWindowsAlternate CFBundleIdentifier com.mice.driver.WirelessGamingReceiver + idProduct + 657 + idVendor + 1118 IOClass WirelessGamingReceiver IOKitDebug 65535 IOProviderClass IOUSBDevice - idProduct - 657 - idVendor - 1118 + OSBundleCompatibleVersion + 1.0.0d1 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 - com.apple.kpi.iokit - 8.0.0 From 901909a705575c3ce289e626d4f60ea5ba1c0b18 Mon Sep 17 00:00:00 2001 From: colin Date: Wed, 11 Jan 2012 04:37:14 +0000 Subject: [PATCH 46/66] Insert a little flag to turn on protocol debugging instead of commenting it out --- .../WirelessGamingReceiver.cpp | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 25e42ef9..fc3006f7 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -24,6 +24,8 @@ #include "WirelessDevice.h" #include "devices.h" +//#define PROTOCOL_DEBUG + OSDefineMetaClassAndStructors(WirelessGamingReceiver, IOService) // Holds data for asynchronous reads @@ -414,7 +416,7 @@ void WirelessGamingReceiver::_WriteComplete(void *target, void *parameter, IORet // Processes a message for a controller void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data, int length) { -/* +#ifdef PROTOCOL_DEBUG char s[1024]; int i; @@ -425,14 +427,16 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data } s[i * 2] = '\0'; IOLog("Got data (%d, %d bytes): %s\n", index, length, s); -*/ +#endif // Handle device connections if ((length == 2) && (data[0] == 0x08)) { if (data[1] == 0x00) { // Device disconnected -// IOLog("process: Device detached\n"); +#ifdef PROTOCOL_DEBUG + IOLog("process: Device detached\n"); +#endif if (connections[index].service != NULL) { connections[index].service->SetIndex(-1); @@ -447,7 +451,9 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data else { // Device connected -// IOLog("process: Attempting to add new device\n"); +#ifdef PROTOCOL_DEBUG + IOLog("process: Attempting to add new device\n"); +#endif if (connections[index].service == NULL) { bool ready; @@ -467,7 +473,9 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data InstantiateService(index); if (ready) { -// IOLog("Registering wireless device"); +#ifdef PROTOCOL_DEBUG + IOLog("Registering wireless device"); +#endif connections[index].controllerStarted = true; connections[index].service->registerService(); } @@ -492,7 +500,9 @@ void WirelessGamingReceiver::ProcessMessage(int index, const unsigned char *data copy->readBytes(1, &c, 1); if (c == 0x0f) { -// IOLog("Registering wireless device"); +#ifdef PROTOCOL_DEBUG + IOLog("Registering wireless device"); +#endif connections[index].controllerStarted = true; connections[index].service->registerService(); } From 9143dbf88569a5c5879cfd0ba099ffc576fe7e63 Mon Sep 17 00:00:00 2001 From: colin Date: Wed, 11 Jan 2012 06:16:57 +0000 Subject: [PATCH 47/66] Update copyright messages, update build settings --- .../360Controller.xcodeproj/project.pbxproj | 30 ++++++------- 360Controller/ChatPad.cpp | 41 +++++++++--------- 360Controller/ChatPad.h | 26 ++++++++--- 360Controller/ControlStruct.h | 2 +- 360Controller/Controller.cpp | 32 ++++++++++---- 360Controller/Controller.h | 26 ++++++++--- 360Controller/_60Controller.cpp | 2 +- 360Controller/_60Controller.h | 2 +- 360Controller/chatpadhid.h | 23 ++++++++++ 360Controller/chatpadkeys.cpp | 26 ++++++++--- 360Controller/chatpadkeys.h | 26 ++++++++--- 360Controller/xbox360hid.h | 2 +- 360Daemon/360Daemon.m | 22 ++++++++++ 360Daemon/360Daemon.xcodeproj/project.pbxproj | 8 ++-- 360Daemon/ControlPrefs.h | 30 +++++++++---- 360Daemon/ControlPrefs.m | 30 +++++++++---- DriverTool/DriverTool.m | 22 ++++++++++ .../DriverTool.xcodeproj/project.pbxproj | 8 ++-- .../Feedback360.xcodeproj/project.pbxproj | 10 ++--- Feedback360/devlink.c | 2 +- Feedback360/devlink.h | 10 +---- Feedback360/emulator.c | 2 +- Feedback360/emulator.h | 2 +- Feedback360/main.c | 2 +- Feedback360/main.h | 2 +- .../Install360Controller.packproj | 2 +- Install360Controller/Scripts/finish.sh | 14 +----- Install360Controller/Text/Welcome.rtf | 6 +-- Pref360Control/DeviceItem.h | 2 +- Pref360Control/DeviceItem.m | 2 +- Pref360Control/DeviceLister.h | 30 +++++++++---- Pref360Control/DeviceLister.m | 32 ++++++++++---- .../English.lproj/InfoPlist.strings | Bin 388 -> 228 bytes .../Pref360ControlPref.nib/designable.nib | 3 +- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 21724 -> 21712 bytes Pref360Control/Info.plist | 4 ++ Pref360Control/MyAnalogStick.h | 2 +- Pref360Control/MyAnalogStick.m | 2 +- Pref360Control/MyCentreButtons.h | 2 +- Pref360Control/MyCentreButtons.m | 2 +- Pref360Control/MyDigitalStick.h | 2 +- Pref360Control/MyDigitalStick.m | 2 +- Pref360Control/MyMainButtons.h | 2 +- Pref360Control/MyMainButtons.m | 2 +- Pref360Control/MyShoulderButton.h | 2 +- Pref360Control/MyShoulderButton.m | 2 +- .../Pref360Control.xcodeproj/project.pbxproj | 10 ++--- Pref360Control/Pref360ControlPref.h | 2 +- Pref360Control/Pref360ControlPref.m | 2 +- Readme.rtf | 2 +- .../English.lproj/InfoPlist.strings | Bin 196 -> 196 bytes Wireless360Controller/Info.plist | 21 +++++++++ .../Wireless360Controller.cpp | 2 +- Wireless360Controller/Wireless360Controller.h | 2 +- .../project.pbxproj | 21 +++++---- WirelessGamingReceiver/WirelessDevice.cpp | 2 +- WirelessGamingReceiver/WirelessDevice.h | 2 +- .../WirelessGamingReceiver.cpp | 2 +- .../WirelessGamingReceiver.h | 2 +- .../project.pbxproj | 19 ++++---- WirelessGamingReceiver/WirelessHIDDevice.cpp | 2 +- WirelessGamingReceiver/WirelessHIDDevice.h | 2 +- WirelessGamingReceiver/devices.h | 2 +- 63 files changed, 398 insertions(+), 200 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 28d04a92..9e42bb0f 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -263,7 +263,7 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -274,10 +274,10 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; MODULE_NAME = com.mice.driver.Xbox360Controller; - MODULE_VERSION = 1.0.0d1; + MODULE_VERSION = 1.0.0d11; PREBINDING = NO; PRODUCT_NAME = 360Controller; - SDKROOT = macosx10.6; + SDKROOT = ""; WRAPPER_EXTENSION = kext; ZERO_LINK = YES; }; @@ -292,7 +292,7 @@ x86_64, ); COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; @@ -302,7 +302,7 @@ INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; LD_GENERATE_MAP_FILE = NO; MODULE_NAME = com.mice.driver.Xbox360Controller; - MODULE_VERSION = 1.0.0d1; + MODULE_VERSION = 1.0.0d11; PREBINDING = NO; PRODUCT_NAME = 360Controller; WRAPPER_EXTENSION = kext; @@ -313,7 +313,7 @@ 3BBDC685097938A90023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -321,7 +321,7 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; MODULE_NAME = com.mice.driver.Xbox360Controller; - MODULE_VERSION = 1.0.0d1; + MODULE_VERSION = 1.0.0d11; PREBINDING = NO; PRODUCT_NAME = 360Controller; WRAPPER_EXTENSION = kext; @@ -331,8 +331,8 @@ 3BBDC687097938A90023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = ""; }; name = Development; }; @@ -340,18 +340,18 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; - GCC_VERSION = 4.0; - MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = macosx10.5; - "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; + GCC_VERSION = ""; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = ""; + "SDKROOT[arch=x86_64]" = ""; }; name = Deployment; }; 3BBDC689097938A90023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.2; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = ""; }; name = Default; }; diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp index 406a66b4..10857156 100644 --- a/360Controller/ChatPad.cpp +++ b/360Controller/ChatPad.cpp @@ -1,10 +1,24 @@ /* - * ChatPad.cpp - * 360Controller - * - * Created by Colin on 18/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ #include @@ -89,21 +103,6 @@ OSNumber* ChatPadKeyboardClass::newProductIDNumber() const return OSNumber::withNumber(100, 32); } -/* -static IOHIDDevice* GetParent(IOService *current) -{ - IOService *parent = current->getProvider(); - if (parent == NULL) - return NULL; - return OSDynamicCast(IOHIDDevice, parent->getProvider()); -} - */ -/* -static IOHIDDevice* GetParent(const IOService *current) -{ - return OSDynamicCast(IOHIDDevice, current->getProvider()); -} - */ static IOHIDDevice* GetParent(const IOService *current) { Xbox360Peripheral *owner; diff --git a/360Controller/ChatPad.h b/360Controller/ChatPad.h index 0a85ef0f..59412b8e 100644 --- a/360Controller/ChatPad.h +++ b/360Controller/ChatPad.h @@ -1,10 +1,24 @@ /* - * ChatPad.h - * 360Controller - * - * Created by Colin on 18/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ #include diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index 89bf60c8..fad0d1b9 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2011 Colin Munro + Copyright (C) 2006-2012 Colin Munro ControlStruct.h - Structures used by the device diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index f57bca6d..d3d736cc 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -1,10 +1,24 @@ /* - * Controller.cpp - * 360Controller - * - * Created by Colin on 20/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ #include @@ -178,17 +192,17 @@ OSNumber* Xbox360ControllerClass::newLocationIDNumber() const device = GetOwnerProvider(this); if (device) { - if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("locationID")))) { location = number->unsigned32BitValue(); } else { // Make up an address - if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("USB Address")))) location |= number->unsigned8BitValue() << 24; - if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("idProduct")))) location |= number->unsigned8BitValue() << 16; } } diff --git a/360Controller/Controller.h b/360Controller/Controller.h index ed8664bc..7ace9aae 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -1,10 +1,24 @@ /* - * Controller.h - * 360Controller - * - * Created by Colin on 20/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ #include diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 6c2c6b76..845f14b6 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2011 Colin Munro + Copyright (C) 2006-2012 Colin Munro Bug fixes contributed by Cody "codeman38" Boisclair _60Controller.cpp - main source of the driver diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 92e7a3c4..1776586f 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2011 Colin Munro + Copyright (C) 2006-2012 Colin Munro _60Controller.h - declaration of the driver main class diff --git a/360Controller/chatpadhid.h b/360Controller/chatpadhid.h index 104edc35..991a81e6 100755 --- a/360Controller/chatpadhid.h +++ b/360Controller/chatpadhid.h @@ -1,3 +1,26 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ + // F:\Documents and Settings\Desktop\hid\ChatPad_Keyboard.h diff --git a/360Controller/chatpadkeys.cpp b/360Controller/chatpadkeys.cpp index 72bcabe7..3c6af990 100644 --- a/360Controller/chatpadkeys.cpp +++ b/360Controller/chatpadkeys.cpp @@ -1,10 +1,24 @@ /* - * chatpadkeys.cpp - * 360Controller - * - * Created by Colin on 18/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ #include "chatpadkeys.h" diff --git a/360Controller/chatpadkeys.h b/360Controller/chatpadkeys.h index 5a7446d3..a8ab558c 100644 --- a/360Controller/chatpadkeys.h +++ b/360Controller/chatpadkeys.h @@ -1,10 +1,24 @@ /* - * chatpadkeys.h - * 360Controller - * - * Created by Colin on 18/11/2009. - * Copyright 2009 __MyCompanyName__. All rights reserved. - * + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 */ unsigned char ChatPad2USB(unsigned char input); diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index 60469f45..9ab5b302 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro xbox360hid.h - HID descriptor for the driver diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index f7b26f10..711bab3d 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import #import #import diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index 80532f84..53fe6983 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -180,7 +180,7 @@ GCC_PREFIX_HEADER = 360Daemon_Prefix.pch; INSTALL_PATH = "$(HOME)/bin"; PRODUCT_NAME = 360Daemon; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + SDKROOT = ""; ZERO_LINK = YES; }; name = Debug; @@ -202,8 +202,9 @@ buildSettings = { GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + SDKROOT = ""; }; name = Debug; }; @@ -214,8 +215,9 @@ ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + SDKROOT = ""; }; name = Release; }; diff --git a/360Daemon/ControlPrefs.h b/360Daemon/ControlPrefs.h index 744ca952..c3605b09 100644 --- a/360Daemon/ControlPrefs.h +++ b/360Daemon/ControlPrefs.h @@ -1,11 +1,25 @@ -// -// ControlPrefs.h -// 360Daemon -// -// Created by Colin Munro on 8/11/07. -// Copyright 2007 Colin Munro. All rights reserved. -// - +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import #define DOM_DAEMON CFSTR("com.mice.driver.Xbox360Controller.daemon") diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 8df48dbd..1558f2af 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -1,11 +1,25 @@ -// -// ControlPrefs.m -// 360Daemon -// -// Created by Colin Munro on 8/11/07. -// Copyright 2007 Colin Munro. All rights reserved. -// - +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import "ControlPrefs.h" void SetAlertDisabled(int index) diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 3ac1e64b..5a3a301c 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -1,3 +1,25 @@ +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import #define DRIVER_NAME @"360Controller.kext" diff --git a/DriverTool/DriverTool.xcodeproj/project.pbxproj b/DriverTool/DriverTool.xcodeproj/project.pbxproj index bc17585b..e68cde50 100644 --- a/DriverTool/DriverTool.xcodeproj/project.pbxproj +++ b/DriverTool/DriverTool.xcodeproj/project.pbxproj @@ -172,7 +172,7 @@ GCC_PREFIX_HEADER = DriverTool_Prefix.pch; INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = DriverTool; - SDKROOT = macosx10.5; + SDKROOT = ""; }; name = Release; }; @@ -184,9 +184,10 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; PREBINDING = NO; - SDKROOT = macosx10.6; + SDKROOT = ""; }; name = Debug; }; @@ -197,8 +198,9 @@ GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = macosx10.5; + SDKROOT = ""; }; name = Release; }; diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj index 506bdf55..e47767ec 100644 --- a/Feedback360/Feedback360.xcodeproj/project.pbxproj +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -228,8 +228,8 @@ 3BBDC69809793BF60023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = ""; }; name = Development; }; @@ -239,15 +239,15 @@ ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; MACOSX_DEPLOYMENT_TARGET = 10.5; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; + SDKROOT = ""; }; name = Deployment; }; 3BBDC69A09793BF60023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = ""; }; name = Default; }; diff --git a/Feedback360/devlink.c b/Feedback360/devlink.c index 25526e42..b6eb8add 100644 --- a/Feedback360/devlink.c +++ b/Feedback360/devlink.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro devlink.c - code to speak to the driver itself diff --git a/Feedback360/devlink.h b/Feedback360/devlink.h index 3bb9ce25..6a9bf2ac 100644 --- a/Feedback360/devlink.h +++ b/Feedback360/devlink.h @@ -1,14 +1,6 @@ -/* - * devlink.h - * Feedback360 - * - * Created by Colin Munro on 3/1/06. - * Copyright 2006 Colin Munro. All rights reserved. - * - */ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro devlink.h - Interface to the device link diff --git a/Feedback360/emulator.c b/Feedback360/emulator.c index 34d5b401..f7fbe519 100644 --- a/Feedback360/emulator.c +++ b/Feedback360/emulator.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro emulator.c - simulate a force feedback device diff --git a/Feedback360/emulator.h b/Feedback360/emulator.h index 6d42ca82..b91bb7d7 100644 --- a/Feedback360/emulator.h +++ b/Feedback360/emulator.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro emulator.h - Interface to fake FF API effects using rumble motors diff --git a/Feedback360/main.c b/Feedback360/main.c index 9ee43758..328b993e 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro main.c - Main code for the FF plugin diff --git a/Feedback360/main.h b/Feedback360/main.h index c8df1c5f..e3b9f1ce 100644 --- a/Feedback360/main.h +++ b/Feedback360/main.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006 Colin Munro + Copyright (C) 2006-2012 Colin Munro main.h - defines the structure used for the plugin COM object diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj index b5a74972..7102cd47 100644 --- a/Install360Controller/Install360Controller.packproj +++ b/Install360Controller/Install360Controller.packproj @@ -1277,7 +1277,7 @@ Display Information CFBundleGetInfoString - Install360Controller 0.11 Copyrights © 2006-2011 Colin Munro + Install360Controller 0.11 Copyrights © 2006-2012 Colin Munro CFBundleIconFile CFBundleIconFile Path Type diff --git a/Install360Controller/Scripts/finish.sh b/Install360Controller/Scripts/finish.sh index bb5095de..6f058a87 100644 --- a/Install360Controller/Scripts/finish.sh +++ b/Install360Controller/Scripts/finish.sh @@ -1,17 +1,5 @@ #!/bin/sh -##installdir="$3" -##newer=`ps auxw | grep kextd | grep -v grep | wc -l` -##if [ $newer -eq 0 ] -##then -##cd "$installdir" -##cd System/Library/Extensions -##kextload 360Controller.kext -##else -#/bin/killall -1 kextd -##fi -cd "$3" -cd System/Library/Extensions -/sbin/kextload 360Controller.kext +/usr/bin/touch /System/Library/Extensions exit 0 diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index 1eda3a43..b8e96855 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -12,18 +12,18 @@ {\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid9} {\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid10}} {\*\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}} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\margl1440\margr1440\vieww14760\viewh14700\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ \b0\fs24 Version 0.11\ -Copyright (C) 2005-2011 Colin Munro\ +Copyright (C) 2005-2012 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ -\b Update 0.11: 22/12/2011\ +\b Update 0.11: 10/01/2012\ \b0 \ This update includes:\ diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index bfa17200..0dc301e4 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro DeviceItem.h - declaration of wrapper class for device handles diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index bf024647..e1ddfb5c 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro DeviceItem.m - implementation of device wrapper class diff --git a/Pref360Control/DeviceLister.h b/Pref360Control/DeviceLister.h index 71e84b26..5ad6242b 100644 --- a/Pref360Control/DeviceLister.h +++ b/Pref360Control/DeviceLister.h @@ -1,11 +1,25 @@ -// -// DeviceLister.h -// Pref360Control -// -// Created by Colin Munro on 8/05/2011. -// Copyright 2011 __MyCompanyName__. All rights reserved. -// - +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import @class Pref360ControlPref; diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index a7058bf5..cba47dec 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -1,11 +1,25 @@ -// -// DeviceLister.m -// Pref360Control -// -// Created by Colin Munro on 8/05/2011. -// Copyright 2011 __MyCompanyName__. All rights reserved. -// - +/* + MICE Xbox 360 Controller driver for Mac OS X + Copyright (C) 2006-2012 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 + */ #import #import "DeviceLister.h" #import "Pref360ControlPref.h" @@ -430,7 +444,7 @@ - (BOOL)trySave return success; } -- (void)showWithOwner:(Pref360ControlPref*)pane; +- (void)showWithOwner:(Pref360ControlPref*)pane { owner = pane; if (![self loadDevices]) diff --git a/Pref360Control/English.lproj/InfoPlist.strings b/Pref360Control/English.lproj/InfoPlist.strings index 2f661f107c58a30a2dc063f9ca053a03e59bece8..c467d8792be8e35138c475dfe12930a43e5a8288 100644 GIT binary patch delta 15 WcmZo+e!@5*cH;aLMx)6rj7k74umsxx delta 173 zcmaFD*up#^*4~-Hjlqeblp&8Hg&~I_mBEi8ks%jID=^psu@XZ7LlKad#$e1~#$dqU z%#aUMSppQx2dY+Lu$~x|&S*ICkWw5_V=!EC0ML*;pf*p2WUvMwAU_Gn&w(2o0p#a1 YQ~>!9gJXc|Q4I$ 67239424 272629760 - (C) 2006-11 Colin Munro + (C) 2006-12 Colin Munro @@ -535,7 +535,6 @@ 256 {{13, 11}, {150, 97}} - YES 67239424 diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index 9f4b3b3fb6ba71e638fa3f7681a523c37cc4ce57..c9bfc27026fe868e04bbc17033fadd303a26558a 100644 GIT binary patch delta 10008 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 delta 9949 zcmb_>XJ8XYyY8-bN5z)yl`P4Ut!7)6WUEWIyy}IX5Q?dxV=!Q1j4`Gfq7fwY5?Dg- zy%R9KLudg)3q7F|0)zko0t5n_kx268eBU|u{7W6SIif#2jKCF`rmKEGJeFYl(Hl24WMjmDoq@C%z^Q z5C@4v#9`tHafUcgTp+$Dt`gUX`@~b?8HtfN$tF1@m*kNNWD=Q73duB5N-9VtnN4cQ zT+&FINHggm^GO%!CIe)UtV7l%Ka7wK$);ox*@|pUwkJD~UC6FvDcO_kO;(Wo$o^zC zIfRUo!^n~3C~`bGfn>;k*NA#fO+1?RvOa25On?t)*yL+}VZ2ET$Q;01UI{$S&57MsK7vjuDkJA~A=!oc5d!oQ|AMoX(tLP8UvBP6?+Qr#tgIYY=BKXBlTD zH;oxYxS35veHP9zZ-}OxU$~FCPr1))nvp$mGioG?H;CfXA%LtXixb7CMe&(Y7MHpm z#b-cn6#poSH;S?V#G-iPnx6q5FE|2^!sGA+JOj_d^Y9|P41a)E;dOWu-iCMJU3ecp zfDhqg_#}!8qIhZ)cSUh8W8tKcb)tAZrXI&e9EOLOYR-M$0Vsf9!~O8!qH-<{cEWvd z5!07fj_+hTYeY5Ac?-EI8+mXO6bNt(ZbOCF)GQNjW)a)rj+##5BcyOK{2Z=+pDlo& z!KH9XjXV7_7O@a6s@W%R!@_NhT(y^>6(SKNqQo%PcH%Rh1VkrcEX-U&v}mEW$?+ONe}8nUKWaVsIG@!Bub^ zT+Xb`lq9Xj8Db4|LmylLS2CwFv%0K@zOW7Z4in-N@agy@>>jZZ`WjOyR<+ekTjL*_ z&4r!899TZFnb^{zQL}LGfs2XFcqQH!D?EbUBqr;53v`nh3nu~ za6Q}rYnYZ!`n9u;B0N|C zcfsAvXpLL^8}XcYLA*p2e<5CDvsp#NTjCvaQ6rb{fjePOxR*N8)NmF7@EZFAdxO2j z-jO5;7%HcuF_GkVq^L&CT9uY}?LDA*Nw12s&Q&D~$waKMRmTDGm+|qEDI~?r%8?N% zq=4Z&)A`sZqzK!Fso`Px4Ra+&VNJ(Y$5Y2(5oERRQc_-3SrYD7Rn@z^Z>;McSSi*M zRZ?S1@zgnH zy*9(*#n!}A7hp@sYFAd$t*Tj%-u=qDmQ?<;yD+vqUg{F_8nsX#+a6DS&nR^oUL$OM zJavWnP?ybXj%|pit}z32+2%Ibx_Igalt5P7SnJIzOS^af?~QlDR>ce5Vvgt(yl&W* zcKA65 zUc>tg+ZazhVz%iukulg;@zk%dBbt4@`Tt>nUywR-GCUl`DTMFSYm}Irg3Tbm#AcFH z@hCYB6Oz-(8RSfI7CD=oL(V1VVY|rr*mQCMxsY5$E+&_dOOfTTVKpR|lPk!Tu3@;qhWIeLiViM;F}7mI&T z{_niY59AdzziVhjH^`gh zE%G+@lKhdp!#prVf5bbtlr z@F{c1l-WrH#O?oVx>oP9e!a>U0ufet`F}zI+XJLA3_u2u0|oXHD1nL>#W`^VqBuJ{ zI58N>_qKJ^>*Pv72}l>t8FzGyx$-|El?ZDZyeva{DL}6Q;Wge0L@kxBa9Grda`+0Y2T`Us0nBcn!L}Z zqqqp3WFnjl8)ycagBGAAXa!nh!$2GCGtd?rff+!DC@zlTk|>ijN)m` zb4&1(DcCG*F6fGibpzeuqS$VXEIU7n%ieEPVbBxW7L$8G8R!Md<2J90;)W=0`2m{> zDzIs+jqk|=`d~9bB{mE6C6|JJpg+0~M1vU&s?mKY_!LB#1y)PjX9AWmis!&*QCy3L zBfwEgg&rDHR7j0s@oPHzMpqQih~n9Q4PzLzEkbQpBM%JKMOFUJ83k<%kh(l&3^ql# zabSEK#I&-~ia5`}xc9s6MV!K>;UX|G&T}Ce>K9-VniYetFTqrD&&Q3LH7Ti#?G{ly zGm5LxOtS-z_FtL3Tsa9nr@liUh~a2ZSt!Y@wHb?Nf!V05W?d?Kmz9-NE&;RfKJPob zgi|qO{(E=GXy>8M7NBcUtiyOWns_%i8))WZvHAW-H(tA^{tB?N-Cy0jpVNx>-CV$S zA;sDK*NhNH)_}DL?5}VHIbw%Cis!~5=EE@hX7<<(oK0Xe*aFI!U+p3?FN*6Jo};B= zFW85weU1MbuV#$mrg*hX_(`nV5QjZ-1bhRIf@5(?p8&mBMc6ZN27E`!;x1DhoDsu< z?}RaVMf^q*V@5`Tc6=#ygo-w=jU1By9PI^g5p{d{&(T_=xGmnTCO+DZl(@RuhLqLj z9BO1t`3mhda2?zLE&5q15M$IVhU@G!o5I=(lOwWS$`lsL- zhW7a=?up`V$bzEweM`zpx>VIJ>0jEV#2t4i!0+G{^Qa)5_#M1P4n;=fDR_%2t&dmo zp-Rm=bm`H#yn9KrlB%lG^6u`xc?jN@-0*kFuK%7@^LJL0f6vKw29L~GfiD_TQ@7;;|OcD5smH(W>6#a6MVV%vyv@-(&|uZ?Xc^w=`cl9h=M zBp#Ayu=PY5){Bs^ScHt+gUu#F#?aFLK=>j)*j5BmzQ#acxqV5>nBP!6QX+u2AABgC)~ z91iQi+3*!igJxI(C&B_`P;dt1kOTKLk{VbD2~Hkun%kkrz5UF zB|3(*g|%S62<(q!7sh4g1E@ldUF$e0vXS@F0DcGu!mdyhS3#tOHaHDR;23n4=?D#Q z5F81MkSHUIjO|ZVuoBLPqhq)skCHtEl2QCawCjZ`D#}W`bgnAxT^_eWyqFzXh!_8P zJcuBOhy4k01kEo(pxqDot54CB7>j@=2)Jd~Z1gUI5K^OSJ+>9JM7a{Q6dRDc79r9= z87kikm53mRErJ$cGrH8+{@5GPEB+kIi~k`WwglyiB?rVhveS2{Br!{b*^IVO_E2$m&-hYwm{Rs2CYWV9i*W zSbeN6_9503Yk<|pJ|-ksdl11IVXb0xLxifq_aS2Gu$6c%a1m>abWe)T$@LI(O3>-= z1Eg4FZ)kfi$ z1lS-hEA`;SD2}#tq$L5QUP#7r;e!~z`oXS9v*4hZ@;pXz)Dp=OQZ5|cj^aUh8FBPJ zY#tBXgy0dRkppAr4k@B<5z;;+SppR0*@5CeN8x!C^Em@~5%>g7KrtTVZJ|)mLqs;j z<8(ymO|k9$B$7hp3EEJMs04|^ZWKF0%322*>Deg$0g4+JFkUCForutIHsIAm#Y7A9D^`drA<Hxd4^$6oMcg4m4&xhYG_{-h zgj!7vq-IlVsXf#!Y8$lx`9xi)OH^-aGBtULNvMo9j??nO68{|{+ z9bkhjUrlLMFW3(bf+NViI}T1Fr|ul`$}XeW{aYF?C0#4>{m?v zTDnLUCx@fw7&vB*jg!wQ#EV)tsT62q((f%=wygn)5y9 zF6Rm79aqZDOcmsHYc|&-g@<#GTGwj;N2=8_R zNJvSLB%~$C5;77L395vw1WkfAA(&8-P?0b+VPwMSgs}-z5~e21NSKu{Ct+T~!h~NF z*@@CbO`<(9kk}%zd*a~4QHf0ASBYB^_a%OpcsKDmpUY3<%lH|54L_G}X6hasU)d;QfbmBNxhPKCsif&Pa2r?dD5gL zCh5zhX-RXERwivr+L5#?X;0GOq)SORlYUEjmCQ-zB_}2)C99M3lYNoo`pF+9w@hxG z+$FgzxjeaF@_^()$<@h=lb0s1N?wz^E_r=&P4cGX?a4cncPAf6zLC zatf6qOi4?TrDUXJrWB<3Q$9**p3*L*B&95+Ps-qw2`RHuR;Fx8IgoNJa5y5vN((FZqyh=TwUJ8I9 zNsuBC2vP-NL7G4*FbHTtP!JY05qvD@Ea)bv77P_c1X00o!BoK_!4ko8!Fs{hg5!cq zg6o2Ng5QLgFjHs}T7)*CLs%dz6uO08p+6#QDU1lm2&W3C31LF&WQUsIo^{w5+s8j)6{7v+f} zMv+-$6FEc$qQ;^MQ6EuXQ9scD(IC+f(WfFPnk=djZ4zw}Z4>Pf?Go)3?H3&o{UCZH zdMC!kgcyi9;sh~YoGi{1yTxtA?Zh3#oy5iBuHx?EQt>C^3UQ^lT0BBLRyG8{>(X=64e6$IOS&yRKi!#5r@Pa=>HX4S`h@hw>D$uJr{74w zm;NyQar%?=*BN96J0m57$`E9vX2>&gGISaG3|EFH!+-F%Xi85$oI*=mLHTKksp;Gm!Fegkl&Wyk>8cymp_m{ls{Go z6hehaAyG&b=?aBHrN~sc6>Sym6de?u6vc|JitdV1#V3k!ib;y8is_1(irI>}iusC# z5yc+GDa9GZS;ZB_b;a+>bY+H8p;Rd|mDx(IQm@QYeyD7sY@uwW{8-sm*UT@RD4ykic;mNYN@)a zN>trdrK(R!EWOVvzOWS(k)YLRM*YME+ZOGGUbSBxREO2I)pgay>cQ$+>iOy=>SgK`>Q(AB>UHY%nc>WjGmA4zGlyr6 z$y}DXI&*F2SD70!H)d|m+?jbg^SjJ*nHMrIWj@OMBlB$*o|T+MWo1RO3|Y1;cUG;e zI$1?o&9ho&wa#jj)h??;*5ItES!=V7WxdN*XS=f7WEW@m%&yEHnmsIgWcKLnvDxFY zXJpUHo|8Q|NOhvX5n-&Ay)fvxd;n8lNVh328piG}E-xwAXadbkdY+#%RWB z#%m^OCTSSWRLykFOwD>t=7r{W&1=mY&AS{thsXgroE&LRdX79NCr6hP z$Z4HZoYN;~aL)Lg$vHD~7UgWu*_U%F=SI%0oF8+3%DI>GT+7k&w29gzZHiW*HEXR} zyEb3z)P}T0+UDAp+Sb}O+Ai7>ZFg;zHmaShouZwpovxj!T^!MF(r(di)9%pj(jL)X z(tfYKqP?cQp?#=*r^9uG4(K>Kfi6p@(P?#hU7pUbYpiRkYo=?VYo+U{tJV$GMRZZ! zaNShhGTjQ@D%~30I^7Q4aoq{sDcu>}S=|lY6Wuf2bKOhbD?MAErkCk6^a{O7Z_@kq zL48;ssjaW8Z>lfWchz^(_t5v$NAzFlC+nx^r|PHcSL=7__vrWOzt$hrU((;#KhQta zKh{6dzssd^g}LI~v|L$kMedN?>ABl;ujl@p$IcVx$@4sU_48WfbV|m}^oy`p$ID zbis7nbjNhpbl>#UjDF-bTg+Co!(3pd%^q`Y^GD_;=8w%C%++RS9&Y~JJjy)AJkC79 zyw1GQyv4lTywkkfyw|+nd@y1@X})c~W4>$t+5C%zZOO1GEGkQuCC6g1crAWQElWd7 zYfBePZ_8lISj%|J7naGEDV7cCzjtVFD*RVSUFan zHPNcInyj?-BWq)8k+r$Cm9>qvi?zgBZtY{OvJS8gwyv^nv_|$?zqMYnes8^My6YuW4Ci|y6+&+L=zGwoaKTkSjS zyY2hz2O{=E_HXPr9fX7HNODk)REOA+=8!ou9IYHxj((1Tj%vrJj;Ld}V}xU_Kg7E;Tq){;~M9h;QGQf*)_#A z%{9X{%QeR}&$Ym{$hFk9+_lQJ##pm*>w)W`>#^&1*B|cj?uqV6ZpQtkdzyQOdzO2S zd!BoNd$D_|d%1g+dyRXYd%e5Hy~(}Bz0JMTz1zLl{k8j``>^{P_c8Yg_bK-o_gVLO zcjTh`vik@3RrhuGE%zPwUH8xKU)+z}Pu$Pk&)qNGuiSsQ-+FKl>EU>Io^<9_ozHs9*sxq(R=bd4v*7w*mKnLt>={IJI{H~CC?9@Yo42)A3b+HKYJc} ze)T-_yzsp8yzydQ!prvZynJs;#4GfQy;5(6SLx04YP>pcp4a5HdL3S;*X8wk1KzN= zj<>$|LvJH*Q*U!`D{mWbdv7Oi7jHLjskhAA+gs`F=N;&+_I~P(dO!1y^p5e4_kQ7J zyi>h1ytBP?z4N^by^Fm|z018Ty{o-zyUWBGuO>r3<{ z`vg9bFU^ofW+KD)2LNBcZJzc1vg?W^be!1s}_iLaTjrSD^3J6}g% zv9H9}!}p1=+}Fo9*f-Sosc)ojjBl)Oif@{~++X3Z^jG=&`v>|5`-k`={-}Sr|8xH+ z|5*Qc{}+D7ADQZ(?w{$OR;hslA$^X6oivODbhX1zzj{mOzzW;&$q5rY}iT|1Zx&NjAwf}7Z z3$OxYfF0lk5(7yADj*Dq0+N6%kP%P>RDsMub|jD!&Bo6RZjj2o4So4Z`5?;E3Sp;5hUH>Ez&-!Rf(S!MVW&!NtL4!N|(s zn&4N#n&9T(w&2d-p5XrA!QheLvEYf|>EPMmh2Z7jmEiT@t>B&Dz2Jl3qu`U^Z^4(r z*TJ_TJVb^#p@dLUhzg~KBq3Qy9#Vy}LOCIQ$PhAzY@z&6VaOfwg@U14p}L_4p@yNx zp`uWWQ0q|JP=`?GP}flRWE0P-qBqq}hs6bJ!ZThx5bEFdcS>yPref360ControlPref.tiff NSPrincipalClass Pref360ControlPref + CFBundleName + XBox 360 Controllers + NSPrefPaneIconLabel + Xbox 360\nControllers diff --git a/Pref360Control/MyAnalogStick.h b/Pref360Control/MyAnalogStick.h index ab00393b..65ac5b76 100644 --- a/Pref360Control/MyAnalogStick.h +++ b/Pref360Control/MyAnalogStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyAnalogStick.h - declaration of analog stick view diff --git a/Pref360Control/MyAnalogStick.m b/Pref360Control/MyAnalogStick.m index 8af0a39f..301f0f35 100644 --- a/Pref360Control/MyAnalogStick.m +++ b/Pref360Control/MyAnalogStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyAnalogStick.m - implementation of analog stick view diff --git a/Pref360Control/MyCentreButtons.h b/Pref360Control/MyCentreButtons.h index ece6ff69..48f78a12 100644 --- a/Pref360Control/MyCentreButtons.h +++ b/Pref360Control/MyCentreButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyCentreButtons.h - definition of view to draw the central buttons diff --git a/Pref360Control/MyCentreButtons.m b/Pref360Control/MyCentreButtons.m index 6766db92..11aebafc 100644 --- a/Pref360Control/MyCentreButtons.m +++ b/Pref360Control/MyCentreButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyCentreButtons.m - implementation of central button view diff --git a/Pref360Control/MyDigitalStick.h b/Pref360Control/MyDigitalStick.h index c3050f86..e80e7ea3 100644 --- a/Pref360Control/MyDigitalStick.h +++ b/Pref360Control/MyDigitalStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyDigitalStick.h - declaration of view to draw digital stick view diff --git a/Pref360Control/MyDigitalStick.m b/Pref360Control/MyDigitalStick.m index 5b9892fc..e92023f0 100644 --- a/Pref360Control/MyDigitalStick.m +++ b/Pref360Control/MyDigitalStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyDigitalStick.m - implementation of digital stick view diff --git a/Pref360Control/MyMainButtons.h b/Pref360Control/MyMainButtons.h index 66752ba8..42de151d 100644 --- a/Pref360Control/MyMainButtons.h +++ b/Pref360Control/MyMainButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyMainButtons.h - declaration of A/B/X/Y button view diff --git a/Pref360Control/MyMainButtons.m b/Pref360Control/MyMainButtons.m index 9c8dc15a..546293f2 100644 --- a/Pref360Control/MyMainButtons.m +++ b/Pref360Control/MyMainButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyMainButtons.m - implementation of A/B/X/Y button view diff --git a/Pref360Control/MyShoulderButton.h b/Pref360Control/MyShoulderButton.h index 5034878a..3b2076b8 100644 --- a/Pref360Control/MyShoulderButton.h +++ b/Pref360Control/MyShoulderButton.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyShoulderButton.h - simple button view declaration diff --git a/Pref360Control/MyShoulderButton.m b/Pref360Control/MyShoulderButton.m index 968d874e..2feb4b24 100644 --- a/Pref360Control/MyShoulderButton.m +++ b/Pref360Control/MyShoulderButton.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro MyShoulderButton.m - implementation of simple button view diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index 7fa5573e..bd41087d 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -365,7 +365,7 @@ ); OTHER_REZFLAGS = ""; PRODUCT_NAME = Pref360Control; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( "-Wmost", @@ -451,8 +451,8 @@ 3BBDC6AA097946B50023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk"; + MACOSX_DEPLOYMENT_TARGET = ""; + SDKROOT = ""; }; name = Development; }; @@ -462,7 +462,7 @@ ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; MACOSX_DEPLOYMENT_TARGET = 10.5; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; + SDKROOT = ""; }; name = Deployment; }; @@ -470,7 +470,7 @@ isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.3; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.3.9.sdk"; + SDKROOT = ""; }; name = Default; }; diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 7596adca..ff12d304 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro Pref360ControlPref.h - definition for the pref pane class diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 62f38d6a..0991da3a 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro Pref360ControlPref.m - main source of the pref pane diff --git a/Readme.rtf b/Readme.rtf index f6a242ab..b25ce558 100644 --- a/Readme.rtf +++ b/Readme.rtf @@ -9,7 +9,7 @@ \f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X \b0\fs24 \ -Copyright (C) 2006-2011 Colin Munro\ +Copyright (C) 2006-2012 Colin Munro\ {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ \ diff --git a/Wireless360Controller/English.lproj/InfoPlist.strings b/Wireless360Controller/English.lproj/InfoPlist.strings index 7abb052bc4df775fbdc07f8b8145c74fee30e266..9590a25164be1d57e4acff4636f849393a3f4c7f 100644 GIT binary patch delta 12 TcmX@Yc!Y7nepVv}B?fB%9BKn@ delta 12 TcmX@Yc!Y7nepW*UB?fB%9AyJ- diff --git a/Wireless360Controller/Info.plist b/Wireless360Controller/Info.plist index 3709f9f4..04b29c38 100644 --- a/Wireless360Controller/Info.plist +++ b/Wireless360Controller/Info.plist @@ -20,6 +20,27 @@ ???? CFBundleVersion 1.0.0d11 + IOKitPersonalities + + Wireless360Controller + + CFBundleIdentifier + com.mice.driver.Wireless360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Wireless360Controller + IOKitDebug + 65536 + IOProviderClass + WirelessDevice + Wireless360Device + 0 + + OSBundleLibraries com.apple.iokit.IOHIDFamily diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index 3d04ef4e..d2cb527f 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2011 Colin Munro + Copyright (C) 2006-2012 Colin Munro Wireless360Controller.cpp - main source of the standard wireless controller driver diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h index ce568ccf..8c2d03ee 100644 --- a/Wireless360Controller/Wireless360Controller.h +++ b/Wireless360Controller/Wireless360Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro Wireless360Controller.h - declaration of the wireless controller driver class diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 109733d6..c0ab0ac2 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -175,15 +175,15 @@ isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; - MODULE_NAME = com.yourcompany.driver.Wireless360Controller; - MODULE_VERSION = 1.0.0d1; + MODULE_NAME = com.mice.driver.Wireless360Controller; + MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = Wireless360Controller; WRAPPER_EXTENSION = kext; ZERO_LINK = YES; @@ -193,13 +193,13 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; - MODULE_NAME = com.yourcompany.driver.Wireless360Controller; - MODULE_VERSION = 1.0.0d1; + MODULE_NAME = com.mice.driver.Wireless360Controller; + MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = Wireless360Controller; WRAPPER_EXTENSION = kext; }; @@ -210,9 +210,9 @@ buildSettings = { GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; + SDKROOT = ""; }; name = Debug; }; @@ -222,10 +222,9 @@ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = macosx10.5; - "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; + SDKROOT = ""; }; name = Release; }; diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index c95bf400..954e14ca 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessDevice.cpp - generic Wireless 360 device driver diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h index 306c5f9a..73190daf 100644 --- a/WirelessGamingReceiver/WirelessDevice.h +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessDevice.h - declaration of the base wireless 360 device driver class diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index fc3006f7..57609fa3 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessGamingReceiver.cpp - main source of the wireless receiver driver diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index 60980baf..bce80e9b 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessGamingReceiver.h - declaration of the wireless receiver driver diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index 5f3a854e..ae9cfb4f 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -195,15 +195,15 @@ isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; - MODULE_NAME = com.yourcompany.driver.WirelessGamingReceiver; - MODULE_VERSION = 1.0.0d1; + MODULE_NAME = com.mice.driver.WirelessGamingReceiver; + MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = WirelessGamingReceiver; WRAPPER_EXTENSION = kext; ZERO_LINK = YES; @@ -213,13 +213,13 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d1; + CURRENT_PROJECT_VERSION = 1.0.0d11; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; - MODULE_NAME = com.yourcompany.driver.WirelessGamingReceiver; - MODULE_VERSION = 1.0.0d1; + MODULE_NAME = com.mice.driver.WirelessGamingReceiver; + MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = WirelessGamingReceiver; WRAPPER_EXTENSION = kext; }; @@ -230,9 +230,9 @@ buildSettings = { GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.2; + MACOSX_DEPLOYMENT_TARGET = ""; PREBINDING = NO; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.2.8.sdk"; + SDKROOT = ""; }; name = Debug; }; @@ -244,8 +244,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; - SDKROOT = macosx10.5; - "SDKROOT[arch=x86_64]" = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; + SDKROOT = ""; SYMROOT = build; }; name = Release; diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index f1605686..721a460d 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessHIDDevice.cpp - generic wireless 360 device driver with HID support diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index 45270dc6..3b660977 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro WirelessHIDDevice.h - declaration of generic wireless HID device diff --git a/WirelessGamingReceiver/devices.h b/WirelessGamingReceiver/devices.h index 6a8be577..cd6c3ace 100644 --- a/WirelessGamingReceiver/devices.h +++ b/WirelessGamingReceiver/devices.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2007 Colin Munro + Copyright (C) 2006-2012 Colin Munro devics.h - contains constants for the wireless driver From 81458109c7961bee6dd8e657139f6b2971c0936d Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 3 Jan 2013 14:38:58 +0000 Subject: [PATCH 48/66] Fix to build on new compiler, add support for ChatPad on newer controllers --- 360Controller/English.lproj/InfoPlist.strings | Bin 260 -> 133 bytes 360Controller/Info.plist | 6 +- 360Controller/_60Controller.cpp | 75 ++++++++---------- 360Controller/_60Controller.h | 2 + 360Daemon/360Daemon.m | 2 +- Feedback360/English.lproj/InfoPlist.strings | Bin 260 -> 133 bytes Feedback360/Info.plist | 8 +- Feedback360/main.h | 4 +- Pref360Control/DeviceLister.m | 2 +- .../Pref360Control.xcodeproj/project.pbxproj | 2 +- Pref360Control/Pref360ControlPref.m | 6 +- .../project.pbxproj | 2 +- .../English.lproj/InfoPlist.strings | Bin 196 -> 101 bytes WirelessGamingReceiver/WirelessDevice.cpp | 4 +- .../WirelessGamingReceiver.cpp | 8 +- WirelessGamingReceiver/WirelessHIDDevice.cpp | 37 ++++++--- WirelessGamingReceiver/WirelessHIDDevice.h | 1 + 17 files changed, 91 insertions(+), 68 deletions(-) diff --git a/360Controller/English.lproj/InfoPlist.strings b/360Controller/English.lproj/InfoPlist.strings index fa15bb8105ce2d47387d2b2e398f99f8d70f3a4b..068787eecb79bd9b4e4ab868214fba3551a25bb8 100644 GIT binary patch literal 133 zcmaFAd%wPxf=_;OVoqjNYKlTxYEf}!eqOOcewu=3URu6hK~83Ii9&X2WwC;mJ{Om> zn^S3CN=~X@Vs5H}t%8!VnSpbDUP)1YPEKl(k~NoKut#ZbVqQ>cVoG9CPO5W$L1j^9 idPWII?V*(l&iOf+c?!Ozc}4j;3PuJ7rn-iPO4a~%6D?2x literal 260 zcmXAkNs0nN5JlhGQxq=6cBFeFy|F&|pR;6ae`a6K!b+-A$|_Q!uXJMNemnl+4sYGN>Y*C` WlIzdn4neMSAv diff --git a/360Controller/Info.plist b/360Controller/Info.plist index c5af01ad..232463b5 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion English CFBundleExecutable - 360Controller + ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier @@ -225,5 +225,9 @@ com.apple.kpi.mach 8.0.0 + NSHumanReadableCopyright + Copyright © 2011 MICE Software. All rights reserved. + CFBundleName + ${PRODUCT_NAME} diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 845f14b6..6680c29a 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -89,6 +89,22 @@ void Xbox360Peripheral::SendInit(UInt16 value, UInt16 index) 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; + if (device->DeviceRequest(&controlReq, 100, 100, NULL) == kIOReturnSuccess) + return true; + IOLog("start - failed to %s chatpad setting\n", sendOut ? "write" : "read"); + return false; +} + void Xbox360Peripheral::SendToggle(void) { SendSpecial(serialToggle ? 0x1F : 0x1E); @@ -274,8 +290,6 @@ bool Xbox360Peripheral::start(IOService *provider) const IOUSBConfigurationDescriptor *cd; IOUSBFindInterfaceRequest intf; IOUSBFindEndpointRequest pipe; - IOUSBDevRequest controlReq; - char controlBuf[2]; XBOX360_OUT_LED led; IOWorkLoop *workloop = NULL; @@ -310,6 +324,23 @@ bool Xbox360Peripheral::start(IOService *provider) IOLog("start - unable to set configuration\n"); goto fail; } + // Get release + { + UInt16 release = device->GetDeviceRelease(); + switch (release) { + default: + IOLog("Unknown device release %.4x", release); + // fall through + case 0x0110: + chatpadInit[0] = 0x01; + chatpadInit[1] = 0x02; + break; + case 0x0114: + chatpadInit[0] = 0x09; + chatpadInit[1] = 0x00; + break; + } + } // Find correct interface intf.bInterfaceClass=kIOUSBFindInterfaceDontCare; intf.bInterfaceSubClass=93; @@ -395,44 +426,8 @@ bool Xbox360Peripheral::start(IOService *provider) SendInit(0x2344, 0x7f03); SendInit(0x5839, 0x6832); // Set 'switch' - controlReq.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBVendor, kUSBDevice); - controlReq.bRequest = 0xa1; - controlReq.wValue = 0x0000; - controlReq.wIndex = 0xe416; - controlReq.wLength = sizeof(controlBuf); - controlReq.pData = controlBuf; - if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) - { - IOLog("start - failed to read chatpad setting\n"); - goto fail; - } -// IOLog("start - read: %.2x %.2x\n", controlBuf[0], controlBuf[1]); - controlBuf[0] = 0x01; - controlBuf[1] = 0x02; - controlReq.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice); - controlReq.bRequest = 0xa1; - controlReq.wValue = 0x0000; - controlReq.wIndex = 0xe416; - controlReq.wLength = sizeof(controlBuf); - controlReq.pData = controlBuf; - if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) - { - IOLog("start - failed to write chatpad setting\n"); - goto fail; - } -// IOLog("start - write: %.2x %.2x\n", controlBuf[0], controlBuf[1]); - controlReq.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBVendor, kUSBDevice); - controlReq.bRequest = 0xa1; - controlReq.wValue = 0x0000; - controlReq.wIndex = 0xe416; - controlReq.wLength = sizeof(controlBuf); - controlReq.pData = controlBuf; - if (device->DeviceRequest(&controlReq, 100, 100, NULL) != kIOReturnSuccess) - { - IOLog("start - failed to read chatpad setting\n"); - goto fail; - } -// IOLog("start - read: %.2x %.2x\n", controlBuf[0], controlBuf[1]); + if ((!SendSwitch(false)) || (!SendSwitch(true)) || (!SendSwitch(false))) + goto fail; // Begin toggle serialHeard = false; serialActive = false; diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index 1776586f..bf46949a 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -54,6 +54,7 @@ class Xbox360Peripheral : public IOService void SendToggle(void); void SendSpecial(UInt16 value); void SendInit(UInt16 value, UInt16 index); + bool SendSwitch(bool sendOut); void PadConnect(void); void PadDisconnect(void); @@ -91,6 +92,7 @@ class Xbox360Peripheral : public IOService TIMER_STATE serialTimerState; ChatPadKeyboardClass *serialHandler; Xbox360ControllerClass *padHandler; + UInt8 chatpadInit[2]; // Settings bool invertLeftX,invertLeftY; diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 711bab3d..91fbc09a 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -73,7 +73,7 @@ static void callbackAlert(CFUserNotificationRef userNotification, CFOptionFlags [pool release]; } -void ShowAlert(int index) +static void ShowAlert(int index) { SInt32 error; NSArray *checkBoxes = [NSArray arrayWithObjects:CHECK_SHOWAGAIN, nil]; diff --git a/Feedback360/English.lproj/InfoPlist.strings b/Feedback360/English.lproj/InfoPlist.strings index 566f95e381aff7ec0a1511eb86b01043830c7296..aa95ec38ced8ffdce57939d09faa94a379353fba 100644 GIT binary patch literal 133 zcmaFAd%wPxf=_;OVoqjNYKlTxYEf}!eqOOcewu=3URu6hK~83Ii9&X2WwC;mJ{Om> zn^S3CN=~X@Vs5H}t%8zUYHCVSVsf^znSqiumtU|)X>MX(P-n14^<5Pzv~EACfh%PI diff --git a/Feedback360/Info.plist b/Feedback360/Info.plist index e0fe7a73..aa21fd16 100644 --- a/Feedback360/Info.plist +++ b/Feedback360/Info.plist @@ -1,11 +1,11 @@ - + CFBundleDevelopmentRegion English CFBundleExecutable - Feedback360 + ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier @@ -32,5 +32,9 @@ B8ED278F-EC8A-4E8E-B4CF-13E2A9D68E83 + CFBundleName + ${PRODUCT_NAME} + NSHumanReadableCopyright + Copyright © 2011 MICE Software. All rights reserved. diff --git a/Feedback360/main.h b/Feedback360/main.h index e3b9f1ce..ad8b244a 100644 --- a/Feedback360/main.h +++ b/Feedback360/main.h @@ -53,4 +53,6 @@ typedef struct _Xbox360ForceFeedback { #define FeedbackDriverUuid CFUUIDGetConstantUUIDWithBytes(NULL, \ 0xB8, 0xED, 0x27, 0x8F, 0xEC, 0x8A, 0x4E, 0x8E, \ 0xB4, 0xCF, 0x13, 0xE2, 0xA9, 0xD6, 0x8E, 0x83) - \ No newline at end of file + +// Factory function +void* Control360Factory(CFAllocatorRef allocator,CFUUIDRef uuid); diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index cba47dec..f5b17647 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -286,7 +286,7 @@ - (NSString*)readTool continue; NSUInteger vendor = [[values objectAtIndex:1] intValue]; NSUInteger product = [[values objectAtIndex:2] intValue]; - NSNumber *key = [NSNumber numberWithUnsignedInt:(vendor << 16) | product]; + NSNumber *key = [NSNumber numberWithUnsignedInt:(int)((vendor << 16) | product)]; [enabled addObject:key]; if ([entries objectForKey:key] == nil) [entries setObject:SanitiseName([values objectAtIndex:0]) forKey:key]; diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index bd41087d..9e0621ff 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -44,7 +44,7 @@ /* Begin PBXFileReference section */ 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCFA20370C41700C91783 /* Pref360Control_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pref360Control_Prefix.pch; sourceTree = ""; }; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 0991da3a..f68e4d94 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -319,9 +319,9 @@ - (void)startDevice IOReturn ret; [self resetDisplay]; - i=[deviceList indexOfSelectedItem]; + i=(int)[deviceList indexOfSelectedItem]; if(([deviceArray count]==0)||(i==-1)) { - NSLog(@"No devices found? :( device count==%i, i==%i",[deviceArray count],i); + NSLog(@"No devices found? :( device count==%i, i==%i",(int)[deviceArray count],i); return; } { @@ -539,7 +539,7 @@ - (void)updateDeviceList return; } count=0; - while(hidDevice=IOIteratorNext(iterator)) { + while((hidDevice=IOIteratorNext(iterator))) { parent = 0; IORegistryEntryGetParentEntry(hidDevice, kIOServicePlane, &parent); BOOL deviceWired = IOObjectConformsTo(parent, "Xbox360Peripheral") && IOObjectConformsTo(hidDevice, "Xbox360ControllerClass"); diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index c0ab0ac2..06719aa2 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -13,7 +13,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1A224C3EFF42367911CA2CB7 /* Wireless360Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wireless360Controller.h; sourceTree = ""; }; 1A224C3FFF42367911CA2CB7 /* Wireless360Controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Wireless360Controller.cpp; sourceTree = ""; }; 32D94FCF0562CBF700B6AF17 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; diff --git a/WirelessGamingReceiver/English.lproj/InfoPlist.strings b/WirelessGamingReceiver/English.lproj/InfoPlist.strings index 7abb052bc4df775fbdc07f8b8145c74fee30e266..f180ed5af18e45b06b857fb18502fe443c0e06c0 100644 GIT binary patch literal 101 zcmaFAd%wPxf=_;OVoqjNYKlTxYEf}!eqOOcewu=3URu6hK~83Ii9&X2WwC;mJ{Ol? zut#ZbVqQ>cVoG9CPO5W$L1j^9dPa$Yt%A~_l?u-JIhlD1zNL9Z`8o$k?krtQECNL9j;F+&p*6?YoqXzviZT*8OZ;iOiOnDGxRG9mo{ diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index 954e14ca..13affc77 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -54,7 +54,7 @@ IOMemoryDescriptor* WirelessDevice::NextPacket(void) return NULL; WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); if (receiver == NULL) - return false; + return NULL; return receiver->ReadBuffer(index); } @@ -66,7 +66,7 @@ void WirelessDevice::SendPacket(const void *data, size_t length) WirelessGamingReceiver *receiver = OSDynamicCast(WirelessGamingReceiver, getProvider()); if (receiver == NULL) return; - receiver->QueueWrite(index, data, length); + receiver->QueueWrite(index, data, (UInt32)length); } // Registers a callback function diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index 57609fa3..b8f1d8c4 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -280,7 +280,7 @@ void WirelessGamingReceiver::ReadComplete(void *parameter, IOReturn status, UInt connections[data->index].controllerIn->ClearStall(); // fall through case kIOReturnSuccess: - ProcessMessage(data->index, (unsigned char*)data->buffer->getBytesNoCopy(), data->buffer->getLength() - bufferSizeRemaining); + ProcessMessage(data->index, (unsigned char*)data->buffer->getBytesNoCopy(), (int)data->buffer->getLength() - bufferSizeRemaining); break; case kIOReturnNotResponding: // IOLog("read - kIOReturnNotResponding\n"); @@ -569,17 +569,17 @@ OSNumber* WirelessGamingReceiver::newLocationIDNumber() const if (device) { - if (number = OSDynamicCast(OSNumber, device->getProperty("locationID"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("locationID")))) { location = number->unsigned32BitValue(); } else { // Make up an address - if (number = OSDynamicCast(OSNumber, device->getProperty("USB Address"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("USB Address")))) location |= number->unsigned8BitValue() << 24; - if (number = OSDynamicCast(OSNumber, device->getProperty("idProduct"))) + if ((number = OSDynamicCast(OSNumber, device->getProperty("idProduct")))) location |= number->unsigned8BitValue() << 16; } } diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index 721a460d..1b4a7336 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -51,6 +51,19 @@ unsigned char WirelessHIDDevice::GetBatteryLevel(void) return battery; } +void WirelessHIDDevice::PowerOff(void) +{ + char buf[] = {0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + WirelessDevice *device; + + device = OSDynamicCast(WirelessDevice, getProvider()); + if (device != NULL) + { + device->SendPacket(buf, sizeof(buf)); +// device->SendPacket(weirdStart, sizeof(weirdStart)); + } +} + // Called from userspace to do something, like set the LEDs IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options) { @@ -58,18 +71,20 @@ IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportTyp if (report->readBytes(0, data, 2) < 2) return kIOReturnUnsupported; - - // LED - if (data[0] == 0x01) - { - if ((data[1] != report->getLength()) || (data[1] != 0x03)) - return kIOReturnUnsupported; - report->readBytes(2, data, 1); - SetLEDs(data[0]); - return kIOReturnSuccess; + + switch (data[0]) { + case 0x01: // LED + if ((data[1] != report->getLength()) || (data[1] != 0x03)) + return kIOReturnUnsupported; + report->readBytes(2, data, 1); + SetLEDs(data[0]); + return kIOReturnSuccess; + case 0x02: // Power + PowerOff(); + return kIOReturnSuccess; + default: + return super::setReport(report, reportType, options); } - - return super::setReport(report, reportType, options); } // Start up the driver diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index 3b660977..a411e22d 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -32,6 +32,7 @@ class WirelessHIDDevice : public IOHIDDevice OSDeclareDefaultStructors(WirelessHIDDevice); public: void SetLEDs(int mode); + void PowerOff(void); unsigned char GetBatteryLevel(void); IOReturn setReport(IOMemoryDescriptor *report, IOHIDReportType reportType, IOOptionBits options); From 60fa2c76531d7b6ee9e9830a1231cd305aa2ba9f Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 3 Jan 2013 15:00:39 +0000 Subject: [PATCH 49/66] Add 'real name' function to preference pane, remove 'add device' button --- Pref360Control/DeviceItem.h | 2 + Pref360Control/DeviceItem.m | 33 +- .../Pref360ControlPref.nib/designable.nib | 513 +++++++++++++----- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 21712 -> 20220 bytes Pref360Control/Pref360ControlPref.m | 6 +- 5 files changed, 416 insertions(+), 138 deletions(-) diff --git a/Pref360Control/DeviceItem.h b/Pref360Control/DeviceItem.h index 0dc301e4..e7a56566 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -31,10 +31,12 @@ IOHIDDeviceInterface122 **interface; FFDeviceObjectReference forceFeedback; io_service_t deviceHandle; + NSString *deviceName; } + allocateDeviceItemForDevice:(io_service_t)device; +- (NSString*)name; - (IOHIDDeviceInterface122**)hidDevice; - (FFDeviceObjectReference)ffDevice; - (io_service_t)rawDevice; diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index e1ddfb5c..8e51b123 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -22,6 +22,23 @@ */ #import "DeviceItem.h" +static NSString* GetDeviceName(io_service_t device) +{ + CFMutableDictionaryRef serviceProperties; + NSDictionary *properties; + NSString *deviceName = nil; + + if (IORegistryEntryCreateCFProperties(device, &serviceProperties, kCFAllocatorDefault, kNilOptions) != KERN_SUCCESS) + return nil; + properties = (NSDictionary*)serviceProperties; + deviceName = [properties objectForKey:(NSString*)CFSTR(kIOHIDProductKey)]; + if (deviceName == nil) + deviceName = [properties objectForKey:@"USB Product Name"]; + [deviceName retain]; + CFRelease(serviceProperties); + return deviceName; +} + @implementation DeviceItem + allocateDeviceItemForDevice:(io_service_t)device @@ -41,6 +58,7 @@ @implementation DeviceItem item->forceFeedback=0; FFCreateDevice(device,&item->forceFeedback); item->deviceHandle=device; + item->deviceName = GetDeviceName(device); return item; fail: IOObjectRelease(device); @@ -49,12 +67,21 @@ @implementation DeviceItem - (void)dealloc { - if(deviceHandle!=0) IOObjectRelease(deviceHandle); - if(interface!=NULL) (*interface)->Release(interface); - if(forceFeedback!=0) FFReleaseDevice(forceFeedback); + if(deviceHandle != 0) + IOObjectRelease(deviceHandle); + if(interface != NULL) + (*interface)->Release(interface); + if(forceFeedback != 0) + FFReleaseDevice(forceFeedback); + [deviceName release]; [super dealloc]; } +- (NSString*)name +{ + return deviceName; +} + - (IOHIDDeviceInterface122**)hidDevice { return interface; diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index a1e66112..ecb39460 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -2,37 +2,37 @@ 1050 - 10J869 - 1306 - 1038.35 - 461.00 + 12C54 + 2844 + 1187.34 + 625.00 com.apple.InterfaceBuilder.CocoaPlugin - 1306 + 2844 - NSMenu - NSSliderCell + NSBox NSButton + NSButtonCell NSCustomObject - NSImageView + NSCustomView NSImageCell + NSImageView + NSMenu + NSMenuItem + NSPopUpButton + NSPopUpButtonCell + NSProgressIndicator + NSScrollView + NSScroller NSSlider - NSCustomView + NSSliderCell + NSTableColumn NSTableView NSTextField - NSWindowTemplate NSTextFieldCell - NSButtonCell - NSTableColumn - NSBox NSView - NSPopUpButtonCell - NSScrollView - NSProgressIndicator - NSPopUpButton - NSMenuItem - NSScroller + NSWindowTemplate com.apple.InterfaceBuilder.CocoaPlugin @@ -61,6 +61,7 @@ View + {595, 10} @@ -71,10 +72,11 @@ 256 {{107, 260}, {471, 26}} + YES - -2076049856 + -2076180416 2048 LucidaGrande @@ -82,7 +84,7 @@ 1044 - 109199615 + 109199360 1 LucidaGrande @@ -149,16 +151,18 @@ YES 1 + NO 256 {{40, 266}, {65, 17}} + YES - 67239424 + 67108864 71303168 RGV2aWNlOgo @@ -182,12 +186,14 @@ + NO 256 {{43, 117}, {77, 77}} + MyAnalogStick NSView @@ -197,6 +203,7 @@ 256 {{123, 43}, {77, 77}} + MyDigitalStick NSView @@ -206,6 +213,7 @@ 256 {{226, 43}, {77, 77}} + MyAnalogStick NSView @@ -215,6 +223,7 @@ 256 {{306, 117}, {77, 77}} + MyMainButtons NSView @@ -224,6 +233,7 @@ 256 {{151, 141}, {126, 39}} + MyCentreButtons NSView @@ -233,6 +243,7 @@ 256 {{43, 202}, {77, 18}} + MyShoulderButton NSView @@ -242,6 +253,7 @@ 256 {{306, 202}, {77, 18}} + MyShoulderButton NSView @@ -249,9 +261,9 @@ 1280 - {{41, 224}, {161, 20}} + 16392 255 @@ -259,9 +271,9 @@ 1280 - {{224, 224}, {161, 20}} + 16392 255 @@ -271,15 +283,16 @@ 256 {{41, 93}, {71, 18}} + YES - 67239424 + 67108864 0 Invert X - 1211912703 + 1211912448 2 NSSwitch @@ -289,21 +302,23 @@ 200 25 + NO 256 {{41, 73}, {71, 18}} + YES - 67239424 + 67108864 0 Invert Y - 1211912703 + 1211912448 2 @@ -311,21 +326,23 @@ 200 25 + NO 256 {{309, 81}, {71, 18}} + YES - 67239424 + 67108864 0 Invert X - 1211912703 + 1211912448 2 @@ -333,21 +350,23 @@ 200 25 + NO 256 {{309, 61}, {71, 18}} + YES - 67239424 + 67108864 0 Invert Y - 1211912703 + 1211912448 2 @@ -355,16 +374,18 @@ 200 25 + NO 256 {{224, 16}, {161, 21}} + YES - 67239424 + 67108864 0 @@ -384,21 +405,23 @@ NO NO + NO 256 {{41, 53}, {64, 18}} + YES - 67239424 + 67108864 0 Linked - 1211912703 + 1211912448 2 @@ -406,21 +429,23 @@ 200 25 + NO 256 {{309, 41}, {64, 18}} + YES - 67239424 + 67108864 0 Linked - 1211912703 + 1211912448 2 @@ -428,6 +453,7 @@ 200 25 + NO @@ -435,17 +461,18 @@ - 256 + 274 256 {{13, 193}, {153, 14}} + YES - 67239424 + 67108864 272629760 Xbox 360 Controller Driver @@ -457,16 +484,18 @@ + NO 256 {{13, 173}, {129, 17}} + YES - 67239424 + 67108864 272629760 Version 0.11 @@ -478,16 +507,18 @@ + NO 256 {{13, 157}, {129, 17}} + YES - 67239424 + 67108864 272629760 (C) 2006-12 Colin Munro @@ -495,16 +526,18 @@ + NO 256 {{10, 138}, {129, 14}} + YES - 69336577 + 69206017 272629760 http://tattiebogle.net/ @@ -512,16 +545,18 @@ + NO 256 {{10, 116}, {153, 14}} + YES - 69336577 + 69206017 272629760 http://mice-software.com/ @@ -529,15 +564,18 @@ + NO 256 {{13, 11}, {150, 97}} + + YES - 67239424 + 67108864 272629760 Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIsIHBsZWFzZSBzZWUgdGhlIHN1cHBsaWVk IFJlYWRtZSBhbmQgTGljZW5jZSBkb2N1bWVudHMuCgpQbGVhc2UgY29uc2lkZXIgZG9uYXRpbmcgaWYg @@ -547,19 +585,22 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + NO {{2, 2}, {179, 218}} + {{395, 16}, {183, 235}} + {0, 0} - 67239424 + 67108864 0 About @@ -596,10 +637,11 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{197, 190}, {32, 24}} + YES - 130560 + 134217728 33554432 NSImage @@ -610,6 +652,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 0 YES + NO YES @@ -617,10 +660,11 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 268 {{17, 40}, {21, 156}} + YES - 67239424 + 67108864 0 @@ -633,16 +677,18 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ NO YES + NO - 268 + -2147483380 {{8, 254}, {39, 38}} + YES - 67239424 + 67108864 134217728 + @@ -651,22 +697,25 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 16 - -2034499329 + -2034499584 7 200 25 + NO - {{7, 11}, {595, 304}} + {595, 304} + - {{0, 0}, {1280, 1002}} + {{0, 0}, {1366, 746}} {595, 32} - {1e+13, 1e+13} + {10000000000000, 10000000000000} + YES 15 @@ -676,6 +725,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ Window NSWindow + {490, 150} @@ -695,6 +745,8 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {477, 229} YES + NO + YES -2147483392 @@ -707,7 +759,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 20 20 - 75628096 + 75497536 2048 @@ -723,12 +775,12 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ - 67239424 + 67108864 131072 - 1211912703 + 1211912448 2 NSImage @@ -751,7 +803,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 40 1000 - 75628096 + 75497536 2048 @@ -759,7 +811,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ - 337772096 + 337641536 2048 Text Cell @@ -798,6 +850,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 0 YES 0 + 1 {{1, 1}, {477, 229}} @@ -812,6 +865,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ -2147483392 {{224, 17}, {15, 102}} + NO _doScroller: 0.9925373134328358 @@ -821,6 +875,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ -2147483392 {{-100, -100}, {223, 15}} + NO 1 _doScroller: @@ -830,11 +885,14 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{20, 60}, {479, 231}} - 530 + 133650 QSAAAEEgAABBmAAAQZgAAA + 0.25 + 4 + 1 @@ -843,7 +901,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES - 68288064 + 68157504 272630784 Select the devices you would like to use with the driver: @@ -851,6 +909,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + NO @@ -859,18 +918,19 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES - 67239424 + 67108864 134217728 Done - -2038284033 + -2038284288 129 200 25 + NO @@ -879,7 +939,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ YES - 68288064 + 68157504 272630784 To save changes to this list, you must enter your password.
A restart will be required for changes to take effect. @@ -891,13 +951,15 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + NO {519, 336} - {{0, 0}, {1280, 1002}} + {{0, 0}, {1366, 746}} {490, 172} - {1e+13, 1e+13} + {10000000000000, 10000000000000} + YES DeviceLister @@ -1145,6 +1207,22 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 220 + + + deviceLister + + + + 226 + + + + dataSource + + + + 225 + done: @@ -1169,22 +1247,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 224 - - - dataSource - - - - 225 - - - - deviceLister - - - - 226 - @@ -1692,67 +1754,39 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {{326, 482}, {595, 304}} com.apple.InterfaceBuilder.CocoaPlugin {{326, 482}, {595, 304}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1772,19 +1806,12 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABBAAAAw5EAAA - com.apple.InterfaceBuilder.CocoaPlugin - {{349, 211}, {519, 336}} com.apple.InterfaceBuilder.CocoaPlugin {{349, 211}, {519, 336}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABBoAAAw5CAAA - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1795,22 +1822,13 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABDzIAAwigAAA - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABBiAAAwjAAAA - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - @@ -1818,22 +1836,249 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 226 - + + + + DeviceLister + NSObject + + done: + id + + + done: + + done: + id + + + + NSTableView + NSWindow + + + + list + NSTableView + + + sheet + NSWindow + + + + IBProjectSource + ./Classes/DeviceLister.h + + + + MyAnalogStick + NSView + + IBProjectSource + ./Classes/MyAnalogStick.h + + + + MyCentreButtons + NSView + + IBProjectSource + ./Classes/MyCentreButtons.h + + + + MyDigitalStick + NSView + + IBProjectSource + ./Classes/MyDigitalStick.h + + + + MyMainButtons + NSView + + IBProjectSource + ./Classes/MyMainButtons.h + + + + MyShoulderButton + NSView + + IBProjectSource + ./Classes/MyShoulderButton.h + + + + NSPreferencePane + NSObject + + NSView + NSView + NSView + NSWindow + + + + _firstKeyView + NSView + + + _initialKeyView + NSView + + + _lastKeyView + NSView + + + _window + NSWindow + + + + IBProjectSource + ./Classes/NSPreferencePane.h + + + + Pref360ControlPref + NSPreferencePane + + showDeviceList: + id + + + showDeviceList: + + showDeviceList: + id + + + + NSImageView + MyCentreButtons + NSPopUpButton + DeviceLister + MyDigitalStick + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + MyMainButtons + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + + + + batteryLevel + NSImageView + + + centreButtons + MyCentreButtons + + + deviceList + NSPopUpButton + + + deviceLister + DeviceLister + + + digiStick + MyDigitalStick + + + leftLinked + NSButton + + + leftShoulder + MyShoulderButton + + + leftStick + MyAnalogStick + + + leftStickDeadzone + NSSlider + + + leftStickInvertX + NSButton + + + leftStickInvertY + NSButton + + + leftTrigger + NSProgressIndicator + + + rightButtons + MyMainButtons + + + rightLinked + NSButton + + + rightShoulder + MyShoulderButton + + + rightStick + MyAnalogStick + + + rightStickDeadzone + NSSlider + + + rightStickInvertX + NSButton + + + rightStickInvertY + NSButton + + + rightTrigger + NSProgressIndicator + + + + IBProjectSource + ./Classes/Pref360ControlPref.h + + + + 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - YES 3 - {9, 8} - {7, 2} + {11, 11} + {10, 3} {15, 15} {32, 24} diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index c9bfc27026fe868e04bbc17033fadd303a26558a..bc44fa612a6a5086c76637ae6a1e0a9b9a8c2d06 100644 GIT binary patch literal 20220 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 literal 21712 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 Date: Thu, 3 Jan 2013 15:26:46 +0000 Subject: [PATCH 50/66] Remove motor test function, add power off function --- Feedback360/main.c | 6 + Pref360Control/DeviceLister.m | 2 +- .../Pref360ControlPref.nib/designable.nib | 322 ++++-------------- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 20220 -> 20382 bytes Pref360Control/Pref360ControlPref.h | 2 + Pref360Control/Pref360ControlPref.m | 28 +- 6 files changed, 88 insertions(+), 272 deletions(-) diff --git a/Feedback360/main.c b/Feedback360/main.c index 328b993e..5bbf7b2f 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -246,6 +246,12 @@ static HRESULT Feedback360Escape(void *that,FFEffectDownloadID downloadID,FFEFFE Device_Send(&this->device,buf,sizeof(buf)); } break; + case 0x03: // Power off + { + unsigned char buf[] = {0x02, 0x02}; + Device_Send(&this->device, buf, sizeof(buf)); + } + break; default: fprintf(stderr, "Xbox360Controller FF plugin: Unknown escape (%i)\n", (int)escape->dwCommand); return FFERR_UNSUPPORTED; diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index f5b17647..b51cc4b6 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -364,7 +364,7 @@ - (void)showFailure:(NSString*)message defaultButton:nil alternateButton:nil otherButton:nil - informativeTextWithFormat:message]; + informativeTextWithFormat:@"%@", message]; [alert runModal]; } diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index ecb39460..bd73b475 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -72,7 +72,6 @@ 256 {{107, 260}, {471, 26}} - YES @@ -158,7 +157,6 @@ 256 {{40, 266}, {65, 17}} - YES @@ -193,7 +191,6 @@ 256 {{43, 117}, {77, 77}} - MyAnalogStick NSView @@ -203,7 +200,6 @@ 256 {{123, 43}, {77, 77}} - MyDigitalStick NSView @@ -213,7 +209,6 @@ 256 {{226, 43}, {77, 77}} - MyAnalogStick NSView @@ -223,7 +218,6 @@ 256 {{306, 117}, {77, 77}} - MyMainButtons NSView @@ -233,7 +227,6 @@ 256 {{151, 141}, {126, 39}} - MyCentreButtons NSView @@ -243,7 +236,6 @@ 256 {{43, 202}, {77, 18}} - MyShoulderButton NSView @@ -253,7 +245,6 @@ 256 {{306, 202}, {77, 18}} - MyShoulderButton NSView @@ -263,7 +254,6 @@ 1280 {{41, 224}, {161, 20}} - 16392 255 @@ -273,7 +263,6 @@ 1280 {{224, 224}, {161, 20}} - 16392 255 @@ -283,7 +272,6 @@ 256 {{41, 93}, {71, 18}} - YES @@ -309,7 +297,6 @@ 256 {{41, 73}, {71, 18}} - YES @@ -333,7 +320,6 @@ 256 {{309, 81}, {71, 18}} - YES @@ -357,7 +343,6 @@ 256 {{309, 61}, {71, 18}} - YES @@ -381,7 +366,6 @@ 256 {{224, 16}, {161, 21}} - YES @@ -412,7 +396,6 @@ 256 {{41, 53}, {64, 18}} - YES @@ -436,8 +419,7 @@ 256 {{309, 41}, {64, 18}} - - + YES 67108864 @@ -468,7 +450,6 @@ 256 {{13, 193}, {153, 14}} - YES @@ -491,7 +472,6 @@ 256 {{13, 173}, {129, 17}} - YES @@ -514,7 +494,6 @@ 256 {{13, 157}, {129, 17}} - YES @@ -533,7 +512,6 @@ 256 {{10, 138}, {129, 14}} - YES @@ -552,7 +530,6 @@ 256 {{10, 116}, {153, 14}} - YES @@ -571,8 +548,6 @@ 256 {{13, 11}, {150, 97}} - - YES 67108864 @@ -590,13 +565,11 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{2, 2}, {179, 218}} - {{395, 16}, {183, 235}} - {0, 0} @@ -637,7 +610,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{197, 190}, {32, 24}} - YES @@ -660,7 +632,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 268 {{17, 40}, {21, 156}} - YES @@ -684,7 +655,6 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ -2147483380 {{8, 254}, {39, 38}} - YES @@ -706,10 +676,31 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ NO + + + -2147483380 + {{62, 9}, {118, 32}} + + + YES + + 67108864 + 134217728 + Power off + + + -2038284288 + 129 + + + 200 + 25 + + NO + {595, 304} - {{0, 0}, {1366, 746}} @@ -1215,6 +1206,22 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 226 + + + powerOff: + + + + 229 + + + + powerOff + + + + 230 + dataSource @@ -1303,6 +1310,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + @@ -1751,6 +1759,19 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ + + 227 + + + + + + + + 228 + + + @@ -1826,6 +1847,8 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1834,240 +1857,9 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ - 226 - - - - - DeviceLister - NSObject - - done: - id - - - done: - - done: - id - - - - NSTableView - NSWindow - - - - list - NSTableView - - - sheet - NSWindow - - - - IBProjectSource - ./Classes/DeviceLister.h - - - - MyAnalogStick - NSView - - IBProjectSource - ./Classes/MyAnalogStick.h - - - - MyCentreButtons - NSView - - IBProjectSource - ./Classes/MyCentreButtons.h - - - - MyDigitalStick - NSView - - IBProjectSource - ./Classes/MyDigitalStick.h - - - - MyMainButtons - NSView - - IBProjectSource - ./Classes/MyMainButtons.h - - - - MyShoulderButton - NSView - - IBProjectSource - ./Classes/MyShoulderButton.h - - - - NSPreferencePane - NSObject - - NSView - NSView - NSView - NSWindow - - - - _firstKeyView - NSView - - - _initialKeyView - NSView - - - _lastKeyView - NSView - - - _window - NSWindow - - - - IBProjectSource - ./Classes/NSPreferencePane.h - - - - Pref360ControlPref - NSPreferencePane - - showDeviceList: - id - - - showDeviceList: - - showDeviceList: - id - - - - NSImageView - MyCentreButtons - NSPopUpButton - DeviceLister - MyDigitalStick - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - MyMainButtons - NSButton - MyShoulderButton - MyAnalogStick - NSSlider - NSButton - NSButton - NSProgressIndicator - - - - batteryLevel - NSImageView - - - centreButtons - MyCentreButtons - - - deviceList - NSPopUpButton - - - deviceLister - DeviceLister - - - digiStick - MyDigitalStick - - - leftLinked - NSButton - - - leftShoulder - MyShoulderButton - - - leftStick - MyAnalogStick - - - leftStickDeadzone - NSSlider - - - leftStickInvertX - NSButton - - - leftStickInvertY - NSButton - - - leftTrigger - NSProgressIndicator - - - rightButtons - MyMainButtons - - - rightLinked - NSButton - - - rightShoulder - MyShoulderButton - - - rightStick - MyAnalogStick - - - rightStickDeadzone - NSSlider - - - rightStickInvertX - NSButton - - - rightStickInvertY - NSButton - - - rightTrigger - NSProgressIndicator - - - - IBProjectSource - ./Classes/Pref360ControlPref.h - - - + 230 + 0 IBCocoaFramework diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index bc44fa612a6a5086c76637ae6a1e0a9b9a8c2d06..5fb20525b2f3cd0a2ff95660bacd42f0aae13e87 100644 GIT binary patch literal 20382 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 diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index ff12d304..69b3a970 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -60,6 +60,7 @@ IBOutlet NSProgressIndicator *rightTrigger; IBOutlet NSImageView *batteryLevel; IBOutlet DeviceLister *deviceLister; + IBOutlet NSButton *powerOff; // Internal info mach_port_t masterPort; NSMutableArray *deviceArray; @@ -85,6 +86,7 @@ - (void)handleDeviceChange; - (IBAction)showDeviceList:(id)sender; +- (IBAction)powerOff:(id)sender; - (mach_port_t)masterPort; diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 184668e2..8742ae1e 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -127,12 +127,12 @@ - (void)axisChanged:(int)index newValue:(int)value case 4: [leftTrigger setDoubleValue:value]; largeMotor=value; - [self testMotorsLarge:largeMotor small:smallMotor]; +// [self testMotorsLarge:largeMotor small:smallMotor]; break; case 5: [rightTrigger setDoubleValue:value]; smallMotor=value; - [self testMotorsLarge:largeMotor small:smallMotor]; +// [self testMotorsLarge:largeMotor small:smallMotor]; break; default: break; @@ -276,6 +276,7 @@ - (void)resetDisplay [rightStickInvertY setState:NSOffState]; // Disable inputs [self inputEnable:NO]; + [powerOff setHidden:YES]; // Hide battery icon bundle = [NSBundle bundleForClass:[self class]]; [batteryLevel setImage:[[[NSImage alloc] initByReferencingFile:[bundle pathForResource:@"battNone" ofType:@"tif"]] autorelease]]; @@ -285,8 +286,8 @@ - (void)resetDisplay - (void)stopDevice { if(registryEntry==0) return; - [self testMotorsLarge:0 small:0]; - [self setMotorOverride:FALSE]; +// [self testMotorsLarge:0 small:0]; +// [self setMotorOverride:FALSE]; // [self updateLED:0x00]; if(hidQueue!=NULL) { CFRunLoopSourceRef eventSource; @@ -482,8 +483,8 @@ - (void)startDevice [self inputEnable:YES]; // Set LED and manual motor control // [self updateLED:0x0a]; - [self setMotorOverride:TRUE]; - [self testMotorsLarge:0 small:0]; +// [self setMotorOverride:TRUE]; +// [self testMotorsLarge:0 small:0]; largeMotor=0; smallMotor=0; // Battery level? @@ -504,6 +505,7 @@ - (void)startDevice path = [bundle pathForResource:[NSString stringWithFormat:@"batt%i", level / 64] ofType:@"tif"]; CFRelease(prop); } + [powerOff setHidden:NO]; } if (path == nil) path = [bundle pathForResource:@"battNone" ofType:@"tif"]; @@ -697,4 +699,18 @@ - (IBAction)showDeviceList:(id)sender [deviceLister showWithOwner:self]; } +- (IBAction)powerOff:(id)sender +{ + FFEFFESCAPE escape; + + if(ffDevice==0) return; + escape.dwSize=sizeof(escape); + escape.dwCommand=0x03; + escape.cbInBuffer=0; + escape.lpvInBuffer=NULL; + escape.cbOutBuffer=0; + escape.lpvOutBuffer=NULL; + FFDeviceEscape(ffDevice,&escape); +} + @end From 53abd96720acf8ce3e1aa73d7fbe5f28b4c812f2 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 3 Jan 2013 19:16:49 +0000 Subject: [PATCH 51/66] Made non-chatpad enabled controllers work again --- 360Controller/_60Controller.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index 6680c29a..cf179f4a 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -382,11 +382,10 @@ bool Xbox360Peripheral::start(IOService *provider) intf.bInterfaceProtocol = 2; intf.bAlternateSetting = kIOUSBFindInterfaceDontCare; serialIn = device->FindNextInterface(NULL, &intf); - if (serialIn == NULL) - { + if (serialIn == NULL) { IOLog("start - unable to find chatpad interface\n"); - goto fail; - } + goto nochat; + } serialIn->open(this); // Find chatpad pipe pipe.direction = kUSBIn; @@ -436,10 +435,11 @@ bool Xbox360Peripheral::start(IOService *provider) serialTimerState = tsToggle; serialTimer->setTimeoutMS(1000); // Begin reading + if (!QueueSerialRead()) + goto fail; +nochat: if (!QueueRead()) goto fail; - if (!QueueSerialRead()) - goto fail; // Disable LED Xbox360_Prepare(led,outLed); led.pattern=ledOff; From 5ab96e62ed0fc2e4bc67e0461e6a838f9ab86f50 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 3 Jan 2013 21:00:24 +0000 Subject: [PATCH 52/66] Add new devices to driver plist --- 360Controller/Info.plist | 1028 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 994 insertions(+), 34 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 232463b5..f0186f92 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -12,22 +12,751 @@ com.mice.driver.Xbox360Controller CFBundleInfoDictionaryVersion 6.0 + CFBundleName + ${PRODUCT_NAME} CFBundlePackageType KEXT CFBundleSignature ???? CFBundleVersion - 1.0.0d11 + 1.0.0d12 IOKitPersonalities - BigBenController + 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 + 63744 + idVendor + 7085 + + AviatorforXbox360PC + + 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 + + BatarangwiredcontrollerXBOX + + 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 + + BigbenControllerBB7201 + + 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 + + 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 + 64001 + idVendor + 7085 + + DDRUniverse2Mat + + 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 + + Ferrari458Racingwheel + + 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 + + GH4Guitar + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18228 + idVendor + 5168 + + GamepadF310 + + 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 + + GamepadforXbox360 + + 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 + + GamestopXbox360Controller + + 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 + + GuitarHeroforPCMAC + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 18252 + idVendor + 5168 + + 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 + + HarmonixDrumKitforXbox360 + + 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 + + HarmonixGuitarforXbox360 + + 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 + + HoriCoDOA4FightStick + + 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 + + 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 + 13 + idVendor + 3853 + + HoriRealArcadeProEx + + 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 + + HoriRealArcadeProVXSA + + 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 + + HoriSOULCALIBURVStick + + 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 + 9414 + + JoytechNeoSe + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61485 + idVendor + 7085 + + JoytechNeoSeTake2 + + 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 + + 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 + + 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 + + MadCatz360 + + 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 + + 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 + + MadCatzCallofDutyGamePad + + 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 + + MadCatzFPSProGamePad + + 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 + + MadCatzGhostReconFSGamePad + + 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 + + MadCatzMicroConGamePadPro + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 61494 + idVendor + 7085 + + MadCatzPortableDrumKit + + 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 + + MadCatzStreetFighterIVFightPad + + 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 + + MadCatzStreetFighterIVFightStickSE + + 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 + + MadCatzXbox360Controller + + 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 + + MadCatzXboxcontrollerMW2 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Xbox360Peripheral + IOKitDebug + 65535 + IOProviderClass + IOUSBDevice + idProduct + 46886 + idVendor + 1848 + + MicrosoftXbox360Controller 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 + 654 idVendor - 5227 + 1118 + + PDPAFTERGLOWAX1 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -39,26 +768,55 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 769 + idVendor + 4779 - ChatPadKeyboardEvents + PDPDancePad CFBundleIdentifier - com.apple.iokit.IOHIDFamily + com.mice.driver.Xbox360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + IOClass - IOHIDEventDriver + Xbox360Peripheral + IOKitDebug + 65535 IOProviderClass - IOHIDInterface - VendorID - 100 + IOUSBDevice + idProduct + 261 + idVendor + 3695 - Controller + PelicanTSZ360Pad 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 + 513 idVendor - 1118 + 3695 + + PowerAMiniProElite + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -70,15 +828,95 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 16128 + idVendor + 5604 - DOA4Stick + PowerAMiniProEliteGlow 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 + 21248 idVendor - 3853 + 9414 + + 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 + + REALARCADEProVX + + 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 + + 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 + 64768 + idVendor + 5769 + + RazerOnzaTournamentEdition + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -90,15 +928,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 64769 + idVendor + 5769 - GuitarHero + RedOctaneGuitarHeroXplorer 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 + + RockCandyGamepadforXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -110,15 +968,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 287 + idVendor + 3695 - JoytekXbox360 + RockRevolutionforXbox360 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 + 6 idVendor - 5678 + 4779 + + SaitekCyborgRumblePadPCXbox360 + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -130,15 +1008,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 51970 + idVendor + 1848 - MadCatzGamepad + SaitekP3200RumblePadPCXbox360 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 + 51971 idVendor 1848 + + StreetFighterIVFightPad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -150,15 +1048,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 61480 + idVendor + 7085 - MadCatzMicroConGamepad + StreetFighterIVFightStickTE 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 + 18232 idVendor 1848 + + SuperSFIVFightStickTES + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -170,15 +1088,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 63288 + idVendor + 1848 - MadCatzProGamepad + TronXbox360controller 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 + 63747 idVendor - 1848 + 7085 + + USBGamepad + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -190,15 +1128,35 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 21760 + idVendor + 7085 - TSZPelican + 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 - 513 + 63750 idVendor - 3695 + 7085 + + XboxAirflowiredcontroller + + CFBundleIdentifier + com.mice.driver.Xbox360Controller IOCFPlugInTypes F4545CE5-BF5B-11D6-A4BB-0003933E3E3E @@ -210,8 +1168,14 @@ 65535 IOProviderClass IOUSBDevice + idProduct + 16138 + idVendor + 5604 + NSHumanReadableCopyright + Copyright © 2012 MICE Software. All rights reserved. OSBundleLibraries com.apple.iokit.IOHIDFamily @@ -225,9 +1189,5 @@ com.apple.kpi.mach 8.0.0 - NSHumanReadableCopyright - Copyright © 2011 MICE Software. All rights reserved. - CFBundleName - ${PRODUCT_NAME} From e444daef31c051f45fcd2e0f0263dafad0a09999 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 3 Jan 2013 22:39:58 +0000 Subject: [PATCH 53/66] Automatic power-off of wireless controllers after 2 minutes --- WirelessGamingReceiver/WirelessHIDDevice.cpp | 46 ++++++++++++++++++-- WirelessGamingReceiver/WirelessHIDDevice.h | 4 ++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index 1b4a7336..e98de978 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -21,16 +21,32 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include +#include #include "WirelessHIDDevice.h" #include "WirelessDevice.h" #include "devices.h" +#define POWEROFF_TIMEOUT (2 * 60) + OSDefineMetaClassAndAbstractStructors(WirelessHIDDevice, IOHIDDevice) #define super IOHIDDevice // Some sort of message to send const char weirdStart[] = {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +void WirelessHIDDevice::ChatPadTimerActionWrapper(OSObject *owner, IOTimerEventSource *sender) +{ + WirelessHIDDevice *device; + + device = OSDynamicCast(WirelessHIDDevice, owner); + // Automatic shutoff + device->serialTimerCount++; + if (device->serialTimerCount > POWEROFF_TIMEOUT) + device->PowerOff(); + // Reset + sender->setTimeoutMS(1000); +} + // Sets the LED with the same format as the wired controller void WirelessHIDDevice::SetLEDs(int mode) { @@ -91,19 +107,40 @@ IOReturn WirelessHIDDevice::setReport(IOMemoryDescriptor *report, IOHIDReportTyp bool WirelessHIDDevice::handleStart(IOService *provider) { WirelessDevice *device; + IOWorkLoop *workloop; if (!super::handleStart(provider)) - return false; + goto fail; device = OSDynamicCast(WirelessDevice, provider); if (device == NULL) - return false; - + goto fail; + + serialTimerCount = 0; + + 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; + } + device->RegisterWatcher(this, _receivedData, NULL); device->SendPacket(weirdStart, sizeof(weirdStart)); - + + serialTimer->setTimeoutMS(1000); + return true; + +fail: + return false; } // Shut down the driver @@ -204,6 +241,7 @@ void WirelessHIDDevice::receivedHIDupdate(unsigned char *data, int length) IOReturn err; IOMemoryDescriptor *report; + serialTimerCount = 0; report = IOMemoryDescriptor::withAddress(data, length, kIODirectionNone); err = handleReport(report, kIOHIDReportTypeInput); report->release(); diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index a411e22d..b71bf463 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -48,6 +48,10 @@ class WirelessHIDDevice : public IOHIDDevice virtual void receivedHIDupdate(unsigned char *data, int length); 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]; From 0351ce9b54b059cc5bab208885b815f081baf686 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 4 Jan 2013 12:19:55 +0000 Subject: [PATCH 54/66] Updated copyrights and versions --- .../360Controller.xcodeproj/project.pbxproj | 6 +- 360Controller/ChatPad.cpp | 2 +- 360Controller/ChatPad.h | 2 +- 360Controller/ControlStruct.h | 2 +- 360Controller/Controller.cpp | 2 +- 360Controller/Controller.h | 2 +- 360Controller/Info.plist | 2 +- 360Controller/_60Controller.cpp | 2 +- 360Controller/_60Controller.h | 2 +- 360Controller/chatpadhid.h | 2 +- 360Controller/chatpadkeys.cpp | 2 +- 360Controller/chatpadkeys.h | 2 +- 360Controller/xbox360hid.h | 2 +- 360Daemon/360Daemon.m | 2 +- 360Daemon/ControlPrefs.h | 2 +- 360Daemon/ControlPrefs.m | 2 +- DriverTool/DriverTool.m | 2 +- Feedback360/Info.plist | 2 +- Feedback360/devlink.c | 2 +- Feedback360/devlink.h | 2 +- Feedback360/emulator.c | 2 +- Feedback360/emulator.h | 2 +- Feedback360/main.c | 2 +- Feedback360/main.h | 2 +- Install360Controller/Text/Welcome.rtf | 89 ++++++++++-------- Pref360Control/DeviceItem.h | 2 +- Pref360Control/DeviceItem.m | 2 +- Pref360Control/DeviceLister.h | 2 +- Pref360Control/DeviceLister.m | 2 +- .../English.lproj/InfoPlist.strings | Bin 228 -> 228 bytes Pref360Control/MyAnalogStick.h | 2 +- Pref360Control/MyAnalogStick.m | 2 +- Pref360Control/MyCentreButtons.h | 2 +- Pref360Control/MyCentreButtons.m | 2 +- Pref360Control/MyDigitalStick.h | 2 +- Pref360Control/MyDigitalStick.m | 2 +- Pref360Control/MyMainButtons.h | 2 +- Pref360Control/MyMainButtons.m | 2 +- Pref360Control/MyShoulderButton.h | 2 +- Pref360Control/MyShoulderButton.m | 2 +- Pref360Control/Pref360ControlPref.h | 2 +- Pref360Control/Pref360ControlPref.m | 2 +- Readme.rtf | 23 +++-- .../English.lproj/InfoPlist.strings | Bin 196 -> 196 bytes .../Wireless360Controller.cpp | 2 +- Wireless360Controller/Wireless360Controller.h | 2 +- .../project.pbxproj | 4 +- WirelessGamingReceiver/Info.plist | 2 +- WirelessGamingReceiver/WirelessDevice.cpp | 2 +- WirelessGamingReceiver/WirelessDevice.h | 2 +- .../WirelessGamingReceiver.cpp | 2 +- .../WirelessGamingReceiver.h | 2 +- .../project.pbxproj | 6 +- WirelessGamingReceiver/WirelessHIDDevice.cpp | 2 +- WirelessGamingReceiver/WirelessHIDDevice.h | 2 +- WirelessGamingReceiver/devices.h | 2 +- 56 files changed, 119 insertions(+), 107 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index 9e42bb0f..f45906cb 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -263,7 +263,7 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -292,7 +292,7 @@ x86_64, ); COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; @@ -313,7 +313,7 @@ 3BBDC685097938A90023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_WARN_ABOUT_RETURN_TYPE = YES; diff --git a/360Controller/ChatPad.cpp b/360Controller/ChatPad.cpp index 10857156..7b8feee8 100644 --- a/360Controller/ChatPad.cpp +++ b/360Controller/ChatPad.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro ChatPad.cpp - Implementation of the ChatPad Accessory driver diff --git a/360Controller/ChatPad.h b/360Controller/ChatPad.h index 59412b8e..c7afdfaf 100644 --- a/360Controller/ChatPad.h +++ b/360Controller/ChatPad.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro ChatPad.h - Driver class for the ChatPad accessory diff --git a/360Controller/ControlStruct.h b/360Controller/ControlStruct.h index fad0d1b9..80c5a651 100644 --- a/360Controller/ControlStruct.h +++ b/360Controller/ControlStruct.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro ControlStruct.h - Structures used by the device diff --git a/360Controller/Controller.cpp b/360Controller/Controller.cpp index d3d736cc..7bc3903e 100644 --- a/360Controller/Controller.cpp +++ b/360Controller/Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Controller.cpp - driver class for the 360 controller diff --git a/360Controller/Controller.h b/360Controller/Controller.h index 7ace9aae..0ac4321b 100644 --- a/360Controller/Controller.h +++ b/360Controller/Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Controller.h - Driver class for the 360 controller diff --git a/360Controller/Info.plist b/360Controller/Info.plist index f0186f92..035685ef 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -1175,7 +1175,7 @@ NSHumanReadableCopyright - Copyright © 2012 MICE Software. All rights reserved. + Copyright © 2013 MICE Software. All rights reserved. OSBundleLibraries com.apple.iokit.IOHIDFamily diff --git a/360Controller/_60Controller.cpp b/360Controller/_60Controller.cpp index cf179f4a..faecb563 100644 --- a/360Controller/_60Controller.cpp +++ b/360Controller/_60Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Bug fixes contributed by Cody "codeman38" Boisclair _60Controller.cpp - main source of the driver diff --git a/360Controller/_60Controller.h b/360Controller/_60Controller.h index bf46949a..ea02aad9 100644 --- a/360Controller/_60Controller.h +++ b/360Controller/_60Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro _60Controller.h - declaration of the driver main class diff --git a/360Controller/chatpadhid.h b/360Controller/chatpadhid.h index 991a81e6..a7d3c1eb 100755 --- a/360Controller/chatpadhid.h +++ b/360Controller/chatpadhid.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro chatpadhid.h - a HID descriptor for the Microsoft ChatPad accessory diff --git a/360Controller/chatpadkeys.cpp b/360Controller/chatpadkeys.cpp index 3c6af990..f97dba06 100644 --- a/360Controller/chatpadkeys.cpp +++ b/360Controller/chatpadkeys.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro chatpadkeys.cpp - Converts a chatpad scancode to a USB key value diff --git a/360Controller/chatpadkeys.h b/360Controller/chatpadkeys.h index a8ab558c..4add680d 100644 --- a/360Controller/chatpadkeys.h +++ b/360Controller/chatpadkeys.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro chatpadkeys.h - public functions of the ChatPad key handling diff --git a/360Controller/xbox360hid.h b/360Controller/xbox360hid.h index 9ab5b302..ccafb6ec 100644 --- a/360Controller/xbox360hid.h +++ b/360Controller/xbox360hid.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro xbox360hid.h - HID descriptor for the driver diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 91fbc09a..3347f7b8 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro 360Daemon.m - main functionality of the support daemon diff --git a/360Daemon/ControlPrefs.h b/360Daemon/ControlPrefs.h index c3605b09..d3ec031a 100644 --- a/360Daemon/ControlPrefs.h +++ b/360Daemon/ControlPrefs.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro ControlPrefs.h - interface to the preferences functionality diff --git a/360Daemon/ControlPrefs.m b/360Daemon/ControlPrefs.m index 1558f2af..fe173308 100644 --- a/360Daemon/ControlPrefs.m +++ b/360Daemon/ControlPrefs.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro ControlPrefs.m - code to read and write shared preferences diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index 5a3a301c..ec657485 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro DriverTool.m - implementation of driver info tweaking tool diff --git a/Feedback360/Info.plist b/Feedback360/Info.plist index aa21fd16..0d8f5c19 100644 --- a/Feedback360/Info.plist +++ b/Feedback360/Info.plist @@ -35,6 +35,6 @@ CFBundleName ${PRODUCT_NAME} NSHumanReadableCopyright - Copyright © 2011 MICE Software. All rights reserved. + Copyright © 2013 MICE Software. All rights reserved. diff --git a/Feedback360/devlink.c b/Feedback360/devlink.c index b6eb8add..d6a1e9d3 100644 --- a/Feedback360/devlink.c +++ b/Feedback360/devlink.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro devlink.c - code to speak to the driver itself diff --git a/Feedback360/devlink.h b/Feedback360/devlink.h index 6a9bf2ac..fadaf901 100644 --- a/Feedback360/devlink.h +++ b/Feedback360/devlink.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro devlink.h - Interface to the device link diff --git a/Feedback360/emulator.c b/Feedback360/emulator.c index f7fbe519..5d676754 100644 --- a/Feedback360/emulator.c +++ b/Feedback360/emulator.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro emulator.c - simulate a force feedback device diff --git a/Feedback360/emulator.h b/Feedback360/emulator.h index b91bb7d7..5c209989 100644 --- a/Feedback360/emulator.h +++ b/Feedback360/emulator.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro emulator.h - Interface to fake FF API effects using rumble motors diff --git a/Feedback360/main.c b/Feedback360/main.c index 5bbf7b2f..b4917c1a 100644 --- a/Feedback360/main.c +++ b/Feedback360/main.c @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro main.c - Main code for the FF plugin diff --git a/Feedback360/main.h b/Feedback360/main.h index ad8b244a..7da07086 100644 --- a/Feedback360/main.h +++ b/Feedback360/main.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro main.h - defines the structure used for the plugin COM object diff --git a/Install360Controller/Text/Welcome.rtf b/Install360Controller/Text/Welcome.rtf index b8e96855..5ebcf3d6 100644 --- a/Install360Controller/Text/Welcome.rtf +++ b/Install360Controller/Text/Welcome.rtf @@ -1,5 +1,5 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\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} {\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} @@ -10,125 +10,138 @@ {\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid601\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid7} {\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid8} {\list\listtemplateid9\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid9} -{\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid10}} -{\*\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}} -\margl1440\margr1440\vieww14760\viewh14700\viewkind0 -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +{\list\listtemplateid10\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid10} +{\list\listtemplateid11\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid11}} +{\*\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}} +\paperw12240\paperh15840\margl1440\margr1440\vieww14760\viewh12840\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \f0\b\fs42 \cf0 XBox 360 Controller Driver\ -\b0\fs24 Version 0.11\ -Copyright (C) 2005-2012 Colin Munro\ +\b0\fs24 Version 0.12\ +Copyright (C) 2005-2013 Colin Munro\ \ Welcome to the installer for the XBox 360 Controller driver for Mac OS X.\ \ +\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 +\ls1\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 +\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\ql\qnatural\pardirnatural -\ls1\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 +\ls2\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls2\ilvl0\cf0 {\listtext \'95 }Various bugfixes\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls3\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls3\ilvl0\cf0 {\listtext \'95 }Driver rearchitecture\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls4\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls4\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 +\ls5\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls5\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 +\ls6\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls6\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 +\ls7\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls7\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 +\ls8\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls8\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 +\ls9\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls9\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls10\ilvl0\cf0 {\listtext \'95 }More 3rd party vendor/product IDs\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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\ql\qnatural\pardirnatural -\ls10\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 +\ls11\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\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \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/DeviceItem.h b/Pref360Control/DeviceItem.h index e7a56566..4c27482f 100644 --- a/Pref360Control/DeviceItem.h +++ b/Pref360Control/DeviceItem.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro DeviceItem.h - declaration of wrapper class for device handles diff --git a/Pref360Control/DeviceItem.m b/Pref360Control/DeviceItem.m index 8e51b123..2fba7cf9 100644 --- a/Pref360Control/DeviceItem.m +++ b/Pref360Control/DeviceItem.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro DeviceItem.m - implementation of device wrapper class diff --git a/Pref360Control/DeviceLister.h b/Pref360Control/DeviceLister.h index 5ad6242b..041f802a 100644 --- a/Pref360Control/DeviceLister.h +++ b/Pref360Control/DeviceLister.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro DeviceLister.h - decleration of a class to display supported devices diff --git a/Pref360Control/DeviceLister.m b/Pref360Control/DeviceLister.m index b51cc4b6..027d4db7 100644 --- a/Pref360Control/DeviceLister.m +++ b/Pref360Control/DeviceLister.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro DeviceLister.m - implementation of a class to list supported devices diff --git a/Pref360Control/English.lproj/InfoPlist.strings b/Pref360Control/English.lproj/InfoPlist.strings index c467d8792be8e35138c475dfe12930a43e5a8288..6542423e000b0494d5d588aa49c941e9441688a4 100644 GIT binary patch delta 11 ScmaFD_=Iu7K}O?=hm-&wjReI2 delta 11 ScmaFD_=Iu7K}MsAhm-&wi3G#| diff --git a/Pref360Control/MyAnalogStick.h b/Pref360Control/MyAnalogStick.h index 65ac5b76..a95fdd23 100644 --- a/Pref360Control/MyAnalogStick.h +++ b/Pref360Control/MyAnalogStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyAnalogStick.h - declaration of analog stick view diff --git a/Pref360Control/MyAnalogStick.m b/Pref360Control/MyAnalogStick.m index 301f0f35..cfb63924 100644 --- a/Pref360Control/MyAnalogStick.m +++ b/Pref360Control/MyAnalogStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyAnalogStick.m - implementation of analog stick view diff --git a/Pref360Control/MyCentreButtons.h b/Pref360Control/MyCentreButtons.h index 48f78a12..97168d5d 100644 --- a/Pref360Control/MyCentreButtons.h +++ b/Pref360Control/MyCentreButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyCentreButtons.h - definition of view to draw the central buttons diff --git a/Pref360Control/MyCentreButtons.m b/Pref360Control/MyCentreButtons.m index 11aebafc..663ace14 100644 --- a/Pref360Control/MyCentreButtons.m +++ b/Pref360Control/MyCentreButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyCentreButtons.m - implementation of central button view diff --git a/Pref360Control/MyDigitalStick.h b/Pref360Control/MyDigitalStick.h index e80e7ea3..f8ac4254 100644 --- a/Pref360Control/MyDigitalStick.h +++ b/Pref360Control/MyDigitalStick.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyDigitalStick.h - declaration of view to draw digital stick view diff --git a/Pref360Control/MyDigitalStick.m b/Pref360Control/MyDigitalStick.m index e92023f0..3be6b1ab 100644 --- a/Pref360Control/MyDigitalStick.m +++ b/Pref360Control/MyDigitalStick.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyDigitalStick.m - implementation of digital stick view diff --git a/Pref360Control/MyMainButtons.h b/Pref360Control/MyMainButtons.h index 42de151d..30244113 100644 --- a/Pref360Control/MyMainButtons.h +++ b/Pref360Control/MyMainButtons.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyMainButtons.h - declaration of A/B/X/Y button view diff --git a/Pref360Control/MyMainButtons.m b/Pref360Control/MyMainButtons.m index 546293f2..4d1f6f73 100644 --- a/Pref360Control/MyMainButtons.m +++ b/Pref360Control/MyMainButtons.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyMainButtons.m - implementation of A/B/X/Y button view diff --git a/Pref360Control/MyShoulderButton.h b/Pref360Control/MyShoulderButton.h index 3b2076b8..d4523d94 100644 --- a/Pref360Control/MyShoulderButton.h +++ b/Pref360Control/MyShoulderButton.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyShoulderButton.h - simple button view declaration diff --git a/Pref360Control/MyShoulderButton.m b/Pref360Control/MyShoulderButton.m index 2feb4b24..829db270 100644 --- a/Pref360Control/MyShoulderButton.m +++ b/Pref360Control/MyShoulderButton.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro MyShoulderButton.m - implementation of simple button view diff --git a/Pref360Control/Pref360ControlPref.h b/Pref360Control/Pref360ControlPref.h index 69b3a970..28f4b81d 100644 --- a/Pref360Control/Pref360ControlPref.h +++ b/Pref360Control/Pref360ControlPref.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Pref360ControlPref.h - definition for the pref pane class diff --git a/Pref360Control/Pref360ControlPref.m b/Pref360Control/Pref360ControlPref.m index 8742ae1e..3f700a0f 100644 --- a/Pref360Control/Pref360ControlPref.m +++ b/Pref360Control/Pref360ControlPref.m @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Pref360ControlPref.m - main source of the pref pane diff --git a/Readme.rtf b/Readme.rtf index b25ce558..d59c4a4b 100644 --- a/Readme.rtf +++ b/Readme.rtf @@ -1,15 +1,15 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\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} {\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}} {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\paperw12240\paperh15840\margl1440\margr1440\vieww9000\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \f0\b\fs36 \cf0 XBox 360 Controller driver for Mac OS X \b0\fs24 \ -Copyright (C) 2006-2012 Colin Munro\ +Copyright (C) 2006-2013 Colin Munro\ {\field{\*\fldinst{HYPERLINK "http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller"}}{\fldrslt http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller}}\ \ @@ -35,28 +35,27 @@ The driver exposes a standard game pad with a number of standard controls, so an \b Known Problems/Todo \b0 \ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural -\ls1\ilvl0\cf0 {\listtext \'95 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects)\ +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural +\ls1\ilvl0\cf0 {\listtext \'95 }The rumble motor test on the triggers of the Preference Pane bypasses the Force Feedback Framework functionality, so isn't actually testing it. It really should, for completeness (and it'd help adding support for more complex effects) - this test is now disabled in the normal release anyway\ {\listtext \'95 }Force Feedback plugin may make effects run slower (e.g. longer time) than they should\ {\listtext \'95 }Driver probably needs to be more resilient to errors and odd cases\ {\listtext \'95 }Better Force Feedback "emulation"\ {\listtext \'95 }Extra settings? E.g. trigger deadzones, control remapping.\ {\listtext \'95 }Someone has requested old Xbox Controller support too.\ -{\listtext \'95 }Still working on ChatPad support\ -\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\ql\qnatural\pardirnatural +\pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li720\fi-720\pardirnatural \ls2\ilvl0 \b \cf0 \ Contact me \b0 \ -\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \ls2\ilvl0\cf0 Please feel free to contact me with any comments, questions and so on using the form at the URL at the top of the file.\ \ -\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\pard\tx0\tx220\tx660\tx720\tx740\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \ls2\ilvl0 \b \cf0 Developer info \b0 \ Anything below this probably doesn't affect end users, so you can stop reading now if you just want to use the driver.\ -\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural \cf0 \ \b Building diff --git a/Wireless360Controller/English.lproj/InfoPlist.strings b/Wireless360Controller/English.lproj/InfoPlist.strings index 9590a25164be1d57e4acff4636f849393a3f4c7f..216845418c54125b94fb750559fa0459d179b0a2 100644 GIT binary patch delta 12 TcmX@Yc!Y7nepX`!B?fB%9B%_} delta 12 TcmX@Yc!Y7nepVv}B?fB%9BKn@ diff --git a/Wireless360Controller/Wireless360Controller.cpp b/Wireless360Controller/Wireless360Controller.cpp index d2cb527f..88d06712 100644 --- a/Wireless360Controller/Wireless360Controller.cpp +++ b/Wireless360Controller/Wireless360Controller.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Wireless360Controller.cpp - main source of the standard wireless controller driver diff --git a/Wireless360Controller/Wireless360Controller.h b/Wireless360Controller/Wireless360Controller.h index 8c2d03ee..cd2616d7 100644 --- a/Wireless360Controller/Wireless360Controller.h +++ b/Wireless360Controller/Wireless360Controller.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro Wireless360Controller.h - declaration of the wireless controller driver class diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 06719aa2..1b0a33c7 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -175,7 +175,7 @@ isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; @@ -193,7 +193,7 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; diff --git a/WirelessGamingReceiver/Info.plist b/WirelessGamingReceiver/Info.plist index cd79a99b..819f678f 100644 --- a/WirelessGamingReceiver/Info.plist +++ b/WirelessGamingReceiver/Info.plist @@ -19,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1.0.0d11 + 1.0.0d12 IOKitPersonalities WirelessGamingReceiverForWindows diff --git a/WirelessGamingReceiver/WirelessDevice.cpp b/WirelessGamingReceiver/WirelessDevice.cpp index 13affc77..ddad5101 100644 --- a/WirelessGamingReceiver/WirelessDevice.cpp +++ b/WirelessGamingReceiver/WirelessDevice.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessDevice.cpp - generic Wireless 360 device driver diff --git a/WirelessGamingReceiver/WirelessDevice.h b/WirelessGamingReceiver/WirelessDevice.h index 73190daf..83dee634 100644 --- a/WirelessGamingReceiver/WirelessDevice.h +++ b/WirelessGamingReceiver/WirelessDevice.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessDevice.h - declaration of the base wireless 360 device driver class diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.cpp b/WirelessGamingReceiver/WirelessGamingReceiver.cpp index b8f1d8c4..188745b9 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.cpp +++ b/WirelessGamingReceiver/WirelessGamingReceiver.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessGamingReceiver.cpp - main source of the wireless receiver driver diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.h b/WirelessGamingReceiver/WirelessGamingReceiver.h index bce80e9b..41c65d68 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.h +++ b/WirelessGamingReceiver/WirelessGamingReceiver.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessGamingReceiver.h - declaration of the wireless receiver driver diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index ae9cfb4f..74fff304 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -78,8 +78,8 @@ 3BE667170B9109C5009679FC /* WirelessHIDDevice.h */, 3B21ED6B0B8E690F00B5CACA /* WirelessDevice.cpp */, 3B21ED660B8E688A00B5CACA /* WirelessDevice.h */, - 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */, 1A224C3FFF42367911CA2CB7 /* WirelessGamingReceiver.cpp */, + 1A224C3EFF42367911CA2CB7 /* WirelessGamingReceiver.h */, ); name = Source; sourceTree = ""; @@ -195,7 +195,7 @@ isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; @@ -213,7 +213,7 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 1.0.0d11; + CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; INFOPLIST_FILE = Info.plist; diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index e98de978..1fa965f1 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessHIDDevice.cpp - generic wireless 360 device driver with HID support diff --git a/WirelessGamingReceiver/WirelessHIDDevice.h b/WirelessGamingReceiver/WirelessHIDDevice.h index b71bf463..b2f3521f 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.h +++ b/WirelessGamingReceiver/WirelessHIDDevice.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro WirelessHIDDevice.h - declaration of generic wireless HID device diff --git a/WirelessGamingReceiver/devices.h b/WirelessGamingReceiver/devices.h index cd6c3ace..81045194 100644 --- a/WirelessGamingReceiver/devices.h +++ b/WirelessGamingReceiver/devices.h @@ -1,6 +1,6 @@ /* MICE Xbox 360 Controller driver for Mac OS X - Copyright (C) 2006-2012 Colin Munro + Copyright (C) 2006-2013 Colin Munro devics.h - contains constants for the wireless driver From 11182ae0c1153cc8f49a02f5f494db728b3293f9 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 4 Jan 2013 12:47:08 +0000 Subject: [PATCH 55/66] Tweak DriverTool, add more devices to the driver plist --- 360Controller/Info.plist | 260 +++++++++++++++++++++++++++++++++++++++ DriverTool/DriverTool.m | 11 +- 2 files changed, 262 insertions(+), 9 deletions(-) diff --git a/360Controller/Info.plist b/360Controller/Info.plist index 035685ef..681fbe73 100644 --- a/360Controller/Info.plist +++ b/360Controller/Info.plist @@ -23,6 +23,46 @@ IOKitPersonalities 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 + 275 + idVendor + 3695 + + AfterglowGamepadforXbox360Z + + 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 + + AfterglowGamepadforXbox360ZZ CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -114,6 +154,86 @@ 100 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 + 62465 + idVendor + 1848 + + ControllerZ + + 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 + + ControllerZZ + + 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 + + ControllerZZZ + + 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 + + ControllerZZZZ CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -214,6 +334,66 @@ 1133 GamepadforXbox360 + + 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 + + GamepadforXbox360Z + + 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 + + GamepadforXbox360ZZ + + 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 + + GamepadforXbox360ZZZ CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -614,6 +794,26 @@ 7085 MadCatzMicroConGamePadPro + + 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 + + MadCatzMicroConGamePadProZ CFBundleIdentifier com.mice.driver.Xbox360Controller @@ -694,6 +894,66 @@ 1848 MadCatzXbox360Controller + + 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 + + MadCatzXbox360ControllerZ + + 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 + + MadCatzXbox360ControllerZZ + + 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 + + MadCatzXbox360ControllerZZZ CFBundleIdentifier com.mice.driver.Xbox360Controller diff --git a/DriverTool/DriverTool.m b/DriverTool/DriverTool.m index ec657485..6dc6a29f 100644 --- a/DriverTool/DriverTool.m +++ b/DriverTool/DriverTool.m @@ -87,22 +87,15 @@ static void WriteDriverConfig(NSString *driver, id config) static void ScrubDevices(NSMutableDictionary *devices) { NSMutableArray *deviceKeys; - NSArray *keys; deviceKeys = [NSMutableArray arrayWithCapacity:10]; - - // Find all the devices in the list - keys = [devices allKeys]; - for (NSString *key in keys) + for (NSString *key in [devices allKeys]) { NSDictionary *device = [devices objectForKey:key]; if ([(NSString*)[device objectForKey:@"IOClass"] compare:@"Xbox360Peripheral"] == NSOrderedSame) [deviceKeys addObject:key]; } - - // Scrub all found devices - for (NSString *key in deviceKeys) - [devices removeObjectForKey:key]; + [devices removeObjectsForKeys:deviceKeys]; } static id MakeMutableCopy(id object) From ea10b8a3a69d9029a9a4796cab9401b3f665a6af Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 05:02:19 +0000 Subject: [PATCH 56/66] Attempt to turn on code signing --- .../360Controller.xcodeproj/project.pbxproj | 6 ++++++ 360Daemon/360Daemon.xcodeproj/project.pbxproj | 12 +++++++----- .../DriverTool.xcodeproj/project.pbxproj | 4 ++++ .../Feedback360.xcodeproj/project.pbxproj | 11 ++++++++--- .../Pref360Control.xcodeproj/project.pbxproj | 18 +++++++++++------- .../project.pbxproj | 4 ++++ .../project.pbxproj | 4 ++++ build | 2 ++ 8 files changed, 46 insertions(+), 15 deletions(-) diff --git a/360Controller/360Controller.xcodeproj/project.pbxproj b/360Controller/360Controller.xcodeproj/project.pbxproj index f45906cb..04a14efa 100644 --- a/360Controller/360Controller.xcodeproj/project.pbxproj +++ b/360Controller/360Controller.xcodeproj/project.pbxproj @@ -331,7 +331,9 @@ 3BBDC687097938A90023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Development; @@ -340,8 +342,10 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_VERSION = ""; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; "SDKROOT[arch=x86_64]" = ""; }; @@ -350,7 +354,9 @@ 3BBDC689097938A90023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Default; diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index 53fe6983..45de3d13 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 45; objects = { /* Begin PBXBuildFile section */ @@ -169,8 +169,7 @@ 1DEB927508733DD40010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -200,10 +199,12 @@ 1DEB927908733DD40010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Debug; @@ -211,12 +212,13 @@ 1DEB927A08733DD40010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Release; diff --git a/DriverTool/DriverTool.xcodeproj/project.pbxproj b/DriverTool/DriverTool.xcodeproj/project.pbxproj index e68cde50..c5c59f00 100644 --- a/DriverTool/DriverTool.xcodeproj/project.pbxproj +++ b/DriverTool/DriverTool.xcodeproj/project.pbxproj @@ -180,6 +180,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -187,6 +188,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Debug; @@ -195,11 +197,13 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Release; diff --git a/Feedback360/Feedback360.xcodeproj/project.pbxproj b/Feedback360/Feedback360.xcodeproj/project.pbxproj index e47767ec..c0138293 100644 --- a/Feedback360/Feedback360.xcodeproj/project.pbxproj +++ b/Feedback360/Feedback360.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 45; objects = { /* Begin PBXBuildFile section */ @@ -228,7 +228,9 @@ 3BBDC69809793BF60023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Development; @@ -236,9 +238,10 @@ 3BBDC69909793BF60023AAD8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Deployment; @@ -246,7 +249,9 @@ 3BBDC69A09793BF60023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Default; diff --git a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj index 9e0621ff..f50d2a06 100644 --- a/Pref360Control/Pref360Control.xcodeproj/project.pbxproj +++ b/Pref360Control/Pref360Control.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 44; + objectVersion = 45; objects = { /* Begin PBXBuildFile section */ @@ -336,8 +336,7 @@ 3BBDC6A6097946B50023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; COPY_PHASE_STRIP = NO; DEBUGGING_SYMBOLS = YES; FRAMEWORK_SEARCH_PATHS = ""; @@ -451,7 +450,9 @@ 3BBDC6AA097946B50023AAD8 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = ""; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Development; @@ -459,9 +460,10 @@ 3BBDC6AB097946B50023AAD8 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Deployment; @@ -469,7 +471,9 @@ 3BBDC6AC097946B50023AAD8 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - MACOSX_DEPLOYMENT_TARGET = 10.3; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Default; diff --git a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj index 1b0a33c7..4a3d9346 100644 --- a/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj +++ b/Wireless360Controller/Wireless360Controller.xcodeproj/project.pbxproj @@ -208,10 +208,12 @@ 1DEB91DE08733DB10010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Debug; @@ -220,10 +222,12 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; + PROVISIONING_PROFILE = ""; SDKROOT = ""; }; name = Release; diff --git a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj index 74fff304..cefc6790 100644 --- a/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj +++ b/WirelessGamingReceiver/WirelessGamingReceiver.xcodeproj/project.pbxproj @@ -194,6 +194,7 @@ 1DEB91DA08733DB10010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_DYNAMIC_NO_PIC = NO; @@ -205,6 +206,7 @@ MODULE_NAME = com.mice.driver.WirelessGamingReceiver; MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = WirelessGamingReceiver; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = kext; ZERO_LINK = YES; }; @@ -213,6 +215,7 @@ 1DEB91DB08733DB10010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Developer ID Application: Colin Munro"; CURRENT_PROJECT_VERSION = 1.0.0d12; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; @@ -221,6 +224,7 @@ MODULE_NAME = com.mice.driver.WirelessGamingReceiver; MODULE_VERSION = 1.0.0d11; PRODUCT_NAME = WirelessGamingReceiver; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = kext; }; name = Release; diff --git a/build b/build index cc66737c..26fcd117 100755 --- a/build +++ b/build @@ -51,6 +51,8 @@ if [ $? -ne 0 ] fi cd ../Install360Controller freeze Install360Controller.packproj +mv build/360ControllerInstall.pkg . +productsign --sign 4052c865dcb083da7f325d61d7c7965bb0028a5e Install360Controller.pkg build/Install360Controller.pkg mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build From cf30f831cf76377f7902c9a523e6cfaa7b07e4a2 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 05:10:48 +0000 Subject: [PATCH 57/66] Update build script for more info on signing --- build | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/build b/build index 26fcd117..4bdf833a 100755 --- a/build +++ b/build @@ -65,4 +65,13 @@ lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacO lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool lipo -info WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver lipo -info Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller +echo "** File signatures **" +codesign -dvvv 360Controller/build/Deployment/360Controller.kext +codesign -dvvv 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin +codesign -dvvv 360Daemon/build/Release/360Daemon +codesign -dvvv Pref360Control/build/Deployment/Pref360Control.prefPane +codesign -dvvv Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool +codesign -dvvv WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext +codesign -dvvv Wireless360Controller/build/Release/Wireless360Controller.kext +pkgutil --check-signature build/360ControllerInstall.pkg echo "*** DONE ***" From 118cea3b456e00e15b709e8a304b20cb76c9b6ba Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 05:28:58 +0000 Subject: [PATCH 58/66] Trying again with build script --- build | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build b/build index 4bdf833a..3ad81fad 100755 --- a/build +++ b/build @@ -51,9 +51,8 @@ if [ $? -ne 0 ] fi cd ../Install360Controller freeze Install360Controller.packproj -mv build/360ControllerInstall.pkg . -productsign --sign 4052c865dcb083da7f325d61d7c7965bb0028a5e Install360Controller.pkg build/Install360Controller.pkg -mv build 360ControllerInstall +mv 360ControllerInstall/360ControllerInstall.pkg . +productsign --sign "Developer ID Installer: Colin Munro" Install360Controller.pkg Install360Controller/Install360Controller.pkg hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build cd .. From 07ae108e14f697236f6c6672f8e2aed34a31f305 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 07:31:08 +0000 Subject: [PATCH 59/66] Update script for upgrading --- Install360Controller/Scripts/upgrade.sh | 42 +++++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/Install360Controller/Scripts/upgrade.sh b/Install360Controller/Scripts/upgrade.sh index 6483b7fa..c0283260 100644 --- a/Install360Controller/Scripts/upgrade.sh +++ b/Install360Controller/Scripts/upgrade.sh @@ -1,8 +1,38 @@ #!/bin/sh -echo "installer got 0: '$0' 1: '$1' 2: '$2' 3: '$3'" -cd $3 -cd System/Library/Extensions -kextload 360Controller.kext -kextunload 360Controller.kext -# If we can't unload the driver, the user risks kernel panics (not anymore) + +# Clear out daemon + +if [ -d /Library/StartupItems/360ControlDaemon ]; then + /bin/rm -r /Library/StartupItems/360ControlDaemon +fi + +if [ -f /Library/LaunchDaemons/com.mice.360Daemon.plist ]; then + launchctl stop com.mice.360Daemon + /bin/rm /Library/LaunchDaemons/com.mice.360Daemon.plist +fi + +if [ -d /Library/Application\ Support/MICE/360Daemon ]; then + /bin/rm -r /Library/Application\ Support/MICE/360Daemon +fi + +# Remove preference pane + +if [ -d /Library/PreferencePanes/Pref360Control.prefPane ]; then + /bin/rm -r /Library/PreferencePanes/Pref360Control.prefPane +fi + +# Remove drivers + +if [ -d /System/Library/Extensions/360Controller.kext ]; then + /bin/rm -r /System/Library/Extensions/360Controller.kext +fi + +if [ -d /System/Library/Extensions/Wireless360Controller.kext ]; then + /bin/rm -r /System/Library/Extensions/Wireless360Controller.kext +fi + +if [ -d /System/Library/Extensions/WirelessGamingReceiver.kext ]; then + /bin/rm -r /System/Library/Extensions/WirelessGamingReceiver.kext +fi + exit 0 From 17b1d6bcf4ec7d331631c3b6de606f61a2411131 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 07:41:47 +0000 Subject: [PATCH 60/66] Switch over to Packages, replacing Iceberg, and upgrade to launchd. --- 360Daemon/360ControlDaemon | 25 - 360Daemon/360Daemon.m | 5 +- 360Daemon/360Daemon.xcodeproj/project.pbxproj | 6 +- 360Daemon/StartupParameters.plist | 21 - 360Daemon/com.mice.360Daemon.plist | 16 + .../Install360Controller.packproj | 1351 ----------------- .../Install360Controller.pkgproj | 1065 +++++++++++++ build | 2 +- 8 files changed, 1088 insertions(+), 1403 deletions(-) delete mode 100644 360Daemon/360ControlDaemon delete mode 100644 360Daemon/StartupParameters.plist create mode 100644 360Daemon/com.mice.360Daemon.plist delete mode 100644 Install360Controller/Install360Controller.packproj create mode 100755 Install360Controller/Install360Controller.pkgproj diff --git a/360Daemon/360ControlDaemon b/360Daemon/360ControlDaemon deleted file mode 100644 index 1ed4f4c2..00000000 --- a/360Daemon/360ControlDaemon +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -. /etc/rc.common - -# The start subroutine -StartService() { - /Library/StartupItems/360ControlDaemon/360Daemon & -} - -# The stop subroutine -StopService() { - killall -TERM 360Daemon - sleep 10 - killall -9 360Daemon -} - -# The restart subroutine -RestartService() { - killall -TERM 360Daemon - sleep 10 - killall -9 360Daemon - sleep 10 - /Library/StartupItems/360ControlDaemon/360Daemon & -} - -RunService "$1" diff --git a/360Daemon/360Daemon.m b/360Daemon/360Daemon.m index 3347f7b8..abbb1d2c 100644 --- a/360Daemon/360Daemon.m +++ b/360Daemon/360Daemon.m @@ -31,6 +31,9 @@ #define CHECK_SHOWAGAIN @"Do not show this message again" +#define INSTALL_PATH @"/Library/Application Support/MICE/360Daemon" +#define RESOURCE_PATH INSTALL_PATH @"/Resources" + mach_port_t masterPort; IONotificationPortRef notifyPort; CFRunLoopSourceRef notifySource; @@ -87,7 +90,7 @@ static void ShowAlert(int index) @"XBox 360 Controller Driver", alertStrings[index], checkBoxes, - [NSURL fileURLWithPath:@"/Library/StartupItems/360ControlDaemon/Resources/Alert.tif"], + [NSURL fileURLWithPath:RESOURCE_PATH @"/Alert.tif"], nil]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:dictValues forKeys:dictKeys]; diff --git a/360Daemon/360Daemon.xcodeproj/project.pbxproj b/360Daemon/360Daemon.xcodeproj/project.pbxproj index 45de3d13..c323444c 100644 --- a/360Daemon/360Daemon.xcodeproj/project.pbxproj +++ b/360Daemon/360Daemon.xcodeproj/project.pbxproj @@ -32,13 +32,12 @@ 08FB7796FE84155DC02AAC07 /* 360Daemon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 360Daemon.m; sourceTree = ""; }; 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 360Daemon_Prefix.pch; sourceTree = ""; }; - 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = StartupParameters.plist; sourceTree = ""; }; - 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 360ControlDaemon; sourceTree = ""; }; 3B7904D50CE3F13700ACB699 /* Alert.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Alert.tif; sourceTree = ""; }; 3B7904FF0CE3F6A400ACB699 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = /System/Library/Frameworks/ForceFeedback.framework; sourceTree = ""; }; 3B7A8E2B0CE14E38005BB45B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 3B8698070CE2903100283CEC /* ControlPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlPrefs.h; sourceTree = ""; }; 3B8698080CE2903100283CEC /* ControlPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ControlPrefs.m; sourceTree = ""; }; + 3BBB7EED16C387C600BC7827 /* com.mice.360Daemon.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.mice.360Daemon.plist; sourceTree = ""; }; 8DD76FA10486AA7600D96B5E /* 360Daemon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = 360Daemon; sourceTree = BUILT_PRODUCTS_DIR; }; C6859EA3029092ED04C91782 /* 360Daemon.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = 360Daemon.1; sourceTree = ""; }; /* End PBXFileReference section */ @@ -76,8 +75,7 @@ 3B8698080CE2903100283CEC /* ControlPrefs.m */, 32A70AAB03705E1F00C91783 /* 360Daemon_Prefix.pch */, 08FB7796FE84155DC02AAC07 /* 360Daemon.m */, - 3B7904BE0CE3E94500ACB699 /* StartupParameters.plist */, - 3B7904C30CE3EC7700ACB699 /* 360ControlDaemon */, + 3BBB7EED16C387C600BC7827 /* com.mice.360Daemon.plist */, ); name = Source; sourceTree = ""; diff --git a/360Daemon/StartupParameters.plist b/360Daemon/StartupParameters.plist deleted file mode 100644 index 1e9cbc01..00000000 --- a/360Daemon/StartupParameters.plist +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Description - 360 Controller Driver Daemon - Messages - - start - Starting 360 Controller Daemon - stop - Stopping 360 Controller Daemon - - OrderPreference - None - Provides - - 360ControllerDaemon - - - diff --git a/360Daemon/com.mice.360Daemon.plist b/360Daemon/com.mice.360Daemon.plist new file mode 100644 index 00000000..a0f3a82f --- /dev/null +++ b/360Daemon/com.mice.360Daemon.plist @@ -0,0 +1,16 @@ + + + + + RunAtLoad + + ProgramArguments + + /Library/Application Support/MICE/360Daemon/360Daemon + + KeepAlive + + Label + com.mice.360Daemon + + diff --git a/Install360Controller/Install360Controller.packproj b/Install360Controller/Install360Controller.packproj deleted file mode 100644 index 7102cd47..00000000 --- a/Install360Controller/Install360Controller.packproj +++ /dev/null @@ -1,1351 +0,0 @@ - - - - - Hierarchy - - Attributes - - Documents - - Background Image - - IFPkgFlagBackgroundAlignment - 4 - IFPkgFlagBackgroundScaling - 1 - Mode - 0 - Path - - Path Type - 1 - - License - - International - - Mode - 1 - Path - ../Licence.txt - Path Type - 2 - - - ReadMe - - International - - Mode - 1 - Path - ../Readme.rtf - Path Type - 2 - - - Welcome - - International - - Mode - 1 - Path - Text/Welcome.rtf - Path Type - 2 - - - - Files - - Compress - - Hierarchy - - Children - - - Children - - - Children - - - Children - - - Children - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Info.plist - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacOS/Pref360Control - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/MacOS - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt0.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt1.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt2.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/batt3.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/battNone.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj/InfoPlist.strings - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj/Pref360ControlPref.nib - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/English.lproj - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/Pref360ControlPref.tiff - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane/Contents - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 80 - Path - ../Pref360Control/build/Deployment/Pref360Control.prefPane - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - GID - 80 - Path - PreferencePanes - Path Type - 1 - Privileges - 509 - Type - 1 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../360Daemon/360ControlDaemon - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - GID - 0 - Path - ../360Daemon/build/Release/360Daemon - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 0 - Path - ../360Daemon/Alert.tif - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - GID - 0 - Path - Resources - Path Type - 1 - Privileges - 493 - Type - 2 - UID - 0 - - - Children - - GID - 0 - Path - ../360Daemon/StartupParameters.plist - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - GID - 0 - Path - 360ControlDaemon - Path Type - 1 - Privileges - 493 - Type - 2 - UID - 0 - - - GID - 0 - Path - StartupItems - Path Type - 1 - Privileges - 509 - Type - 2 - UID - 0 - - - GID - 80 - Path - Library - Path Type - 1 - Privileges - 1021 - Type - 1 - UID - 0 - - - Children - - - Children - - - Children - - - Children - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/Info.plist - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/MacOS/360Controller - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/MacOS - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Info.plist - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS/Feedback360 - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/MacOS - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources/English.lproj/InfoPlist.strings - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources/English.lproj - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents/Resources - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin/Contents - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/PlugIns - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/Resources/English.lproj/InfoPlist.strings - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/Resources/English.lproj - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents/Resources - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext/Contents - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../360Controller/build/Deployment/360Controller.kext - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Info.plist - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources/English.lproj/InfoPlist.strings - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources/English.lproj - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/Resources - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext/Contents - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../Wireless360Controller/build/Release/Wireless360Controller.kext - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Info.plist - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Children - - - Children - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Children - - - Children - - - Children - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources/English.lproj/InfoPlist.strings - Path Type - 2 - Privileges - 420 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources/English.lproj - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/Resources - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - Expanded - - GID - 0 - Path - ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext - Path Type - 2 - Privileges - 493 - Type - 3 - UID - 0 - - - GID - 80 - Path - Extensions - Path Type - 1 - Privileges - 509 - Type - 2 - UID - 0 - - - GID - 80 - Path - Library - Path Type - 1 - Privileges - 509 - Type - 2 - UID - 0 - - - GID - 80 - Path - System - Path Type - 1 - Privileges - 509 - Type - 2 - UID - 0 - - - GID - 80 - Path - / - Path Type - 1 - Privileges - 1021 - Type - 1 - UID - 0 - - IFPkgFlagDefaultLocation - / - Imported Package - - Package Path - - Split Forks - - - Plugins - - PluginsList - - - Path - Introduction - Type - 0 - - - Path - ReadMe - Type - 0 - - - Path - License - Type - 0 - - - Path - Target - Type - 0 - - - Path - PackageSelection - Type - 0 - - - Path - Install - Type - 0 - - - Path - FinishUp - Type - 0 - - - - Scripts - - Additional Resources - - International - - - Installation Scripts - - IFInstallationScriptsPostflight - - Path - Scripts/finish.sh - Path Type - 2 - Status - - - IFInstallationScriptsPostinstall - - Path - - Status - - - IFInstallationScriptsPostupgrade - - Path - - Status - - - IFInstallationScriptsPreflight - - Path - - Status - - - IFInstallationScriptsPreinstall - - Path - - Status - - - IFInstallationScriptsPreupgrade - - Path - Scripts/upgrade.sh - Path Type - 2 - Status - - - - Requirements - - - Settings - - Description - - International - - IFPkgDescriptionDeleteWarning - - IFPkgDescriptionDescription - Installs the driver for the XBox 360 Controller for MacOS X. - IFPkgDescriptionTitle - XBox 360 Controller - IFPkgDescriptionVersion - 0.11 - - - Display Information - - CFBundleGetInfoString - Install360Controller 0.11 Copyrights © 2006-2012 Colin Munro - CFBundleIconFile - - CFBundleIconFile Path Type - 1 - CFBundleIdentifier - com.mice.pkg.Xbox360controller - CFBundleName - XBox 360 Controller Driver Installer - CFBundleShortVersionString - 0.11 - - Options - - IFPkgFlagAllowBackRev - - IFPkgFlagAuthorizationAction - 2 - IFPkgFlagFollowLinks - - IFPkgFlagIsRequired - - IFPkgFlagOverwritePermissions - - IFPkgFlagRelocatable - - IFPkgFlagRestartAction - 0 - IFPkgFlagRootVolumeOnly - - IFPkgFlagUpdateInstalledLanguages - - - Version - - IFMajorVersion - 0 - IFMinorVersion - 11 - - - - IFPkgFlagPackageSelection - 0 - Name - Install360Controller - Status - 1 - Type - 1 - - Name - Project - Settings - - 10.1 Compatibility - - Build Path - build - Build Path Type - 2 - Comment - - Remove .DS_Store - - Remove .pbdevelopment - - Remove CVS - - - - diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj new file mode 100755 index 00000000..9c09ae70 --- /dev/null +++ b/Install360Controller/Install360Controller.pkgproj @@ -0,0 +1,1065 @@ + + + + + PACKAGES + + + PACKAGE_FILES + + DEFAULT_INSTALL_LOCATION + / + HIERARCHY + + CHILDREN + + + CHILDREN + + + CHILDREN + + GID + 80 + PATH + Utilities + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + GID + 80 + PATH + Applications + PATH_TYPE + 0 + PERMISSIONS + 509 + TYPE + 1 + UID + 0 + + + CHILDREN + + + CHILDREN + + + CHILDREN + + + CHILDREN + + + CHILDREN + + GID + 80 + PATH + ../360Daemon/build/Release/360Daemon + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + + CHILDREN + + GID + 80 + PATH + ../360Daemon/Alert.tif + PATH_TYPE + 1 + PERMISSIONS + 420 + TYPE + 3 + UID + 0 + + + GID + 80 + PATH + Resources + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 2 + UID + 0 + + + GID + 80 + PATH + 360Daemon + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 2 + UID + 0 + + + GID + 80 + PATH + MICE + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 2 + UID + 0 + + + GID + 80 + PATH + Application Support + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Documentation + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Filesystems + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Frameworks + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Input Methods + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Internet Plug-Ins + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + LaunchAgents + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + + CHILDREN + + GID + 0 + PATH + ../360Daemon/com.mice.360Daemon.plist + PATH_TYPE + 1 + PERMISSIONS + 420 + TYPE + 3 + UID + 0 + + + GID + 0 + PATH + LaunchDaemons + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + + CHILDREN + + GID + 0 + PATH + ../Pref360Control/build/Deployment/Pref360Control.prefPane + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + GID + 0 + PATH + PreferencePanes + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Preferences + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + Printers + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + PrivilegedHelperTools + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + QuickLook + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + QuickTime + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Screen Savers + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Scripts + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Services + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + Widgets + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + GID + 0 + PATH + Library + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + + CHILDREN + + + CHILDREN + + + BUNDLE_CAN_DOWNGRADE + + CHILDREN + + GID + 0 + PATH + ../360Controller/build/Deployment/360Controller.kext + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + ../Wireless360Controller/build/Release/Wireless360Controller.kext + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 0 + PATH + ../WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext + PATH_TYPE + 1 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + GID + 0 + PATH + Extensions + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + GID + 0 + PATH + Library + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + GID + 0 + PATH + System + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + CHILDREN + + + CHILDREN + + GID + 0 + PATH + Shared + PATH_TYPE + 0 + PERMISSIONS + 1023 + TYPE + 1 + UID + 0 + + + GID + 80 + PATH + Users + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + + GID + 0 + PATH + / + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 1 + UID + 0 + + PAYLOAD_TYPE + 0 + VERSION + 2 + + PACKAGE_SCRIPTS + + POSTINSTALL_PATH + + PATH + Scripts/finish.sh + PATH_TYPE + 1 + + PREINSTALL_PATH + + PATH + Scripts/upgrade.sh + PATH_TYPE + 1 + + RESOURCES + + + PACKAGE_SETTINGS + + AUTHENTICATION + 1 + CONCLUSION_ACTION + 2 + IDENTIFIER + com.mice.pkg.Xbox360controller + NAME + Install360Controller + OVERWRITE_PERMISSIONS + + VERSION + 0.12 + + UUID + 95C3DB03-4C99-4A29-AEC7-C73B3D9F6A04 + + + PROJECT + + PROJECT_COMMENTS + + NOTES + + PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1M + IDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv + c3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l + cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 + IGNoYXJzZXQ9VVRGLTgiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250 + ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp + dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u + dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD + b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjExODcuMzQiPgo8c3R5bGUg + dHlwZT0idGV4dC9jc3MiPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5 + Pgo8L2JvZHk+CjwvaHRtbD4K + + + PROJECT_PRESENTATION + + INSTALLATION TYPE + + HIERARCHIES + + INSTALLER + + LIST + + + DESCRIPTION + + OPTIONS + + HIDDEN + + STATE + 0 + + PACKAGE_UUID + 95C3DB03-4C99-4A29-AEC7-C73B3D9F6A04 + REQUIREMENTS + + TITLE + + TOOLTIP + + TYPE + 0 + UUID + CB32CFF6-F06D-4B81-B1A5-A040090A6BFB + + + REMOVED + + + + INSTALLATION TYPE + 0 + + INSTALLATION_STEPS + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewIntroductionController + INSTALLER_PLUGIN + Introduction + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewReadMeController + INSTALLER_PLUGIN + ReadMe + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewLicenseController + INSTALLER_PLUGIN + License + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewDestinationSelectController + INSTALLER_PLUGIN + TargetSelect + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewInstallationTypeController + INSTALLER_PLUGIN + PackageSelection + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewInstallationController + INSTALLER_PLUGIN + Install + LIST_TITLE_KEY + InstallerSectionTitle + + + ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS + ICPresentationViewSummaryController + INSTALLER_PLUGIN + Summary + LIST_TITLE_KEY + InstallerSectionTitle + + + INTRODUCTION + + LOCALIZATIONS + + + LANGUAGE + English + VALUE + + PATH + Text/Welcome.rtf + PATH_TYPE + 1 + + + + + LICENSE + + KEYWORDS + + LOCALIZATIONS + + + LANGUAGE + English + VALUE + + PATH + ../Licence.txt + PATH_TYPE + 1 + + + + MODE + 0 + + README + + LOCALIZATIONS + + + LANGUAGE + English + VALUE + + PATH + ../Readme.rtf + PATH_TYPE + 1 + + + + + SUMMARY + + LOCALIZATIONS + + + TITLE + + LOCALIZATIONS + + + LANGUAGE + English + VALUE + Install360Controller + + + + + PROJECT_REQUIREMENTS + + LIST + + POSTINSTALL_PATH + + PREINSTALL_PATH + + RESOURCES + + ROOT_VOLUME_ONLY + + + PROJECT_SETTINGS + + ADVANCED_OPTIONS + + BUILD_FORMAT + 0 + BUILD_PATH + + PATH + build + PATH_TYPE + 1 + + CERTIFICATE + + NAME + Developer ID Installer: Colin Munro + PATH + /Users/colin/Library/Keychains/login.keychain + + EXCLUDED_FILES + + + PATTERNS_ARRAY + + + REGULAR_EXPRESSION + + STRING + .DS_Store + TYPE + 0 + + + PROTECTED + + PROXY_NAME + Remove .DS_Store files + PROXY_TOOLTIP + Remove ".DS_Store" files created by the Finder. + STATE + + + + PATTERNS_ARRAY + + + REGULAR_EXPRESSION + + STRING + .pbdevelopment + TYPE + 0 + + + PROTECTED + + PROXY_NAME + Remove .pbdevelopment files + PROXY_TOOLTIP + Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. + STATE + + + + PATTERNS_ARRAY + + + REGULAR_EXPRESSION + + STRING + CVS + TYPE + 1 + + + REGULAR_EXPRESSION + + STRING + .cvsignore + TYPE + 0 + + + REGULAR_EXPRESSION + + STRING + .cvspass + TYPE + 0 + + + REGULAR_EXPRESSION + + STRING + .svn + TYPE + 1 + + + REGULAR_EXPRESSION + + STRING + .git + TYPE + 1 + + + REGULAR_EXPRESSION + + STRING + .gitignore + TYPE + 0 + + + PROTECTED + + PROXY_NAME + Remove SCM metadata + PROXY_TOOLTIP + Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. + STATE + + + + PATTERNS_ARRAY + + + REGULAR_EXPRESSION + + STRING + classes.nib + TYPE + 0 + + + REGULAR_EXPRESSION + + STRING + designable.db + TYPE + 0 + + + REGULAR_EXPRESSION + + STRING + info.nib + TYPE + 0 + + + PROTECTED + + PROXY_NAME + Optimize nib files + PROXY_TOOLTIP + Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. + STATE + + + + PATTERNS_ARRAY + + + REGULAR_EXPRESSION + + STRING + Resources Disabled + TYPE + 1 + + + PROTECTED + + PROXY_NAME + Remove Resources Disabled folders + PROXY_TOOLTIP + Remove "Resources Disabled" folders. + STATE + + + + SEPARATOR + + + + NAME + XBox 360 Controller Driver + + + TYPE + 0 + VERSION + 2 + + diff --git a/build b/build index 3ad81fad..bb7e8c4c 100755 --- a/build +++ b/build @@ -50,7 +50,7 @@ if [ $? -ne 0 ] exit 1 fi cd ../Install360Controller -freeze Install360Controller.packproj +packagesbuild -v Install360Controller.pkgproj mv 360ControllerInstall/360ControllerInstall.pkg . productsign --sign "Developer ID Installer: Colin Munro" Install360Controller.pkg Install360Controller/Install360Controller.pkg hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg From 61c5651afc6fed4b025c2f674faa68e01e7f8cde Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 07:45:21 +0000 Subject: [PATCH 61/66] Attempting to bring it together --- Install360Controller/Install360Controller.pkgproj | 2 +- build | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Install360Controller/Install360Controller.pkgproj b/Install360Controller/Install360Controller.pkgproj index 9c09ae70..be4569ff 100755 --- a/Install360Controller/Install360Controller.pkgproj +++ b/Install360Controller/Install360Controller.pkgproj @@ -1054,7 +1054,7 @@ NAME - XBox 360 Controller Driver + Install360Controller TYPE diff --git a/build b/build index bb7e8c4c..e70bbca9 100755 --- a/build +++ b/build @@ -51,8 +51,7 @@ if [ $? -ne 0 ] fi cd ../Install360Controller packagesbuild -v Install360Controller.pkgproj -mv 360ControllerInstall/360ControllerInstall.pkg . -productsign --sign "Developer ID Installer: Colin Munro" Install360Controller.pkg Install360Controller/Install360Controller.pkg +mv build 360ControllerInstall hdiutil create -srcfolder 360ControllerInstall -format UDZO ../../360ControllerInstall.dmg mv 360ControllerInstall build cd .. From 9c730996158e677785cb9cf6c479e652bcd89406 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 07:49:14 +0000 Subject: [PATCH 62/66] Tweaking the build --- build | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/build b/build index e70bbca9..5c58ed2d 100755 --- a/build +++ b/build @@ -64,12 +64,12 @@ lipo -info Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Reso lipo -info WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext/Contents/MacOS/WirelessGamingReceiver lipo -info Wireless360Controller/build/Release/Wireless360Controller.kext/Contents/MacOS/Wireless360Controller echo "** File signatures **" -codesign -dvvv 360Controller/build/Deployment/360Controller.kext -codesign -dvvv 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin -codesign -dvvv 360Daemon/build/Release/360Daemon -codesign -dvvv Pref360Control/build/Deployment/Pref360Control.prefPane -codesign -dvvv Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool -codesign -dvvv WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext -codesign -dvvv Wireless360Controller/build/Release/Wireless360Controller.kext -pkgutil --check-signature build/360ControllerInstall.pkg +sudo spctl -a -v 360Controller/build/Deployment/360Controller.kext +sudo spctl -a -v 360Controller/build/Deployment/360Controller.kext/Contents/PlugIns/Feedback360.plugin +sudo spctl -a -v 360Daemon/build/Release/360Daemon +sudo spctl -a -v Pref360Control/build/Deployment/Pref360Control.prefPane +sudo spctl -a -v Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool +sudo spctl -a -v WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext +sudo spctl -a -v Wireless360Controller/build/Release/Wireless360Controller.kext +sudo spctl -a -v --type install build/Install360Controller.pkg echo "*** DONE ***" From 7e97b3c6ba8a9d717d20c3d97e90f2116c45b10b Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 09:26:09 +0000 Subject: [PATCH 63/66] Fix a crash/leak! --- WirelessGamingReceiver/WirelessHIDDevice.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/WirelessGamingReceiver/WirelessHIDDevice.cpp b/WirelessGamingReceiver/WirelessHIDDevice.cpp index 1fa965f1..db7a1d00 100644 --- a/WirelessGamingReceiver/WirelessHIDDevice.cpp +++ b/WirelessGamingReceiver/WirelessHIDDevice.cpp @@ -151,7 +151,16 @@ void WirelessHIDDevice::handleStop(IOService *provider) device = OSDynamicCast(WirelessDevice, provider); if (device != NULL) device->RegisterWatcher(NULL, NULL, NULL); - + + if (serialTimer != NULL) { + serialTimer->cancelTimeout(); + IOWorkLoop *workloop = getWorkLoop(); + if (workloop != NULL) + workloop->removeEventSource(serialTimer); + serialTimer->release(); + serialTimer = NULL; + } + super::handleStop(provider); } From 8802bfa18c5574cdd387bf94bf544e3851f801c8 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 09:45:00 +0000 Subject: [PATCH 64/66] Update version info --- .../Pref360ControlPref.nib/designable.nib | 282 +++++++++++++++++- .../Pref360ControlPref.nib/keyedobjects.nib | Bin 20382 -> 20649 bytes Wireless360Controller/Info.plist | 44 +-- 3 files changed, 298 insertions(+), 28 deletions(-) diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib index bd73b475..16ccac1d 100644 --- a/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib +++ b/Pref360Control/English.lproj/Pref360ControlPref.nib/designable.nib @@ -2,7 +2,7 @@ 1050 - 12C54 + 12C60 2844 1187.34 625.00 @@ -72,6 +72,7 @@ 256 {{107, 260}, {471, 26}} + YES @@ -157,6 +158,7 @@ 256 {{40, 266}, {65, 17}} + YES @@ -191,6 +193,7 @@ 256 {{43, 117}, {77, 77}} + MyAnalogStick NSView @@ -200,6 +203,7 @@ 256 {{123, 43}, {77, 77}} + MyDigitalStick NSView @@ -209,6 +213,7 @@ 256 {{226, 43}, {77, 77}} + MyAnalogStick NSView @@ -218,6 +223,7 @@ 256 {{306, 117}, {77, 77}} + MyMainButtons NSView @@ -227,6 +233,7 @@ 256 {{151, 141}, {126, 39}} + MyCentreButtons NSView @@ -236,6 +243,7 @@ 256 {{43, 202}, {77, 18}} + MyShoulderButton NSView @@ -245,6 +253,7 @@ 256 {{306, 202}, {77, 18}} + MyShoulderButton NSView @@ -254,6 +263,7 @@ 1280 {{41, 224}, {161, 20}} + 16392 255 @@ -263,6 +273,7 @@ 1280 {{224, 224}, {161, 20}} + 16392 255 @@ -272,6 +283,7 @@ 256 {{41, 93}, {71, 18}} + YES @@ -297,6 +309,7 @@ 256 {{41, 73}, {71, 18}} + YES @@ -320,6 +333,7 @@ 256 {{309, 81}, {71, 18}} + YES @@ -343,6 +357,7 @@ 256 {{309, 61}, {71, 18}} + YES @@ -366,6 +381,7 @@ 256 {{224, 16}, {161, 21}} + YES @@ -396,6 +412,7 @@ 256 {{41, 53}, {64, 18}} + YES @@ -419,6 +436,7 @@ 256 {{309, 41}, {64, 18}} + YES @@ -450,6 +468,7 @@ 256 {{13, 193}, {153, 14}} + YES @@ -472,12 +491,13 @@ 256 {{13, 173}, {129, 17}} + YES 67108864 272629760 - Version 0.11 + Version 0.12 LucidaGrande 10 @@ -494,12 +514,13 @@ 256 {{13, 157}, {129, 17}} + YES 67108864 272629760 - (C) 2006-12 Colin Munro + (C) 2006-13 Colin Munro @@ -512,6 +533,7 @@ 256 {{10, 138}, {129, 14}} + YES @@ -530,6 +552,7 @@ 256 {{10, 116}, {153, 14}} + YES @@ -548,6 +571,7 @@ 256 {{13, 11}, {150, 97}} + YES 67108864 @@ -565,11 +589,13 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{2, 2}, {179, 218}} + {{395, 16}, {183, 235}} + {0, 0} @@ -610,6 +636,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {{197, 190}, {32, 24}} + YES @@ -632,6 +659,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 268 {{17, 40}, {21, 156}} + YES @@ -655,6 +683,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ -2147483380 {{8, 254}, {39, 38}} + YES @@ -681,6 +710,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ -2147483380 {{62, 9}, {118, 32}} + YES @@ -701,9 +731,10 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {595, 304} + - {{0, 0}, {1366, 746}} + {{0, 0}, {1280, 1002}} {595, 32} {10000000000000, 10000000000000} YES @@ -947,7 +978,7 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ {519, 336} - {{0, 0}, {1366, 746}} + {{0, 0}, {1280, 1002}} {490, 172} {10000000000000, 10000000000000} YES @@ -1859,7 +1890,246 @@ eW91IGVuam95IHRoaXMgZHJpdmVyIQ 230 - + + + + DeviceLister + NSObject + + done: + id + + + done: + + done: + id + + + + NSTableView + NSWindow + + + + list + NSTableView + + + sheet + NSWindow + + + + IBProjectSource + ./Classes/DeviceLister.h + + + + MyAnalogStick + NSView + + IBProjectSource + ./Classes/MyAnalogStick.h + + + + MyCentreButtons + NSView + + IBProjectSource + ./Classes/MyCentreButtons.h + + + + MyDigitalStick + NSView + + IBProjectSource + ./Classes/MyDigitalStick.h + + + + MyMainButtons + NSView + + IBProjectSource + ./Classes/MyMainButtons.h + + + + MyShoulderButton + NSView + + IBProjectSource + ./Classes/MyShoulderButton.h + + + + NSPreferencePane + NSObject + + NSView + NSView + NSView + NSWindow + + + + _firstKeyView + NSView + + + _initialKeyView + NSView + + + _lastKeyView + NSView + + + _window + NSWindow + + + + IBProjectSource + ./Classes/NSPreferencePane.h + + + + Pref360ControlPref + NSPreferencePane + + id + id + + + + powerOff: + id + + + showDeviceList: + id + + + + NSImageView + MyCentreButtons + NSPopUpButton + DeviceLister + MyDigitalStick + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + NSButton + MyMainButtons + NSButton + MyShoulderButton + MyAnalogStick + NSSlider + NSButton + NSButton + NSProgressIndicator + + + + batteryLevel + NSImageView + + + centreButtons + MyCentreButtons + + + deviceList + NSPopUpButton + + + deviceLister + DeviceLister + + + digiStick + MyDigitalStick + + + leftLinked + NSButton + + + leftShoulder + MyShoulderButton + + + leftStick + MyAnalogStick + + + leftStickDeadzone + NSSlider + + + leftStickInvertX + NSButton + + + leftStickInvertY + NSButton + + + leftTrigger + NSProgressIndicator + + + powerOff + NSButton + + + rightButtons + MyMainButtons + + + rightLinked + NSButton + + + rightShoulder + MyShoulderButton + + + rightStick + MyAnalogStick + + + rightStickDeadzone + NSSlider + + + rightStickInvertX + NSButton + + + rightStickInvertY + NSButton + + + rightTrigger + NSProgressIndicator + + + + IBProjectSource + ./Classes/Pref360ControlPref.h + + + + 0 IBCocoaFramework diff --git a/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib b/Pref360Control/English.lproj/Pref360ControlPref.nib/keyedobjects.nib index 5fb20525b2f3cd0a2ff95660bacd42f0aae13e87..00668ec878abdddd637c98cdd83b836cc85890fa 100644 GIT binary patch literal 20649 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 C*zL{$ literal 20382 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 ???? CFBundleVersion - 1.0.0d11 - IOKitPersonalities - - Wireless360Controller - - CFBundleIdentifier - com.mice.driver.Wireless360Controller - IOCFPlugInTypes - - F4545CE5-BF5B-11D6-A4BB-0003933E3E3E - 360Controller.kext/Contents/PlugIns/Feedback360.plugin - - IOClass - Wireless360Controller - IOKitDebug - 65536 - IOProviderClass - WirelessDevice - Wireless360Device - 0 - - + 1.0.0d12 + IOKitPersonalities + + Wireless360Controller + + CFBundleIdentifier + com.mice.driver.Wireless360Controller + IOCFPlugInTypes + + F4545CE5-BF5B-11D6-A4BB-0003933E3E3E + 360Controller.kext/Contents/PlugIns/Feedback360.plugin + + IOClass + Wireless360Controller + IOKitDebug + 65536 + IOProviderClass + WirelessDevice + Wireless360Device + 0 + + OSBundleLibraries com.apple.iokit.IOHIDFamily From 649b9712d2a2215e55776de06e1726e2bd626308 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 7 Feb 2013 09:45:54 +0000 Subject: [PATCH 65/66] Finish build script --- build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build b/build index 5c58ed2d..65324c51 100755 --- a/build +++ b/build @@ -71,5 +71,5 @@ sudo spctl -a -v Pref360Control/build/Deployment/Pref360Control.prefPane sudo spctl -a -v Pref360Control/build/Deployment/Pref360Control.prefPane/Contents/Resources/DriverTool sudo spctl -a -v WirelessGamingReceiver/build/Release/WirelessGamingReceiver.kext sudo spctl -a -v Wireless360Controller/build/Release/Wireless360Controller.kext -sudo spctl -a -v --type install build/Install360Controller.pkg +sudo spctl -a -v --type install Install360Controller/build/Install360Controller.pkg echo "*** DONE ***" From 6f4029d758b30ce4e2204be4d46b9112869e4e56 Mon Sep 17 00:00:00 2001 From: David Ryskalczyk Date: Thu, 5 Nov 2015 09:05:28 -0500 Subject: [PATCH 66/66] Add info on new repo --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..d6789a6a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# XBox 360 Controller driver for Mac OS X +###This driver has moved to https://github.com/360Controller/360Controller. +###This repository remains here for reference, but is obsolete.