Index: src/hid/OHEvdevGameController.m ================================================================== --- src/hid/OHEvdevGameController.m +++ src/hid/OHEvdevGameController.m @@ -162,10 +162,34 @@ return @"Home"; case BTN_TL: return @"SL"; case BTN_TL2: return @"SR"; + } + } else if (vendorID == OHVendorIDNintendo && + productID == OHProductIDN64Controller) { + switch (button) { + case BTN_SELECT: + return @"C-Pad Up"; + case BTN_X: + return @"C-Pad Down"; + case BTN_Y: + return @"C-Pad Left"; + case BTN_C: + return @"C-Pad Right"; + case BTN_TL: + return @"L"; + case BTN_TR: + return @"R"; + case BTN_TL2: + return @"Z"; + case BTN_TR2: + return @"ZR"; + case BTN_MODE: + return @"Home"; + case BTN_Z: + return @"Capture"; } } else if (vendorID == OHVendorIDGoogle && productID == OHProductIDStadiaController) { switch (button) { case BTN_TL: Index: src/hid/OHGameController.h ================================================================== --- src/hid/OHGameController.h +++ src/hid/OHGameController.h @@ -104,10 +104,11 @@ extern const uint16_t OHVendorIDGoogle; extern const uint16_t OHProductIDDualShock4; extern const uint16_t OHProductIDDualSense; extern const uint16_t OHProductIDLeftJoyCon; extern const uint16_t OHProductIDRightJoyCon; +extern const uint16_t OHProductIDN64Controller; extern const uint16_t OHProductIDStadiaController; #ifdef __cplusplus } #endif Index: src/hid/OHGameController.m ================================================================== --- src/hid/OHGameController.m +++ src/hid/OHGameController.m @@ -43,10 +43,11 @@ const uint16_t OHVendorIDGoogle = 0x18D1; const uint16_t OHProductIDDualShock4 = 0x09CC; const uint16_t OHProductIDDualSense = 0x0CE6; const uint16_t OHProductIDLeftJoyCon = 0x2006; const uint16_t OHProductIDRightJoyCon = 0x2007; +const uint16_t OHProductIDN64Controller = 0x2019; const uint16_t OHProductIDStadiaController = 0x9400; @implementation OHGameController @dynamic name, rawProfile;