Compare commits

..

5 Commits

Author SHA1 Message Date
783a0f08dd
extend tox coverage to Python 3.12
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-30 09:58:45 -05:00
f058727f34
requirements version bumps
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-30 09:58:45 -05:00
d4c4bbde96
update the repository for v0.7.10
note that the google protobuf project does not recommend shipping
generated _pb2.py files, so that functionality has been removed from the
project. this also partially undoes the previous commit since using the
provided .proto files is less of an issue and also the default now, so
maybe don't spam the console as much

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-30 09:58:07 -05:00
18f4f45bb5
log the exception causing to revert to the precompiled fallback
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-20 13:00:17 -05:00
733b49676c
allow for saving the board dump in .uf2 format
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-16 11:33:37 -05:00
25 changed files with 389 additions and 1003 deletions

View File

@ -19,7 +19,7 @@ Copyright: © 2023 Brian S. Stephan <bss@incorporeal.org>
License: GPL-3.0-or-later License: GPL-3.0-or-later
# Test data (GP2040-CE-derived) # Test data (GP2040-CE-derived)
Files: tests/test-files/pb2-files/* tests/test-files/proto-files/* Files: tests/test-files/proto-files/*
Copyright: (c) 2024 OpenStickCommunity (gp2040-ce.info) Copyright: (c) 2024 OpenStickCommunity (gp2040-ce.info)
License: MIT License: MIT

View File

@ -13,9 +13,9 @@ over USB.
All tools take `-P PATH` flag(s) in order to import Protobuf files (either precompiled Python files or raw .proto files) All tools take `-P PATH` flag(s) in order to import Protobuf files (either precompiled Python files or raw .proto files)
if you have them locally, in order to work with the latest (or development) version of the configuration. That said, if you have them locally, in order to work with the latest (or development) version of the configuration. That said,
this tool also includes a precompiled fallback version of the config structure if you cannot supply these files. Be this tool also includes a copy of the config files if you cannot supply these files, and will attempt to compile those
aware, however, that they are a point in time snapshot, and may lag the real format in undesirable ways. Supply the as a fallback. Be aware, however, that they are a point in time snapshot, and may lag the real format in undesirable
latest Protobuf files if you can. ways. Supply the latest Protobuf files if you can.
An example of this invocation is: An example of this invocation is:

View File

@ -64,6 +64,7 @@ def get_config_pb2():
return grpc.protos('config.proto') return grpc.protos('config.proto')
except (ModuleNotFoundError, TypeError): except (ModuleNotFoundError, TypeError):
# (TypeError could be the windows bug https://github.com/protocolbuffers/protobuf/issues/14345) # (TypeError could be the windows bug https://github.com/protocolbuffers/protobuf/issues/14345)
# that failed, import a precompiled snapshot (may be lagging what's in GP2040-CE) # that failed, import the snapshot (may be lagging what's in GP2040-CE)
logger.warning("using the fallback .proto files! please supply your files with -P if you can!")
sys.path.append(os.path.join(pathlib.Path(__file__).parent.resolve(), 'proto_snapshot')) sys.path.append(os.path.join(pathlib.Path(__file__).parent.resolve(), 'proto_snapshot'))
return importlib.import_module('config_pb2') return grpc.protos('config.proto')

View File

@ -338,7 +338,11 @@ def dump_gp2040ce():
args, _ = parser.parse_known_args() args, _ = parser.parse_known_args()
content, _, _ = get_gp2040ce_from_usb() content, _, _ = get_gp2040ce_from_usb()
with open(args.binary_filename, 'wb') as out_file: with open(args.binary_filename, 'wb') as out_file:
out_file.write(content) if args.binary_filename[-4:] == '.uf2':
# we must pad to storage start in order for the UF2 write addresses to make sense
out_file.write(storage.convert_binary_to_uf2([(0, content)]))
else:
out_file.write(content)
def summarize_gp2040ce(): def summarize_gp2040ce():

View File

@ -1,9 +0,0 @@
"""COPIED OUTPUT OF `protoc foo.proto --python_out .`.
The .proto files here have been copied from https://github.com/OpenStickCommunity/GP2040-CE and
are a point in time import of the GP2040-CE firmware's configuration structure. THEY MAY BE OUT
OF DATE. If you are a developer, you should really use the `-P` flags to import your local copy
of the .proto files.
"""
GP2040CE_SNAPSHOT_VERSION = 'v0.7.7'

View File

@ -28,6 +28,7 @@ message GamepadOptions
optional InputModeAuthType ps4AuthType = 21; optional InputModeAuthType ps4AuthType = 21;
optional InputModeAuthType ps5AuthType = 22; optional InputModeAuthType ps5AuthType = 22;
optional InputModeAuthType xinputAuthType = 23; optional InputModeAuthType xinputAuthType = 23;
optional PS4ControllerIDMode ps4ControllerIDMode = 24;
} }
message KeyboardMapping message KeyboardMapping
@ -50,6 +51,21 @@ message KeyboardMapping
optional uint32 keyButtonR3 = 16; optional uint32 keyButtonR3 = 16;
optional uint32 keyButtonA1 = 17; optional uint32 keyButtonA1 = 17;
optional uint32 keyButtonA2 = 18; optional uint32 keyButtonA2 = 18;
optional uint32 keyButtonA3 = 19;
optional uint32 keyButtonA4 = 20;
optional uint32 keyButtonE1 = 21;
optional uint32 keyButtonE2 = 22;
optional uint32 keyButtonE3 = 23;
optional uint32 keyButtonE4 = 24;
optional uint32 keyButtonE5 = 25;
optional uint32 keyButtonE6 = 26;
optional uint32 keyButtonE7 = 27;
optional uint32 keyButtonE8 = 28;
optional uint32 keyButtonE9 = 29;
optional uint32 keyButtonE10 = 30;
optional uint32 keyButtonE11 = 31;
optional uint32 keyButtonE12 = 32;
} }
message HotkeyEntry message HotkeyEntry
@ -169,11 +185,15 @@ message GpioMappingInfo
{ {
optional GpioAction action = 1; optional GpioAction action = 1;
optional GpioDirection direction = 2; optional GpioDirection direction = 2;
optional uint32 customDpadMask = 3;
optional uint32 customButtonMask = 4;
} }
message GpioMappings message GpioMappings
{ {
repeated GpioMappingInfo pins = 1 [(nanopb).max_count = 30]; repeated GpioMappingInfo pins = 1 [(nanopb).max_count = 30];
optional string profileLabel = 2 [(nanopb).max_length = 16];
optional bool enabled = 3 [default = false];
} }
@ -204,25 +224,25 @@ message DisplayOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 i2cAddress = 5; optional int32 deprecatedI2cAddress = 5 [deprecated = true];
optional int32 deprecatedI2cSpeed = 6 [deprecated = true]; optional int32 deprecatedI2cSpeed = 6 [deprecated = true];
optional ButtonLayout buttonLayout = 7; optional ButtonLayout buttonLayout = 7;
optional ButtonLayoutRight buttonLayoutRight = 8; optional ButtonLayoutRight buttonLayoutRight = 8;
optional ButtonLayoutCustomOptions buttonLayoutCustomOptions = 9; optional ButtonLayoutCustomOptions buttonLayoutCustomOptions = 9;
optional SplashMode splashMode = 10; optional SplashMode splashMode = 10;
optional SplashChoice splashChoice = 11; optional SplashChoice splashChoice = 11;
optional int32 splashDuration = 12; optional int32 splashDuration = 12;
optional bytes splashImage = 13 [(nanopb).max_size = 1024]; optional bytes splashImage = 13 [(nanopb).max_size = 1024];
optional int32 size = 14; optional int32 size = 14;
optional int32 flip = 15; optional int32 flip = 15;
optional bool invert = 16; optional bool invert = 16;
optional int32 displaySaverTimeout = 17; optional int32 displaySaverTimeout = 17;
optional bool turnOffWhenSuspended = 18; optional bool turnOffWhenSuspended = 18;
} }
@ -235,7 +255,7 @@ message LEDOptions
optional uint32 ledsPerButton = 4; optional uint32 ledsPerButton = 4;
optional uint32 brightnessMaximum = 5; optional uint32 brightnessMaximum = 5;
optional uint32 brightnessSteps = 6; optional uint32 brightnessSteps = 6;
optional int32 indexUp = 7; optional int32 indexUp = 7;
optional int32 indexDown = 8; optional int32 indexDown = 8;
optional int32 indexLeft = 9; optional int32 indexLeft = 9;
@ -254,7 +274,7 @@ message LEDOptions
optional int32 indexR3 = 22; optional int32 indexR3 = 22;
optional int32 indexA1 = 23; optional int32 indexA1 = 23;
optional int32 indexA2 = 24; optional int32 indexA2 = 24;
optional PLEDType pledType = 25; optional PLEDType pledType = 25;
optional int32 pledPin1 = 26; optional int32 pledPin1 = 26;
optional int32 pledPin2 = 27; optional int32 pledPin2 = 27;
@ -280,7 +300,7 @@ message AnimationOptions_Proto
optional int32 chaseCycleTime = 5; optional int32 chaseCycleTime = 5;
optional int32 rainbowCycleTime = 6; optional int32 rainbowCycleTime = 6;
optional uint32 themeIndex = 7; optional uint32 themeIndex = 7;
optional bool hasCustomTheme = 8; optional bool hasCustomTheme = 8;
optional uint32 customThemeUp = 9; optional uint32 customThemeUp = 9;
optional uint32 customThemeDown = 10; optional uint32 customThemeDown = 10;
@ -318,7 +338,7 @@ message AnimationOptions_Proto
optional uint32 customThemeR3Pressed = 42; optional uint32 customThemeR3Pressed = 42;
optional uint32 customThemeA1Pressed = 43; optional uint32 customThemeA1Pressed = 43;
optional uint32 customThemeA2Pressed = 44; optional uint32 customThemeA2Pressed = 44;
optional uint32 buttonPressColorCooldownTimeInMs = 45; optional uint32 buttonPressColorCooldownTimeInMs = 45;
} }
message BootselButtonOptions message BootselButtonOptions
@ -336,7 +356,7 @@ message OnBoardLedOptions
message AnalogOptions message AnalogOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 analogAdc1PinX = 2; optional int32 analogAdc1PinX = 2;
optional int32 analogAdc1PinY = 3; optional int32 analogAdc1PinY = 3;
optional bool forced_circularity = 4; optional bool forced_circularity = 4;
@ -349,17 +369,20 @@ message AnalogOptions
optional InvertMode analogAdc2Invert = 11; optional InvertMode analogAdc2Invert = 11;
optional bool auto_calibrate = 12; optional bool auto_calibrate = 12;
optional uint32 outer_deadzone = 13; optional uint32 outer_deadzone = 13;
optional bool analog_smoothing = 14;
optional float smoothing_factor = 15;
optional uint32 analog_error = 16;
} }
message TurboOptions message TurboOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedButtonPin = 2 [deprecated = true]; optional int32 deprecatedButtonPin = 2 [deprecated = true];
optional int32 ledPin = 3; optional int32 ledPin = 3;
optional uint32 shotCount = 4; optional uint32 shotCount = 4;
optional int32 shmupDialPin = 5; optional int32 shmupDialPin = 5;
optional bool shmupModeEnabled = 6; optional bool shmupModeEnabled = 6;
optional uint32 shmupAlwaysOn1 = 7; optional uint32 shmupAlwaysOn1 = 7;
optional uint32 shmupAlwaysOn2 = 8; optional uint32 shmupAlwaysOn2 = 8;
@ -379,21 +402,21 @@ message TurboOptions
message SliderOptions message SliderOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedPinSliderOne = 2 [deprecated = true]; optional int32 deprecatedPinSliderOne = 2 [deprecated = true];
optional int32 deprecatedPinSliderTwo = 3 [deprecated = true]; optional int32 deprecatedPinSliderTwo = 3 [deprecated = true];
optional DpadMode deprecatedModeOne = 4 [deprecated = true]; optional DpadMode deprecatedModeOne = 4 [deprecated = true];
optional DpadMode deprecatedModeTwo = 5 [deprecated = true]; optional DpadMode deprecatedModeTwo = 5 [deprecated = true];
optional DpadMode modeDefault = 6; optional DpadMode deprecatedModeDefault = 6;
} }
message SOCDSliderOptions message SOCDSliderOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedPinOne = 2 [deprecated = true]; optional int32 deprecatedPinOne = 2 [deprecated = true];
optional int32 deprecatedPinTwo = 3 [deprecated = true]; optional int32 deprecatedPinTwo = 3 [deprecated = true];
optional SOCDMode modeDefault = 4; optional SOCDMode modeDefault = 4;
optional SOCDMode deprecatedModeOne = 5 [deprecated = true]; optional SOCDMode deprecatedModeOne = 5 [deprecated = true];
optional SOCDMode deprecatedModeTwo = 6 [deprecated = true]; optional SOCDMode deprecatedModeTwo = 6 [deprecated = true];
@ -402,10 +425,10 @@ message SOCDSliderOptions
message ReverseOptions message ReverseOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 buttonPin = 2; optional int32 buttonPin = 2;
optional int32 ledPin = 3; optional int32 ledPin = 3;
optional uint32 actionUp = 4; optional uint32 actionUp = 4;
optional uint32 actionDown = 5; optional uint32 actionDown = 5;
optional uint32 actionLeft = 6; optional uint32 actionLeft = 6;
@ -416,10 +439,10 @@ message AnalogADS1219Options
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 i2cAddress = 5; optional int32 deprecatedI2cAddress = 5 [deprecated = true];
optional int32 deprecatedI2cSpeed = 6 [deprecated = true]; optional int32 deprecatedI2cSpeed = 6 [deprecated = true];
} }
@ -437,12 +460,12 @@ message AnalogADS1256Options
message DualDirectionalOptions message DualDirectionalOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedUpPin = 2 [deprecated = true]; optional int32 deprecatedUpPin = 2 [deprecated = true];
optional int32 deprecatedDownPin = 3 [deprecated = true]; optional int32 deprecatedDownPin = 3 [deprecated = true];
optional int32 deprecatedLeftPin = 4 [deprecated = true]; optional int32 deprecatedLeftPin = 4 [deprecated = true];
optional int32 deprecatedRightPin = 5 [deprecated = true]; optional int32 deprecatedRightPin = 5 [deprecated = true];
optional DpadMode dpadMode = 6; optional DpadMode dpadMode = 6;
optional DualDirectionalCombinationMode combineMode = 7; optional DualDirectionalCombinationMode combineMode = 7;
optional bool fourWayMode = 8; optional bool fourWayMode = 8;
@ -465,7 +488,7 @@ message TiltOptions
optional int32 tiltRightAnalogRightPin = 12; optional int32 tiltRightAnalogRightPin = 12;
optional SOCDMode tiltSOCDMode = 13; optional SOCDMode tiltSOCDMode = 13;
optional int32 factorTilt1LeftX = 14; optional int32 factorTilt1LeftX = 14;
optional int32 factorTilt1LeftY = 15; optional int32 factorTilt1LeftY = 15;
optional int32 factorTilt1RightX = 16; optional int32 factorTilt1RightX = 16;
@ -479,7 +502,7 @@ message TiltOptions
message BuzzerOptions message BuzzerOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 pin = 2; optional int32 pin = 2;
optional uint32 volume = 3; optional uint32 volume = 3;
optional int32 enablePin = 4; optional int32 enablePin = 4;
@ -488,7 +511,7 @@ message BuzzerOptions
message ExtraButtonOptions message ExtraButtonOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 pin = 2; optional int32 pin = 2;
optional uint32 buttonMap = 3; optional uint32 buttonMap = 3;
} }
@ -541,7 +564,7 @@ message WiiOptions
optional AnalogAxis x = 1; optional AnalogAxis x = 1;
optional AnalogAxis y = 2; optional AnalogAxis y = 2;
} }
message NunchukOptions message NunchukOptions
{ {
optional int32 buttonC = 1; optional int32 buttonC = 1;
@ -572,7 +595,7 @@ message WiiOptions
optional AnalogAxis rightTrigger = 19; optional AnalogAxis rightTrigger = 19;
} }
message TaikoOptions message TaikoOptions
{ {
optional int32 buttonKatLeft = 1; optional int32 buttonKatLeft = 1;
optional int32 buttonKatRight = 2; optional int32 buttonKatRight = 2;
@ -638,7 +661,7 @@ message WiiOptions
} }
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 deprecatedI2cSpeed = 5 [deprecated = true]; optional int32 deprecatedI2cSpeed = 5 [deprecated = true];
@ -660,6 +683,9 @@ message KeyboardHostOptions
optional int32 deprecatedPinDplus = 2 [deprecated = true]; optional int32 deprecatedPinDplus = 2 [deprecated = true];
optional KeyboardMapping mapping = 3; optional KeyboardMapping mapping = 3;
optional int32 deprecatedPin5V = 4 [deprecated = true]; optional int32 deprecatedPin5V = 4 [deprecated = true];
optional uint32 mouseLeft = 5;
optional uint32 mouseMiddle = 6;
optional uint32 mouseRight = 7;
} }
message FocusModeOptions message FocusModeOptions
@ -732,17 +758,43 @@ message RotaryOptions
message PCF8575Options message PCF8575Options
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
repeated GpioMappingInfo pins = 3 [(nanopb).max_count = 16]; repeated GpioMappingInfo pins = 3 [(nanopb).max_count = 16];
} }
message DRV8833RumbleOptions
{
optional bool enabled = 1;
optional int32 leftMotorPin = 2;
optional int32 rightMotorPin = 3;
optional int32 motorSleepPin = 4;
optional uint32 pwmFrequency = 5;
optional float dutyMin = 6;
optional float dutyMax = 7;
}
message ReactiveLEDInfo
{
optional int32 pin = 1;
optional GpioAction action = 2;
optional ReactiveLEDMode modeDown = 3;
optional ReactiveLEDMode modeUp = 4;
}
message ReactiveLEDOptions
{
optional bool enabled = 1;
repeated ReactiveLEDInfo leds = 2 [(nanopb).max_count = 10];
}
message AddonOptions message AddonOptions
{ {
optional BootselButtonOptions bootselButtonOptions = 1; optional BootselButtonOptions bootselButtonOptions = 1;
optional OnBoardLedOptions onBoardLedOptions = 2; optional OnBoardLedOptions onBoardLedOptions = 2;
optional AnalogOptions analogOptions = 3; optional AnalogOptions analogOptions = 3;
optional TurboOptions turboOptions = 4; optional TurboOptions turboOptions = 4;
optional SliderOptions sliderOptions = 5; optional SliderOptions deprecatedSliderOptions = 5;
optional ReverseOptions reverseOptions = 6; optional ReverseOptions reverseOptions = 6;
optional AnalogADS1219Options analogADS1219Options = 7; optional AnalogADS1219Options analogADS1219Options = 7;
optional DualDirectionalOptions dualDirectionalOptions = 8; optional DualDirectionalOptions dualDirectionalOptions = 8;
@ -763,6 +815,8 @@ message AddonOptions
optional AnalogADS1256Options analogADS1256Options = 23; optional AnalogADS1256Options analogADS1256Options = 23;
optional RotaryOptions rotaryOptions = 24; optional RotaryOptions rotaryOptions = 24;
optional PCF8575Options pcf8575Options = 25; optional PCF8575Options pcf8575Options = 25;
optional DRV8833RumbleOptions drv8833RumbleOptions = 26;
optional ReactiveLEDOptions reactiveLEDOptions = 27;
} }
message MigrationHistory message MigrationHistory
@ -770,12 +824,13 @@ message MigrationHistory
optional bool hotkeysMigrated = 1 [default = false]; optional bool hotkeysMigrated = 1 [default = false];
optional bool gpioMappingsMigrated = 2 [default = false]; optional bool gpioMappingsMigrated = 2 [default = false];
optional bool buttonProfilesMigrated = 3 [default = false]; optional bool buttonProfilesMigrated = 3 [default = false];
optional bool profileEnabledFlagsMigrated = 4 [default = false];
} }
message Config message Config
{ {
optional string boardVersion = 1 [(nanopb).max_length = 31]; optional string boardVersion = 1 [(nanopb).max_length = 31];
optional GamepadOptions gamepadOptions = 2; optional GamepadOptions gamepadOptions = 2;
optional HotkeyOptions hotkeyOptions = 3; optional HotkeyOptions hotkeyOptions = 3;
optional PinMappings deprecatedPinMappings = 4 [deprecated = true]; optional PinMappings deprecatedPinMappings = 4 [deprecated = true];
@ -786,7 +841,7 @@ message Config
optional AddonOptions addonOptions = 9; optional AddonOptions addonOptions = 9;
optional ForcedSetupOptions forcedSetupOptions = 10; optional ForcedSetupOptions forcedSetupOptions = 10;
optional ProfileOptions profileOptions = 11; optional ProfileOptions profileOptions = 11;
optional string boardConfig = 12 [(nanopb).max_length = 63]; optional string boardConfig = 12 [(nanopb).max_length = 63];
optional GpioMappings gpioMappings = 13; optional GpioMappings gpioMappings = 13;
optional MigrationHistory migrations = 14; optional MigrationHistory migrations = 14;

File diff suppressed because one or more lines are too long

View File

@ -39,6 +39,7 @@ enum ButtonLayout
BUTTON_LAYOUT_6GAWD_A = 30; BUTTON_LAYOUT_6GAWD_A = 30;
BUTTON_LAYOUT_6GAWD_ALLBUTTON_A = 31; BUTTON_LAYOUT_6GAWD_ALLBUTTON_A = 31;
BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_A = 32; BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_A = 32;
BUTTON_LAYOUT_STICKLESS_R16 = 33;
} }
enum ButtonLayoutRight enum ButtonLayoutRight
@ -82,6 +83,7 @@ enum ButtonLayoutRight
BUTTON_LAYOUT_6GAWD_B = 34; BUTTON_LAYOUT_6GAWD_B = 34;
BUTTON_LAYOUT_6GAWD_ALLBUTTON_B = 35; BUTTON_LAYOUT_6GAWD_ALLBUTTON_B = 35;
BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_B = 36; BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_B = 36;
BUTTON_LAYOUT_STICKLESS_R16B = 37;
} }
enum SplashMode enum SplashMode
@ -109,7 +111,7 @@ enum SplashChoice
enum OnBoardLedMode enum OnBoardLedMode
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
ON_BOARD_LED_MODE_OFF = 0; ON_BOARD_LED_MODE_OFF = 0;
ON_BOARD_LED_MODE_MODE_INDICATOR = 1; ON_BOARD_LED_MODE_MODE_INDICATOR = 1;
ON_BOARD_LED_MODE_INPUT_TEST = 2; ON_BOARD_LED_MODE_INPUT_TEST = 2;
@ -122,7 +124,7 @@ enum InputMode
INPUT_MODE_XINPUT = 0; INPUT_MODE_XINPUT = 0;
INPUT_MODE_SWITCH = 1; INPUT_MODE_SWITCH = 1;
INPUT_MODE_HID = 2; INPUT_MODE_PS3 = 2;
INPUT_MODE_KEYBOARD = 3; INPUT_MODE_KEYBOARD = 3;
INPUT_MODE_PS4 = 4; INPUT_MODE_PS4 = 4;
INPUT_MODE_XBONE = 5; INPUT_MODE_XBONE = 5;
@ -134,6 +136,7 @@ enum InputMode
INPUT_MODE_PSCLASSIC = 11; INPUT_MODE_PSCLASSIC = 11;
INPUT_MODE_XBOXORIGINAL = 12; INPUT_MODE_XBOXORIGINAL = 12;
INPUT_MODE_PS5 = 13; INPUT_MODE_PS5 = 13;
INPUT_MODE_GENERIC = 14;
INPUT_MODE_CONFIG = 255; INPUT_MODE_CONFIG = 255;
} }
@ -225,6 +228,21 @@ enum GpioAction
BUTTON_PRESS_MACRO_4 = 37; BUTTON_PRESS_MACRO_4 = 37;
BUTTON_PRESS_MACRO_5 = 38; BUTTON_PRESS_MACRO_5 = 38;
BUTTON_PRESS_MACRO_6 = 39; BUTTON_PRESS_MACRO_6 = 39;
CUSTOM_BUTTON_COMBO = 40;
BUTTON_PRESS_A3 = 41;
BUTTON_PRESS_A4 = 42;
BUTTON_PRESS_E1 = 43;
BUTTON_PRESS_E2 = 44;
BUTTON_PRESS_E3 = 45;
BUTTON_PRESS_E4 = 46;
BUTTON_PRESS_E5 = 47;
BUTTON_PRESS_E6 = 48;
BUTTON_PRESS_E7 = 49;
BUTTON_PRESS_E8 = 50;
BUTTON_PRESS_E9 = 51;
BUTTON_PRESS_E10 = 52;
BUTTON_PRESS_E11 = 53;
BUTTON_PRESS_E12 = 54;
} }
enum GpioDirection enum GpioDirection
@ -275,6 +293,13 @@ enum GamepadHotkey
HOTKEY_A1_BUTTON = 33; HOTKEY_A1_BUTTON = 33;
HOTKEY_A2_BUTTON = 34; HOTKEY_A2_BUTTON = 34;
HOTKEY_NEXT_PROFILE = 35; HOTKEY_NEXT_PROFILE = 35;
HOTKEY_A3_BUTTON = 36;
HOTKEY_A4_BUTTON = 37;
HOTKEY_DPAD_UP = 38;
HOTKEY_DPAD_DOWN = 39;
HOTKEY_DPAD_LEFT = 40;
HOTKEY_DPAD_RIGHT = 41;
HOTKEY_PREVIOUS_PROFILE = 42;
} }
// This has to be kept in sync with LEDFormat in NeoPico.hpp // This has to be kept in sync with LEDFormat in NeoPico.hpp
@ -297,7 +322,7 @@ enum ShmupMixMode
enum PLEDType enum PLEDType
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
PLED_TYPE_NONE = -1; PLED_TYPE_NONE = -1;
PLED_TYPE_PWM = 0; PLED_TYPE_PWM = 0;
PLED_TYPE_RGB = 1; PLED_TYPE_RGB = 1;
@ -306,7 +331,7 @@ enum PLEDType
enum ForcedSetupMode enum ForcedSetupMode
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
FORCED_SETUP_MODE_OFF = 0; FORCED_SETUP_MODE_OFF = 0;
FORCED_SETUP_MODE_LOCK_MODE_SWITCH = 1; FORCED_SETUP_MODE_LOCK_MODE_SWITCH = 1;
FORCED_SETUP_MODE_LOCK_WEB_CONFIG = 2; FORCED_SETUP_MODE_LOCK_WEB_CONFIG = 2;
@ -326,7 +351,7 @@ enum DualDirectionalCombinationMode
enum PS4ControllerType enum PS4ControllerType
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
PS4_CONTROLLER = 0; PS4_CONTROLLER = 0;
PS4_ARCADESTICK = 7; PS4_ARCADESTICK = 7;
} }
@ -358,7 +383,7 @@ enum GPElement
enum GPShape_Type enum GPShape_Type
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
GP_SHAPE_ELLIPSE = 0; GP_SHAPE_ELLIPSE = 0;
GP_SHAPE_SQUARE = 1; GP_SHAPE_SQUARE = 1;
GP_SHAPE_LINE = 2; GP_SHAPE_LINE = 2;
@ -380,3 +405,21 @@ enum RotaryEncoderPinMode
ENCODER_MODE_DPAD_X = 7; ENCODER_MODE_DPAD_X = 7;
ENCODER_MODE_DPAD_Y = 8; ENCODER_MODE_DPAD_Y = 8;
}; };
enum ReactiveLEDMode
{
option (nanopb_enumopt).long_names = false;
REACTIVE_LED_STATIC_OFF = 0;
REACTIVE_LED_STATIC_ON = 1;
REACTIVE_LED_FADE_IN = 2;
REACTIVE_LED_FADE_OUT = 3;
};
enum PS4ControllerIDMode
{
option (nanopb_enumopt).long_names = false;
PS4_ID_CONSOLE = 0;
PS4_ID_EMULATION = 1;
};

File diff suppressed because one or more lines are too long

View File

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: nanopb.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cnanopb.proto\x1a google/protobuf/descriptor.proto\"\xc4\x07\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true\x12.\n\rfallback_type\x18\x1d \x01(\x0e\x32\n.FieldType:\x0b\x46T_CALLBACK\x12\x1e\n\x0f\x64isallow_export\x18\x1e \x01(\x08:\x05\x66\x61lse*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB\x1a\n\x18\x66i.kapsi.koti.jpa.nanopb')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'nanopb_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt)
google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt)
google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt)
google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb)
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030fi.kapsi.koti.jpa.nanopb'
_FIELDTYPE._serialized_start=1017
_FIELDTYPE._serialized_end=1122
_INTSIZE._serialized_start=1124
_INTSIZE._serialized_end=1192
_TYPENAMEMANGLING._serialized_start=1194
_TYPENAMEMANGLING._serialized_end=1284
_DESCRIPTORSIZE._serialized_start=1286
_DESCRIPTORSIZE._serialized_end=1355
_NANOPBOPTIONS._serialized_start=51
_NANOPBOPTIONS._serialized_end=1015
# @@protoc_insertion_point(module_scope)

View File

@ -4,13 +4,22 @@
# #
# pip-compile --extra=dev --output-file=requirements/requirements-dev.txt # pip-compile --extra=dev --output-file=requirements/requirements-dev.txt
# #
aiohttp==3.9.5 aiohappyeyeballs==2.4.2
# via textual-dev # via aiohttp
aiohttp==3.10.8
# via
# aiohttp-jinja2
# textual-dev
# textual-serve
aiohttp-jinja2==1.6
# via textual-serve
aiosignal==1.3.1 aiosignal==1.3.1
# via aiohttp # via aiohttp
attrs==23.2.0 attrs==24.2.0
# via aiohttp # via
bandit==1.7.8 # aiohttp
# reuse
bandit==1.7.10
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
binaryornot==0.4.4 binaryornot==0.4.4
# via reuse # via reuse
@ -18,13 +27,13 @@ boolean-py==4.0
# via # via
# license-expression # license-expression
# reuse # reuse
build==1.2.1 build==1.2.2
# via pip-tools # via pip-tools
cachetools==5.3.3 cachetools==5.5.0
# via tox # via tox
certifi==2024.2.2 certifi==2024.8.30
# via requests # via requests
cffi==1.16.0 cffi==1.17.1
# via cryptography # via cryptography
chardet==5.2.0 chardet==5.2.0
# via # via
@ -39,9 +48,9 @@ click==8.1.7
# textual-dev # textual-dev
colorama==0.4.6 colorama==0.4.6
# via tox # via tox
coverage[toml]==7.5.1 coverage[toml]==7.6.1
# via pytest-cov # via pytest-cov
cryptography==42.0.7 cryptography==43.0.1
# via secretstorage # via secretstorage
decorator==5.1.1 decorator==5.1.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
@ -49,11 +58,11 @@ distlib==0.3.8
# via virtualenv # via virtualenv
docutils==0.21.2 docutils==0.21.2
# via readme-renderer # via readme-renderer
filelock==3.14.0 filelock==3.16.1
# via # via
# tox # tox
# virtualenv # virtualenv
flake8==7.0.0 flake8==7.1.1
# via # via
# flake8-builtins # flake8-builtins
# flake8-docstrings # flake8-docstrings
@ -74,7 +83,7 @@ flake8-fixme==1.1.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
flake8-isort==6.1.1 flake8-isort==6.1.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
flake8-logging-format==0.9.0 flake8-logging-format==2024.24.12
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
flake8-mutable==1.2.0 flake8-mutable==1.2.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
@ -84,15 +93,15 @@ frozenlist==1.4.1
# via # via
# aiohttp # aiohttp
# aiosignal # aiosignal
grpcio==1.64.0 grpcio==1.66.2
# via grpcio-tools # via grpcio-tools
grpcio-tools==1.64.0 grpcio-tools==1.66.2
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
idna==3.7 idna==3.10
# via # via
# requests # requests
# yarl # yarl
importlib-metadata==7.1.0 importlib-metadata==8.5.0
# via twine # via twine
iniconfig==2.0.0 iniconfig==2.0.0
# via pytest # via pytest
@ -100,19 +109,22 @@ isort==5.13.2
# via flake8-isort # via flake8-isort
jaraco-classes==3.4.0 jaraco-classes==3.4.0
# via keyring # via keyring
jaraco-context==5.3.0 jaraco-context==6.0.1
# via keyring # via keyring
jaraco-functools==4.0.1 jaraco-functools==4.1.0
# via keyring # via keyring
jeepney==0.8.0 jeepney==0.8.0
# via # via
# keyring # keyring
# secretstorage # secretstorage
jinja2==3.1.4 jinja2==3.1.4
# via reuse # via
keyring==25.2.1 # aiohttp-jinja2
# reuse
# textual-serve
keyring==25.4.1
# via twine # via twine
license-expression==30.3.0 license-expression==30.3.1
# via reuse # via reuse
linkify-it-py==2.0.3 linkify-it-py==2.0.3
# via markdown-it-py # via markdown-it-py
@ -125,50 +137,51 @@ markupsafe==2.1.5
# via jinja2 # via jinja2
mccabe==0.7.0 mccabe==0.7.0
# via flake8 # via flake8
mdit-py-plugins==0.4.1 mdit-py-plugins==0.4.2
# via markdown-it-py # via markdown-it-py
mdurl==0.1.2 mdurl==0.1.2
# via markdown-it-py # via markdown-it-py
more-itertools==10.2.0 more-itertools==10.5.0
# via # via
# jaraco-classes # jaraco-classes
# jaraco-functools # jaraco-functools
msgpack==1.0.8 msgpack==1.1.0
# via textual-dev # via textual-dev
multidict==6.0.5 multidict==6.1.0
# via # via
# aiohttp # aiohttp
# yarl # yarl
mypy==1.10.0 mypy==1.11.2
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
mypy-extensions==1.0.0 mypy-extensions==1.0.0
# via mypy # via mypy
nh3==0.2.17 nh3==0.2.18
# via readme-renderer # via readme-renderer
packaging==24.0 packaging==24.1
# via # via
# build # build
# pyproject-api # pyproject-api
# pytest # pytest
# setuptools-scm # setuptools-scm
# tox # tox
pbr==6.0.0 pbr==6.1.0
# via stevedore # via stevedore
pip-tools==7.4.1 pip-tools==7.4.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
pkginfo==1.10.0 pkginfo==1.10.0
# via twine # via twine
platformdirs==4.2.2 platformdirs==4.3.6
# via # via
# textual
# tox # tox
# virtualenv # virtualenv
pluggy==1.5.0 pluggy==1.5.0
# via # via
# pytest # pytest
# tox # tox
protobuf==5.26.1 protobuf==5.28.2
# via grpcio-tools # via grpcio-tools
pycodestyle==2.11.1 pycodestyle==2.12.1
# via flake8 # via flake8
pycparser==2.22 pycparser==2.22
# via cffi # via cffi
@ -180,18 +193,18 @@ pygments==2.18.0
# via # via
# readme-renderer # readme-renderer
# rich # rich
pyproject-api==1.6.1 pyproject-api==1.8.0
# via tox # via tox
pyproject-hooks==1.1.0 pyproject-hooks==1.2.0
# via # via
# build # build
# pip-tools # pip-tools
pytest==8.2.1 pytest==8.3.3
# via # via
# gp2040ce-binary-tools (pyproject.toml) # gp2040ce-binary-tools (pyproject.toml)
# pytest-asyncio # pytest-asyncio
# pytest-cov # pytest-cov
pytest-asyncio==0.23.7 pytest-asyncio==0.24.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
pytest-cov==5.0.0 pytest-cov==5.0.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
@ -199,24 +212,25 @@ python-debian==0.1.49
# via reuse # via reuse
pyusb==1.2.1 pyusb==1.2.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
pyyaml==6.0.1 pyyaml==6.0.2
# via bandit # via bandit
readme-renderer==43.0 readme-renderer==44.0
# via twine # via twine
requests==2.32.1 requests==2.32.3
# via # via
# requests-toolbelt # requests-toolbelt
# twine # twine
requests-toolbelt==1.0.0 requests-toolbelt==1.0.0
# via twine # via twine
reuse==3.0.2 reuse==4.0.3
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
rfc3986==2.0.0 rfc3986==2.0.0
# via twine # via twine
rich==13.7.1 rich==13.8.1
# via # via
# bandit # bandit
# textual # textual
# textual-serve
# twine # twine
secretstorage==3.3.3 secretstorage==3.3.3
# via keyring # via keyring
@ -224,36 +238,41 @@ setuptools-scm==8.1.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
snowballstemmer==2.2.0 snowballstemmer==2.2.0
# via pydocstyle # via pydocstyle
stevedore==5.2.0 stevedore==5.3.0
# via bandit # via bandit
textual==0.62.0 textual==0.81.0
# via # via
# gp2040ce-binary-tools (pyproject.toml) # gp2040ce-binary-tools (pyproject.toml)
# textual-dev # textual-dev
textual-dev==1.5.1 # textual-serve
textual-dev==1.6.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
tox==4.15.0 textual-serve==1.1.1
# via textual-dev
tomlkit==0.13.2
# via reuse
tox==4.20.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
twine==5.1.0 twine==5.1.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
typing-extensions==4.11.0 typing-extensions==4.12.2
# via # via
# mypy # mypy
# textual # textual
# textual-dev # textual-dev
uc-micro-py==1.0.3 uc-micro-py==1.0.3
# via linkify-it-py # via linkify-it-py
urllib3==2.2.1 urllib3==2.2.3
# via # via
# requests # requests
# twine # twine
virtualenv==20.26.2 virtualenv==20.26.6
# via tox # via tox
wheel==0.43.0 wheel==0.44.0
# via pip-tools # via pip-tools
yarl==1.9.4 yarl==1.13.1
# via aiohttp # via aiohttp
zipp==3.18.2 zipp==3.20.2
# via importlib-metadata # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:

View File

@ -4,9 +4,9 @@
# #
# pip-compile --output-file=requirements/requirements.txt # pip-compile --output-file=requirements/requirements.txt
# #
grpcio==1.64.0 grpcio==1.66.2
# via grpcio-tools # via grpcio-tools
grpcio-tools==1.64.0 grpcio-tools==1.66.2
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
linkify-it-py==2.0.3 linkify-it-py==2.0.3
# via markdown-it-py # via markdown-it-py
@ -15,21 +15,23 @@ markdown-it-py[linkify,plugins]==3.0.0
# mdit-py-plugins # mdit-py-plugins
# rich # rich
# textual # textual
mdit-py-plugins==0.4.1 mdit-py-plugins==0.4.2
# via markdown-it-py # via markdown-it-py
mdurl==0.1.2 mdurl==0.1.2
# via markdown-it-py # via markdown-it-py
protobuf==5.26.1 platformdirs==4.3.6
# via textual
protobuf==5.28.2
# via grpcio-tools # via grpcio-tools
pygments==2.18.0 pygments==2.18.0
# via rich # via rich
pyusb==1.2.1 pyusb==1.2.1
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
rich==13.7.1 rich==13.8.1
# via textual # via textual
textual==0.62.0 textual==0.81.0
# via gp2040ce-binary-tools (pyproject.toml) # via gp2040ce-binary-tools (pyproject.toml)
typing-extensions==4.11.0 typing-extensions==4.12.2
# via textual # via textual
uc-micro-py==1.0.3 uc-micro-py==1.0.3
# via linkify-it-py # via linkify-it-py

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: nanopb.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cnanopb.proto\x1a google/protobuf/descriptor.proto\"\xc4\x07\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true\x12.\n\rfallback_type\x18\x1d \x01(\x0e\x32\n.FieldType:\x0b\x46T_CALLBACK\x12\x1e\n\x0f\x64isallow_export\x18\x1e \x01(\x08:\x05\x66\x61lse*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB\x1a\n\x18\x66i.kapsi.koti.jpa.nanopb')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'nanopb_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt)
google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt)
google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt)
google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb)
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030fi.kapsi.koti.jpa.nanopb'
_FIELDTYPE._serialized_start=1017
_FIELDTYPE._serialized_end=1122
_INTSIZE._serialized_start=1124
_INTSIZE._serialized_end=1192
_TYPENAMEMANGLING._serialized_start=1194
_TYPENAMEMANGLING._serialized_end=1284
_DESCRIPTORSIZE._serialized_start=1286
_DESCRIPTORSIZE._serialized_end=1355
_NANOPBOPTIONS._serialized_start=51
_NANOPBOPTIONS._serialized_end=1015
# @@protoc_insertion_point(module_scope)

View File

@ -28,6 +28,7 @@ message GamepadOptions
optional InputModeAuthType ps4AuthType = 21; optional InputModeAuthType ps4AuthType = 21;
optional InputModeAuthType ps5AuthType = 22; optional InputModeAuthType ps5AuthType = 22;
optional InputModeAuthType xinputAuthType = 23; optional InputModeAuthType xinputAuthType = 23;
optional PS4ControllerIDMode ps4ControllerIDMode = 24;
} }
message KeyboardMapping message KeyboardMapping
@ -50,6 +51,21 @@ message KeyboardMapping
optional uint32 keyButtonR3 = 16; optional uint32 keyButtonR3 = 16;
optional uint32 keyButtonA1 = 17; optional uint32 keyButtonA1 = 17;
optional uint32 keyButtonA2 = 18; optional uint32 keyButtonA2 = 18;
optional uint32 keyButtonA3 = 19;
optional uint32 keyButtonA4 = 20;
optional uint32 keyButtonE1 = 21;
optional uint32 keyButtonE2 = 22;
optional uint32 keyButtonE3 = 23;
optional uint32 keyButtonE4 = 24;
optional uint32 keyButtonE5 = 25;
optional uint32 keyButtonE6 = 26;
optional uint32 keyButtonE7 = 27;
optional uint32 keyButtonE8 = 28;
optional uint32 keyButtonE9 = 29;
optional uint32 keyButtonE10 = 30;
optional uint32 keyButtonE11 = 31;
optional uint32 keyButtonE12 = 32;
} }
message HotkeyEntry message HotkeyEntry
@ -169,11 +185,15 @@ message GpioMappingInfo
{ {
optional GpioAction action = 1; optional GpioAction action = 1;
optional GpioDirection direction = 2; optional GpioDirection direction = 2;
optional uint32 customDpadMask = 3;
optional uint32 customButtonMask = 4;
} }
message GpioMappings message GpioMappings
{ {
repeated GpioMappingInfo pins = 1 [(nanopb).max_count = 30]; repeated GpioMappingInfo pins = 1 [(nanopb).max_count = 30];
optional string profileLabel = 2 [(nanopb).max_length = 16];
optional bool enabled = 3 [default = false];
} }
@ -204,25 +224,25 @@ message DisplayOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 i2cAddress = 5; optional int32 deprecatedI2cAddress = 5 [deprecated = true];
optional int32 deprecatedI2cSpeed = 6 [deprecated = true]; optional int32 deprecatedI2cSpeed = 6 [deprecated = true];
optional ButtonLayout buttonLayout = 7; optional ButtonLayout buttonLayout = 7;
optional ButtonLayoutRight buttonLayoutRight = 8; optional ButtonLayoutRight buttonLayoutRight = 8;
optional ButtonLayoutCustomOptions buttonLayoutCustomOptions = 9; optional ButtonLayoutCustomOptions buttonLayoutCustomOptions = 9;
optional SplashMode splashMode = 10; optional SplashMode splashMode = 10;
optional SplashChoice splashChoice = 11; optional SplashChoice splashChoice = 11;
optional int32 splashDuration = 12; optional int32 splashDuration = 12;
optional bytes splashImage = 13 [(nanopb).max_size = 1024]; optional bytes splashImage = 13 [(nanopb).max_size = 1024];
optional int32 size = 14; optional int32 size = 14;
optional int32 flip = 15; optional int32 flip = 15;
optional bool invert = 16; optional bool invert = 16;
optional int32 displaySaverTimeout = 17; optional int32 displaySaverTimeout = 17;
optional bool turnOffWhenSuspended = 18; optional bool turnOffWhenSuspended = 18;
} }
@ -235,7 +255,7 @@ message LEDOptions
optional uint32 ledsPerButton = 4; optional uint32 ledsPerButton = 4;
optional uint32 brightnessMaximum = 5; optional uint32 brightnessMaximum = 5;
optional uint32 brightnessSteps = 6; optional uint32 brightnessSteps = 6;
optional int32 indexUp = 7; optional int32 indexUp = 7;
optional int32 indexDown = 8; optional int32 indexDown = 8;
optional int32 indexLeft = 9; optional int32 indexLeft = 9;
@ -254,7 +274,7 @@ message LEDOptions
optional int32 indexR3 = 22; optional int32 indexR3 = 22;
optional int32 indexA1 = 23; optional int32 indexA1 = 23;
optional int32 indexA2 = 24; optional int32 indexA2 = 24;
optional PLEDType pledType = 25; optional PLEDType pledType = 25;
optional int32 pledPin1 = 26; optional int32 pledPin1 = 26;
optional int32 pledPin2 = 27; optional int32 pledPin2 = 27;
@ -280,7 +300,7 @@ message AnimationOptions_Proto
optional int32 chaseCycleTime = 5; optional int32 chaseCycleTime = 5;
optional int32 rainbowCycleTime = 6; optional int32 rainbowCycleTime = 6;
optional uint32 themeIndex = 7; optional uint32 themeIndex = 7;
optional bool hasCustomTheme = 8; optional bool hasCustomTheme = 8;
optional uint32 customThemeUp = 9; optional uint32 customThemeUp = 9;
optional uint32 customThemeDown = 10; optional uint32 customThemeDown = 10;
@ -318,7 +338,7 @@ message AnimationOptions_Proto
optional uint32 customThemeR3Pressed = 42; optional uint32 customThemeR3Pressed = 42;
optional uint32 customThemeA1Pressed = 43; optional uint32 customThemeA1Pressed = 43;
optional uint32 customThemeA2Pressed = 44; optional uint32 customThemeA2Pressed = 44;
optional uint32 buttonPressColorCooldownTimeInMs = 45; optional uint32 buttonPressColorCooldownTimeInMs = 45;
} }
message BootselButtonOptions message BootselButtonOptions
@ -336,7 +356,7 @@ message OnBoardLedOptions
message AnalogOptions message AnalogOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 analogAdc1PinX = 2; optional int32 analogAdc1PinX = 2;
optional int32 analogAdc1PinY = 3; optional int32 analogAdc1PinY = 3;
optional bool forced_circularity = 4; optional bool forced_circularity = 4;
@ -349,17 +369,20 @@ message AnalogOptions
optional InvertMode analogAdc2Invert = 11; optional InvertMode analogAdc2Invert = 11;
optional bool auto_calibrate = 12; optional bool auto_calibrate = 12;
optional uint32 outer_deadzone = 13; optional uint32 outer_deadzone = 13;
optional bool analog_smoothing = 14;
optional float smoothing_factor = 15;
optional uint32 analog_error = 16;
} }
message TurboOptions message TurboOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedButtonPin = 2 [deprecated = true]; optional int32 deprecatedButtonPin = 2 [deprecated = true];
optional int32 ledPin = 3; optional int32 ledPin = 3;
optional uint32 shotCount = 4; optional uint32 shotCount = 4;
optional int32 shmupDialPin = 5; optional int32 shmupDialPin = 5;
optional bool shmupModeEnabled = 6; optional bool shmupModeEnabled = 6;
optional uint32 shmupAlwaysOn1 = 7; optional uint32 shmupAlwaysOn1 = 7;
optional uint32 shmupAlwaysOn2 = 8; optional uint32 shmupAlwaysOn2 = 8;
@ -379,21 +402,21 @@ message TurboOptions
message SliderOptions message SliderOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedPinSliderOne = 2 [deprecated = true]; optional int32 deprecatedPinSliderOne = 2 [deprecated = true];
optional int32 deprecatedPinSliderTwo = 3 [deprecated = true]; optional int32 deprecatedPinSliderTwo = 3 [deprecated = true];
optional DpadMode deprecatedModeOne = 4 [deprecated = true]; optional DpadMode deprecatedModeOne = 4 [deprecated = true];
optional DpadMode deprecatedModeTwo = 5 [deprecated = true]; optional DpadMode deprecatedModeTwo = 5 [deprecated = true];
optional DpadMode modeDefault = 6; optional DpadMode deprecatedModeDefault = 6;
} }
message SOCDSliderOptions message SOCDSliderOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedPinOne = 2 [deprecated = true]; optional int32 deprecatedPinOne = 2 [deprecated = true];
optional int32 deprecatedPinTwo = 3 [deprecated = true]; optional int32 deprecatedPinTwo = 3 [deprecated = true];
optional SOCDMode modeDefault = 4; optional SOCDMode modeDefault = 4;
optional SOCDMode deprecatedModeOne = 5 [deprecated = true]; optional SOCDMode deprecatedModeOne = 5 [deprecated = true];
optional SOCDMode deprecatedModeTwo = 6 [deprecated = true]; optional SOCDMode deprecatedModeTwo = 6 [deprecated = true];
@ -402,10 +425,10 @@ message SOCDSliderOptions
message ReverseOptions message ReverseOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 buttonPin = 2; optional int32 buttonPin = 2;
optional int32 ledPin = 3; optional int32 ledPin = 3;
optional uint32 actionUp = 4; optional uint32 actionUp = 4;
optional uint32 actionDown = 5; optional uint32 actionDown = 5;
optional uint32 actionLeft = 6; optional uint32 actionLeft = 6;
@ -416,10 +439,10 @@ message AnalogADS1219Options
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 i2cAddress = 5; optional int32 deprecatedI2cAddress = 5 [deprecated = true];
optional int32 deprecatedI2cSpeed = 6 [deprecated = true]; optional int32 deprecatedI2cSpeed = 6 [deprecated = true];
} }
@ -437,12 +460,12 @@ message AnalogADS1256Options
message DualDirectionalOptions message DualDirectionalOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 deprecatedUpPin = 2 [deprecated = true]; optional int32 deprecatedUpPin = 2 [deprecated = true];
optional int32 deprecatedDownPin = 3 [deprecated = true]; optional int32 deprecatedDownPin = 3 [deprecated = true];
optional int32 deprecatedLeftPin = 4 [deprecated = true]; optional int32 deprecatedLeftPin = 4 [deprecated = true];
optional int32 deprecatedRightPin = 5 [deprecated = true]; optional int32 deprecatedRightPin = 5 [deprecated = true];
optional DpadMode dpadMode = 6; optional DpadMode dpadMode = 6;
optional DualDirectionalCombinationMode combineMode = 7; optional DualDirectionalCombinationMode combineMode = 7;
optional bool fourWayMode = 8; optional bool fourWayMode = 8;
@ -465,7 +488,7 @@ message TiltOptions
optional int32 tiltRightAnalogRightPin = 12; optional int32 tiltRightAnalogRightPin = 12;
optional SOCDMode tiltSOCDMode = 13; optional SOCDMode tiltSOCDMode = 13;
optional int32 factorTilt1LeftX = 14; optional int32 factorTilt1LeftX = 14;
optional int32 factorTilt1LeftY = 15; optional int32 factorTilt1LeftY = 15;
optional int32 factorTilt1RightX = 16; optional int32 factorTilt1RightX = 16;
@ -479,7 +502,7 @@ message TiltOptions
message BuzzerOptions message BuzzerOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 pin = 2; optional int32 pin = 2;
optional uint32 volume = 3; optional uint32 volume = 3;
optional int32 enablePin = 4; optional int32 enablePin = 4;
@ -488,7 +511,7 @@ message BuzzerOptions
message ExtraButtonOptions message ExtraButtonOptions
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 pin = 2; optional int32 pin = 2;
optional uint32 buttonMap = 3; optional uint32 buttonMap = 3;
} }
@ -541,7 +564,7 @@ message WiiOptions
optional AnalogAxis x = 1; optional AnalogAxis x = 1;
optional AnalogAxis y = 2; optional AnalogAxis y = 2;
} }
message NunchukOptions message NunchukOptions
{ {
optional int32 buttonC = 1; optional int32 buttonC = 1;
@ -572,7 +595,7 @@ message WiiOptions
optional AnalogAxis rightTrigger = 19; optional AnalogAxis rightTrigger = 19;
} }
message TaikoOptions message TaikoOptions
{ {
optional int32 buttonKatLeft = 1; optional int32 buttonKatLeft = 1;
optional int32 buttonKatRight = 2; optional int32 buttonKatRight = 2;
@ -638,7 +661,7 @@ message WiiOptions
} }
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
optional int32 deprecatedI2cSDAPin = 3 [deprecated = true]; optional int32 deprecatedI2cSDAPin = 3 [deprecated = true];
optional int32 deprecatedI2cSCLPin = 4 [deprecated = true]; optional int32 deprecatedI2cSCLPin = 4 [deprecated = true];
optional int32 deprecatedI2cSpeed = 5 [deprecated = true]; optional int32 deprecatedI2cSpeed = 5 [deprecated = true];
@ -660,6 +683,9 @@ message KeyboardHostOptions
optional int32 deprecatedPinDplus = 2 [deprecated = true]; optional int32 deprecatedPinDplus = 2 [deprecated = true];
optional KeyboardMapping mapping = 3; optional KeyboardMapping mapping = 3;
optional int32 deprecatedPin5V = 4 [deprecated = true]; optional int32 deprecatedPin5V = 4 [deprecated = true];
optional uint32 mouseLeft = 5;
optional uint32 mouseMiddle = 6;
optional uint32 mouseRight = 7;
} }
message FocusModeOptions message FocusModeOptions
@ -732,17 +758,43 @@ message RotaryOptions
message PCF8575Options message PCF8575Options
{ {
optional bool enabled = 1; optional bool enabled = 1;
optional int32 i2cBlock = 2; optional int32 deprecatedI2cBlock = 2 [deprecated = true];
repeated GpioMappingInfo pins = 3 [(nanopb).max_count = 16]; repeated GpioMappingInfo pins = 3 [(nanopb).max_count = 16];
} }
message DRV8833RumbleOptions
{
optional bool enabled = 1;
optional int32 leftMotorPin = 2;
optional int32 rightMotorPin = 3;
optional int32 motorSleepPin = 4;
optional uint32 pwmFrequency = 5;
optional float dutyMin = 6;
optional float dutyMax = 7;
}
message ReactiveLEDInfo
{
optional int32 pin = 1;
optional GpioAction action = 2;
optional ReactiveLEDMode modeDown = 3;
optional ReactiveLEDMode modeUp = 4;
}
message ReactiveLEDOptions
{
optional bool enabled = 1;
repeated ReactiveLEDInfo leds = 2 [(nanopb).max_count = 10];
}
message AddonOptions message AddonOptions
{ {
optional BootselButtonOptions bootselButtonOptions = 1; optional BootselButtonOptions bootselButtonOptions = 1;
optional OnBoardLedOptions onBoardLedOptions = 2; optional OnBoardLedOptions onBoardLedOptions = 2;
optional AnalogOptions analogOptions = 3; optional AnalogOptions analogOptions = 3;
optional TurboOptions turboOptions = 4; optional TurboOptions turboOptions = 4;
optional SliderOptions sliderOptions = 5; optional SliderOptions deprecatedSliderOptions = 5;
optional ReverseOptions reverseOptions = 6; optional ReverseOptions reverseOptions = 6;
optional AnalogADS1219Options analogADS1219Options = 7; optional AnalogADS1219Options analogADS1219Options = 7;
optional DualDirectionalOptions dualDirectionalOptions = 8; optional DualDirectionalOptions dualDirectionalOptions = 8;
@ -763,6 +815,8 @@ message AddonOptions
optional AnalogADS1256Options analogADS1256Options = 23; optional AnalogADS1256Options analogADS1256Options = 23;
optional RotaryOptions rotaryOptions = 24; optional RotaryOptions rotaryOptions = 24;
optional PCF8575Options pcf8575Options = 25; optional PCF8575Options pcf8575Options = 25;
optional DRV8833RumbleOptions drv8833RumbleOptions = 26;
optional ReactiveLEDOptions reactiveLEDOptions = 27;
} }
message MigrationHistory message MigrationHistory
@ -770,12 +824,13 @@ message MigrationHistory
optional bool hotkeysMigrated = 1 [default = false]; optional bool hotkeysMigrated = 1 [default = false];
optional bool gpioMappingsMigrated = 2 [default = false]; optional bool gpioMappingsMigrated = 2 [default = false];
optional bool buttonProfilesMigrated = 3 [default = false]; optional bool buttonProfilesMigrated = 3 [default = false];
optional bool profileEnabledFlagsMigrated = 4 [default = false];
} }
message Config message Config
{ {
optional string boardVersion = 1 [(nanopb).max_length = 31]; optional string boardVersion = 1 [(nanopb).max_length = 31];
optional GamepadOptions gamepadOptions = 2; optional GamepadOptions gamepadOptions = 2;
optional HotkeyOptions hotkeyOptions = 3; optional HotkeyOptions hotkeyOptions = 3;
optional PinMappings deprecatedPinMappings = 4 [deprecated = true]; optional PinMappings deprecatedPinMappings = 4 [deprecated = true];
@ -786,7 +841,7 @@ message Config
optional AddonOptions addonOptions = 9; optional AddonOptions addonOptions = 9;
optional ForcedSetupOptions forcedSetupOptions = 10; optional ForcedSetupOptions forcedSetupOptions = 10;
optional ProfileOptions profileOptions = 11; optional ProfileOptions profileOptions = 11;
optional string boardConfig = 12 [(nanopb).max_length = 63]; optional string boardConfig = 12 [(nanopb).max_length = 63];
optional GpioMappings gpioMappings = 13; optional GpioMappings gpioMappings = 13;
optional MigrationHistory migrations = 14; optional MigrationHistory migrations = 14;

View File

@ -39,6 +39,7 @@ enum ButtonLayout
BUTTON_LAYOUT_6GAWD_A = 30; BUTTON_LAYOUT_6GAWD_A = 30;
BUTTON_LAYOUT_6GAWD_ALLBUTTON_A = 31; BUTTON_LAYOUT_6GAWD_ALLBUTTON_A = 31;
BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_A = 32; BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_A = 32;
BUTTON_LAYOUT_STICKLESS_R16 = 33;
} }
enum ButtonLayoutRight enum ButtonLayoutRight
@ -82,6 +83,7 @@ enum ButtonLayoutRight
BUTTON_LAYOUT_6GAWD_B = 34; BUTTON_LAYOUT_6GAWD_B = 34;
BUTTON_LAYOUT_6GAWD_ALLBUTTON_B = 35; BUTTON_LAYOUT_6GAWD_ALLBUTTON_B = 35;
BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_B = 36; BUTTON_LAYOUT_6GAWD_ALLBUTTONPLUS_B = 36;
BUTTON_LAYOUT_STICKLESS_R16B = 37;
} }
enum SplashMode enum SplashMode
@ -109,7 +111,7 @@ enum SplashChoice
enum OnBoardLedMode enum OnBoardLedMode
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
ON_BOARD_LED_MODE_OFF = 0; ON_BOARD_LED_MODE_OFF = 0;
ON_BOARD_LED_MODE_MODE_INDICATOR = 1; ON_BOARD_LED_MODE_MODE_INDICATOR = 1;
ON_BOARD_LED_MODE_INPUT_TEST = 2; ON_BOARD_LED_MODE_INPUT_TEST = 2;
@ -122,7 +124,7 @@ enum InputMode
INPUT_MODE_XINPUT = 0; INPUT_MODE_XINPUT = 0;
INPUT_MODE_SWITCH = 1; INPUT_MODE_SWITCH = 1;
INPUT_MODE_HID = 2; INPUT_MODE_PS3 = 2;
INPUT_MODE_KEYBOARD = 3; INPUT_MODE_KEYBOARD = 3;
INPUT_MODE_PS4 = 4; INPUT_MODE_PS4 = 4;
INPUT_MODE_XBONE = 5; INPUT_MODE_XBONE = 5;
@ -134,6 +136,7 @@ enum InputMode
INPUT_MODE_PSCLASSIC = 11; INPUT_MODE_PSCLASSIC = 11;
INPUT_MODE_XBOXORIGINAL = 12; INPUT_MODE_XBOXORIGINAL = 12;
INPUT_MODE_PS5 = 13; INPUT_MODE_PS5 = 13;
INPUT_MODE_GENERIC = 14;
INPUT_MODE_CONFIG = 255; INPUT_MODE_CONFIG = 255;
} }
@ -225,6 +228,21 @@ enum GpioAction
BUTTON_PRESS_MACRO_4 = 37; BUTTON_PRESS_MACRO_4 = 37;
BUTTON_PRESS_MACRO_5 = 38; BUTTON_PRESS_MACRO_5 = 38;
BUTTON_PRESS_MACRO_6 = 39; BUTTON_PRESS_MACRO_6 = 39;
CUSTOM_BUTTON_COMBO = 40;
BUTTON_PRESS_A3 = 41;
BUTTON_PRESS_A4 = 42;
BUTTON_PRESS_E1 = 43;
BUTTON_PRESS_E2 = 44;
BUTTON_PRESS_E3 = 45;
BUTTON_PRESS_E4 = 46;
BUTTON_PRESS_E5 = 47;
BUTTON_PRESS_E6 = 48;
BUTTON_PRESS_E7 = 49;
BUTTON_PRESS_E8 = 50;
BUTTON_PRESS_E9 = 51;
BUTTON_PRESS_E10 = 52;
BUTTON_PRESS_E11 = 53;
BUTTON_PRESS_E12 = 54;
} }
enum GpioDirection enum GpioDirection
@ -275,6 +293,13 @@ enum GamepadHotkey
HOTKEY_A1_BUTTON = 33; HOTKEY_A1_BUTTON = 33;
HOTKEY_A2_BUTTON = 34; HOTKEY_A2_BUTTON = 34;
HOTKEY_NEXT_PROFILE = 35; HOTKEY_NEXT_PROFILE = 35;
HOTKEY_A3_BUTTON = 36;
HOTKEY_A4_BUTTON = 37;
HOTKEY_DPAD_UP = 38;
HOTKEY_DPAD_DOWN = 39;
HOTKEY_DPAD_LEFT = 40;
HOTKEY_DPAD_RIGHT = 41;
HOTKEY_PREVIOUS_PROFILE = 42;
} }
// This has to be kept in sync with LEDFormat in NeoPico.hpp // This has to be kept in sync with LEDFormat in NeoPico.hpp
@ -297,7 +322,7 @@ enum ShmupMixMode
enum PLEDType enum PLEDType
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
PLED_TYPE_NONE = -1; PLED_TYPE_NONE = -1;
PLED_TYPE_PWM = 0; PLED_TYPE_PWM = 0;
PLED_TYPE_RGB = 1; PLED_TYPE_RGB = 1;
@ -306,7 +331,7 @@ enum PLEDType
enum ForcedSetupMode enum ForcedSetupMode
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
FORCED_SETUP_MODE_OFF = 0; FORCED_SETUP_MODE_OFF = 0;
FORCED_SETUP_MODE_LOCK_MODE_SWITCH = 1; FORCED_SETUP_MODE_LOCK_MODE_SWITCH = 1;
FORCED_SETUP_MODE_LOCK_WEB_CONFIG = 2; FORCED_SETUP_MODE_LOCK_WEB_CONFIG = 2;
@ -326,7 +351,7 @@ enum DualDirectionalCombinationMode
enum PS4ControllerType enum PS4ControllerType
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
PS4_CONTROLLER = 0; PS4_CONTROLLER = 0;
PS4_ARCADESTICK = 7; PS4_ARCADESTICK = 7;
} }
@ -358,7 +383,7 @@ enum GPElement
enum GPShape_Type enum GPShape_Type
{ {
option (nanopb_enumopt).long_names = false; option (nanopb_enumopt).long_names = false;
GP_SHAPE_ELLIPSE = 0; GP_SHAPE_ELLIPSE = 0;
GP_SHAPE_SQUARE = 1; GP_SHAPE_SQUARE = 1;
GP_SHAPE_LINE = 2; GP_SHAPE_LINE = 2;
@ -380,3 +405,21 @@ enum RotaryEncoderPinMode
ENCODER_MODE_DPAD_X = 7; ENCODER_MODE_DPAD_X = 7;
ENCODER_MODE_DPAD_Y = 8; ENCODER_MODE_DPAD_Y = 8;
}; };
enum ReactiveLEDMode
{
option (nanopb_enumopt).long_names = false;
REACTIVE_LED_STATIC_OFF = 0;
REACTIVE_LED_STATIC_ON = 1;
REACTIVE_LED_FADE_IN = 2;
REACTIVE_LED_FADE_OUT = 3;
};
enum PS4ControllerIDMode
{
option (nanopb_enumopt).long_names = false;
PS4_ID_CONSOLE = 0;
PS4_ID_EMULATION = 1;
};

View File

@ -1,7 +1,7 @@
{ {
"boardVersion": "v0.7.6-15-g71f4512", "boardVersion": "v0.7.6-15-g71f4512",
"gamepadOptions": { "gamepadOptions": {
"inputMode": "INPUT_MODE_HID", "inputMode": "INPUT_MODE_PS3",
"dpadMode": "DPAD_MODE_DIGITAL", "dpadMode": "DPAD_MODE_DIGITAL",
"socdMode": "SOCD_MODE_SECOND_INPUT_PRIORITY", "socdMode": "SOCD_MODE_SECOND_INPUT_PRIORITY",
"invertXAxis": false, "invertXAxis": false,
@ -163,10 +163,10 @@
}, },
"displayOptions": { "displayOptions": {
"enabled": false, "enabled": false,
"i2cBlock": 0, "deprecatedI2cBlock": 0,
"deprecatedI2cSDAPin": 0, "deprecatedI2cSDAPin": 0,
"deprecatedI2cSCLPin": 1, "deprecatedI2cSCLPin": 1,
"i2cAddress": 60, "deprecatedI2cAddress": 60,
"deprecatedI2cSpeed": 400000, "deprecatedI2cSpeed": 400000,
"buttonLayout": "BUTTON_LAYOUT_STICK", "buttonLayout": "BUTTON_LAYOUT_STICK",
"buttonLayoutRight": "BUTTON_LAYOUT_VEWLIX", "buttonLayoutRight": "BUTTON_LAYOUT_VEWLIX",
@ -327,13 +327,13 @@
"shmupBtnMask4": 0, "shmupBtnMask4": 0,
"shmupMixMode": "SHMUP_MIX_MODE_TURBO_PRIORITY" "shmupMixMode": "SHMUP_MIX_MODE_TURBO_PRIORITY"
}, },
"sliderOptions": { "deprecatedSliderOptions": {
"enabled": false, "enabled": false,
"deprecatedPinSliderOne": 0, "deprecatedPinSliderOne": 0,
"deprecatedPinSliderTwo": 0, "deprecatedPinSliderTwo": 0,
"deprecatedModeOne": "DPAD_MODE_DIGITAL", "deprecatedModeOne": "DPAD_MODE_DIGITAL",
"deprecatedModeTwo": "DPAD_MODE_DIGITAL", "deprecatedModeTwo": "DPAD_MODE_DIGITAL",
"modeDefault": "DPAD_MODE_DIGITAL" "deprecatedModeDefault": "DPAD_MODE_DIGITAL"
}, },
"reverseOptions": { "reverseOptions": {
"enabled": false, "enabled": false,
@ -346,10 +346,10 @@
}, },
"analogADS1219Options": { "analogADS1219Options": {
"enabled": false, "enabled": false,
"i2cBlock": 0, "deprecatedI2cBlock": 0,
"deprecatedI2cSDAPin": -1, "deprecatedI2cSDAPin": -1,
"deprecatedI2cSCLPin": -1, "deprecatedI2cSCLPin": -1,
"i2cAddress": 64, "deprecatedI2cAddress": 64,
"deprecatedI2cSpeed": 400000 "deprecatedI2cSpeed": 400000
}, },
"dualDirectionalOptions": { "dualDirectionalOptions": {
@ -392,7 +392,7 @@
}, },
"wiiOptions": { "wiiOptions": {
"enabled": false, "enabled": false,
"i2cBlock": 0, "deprecatedI2cBlock": 0,
"deprecatedI2cSDAPin": -1, "deprecatedI2cSDAPin": -1,
"deprecatedI2cSCLPin": -1, "deprecatedI2cSCLPin": -1,
"deprecatedI2cSpeed": 400000, "deprecatedI2cSpeed": 400000,

View File

@ -25,7 +25,7 @@ logger = logging.getLogger(__name__)
@decorator @decorator
def with_pb2s(test, *args, **kwargs): def with_pb2s(test, *args, **kwargs):
"""Wrap a test with precompiled pb2 files on the path.""" """Wrap a test with precompiled pb2 files on the path."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
test(*args, **kwargs) test(*args, **kwargs)

View File

@ -18,7 +18,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
@decorator @decorator
def with_pb2s(test, *args, **kwargs): def with_pb2s(test, *args, **kwargs):
"""Wrap a test with precompiled pb2 files on the path.""" """Wrap a test with precompiled pb2 files on the path."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
test(*args, **kwargs) test(*args, **kwargs)

View File

@ -21,7 +21,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
@decorator @decorator
async def with_pb2s(test, *args, **kwargs): async def with_pb2s(test, *args, **kwargs):
"""Wrap a test with precompiled pb2 files on the path.""" """Wrap a test with precompiled pb2 files on the path."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
await test(*args, **kwargs) await test(*args, **kwargs)
@ -109,7 +109,7 @@ async def test_simple_edit_via_input_field():
async with app.run_test() as pilot: async with app.run_test() as pilot:
tree = pilot.app.query_one(Tree) tree = pilot.app.query_one(Tree)
display_node = tree.root.children[5] display_node = tree.root.children[5]
i2cspeed_node = display_node.children[4] i2cspeed_node = display_node.children[6]
assert pilot.app.config.displayOptions.deprecatedI2cSpeed == 400000 assert pilot.app.config.displayOptions.deprecatedI2cSpeed == 400000
tree.root.expand_all() tree.root.expand_all()

View File

@ -36,7 +36,7 @@ def test_get_config_pb2_exception():
def test_get_config_pb2_precompile(): def test_get_config_pb2_precompile():
"""Test we can import precompiled protobuf files.""" """Test we can import precompiled protobuf files."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
# let grpc tools import the proto files normally # let grpc tools import the proto files normally

View File

@ -20,7 +20,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
@decorator @decorator
def with_pb2s(test, *args, **kwargs): def with_pb2s(test, *args, **kwargs):
"""Wrap a test with precompiled pb2 files on the path.""" """Wrap a test with precompiled pb2 files on the path."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
test(*args, **kwargs) test(*args, **kwargs)

View File

@ -20,7 +20,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
@decorator @decorator
def with_pb2s(test, *args, **kwargs): def with_pb2s(test, *args, **kwargs):
"""Wrap a test with precompiled pb2 files on the path.""" """Wrap a test with precompiled pb2 files on the path."""
proto_path = os.path.join(HERE, 'test-files', 'pb2-files') proto_path = os.path.join(HERE, 'test-files')
sys.path.append(proto_path) sys.path.append(proto_path)
test(*args, **kwargs) test(*args, **kwargs)

View File

@ -5,7 +5,7 @@
[tox] [tox]
isolated_build = true isolated_build = true
envlist = begin,py39,py310,py311,coverage,bandit,lint,reuse envlist = begin,py39,py310,py311,py312,coverage,bandit,lint,reuse
[testenv] [testenv]
allow_externals = pytest, coverage allow_externals = pytest, coverage
@ -33,6 +33,11 @@ commands =
commands = commands =
pytest --cov-append --cov={envsitepackagesdir}/gp2040ce_bintools/ --cov-branch pytest --cov-append --cov={envsitepackagesdir}/gp2040ce_bintools/ --cov-branch
[testenv:py312]
# run pytest with coverage
commands =
pytest --cov-append --cov={envsitepackagesdir}/gp2040ce_bintools/ --cov-branch
[testenv:coverage] [testenv:coverage]
# report on coverage runs from above # report on coverage runs from above
skip_install = true skip_install = true