Overview
Comment: | ObjFWHID: Restore Nintendo 3DS support |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
663320ba4d0aba8352d92b18be965f0b |
User & Date: | js on 2024-06-08 20:21:48 |
Other Links: | manifest | tags |
Context
2024-06-08
| ||
21:25 | ObjFWHID: Restore Nintendo DS support check-in: 6a6c86237d user: js tags: trunk | |
20:21 | ObjFWHID: Restore Nintendo 3DS support check-in: 663320ba4d user: js tags: trunk | |
19:38 | OHXInputGamepad: Fix missed rename check-in: 7be631239e user: js tags: trunk | |
Changes
Modified configure.ac from [f83f5209e0] to [bf1fe49627].
︙ | ︙ | |||
255 256 257 258 259 260 261 262 263 264 265 266 267 268 | enable_shared="no" enable_threads="no" # TODO with_tls="no" check_pedantic="no" AC_DEFINE(OF_NINTENDO_3DS, 1, [Whether we are compiling for Nintendo 3DS]) AC_SUBST(MAP_LDFLAGS, ['-Wl,-Map,$@.map']) ]) AC_ARG_WITH(nintendo-switch, AS_HELP_STRING([--with-nintendo-switch], [build for Nintendo Switch])) AS_IF([test x"$with_nintendo_switch" = x"yes"], [ AS_IF([test x"$DEVKITPRO" = x""], [ | > | 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | enable_shared="no" enable_threads="no" # TODO with_tls="no" check_pedantic="no" AC_DEFINE(OF_NINTENDO_3DS, 1, [Whether we are compiling for Nintendo 3DS]) AC_SUBST(USE_SRCS_NINTENDO_3DS, '${SRCS_NINTENDO_3DS}') AC_SUBST(MAP_LDFLAGS, ['-Wl,-Map,$@.map']) ]) AC_ARG_WITH(nintendo-switch, AS_HELP_STRING([--with-nintendo-switch], [build for Nintendo Switch])) AS_IF([test x"$with_nintendo_switch" = x"yes"], [ AS_IF([test x"$DEVKITPRO" = x""], [ |
︙ | ︙ |
Modified extra.mk.in from [dae9e19b6f] to [5b1cf80650].
︙ | ︙ | |||
96 97 98 99 100 101 102 103 104 105 106 107 108 109 | TLS_LIBS = @TLS_LIBS@ UNICODE_M = @UNICODE_M@ USE_INCLUDES_ATOMIC = @USE_INCLUDES_ATOMIC@ USE_SRCS_APPLETALK = @USE_SRCS_APPLETALK@ USE_SRCS_EVDEV = @USE_SRCS_EVDEV@ USE_SRCS_FILES = @USE_SRCS_FILES@ USE_SRCS_IPX = @USE_SRCS_IPX@ USE_SRCS_PLUGINS = @USE_SRCS_PLUGINS@ USE_SRCS_SCTP = @USE_SRCS_SCTP@ USE_SRCS_SOCKETS = @USE_SRCS_SOCKETS@ USE_SRCS_SUBPROCESSES = @USE_SRCS_SUBPROCESSES@ USE_SRCS_TAGGED_POINTERS = @USE_SRCS_TAGGED_POINTERS@ USE_SRCS_THREADS = @USE_SRCS_THREADS@ USE_SRCS_UNIX_SOCKETS = @USE_SRCS_UNIX_SOCKETS@ | > | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | TLS_LIBS = @TLS_LIBS@ UNICODE_M = @UNICODE_M@ USE_INCLUDES_ATOMIC = @USE_INCLUDES_ATOMIC@ USE_SRCS_APPLETALK = @USE_SRCS_APPLETALK@ USE_SRCS_EVDEV = @USE_SRCS_EVDEV@ USE_SRCS_FILES = @USE_SRCS_FILES@ USE_SRCS_IPX = @USE_SRCS_IPX@ USE_SRCS_NINTENDO_3DS = @USE_SRCS_NINTENDO_3DS@ USE_SRCS_PLUGINS = @USE_SRCS_PLUGINS@ USE_SRCS_SCTP = @USE_SRCS_SCTP@ USE_SRCS_SOCKETS = @USE_SRCS_SOCKETS@ USE_SRCS_SUBPROCESSES = @USE_SRCS_SUBPROCESSES@ USE_SRCS_TAGGED_POINTERS = @USE_SRCS_TAGGED_POINTERS@ USE_SRCS_THREADS = @USE_SRCS_THREADS@ USE_SRCS_UNIX_SOCKETS = @USE_SRCS_UNIX_SOCKETS@ |
︙ | ︙ |
Modified src/hid/Makefile from [df135a085c] to [6270b55dc0].
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | OHGameControllerAxis.m \ OHGameControllerButton.m \ OHGameControllerDirectionalPad.m \ OHGameControllerElement.m \ OHGameControllerProfile.m \ OHGamepad.m \ ${USE_SRCS_EVDEV} \ ${USE_SRCS_XINPUT} SRCS_EVDEV = OHEvdevGameController.m \ OHEvdevGamepad.m SRCS_XINPUT = OHXInputGameController.m \ OHXInputGamepad.m INCLUDES := ${SRCS:.m=.h} \ ObjFWHID.h SRCS += OHGameControllerEmulatedAxis.m \ | > > > | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | OHGameControllerAxis.m \ OHGameControllerButton.m \ OHGameControllerDirectionalPad.m \ OHGameControllerElement.m \ OHGameControllerProfile.m \ OHGamepad.m \ ${USE_SRCS_EVDEV} \ ${USE_SRCS_NINTENDO_3DS} \ ${USE_SRCS_XINPUT} SRCS_EVDEV = OHEvdevGameController.m \ OHEvdevGamepad.m SRCS_NINTENDO_3DS = OHNintendo3DSGameController.m \ OHNintendo3DSGamepad.m SRCS_XINPUT = OHXInputGameController.m \ OHXInputGamepad.m INCLUDES := ${SRCS:.m=.h} \ ObjFWHID.h SRCS += OHGameControllerEmulatedAxis.m \ |
︙ | ︙ |
Modified src/hid/OHGameController.m from [501a6c45ed] to [1e979f93f1].
︙ | ︙ | |||
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #if defined(OF_LINUX) && defined(OF_HAVE_FILES) # import "OHEvdevGameController.h" #endif #ifdef OF_WINDOWS # import "OHXInputGameController.h" #endif @implementation OHGameController @dynamic name, rawProfile; + (OFArray OF_GENERIC(OHGameController *) *)controllers { #if defined(OF_LINUX) && defined(OF_HAVE_FILES) return [OHEvdevGameController controllers]; #elif defined(OF_WINDOWS) return [OHXInputGameController controllers]; #else return [OFArray array]; #endif } - (instancetype)init { | > > > > > | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #if defined(OF_LINUX) && defined(OF_HAVE_FILES) # import "OHEvdevGameController.h" #endif #ifdef OF_WINDOWS # import "OHXInputGameController.h" #endif #ifdef OF_NINTENDO_3DS # import "OHNintendo3DSGameController.h" #endif @implementation OHGameController @dynamic name, rawProfile; + (OFArray OF_GENERIC(OHGameController *) *)controllers { #if defined(OF_LINUX) && defined(OF_HAVE_FILES) return [OHEvdevGameController controllers]; #elif defined(OF_WINDOWS) return [OHXInputGameController controllers]; #elif defined(OF_NINTENDO_3DS) return [OHNintendo3DSGameController controllers]; #else return [OFArray array]; #endif } - (instancetype)init { |
︙ | ︙ |
Modified src/hid/OHGamepad.h from [71565947d0] to [7b0ca0845a].
︙ | ︙ | |||
69 70 71 72 73 74 75 76 | /** * @brief The right trigger button. */ @property (readonly, nonatomic) OHGameControllerButton *rightTriggerButton; /** * @brief The left thumb stick button. */ | > > > | > > > | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | /** * @brief The right trigger button. */ @property (readonly, nonatomic) OHGameControllerButton *rightTriggerButton; /** * @brief The left thumb stick button. * * This button is optional and may be `nil`. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) OHGameControllerButton *leftThumbstickButton; /** * @brief The right thumb stick button. * * This button is optional and may be `nil`. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) OHGameControllerButton *rightThumbstickButton; /** * @brief The menu button, sometimes also called start button. */ @property (readonly, nonatomic) OHGameControllerButton *menuButton; /** |
︙ | ︙ |
Modified src/hid/OHGamepad.m from [051467454d] to [704651d399].
︙ | ︙ | |||
20 21 22 23 24 25 26 | #include "config.h" #import "OHGamepad.h" @implementation OHGamepad @dynamic northButton, southButton, westButton, eastButton, leftShoulderButton; @dynamic rightShoulderButton, leftTriggerButton, rightTriggerButton; | | | > > > > > > > > > > > > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include "config.h" #import "OHGamepad.h" @implementation OHGamepad @dynamic northButton, southButton, westButton, eastButton, leftShoulderButton; @dynamic rightShoulderButton, leftTriggerButton, rightTriggerButton; @dynamic menuButton, optionsButton, leftThumbstick, rightThumbstick, dPad; - (OHGameControllerButton *)leftThumbstickButton { return nil; } - (OHGameControllerButton *)rightThumbstickButton { return nil; } - (OHGameControllerButton *)homeButton { return nil; } @end |
Added src/hid/OHNintendo3DSGameController.h version [938beb87f9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * 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 Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #import "OHGameController.h" OF_ASSUME_NONNULL_BEGIN @class OHNintendo3DSGamepad; @interface OHNintendo3DSGameController: OHGameController { OHNintendo3DSGamepad *_gamepad; } @end OF_ASSUME_NONNULL_END |
Added src/hid/OHNintendo3DSGameController.m version [9e8e34de00].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | /* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * 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 Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #include "config.h" #import "OHNintendo3DSGameController.h" #import "OFArray.h" #import "OFDictionary.h" #import "OFNumber.h" #import "OHGameControllerAxis.h" #import "OHGameControllerButton.h" #import "OHGameControllerDirectionalPad.h" #import "OHNintendo3DSGamepad.h" #import "OFInitializationFailedException.h" #import "OFReadFailedException.h" #define id id_3ds #include <3ds.h> #undef id static OFArray OF_GENERIC(OHGameController *) *controllers; /* Work around for the compiler getting confused. */ static float keyValue(u32 keys, u32 key) { if (keys & key) return 1; else return 0; } @implementation OHNintendo3DSGameController @synthesize gamepad = _gamepad; + (void)initialize { void *pool; if (self != [OHNintendo3DSGameController class]) return; pool = objc_autoreleasePoolPush(); controllers = [[OFArray alloc] initWithObject: [[[OHNintendo3DSGameController alloc] init] autorelease]]; objc_autoreleasePoolPop(pool); } + (OFArray OF_GENERIC(OHGameController *) *)controllers { return controllers; } - (instancetype)init { self = [super init]; @try { _gamepad = [[OHNintendo3DSGamepad alloc] init]; [self retrieveState]; } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_gamepad release]; [super dealloc]; } - (void)retrieveState { u32 keys; circlePosition leftPos, rightPos; hidScanInput(); keys = hidKeysHeld(); hidCircleRead(&leftPos); hidCstickRead(&rightPos); _gamepad.northButton.value = keyValue(keys, KEY_X); _gamepad.southButton.value = keyValue(keys, KEY_B); _gamepad.westButton.value = keyValue(keys, KEY_Y); _gamepad.eastButton.value = keyValue(keys, KEY_A); _gamepad.leftShoulderButton.value = keyValue(keys, KEY_L); _gamepad.rightShoulderButton.value = keyValue(keys, KEY_R); _gamepad.leftTriggerButton.value = keyValue(keys, KEY_ZL); _gamepad.rightTriggerButton.value = keyValue(keys, KEY_ZR); _gamepad.menuButton.value = keyValue(keys, KEY_START); _gamepad.optionsButton.value = keyValue(keys, KEY_SELECT); if (leftPos.dx > 150) leftPos.dx = 150; if (leftPos.dx < -150) leftPos.dx = -150; if (leftPos.dy > 150) leftPos.dy = 150; if (leftPos.dy < -150) leftPos.dy = -150; if (rightPos.dx > 150) rightPos.dx = 150; if (rightPos.dx < -150) rightPos.dx = -150; if (rightPos.dy > 150) rightPos.dy = 150; if (rightPos.dy < -150) rightPos.dy = -150; _gamepad.leftThumbstick.xAxis.value = (float)leftPos.dx / 150; _gamepad.leftThumbstick.yAxis.value = -(float)leftPos.dy / 150; _gamepad.rightThumbstick.xAxis.value = (float)rightPos.dx / 150; _gamepad.rightThumbstick.yAxis.value = -(float)rightPos.dy / 150; _gamepad.dPad.up.value = keyValue(keys, KEY_DUP); _gamepad.dPad.down.value = keyValue(keys, KEY_DDOWN); _gamepad.dPad.left.value = keyValue(keys, KEY_DLEFT); _gamepad.dPad.right.value = keyValue(keys, KEY_DRIGHT); } - (OFString *)name { return @"Nintendo 3DS"; } - (OHGameControllerProfile *)rawProfile { return _gamepad; } @end |
Added src/hid/OHNintendo3DSGamepad.h version [048d54d1d0].
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * 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 Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #import "OHGamepad.h" OF_ASSUME_NONNULL_BEGIN @interface OHNintendo3DSGamepad: OHGamepad @end OF_ASSUME_NONNULL_END |
Added src/hid/OHNintendo3DSGamepad.m version [f89e0b995b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | /* * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * 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 Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * <https://www.gnu.org/licenses/>. */ #include "config.h" #import "OHNintendo3DSGamepad.h" #import "OFDictionary.h" #import "OHGameControllerAxis.h" #import "OHGameControllerButton.h" #import "OHGameControllerDirectionalPad.h" static OFString *const buttonNames[] = { @"A", @"B", @"X", @"Y", @"L", @"R", @"ZL", @"ZR", @"Start", @"Select" }; static const size_t numButtons = sizeof(buttonNames) / sizeof(*buttonNames); @implementation OHNintendo3DSGamepad - (instancetype)init { self = [super init]; @try { void *pool = objc_autoreleasePoolPush(); OFMutableDictionary *buttons = [OFMutableDictionary dictionaryWithCapacity: numButtons]; OFMutableDictionary *directionalPads; OHGameControllerAxis *xAxis, *yAxis; OHGameControllerDirectionalPad *directionalPad; OHGameControllerButton *up, *down, *left, *right; for (size_t i = 0; i < numButtons; i++) { OHGameControllerButton *button; button = [[OHGameControllerButton alloc] initWithName: buttonNames[i]]; @try { [buttons setObject: button forKey: buttonNames[i]]; } @finally { [button release]; } } [buttons makeImmutable]; _buttons = [buttons retain]; _axes = [[OFDictionary alloc] init]; directionalPads = [OFMutableDictionary dictionaryWithCapacity: 3]; xAxis = [[[OHGameControllerAxis alloc] initWithName: @"X"] autorelease]; yAxis = [[[OHGameControllerAxis alloc] initWithName: @"Y"] autorelease]; directionalPad = [[[OHGameControllerDirectionalPad alloc] initWithName: @"Circle Pad" xAxis: xAxis yAxis: yAxis] autorelease]; [directionalPads setObject: directionalPad forKey: @"Circle Pad"]; xAxis = [[[OHGameControllerAxis alloc] initWithName: @"CX"] autorelease]; yAxis = [[[OHGameControllerAxis alloc] initWithName: @"CY"] autorelease]; directionalPad = [[[OHGameControllerDirectionalPad alloc] initWithName: @"C-Stick" xAxis: xAxis yAxis: yAxis] autorelease]; [directionalPads setObject: directionalPad forKey: @"C-Stick"]; up = [[[OHGameControllerButton alloc] initWithName: @"D-Pad Up"] autorelease]; down = [[[OHGameControllerButton alloc] initWithName: @"D-Pad Down"] autorelease]; left = [[[OHGameControllerButton alloc] initWithName: @"D-Pad Left"] autorelease]; right = [[[OHGameControllerButton alloc] initWithName: @"D-Pad Right"] autorelease]; directionalPad = [[[OHGameControllerDirectionalPad alloc] initWithName: @"D-Pad" up: up down: down left: left right: right] autorelease]; [directionalPads setObject: directionalPad forKey: @"D-Pad"]; [directionalPads makeImmutable]; _directionalPads = [directionalPads retain]; objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; } return self; } - (OHGameControllerButton *)northButton { return [_buttons objectForKey: @"X"]; } - (OHGameControllerButton *)southButton { return [_buttons objectForKey: @"B"]; } - (OHGameControllerButton *)westButton { return [_buttons objectForKey: @"Y"]; } - (OHGameControllerButton *)eastButton { return [_buttons objectForKey: @"A"]; } - (OHGameControllerButton *)leftShoulderButton { return [_buttons objectForKey: @"L"]; } - (OHGameControllerButton *)rightShoulderButton { return [_buttons objectForKey: @"R"]; } - (OHGameControllerButton *)leftTriggerButton { return [_buttons objectForKey: @"ZL"]; } - (OHGameControllerButton *)rightTriggerButton { return [_buttons objectForKey: @"ZR"]; } - (OHGameControllerButton *)menuButton { return [_buttons objectForKey: @"Start"]; } - (OHGameControllerButton *)optionsButton { return [_buttons objectForKey: @"Select"]; } - (OHGameControllerDirectionalPad *)leftThumbstick { return [_directionalPads objectForKey: @"Circle Pad"]; } - (OHGameControllerDirectionalPad *)rightThumbstick { return [_directionalPads objectForKey: @"C-Stick"]; } - (OHGameControllerDirectionalPad *)dPad { return [_directionalPads objectForKey: @"D-Pad"]; } @end |
Modified src/hid/OHXInputGameController.h from [2da83182e9] to [ea7d06ddf4].
︙ | ︙ | |||
40 41 42 43 44 45 46 | #endif extern int OHXInputVersion; #ifdef __cplusplus } #endif OF_ASSUME_NONNULL_END | < | 40 41 42 43 44 45 46 | #endif extern int OHXInputVersion; #ifdef __cplusplus } #endif OF_ASSUME_NONNULL_END |