Skip to content

Commit ca203e9

Browse files
committed
Fixed game pad controller bug (#924, #932)
1 parent 15373ca commit ca203e9

File tree

5 files changed

+99
-35
lines changed

5 files changed

+99
-35
lines changed

Core/Peripherals/Joystick/JoystickTypes.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,31 @@ enum class HIDEvent
2828
HATSWITCH,
2929
};
3030

31+
struct HIDEventEnum : Reflection<HIDEventEnum, HIDEvent>
32+
{
33+
static constexpr long minVal = 0;
34+
static constexpr long maxVal = long(HIDEvent::HATSWITCH);
35+
36+
static const char *_key(HIDEvent value)
37+
{
38+
switch (value) {
39+
40+
case HIDEvent::AXIS: return "AXIS";
41+
case HIDEvent::BUTTON: return "BUTTON";
42+
case HIDEvent::DPAD_UP: return "DPAD_UP";
43+
case HIDEvent::DPAD_DOWN: return "DPAD_DOWN";
44+
case HIDEvent::DPAD_RIGHT: return "DPAD_RIGHT";
45+
case HIDEvent::DPAD_LEFT: return "DPAD_LEFT";
46+
case HIDEvent::HATSWITCH: return "HATSWITCH";
47+
}
48+
return "???";
49+
}
50+
static const char *help(HIDEvent value)
51+
{
52+
return "";
53+
}
54+
};
55+
3156
enum class GamePadAction : long
3257
{
3358
PULL_UP = 0, // Pull the joystick up

Core/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
// Version number
1717
static constexpr int VER_MAJOR = 4;
1818
static constexpr int VER_MINOR = 3;
19-
static constexpr int VER_SUBMINOR = 0;
19+
static constexpr int VER_SUBMINOR = 1;
2020
static constexpr int VER_BETA = 0;
2121

2222
// Snapshot version number

GUI/Input/DeviceDatabase.swift

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,24 @@ class DeviceDatabase {
226226
case "a3": result[.AXIS]![3] = mapAxis(key: pair[0])
227227
case "a4": result[.AXIS]![4] = mapAxis(key: pair[0])
228228
case "a5": result[.AXIS]![5] = mapAxis(key: pair[0])
229-
case "a0~": result[.AXIS]![0] = mapAxisRev(key: pair[0])
230-
case "a1~": result[.AXIS]![1] = mapAxisRev(key: pair[0])
231-
case "a2~": result[.AXIS]![2] = mapAxisRev(key: pair[0])
232-
case "a3~": result[.AXIS]![3] = mapAxisRev(key: pair[0])
233-
case "a4~": result[.AXIS]![4] = mapAxisRev(key: pair[0])
234-
case "a5~": result[.AXIS]![5] = mapAxisRev(key: pair[0])
229+
case "+a0": result[.AXIS]![0] = mapAxis(key: pair[0])
230+
case "+a1": result[.AXIS]![1] = mapAxis(key: pair[0])
231+
case "+a2": result[.AXIS]![2] = mapAxis(key: pair[0])
232+
case "+a3": result[.AXIS]![3] = mapAxis(key: pair[0])
233+
case "+a4": result[.AXIS]![4] = mapAxis(key: pair[0])
234+
case "+a5": result[.AXIS]![5] = mapAxis(key: pair[0])
235+
case "-a0": result[.AXIS]![0] = mapAxis(key: pair[0], rev: true)
236+
case "-a1": result[.AXIS]![1] = mapAxis(key: pair[0], rev: true)
237+
case "-a2": result[.AXIS]![2] = mapAxis(key: pair[0], rev: true)
238+
case "-a3": result[.AXIS]![3] = mapAxis(key: pair[0], rev: true)
239+
case "-a4": result[.AXIS]![4] = mapAxis(key: pair[0], rev: true)
240+
case "-a5": result[.AXIS]![5] = mapAxis(key: pair[0], rev: true)
241+
case "a0~": result[.AXIS]![0] = mapAxis(key: pair[0], rev: true)
242+
case "a1~": result[.AXIS]![1] = mapAxis(key: pair[0], rev: true)
243+
case "a2~": result[.AXIS]![2] = mapAxis(key: pair[0], rev: true)
244+
case "a3~": result[.AXIS]![3] = mapAxis(key: pair[0], rev: true)
245+
case "a4~": result[.AXIS]![4] = mapAxis(key: pair[0], rev: true)
246+
case "a5~": result[.AXIS]![5] = mapAxis(key: pair[0], rev: true)
235247
case "b0": result[.BUTTON]![1] = mapButton(key: pair[0])
236248
case "b1": result[.BUTTON]![2] = mapButton(key: pair[0])
237249
case "b2": result[.BUTTON]![3] = mapButton(key: pair[0])
@@ -258,30 +270,35 @@ class DeviceDatabase {
258270
return result
259271
}
260272

261-
private func mapAxis(key: String) -> [Int: [GamePadAction]] {
273+
private func mapAxis(key: String, rev: Bool = false) -> [Int: [GamePadAction]] {
274+
275+
var result: [Int: [GamePadAction]] = [:]
262276

263277
switch (key) {
264278

265279
case "leftx", "rightx":
266-
return [-1: [.PULL_LEFT], 0: [.RELEASE_X], 1: [.PULL_RIGHT]]
280+
result = [-1: [.PULL_LEFT], 0: [.RELEASE_X], 1: [.PULL_RIGHT]]
267281
case "lefty", "righty":
268-
return [-1: [.PULL_UP], 0: [.RELEASE_Y], 1: [.PULL_DOWN]]
282+
result = [-1: [.PULL_UP], 0: [.RELEASE_Y], 1: [.PULL_DOWN]]
283+
case "dpup":
284+
result = [-1: [.PULL_DOWN], 0: [.RELEASE_Y], 1: [.PULL_UP]]
285+
case "dpdown":
286+
result = [-1: [.PULL_UP], 0: [.RELEASE_Y], 1: [.PULL_DOWN]]
287+
case "dpright":
288+
result = [-1: [.PULL_LEFT], 0: [.RELEASE_X], 1: [.PULL_RIGHT]]
289+
case "dpleft":
290+
result = [-1: [.PULL_RIGHT], 0: [.RELEASE_X], 1: [.PULL_LEFT]]
269291
default:
270-
return [:]
292+
break
271293
}
272-
}
273294

274-
private func mapAxisRev(key: String) -> [Int: [GamePadAction]] {
295+
if rev, let left = result[-1], let right = result[1] {
275296

276-
switch (key) {
277-
278-
case "leftx", "rightx":
279-
return [-1: [.PULL_RIGHT], 0: [.RELEASE_X], 1: [.PULL_LEFT]]
280-
case "lefty", "righty":
281-
return [-1: [.PULL_DOWN], 0: [.RELEASE_Y], 1: [.PULL_UP]]
282-
default:
283-
return [:]
297+
result[-1] = right
298+
result[1] = left
284299
}
300+
301+
return result
285302
}
286303

287304
private func mapButton(key: String) -> [Int: [GamePadAction]] {

ObjCProxy/TypeExtensions.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,24 @@ typealias UARTInfo = vamiga.UARTInfo
6363
typealias VideoFormat = vamiga.TV
6464
typealias WarpMode = vamiga.Warp
6565

66+
extension HIDEvent: CustomStringConvertible {
67+
68+
public var description: String {
69+
70+
guard let key = HIDEvent(rawValue: self.rawValue) else { return "nil" }
71+
return String(cString: vamiga.HIDEventEnum._key(key))
72+
}
73+
}
74+
75+
extension GamePadAction: CustomStringConvertible {
76+
77+
public var description: String {
78+
79+
guard let key = GamePadAction(rawValue: self.rawValue) else { return "nil" }
80+
return String(cString: vamiga.GamePadActionEnum._key(key))
81+
}
82+
}
83+
6684
extension Compressor: CustomStringConvertible {
6785

6886
public var description: String {

vAmiga.xcodeproj/project.pbxproj

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3175,12 +3175,13 @@
31753175
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES;
31763176
CODE_SIGN_ENTITLEMENTS = Resources/vAmiga.entitlements;
31773177
CODE_SIGN_IDENTITY = "Apple Development";
3178-
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
3178+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
31793179
CODE_SIGN_STYLE = Manual;
31803180
COMBINE_HIDPI_IMAGES = YES;
3181-
CURRENT_PROJECT_VERSION = 250808;
3181+
CURRENT_PROJECT_VERSION = 250917;
31823182
DEAD_CODE_STRIPPING = YES;
31833183
DEVELOPMENT_TEAM = "";
3184+
"DEVELOPMENT_TEAM[sdk=macosx*]" = 3NG65ZLYW7;
31843185
ENABLE_APP_SANDBOX = NO;
31853186
ENABLE_HARDENED_RUNTIME = YES;
31863187
GCC_C_LANGUAGE_STANDARD = "compiler-default";
@@ -3200,7 +3201,7 @@
32003201
"@executable_path/../Frameworks",
32013202
);
32023203
MACOSX_DEPLOYMENT_TARGET = 13.5;
3203-
MARKETING_VERSION = 4.3;
3204+
MARKETING_VERSION = 4.3.1;
32043205
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 c++20";
32053206
ONLY_ACTIVE_ARCH = NO;
32063207
PRODUCT_BUNDLE_IDENTIFIER = dirkwhoffmann.vAmiga;
@@ -3228,13 +3229,14 @@
32283229
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES;
32293230
CODE_SIGN_ENTITLEMENTS = Resources/vAmiga.entitlements;
32303231
CODE_SIGN_IDENTITY = "Apple Development";
3231-
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
3232+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
32323233
CODE_SIGN_STYLE = Manual;
32333234
COMBINE_HIDPI_IMAGES = YES;
3234-
CURRENT_PROJECT_VERSION = 250808;
3235+
CURRENT_PROJECT_VERSION = 250917;
32353236
DEAD_CODE_STRIPPING = YES;
32363237
DEBUG_INFORMATION_FORMAT = dwarf;
32373238
DEVELOPMENT_TEAM = "";
3239+
"DEVELOPMENT_TEAM[sdk=macosx*]" = 3NG65ZLYW7;
32383240
ENABLE_APP_SANDBOX = NO;
32393241
ENABLE_HARDENED_RUNTIME = YES;
32403242
GCC_C_LANGUAGE_STANDARD = "compiler-default";
@@ -3253,7 +3255,7 @@
32533255
);
32543256
LLVM_LTO = YES_THIN;
32553257
MACOSX_DEPLOYMENT_TARGET = 13.5;
3256-
MARKETING_VERSION = 4.3;
3258+
MARKETING_VERSION = 4.3.1;
32573259
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 c++20";
32583260
PRODUCT_BUNDLE_IDENTIFIER = dirkwhoffmann.vAmiga;
32593261
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3275,10 +3277,10 @@
32753277
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
32763278
CODE_SIGN_ENTITLEMENTS = QuickLookPlugIn/QuickLookPlugIn.entitlements;
32773279
CODE_SIGN_IDENTITY = "Apple Development";
3278-
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
3280+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
32793281
CODE_SIGN_STYLE = Automatic;
3280-
CURRENT_PROJECT_VERSION = 250808;
3281-
DEVELOPMENT_TEAM = "";
3282+
CURRENT_PROJECT_VERSION = 250917;
3283+
DEVELOPMENT_TEAM = 3NG65ZLYW7;
32823284
ENABLE_HARDENED_RUNTIME = YES;
32833285
GCC_C_LANGUAGE_STANDARD = gnu17;
32843286
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -3293,7 +3295,7 @@
32933295
);
32943296
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
32953297
MACOSX_DEPLOYMENT_TARGET = 15.1;
3296-
MARKETING_VERSION = 4.3;
3298+
MARKETING_VERSION = 4.3.1;
32973299
PRODUCT_BUNDLE_IDENTIFIER = dirkwhoffmann.vAmiga.QuickLookPlugIn;
32983300
PRODUCT_NAME = "$(TARGET_NAME)";
32993301
SKIP_INSTALL = YES;
@@ -3309,10 +3311,10 @@
33093311
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
33103312
CODE_SIGN_ENTITLEMENTS = QuickLookPlugIn/QuickLookPlugIn.entitlements;
33113313
CODE_SIGN_IDENTITY = "Apple Development";
3312-
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
3314+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33133315
CODE_SIGN_STYLE = Automatic;
3314-
CURRENT_PROJECT_VERSION = 250808;
3315-
DEVELOPMENT_TEAM = "";
3316+
CURRENT_PROJECT_VERSION = 250917;
3317+
DEVELOPMENT_TEAM = 3NG65ZLYW7;
33163318
ENABLE_HARDENED_RUNTIME = YES;
33173319
GCC_C_LANGUAGE_STANDARD = gnu17;
33183320
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -3327,7 +3329,7 @@
33273329
);
33283330
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
33293331
MACOSX_DEPLOYMENT_TARGET = 15.1;
3330-
MARKETING_VERSION = 4.3;
3332+
MARKETING_VERSION = 4.3.1;
33313333
PRODUCT_BUNDLE_IDENTIFIER = dirkwhoffmann.vAmiga.QuickLookPlugIn;
33323334
PRODUCT_NAME = "$(TARGET_NAME)";
33333335
SKIP_INSTALL = YES;
@@ -3341,6 +3343,7 @@
33413343
buildSettings = {
33423344
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
33433345
CODE_SIGN_IDENTITY = "-";
3346+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33443347
CODE_SIGN_STYLE = Automatic;
33453348
DEAD_CODE_STRIPPING = YES;
33463349
DEVELOPMENT_TEAM = 3NG65ZLYW7;
@@ -3358,6 +3361,7 @@
33583361
buildSettings = {
33593362
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
33603363
CODE_SIGN_IDENTITY = "-";
3364+
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33613365
CODE_SIGN_STYLE = Automatic;
33623366
DEAD_CODE_STRIPPING = YES;
33633367
DEVELOPMENT_TEAM = 3NG65ZLYW7;

0 commit comments

Comments
 (0)