diff --git a/server/app.js b/server/app.js index 757c1ec..a61c9f7 100644 --- a/server/app.js +++ b/server/app.js @@ -212,6 +212,9 @@ app.get("/api/getAddonsOptions", (req, res) => { wiiExtensionSCLPin: -1, wiiExtensionBlock: 0, wiiExtensionSpeed: 400000, + sidewinderGPPinTrigger: -1, + sidewinderGPPinClock: -1, + sidewinderGPPinData: -1, AnalogInputEnabled: 1, BoardLedAddonEnabled: 1, BuzzerSpeakerAddonEnabled: 1, @@ -226,6 +229,7 @@ app.get("/api/getAddonsOptions", (req, res) => { SliderSOCDInputEnabled: 1, TurboInputEnabled: 1, WiiExtensionAddonEnabled: 1, + SidewinderGPEnabled: 1, usedPins: Object.values(picoController), }); }); diff --git a/src/Pages/AddonsConfigPage.js b/src/Pages/AddonsConfigPage.js index adbf843..998527a 100644 --- a/src/Pages/AddonsConfigPage.js +++ b/src/Pages/AddonsConfigPage.js @@ -298,6 +298,10 @@ const schema = yup.object().shape({ BootselButtonAddonEnabled: yup.number().required().label('Boot Select Button Add-On Enabled'), bootselButtonMap: yup.number().label('BOOTSEL Button Map').validateSelectionWhenEnabled('BootselButtonAddonEnabled', BUTTON_MASKS), + sidewinderGPPinTrigger : yup.number().required().test('', '${originalValue} is unavailable/already assigned!', (value) => usedPins.indexOf(value) === -1).label('Sidewinder GP Trigger Pin'), + sidewinderGPPinClock : yup.number().required().test('', '${originalValue} is unavailable/already assigned!', (value) => usedPins.indexOf(value) === -1).label('Sidewinder GP Clock Pin'), + sidewinderGPPinData : yup.number().required().test('', '${originalValue} is unavailable/already assigned!', (value) => usedPins.indexOf(value) === -1).label('Sidewinder GP Data Pin'), + BuzzerSpeakerAddonEnabled: yup.number().required().label('Buzzer Speaker Add-On Enabled'), buzzerPin: yup.number().label('Buzzer Pin').validatePinWhenEnabled('BuzzerSpeakerAddonEnabled'), buzzerVolume: yup.number().label('Buzzer Volume').validateRangeWhenEnabled('BuzzerSpeakerAddonEnabled', 0, 100), @@ -359,6 +363,7 @@ const schema = yup.object().shape({ wiiExtensionSCLPin: yup.number().required().label('WiiExtension I2C SCL Pin').validatePinWhenEnabled('WiiExtensionAddonEnabled'), wiiExtensionBlock: yup.number().required().label('WiiExtension I2C Block').validateSelectionWhenEnabled('WiiExtensionAddonEnabled', I2C_BLOCKS), wiiExtensionSpeed: yup.number().label('WiiExtension I2C Speed').validateNumberWhenEnabled('WiiExtensionAddonEnabled'), + SidewinderGPEnabled: yup.number().required().label('Sidewinder GP Input Enabled') }); const defaultValues = { @@ -413,6 +418,9 @@ const defaultValues = { wiiExtensionSCLPin: -1, wiiExtensionBlock: 0, wiiExtensionSpeed: 400000, + sidewinderGPPinTrigger: -1, + sidewinderGPPinClock: -1, + sidewinderGPPinData: -1, AnalogInputEnabled: 0, BoardLedAddonEnabled: 0, BuzzerSpeakerAddonEnabled: 0, @@ -427,6 +435,7 @@ const defaultValues = { ReverseInputEnabled: 0, TurboInputEnabled: 0, WiiExtensionAddonEnabled: 0, + SidewinderGPEnabled: 0, }; let usedPins = []; @@ -560,6 +569,12 @@ const sanitizeData = (values) => { values.wiiExtensionBlock = parseInt(values.wiiExtensionBlock); if (!!values.wiiExtensionSpeed) values.wiiExtensionSpeed = parseInt(values.wiiExtensionSpeed); + if (!!values.sidewinderGPPinTrigger) + values.sidewinderGPPinTrigger = parseInt(values.sidewinderGPPinTrigger); + if (!!values.sidewinderGPPinClock) + values.sidewinderGPPinClock = parseInt(values.sidewinderGPPinClock); + if (!!values.sidewinderGPPinData) + values.sidewinderGPPinData = parseInt(values.sidewinderGPPinData); if (!!values.AnalogInputEnabled) values.AnalogInputEnabled = parseInt(values.AnalogInputEnabled); if (!!values.BoardLedAddonEnabled) @@ -588,6 +603,8 @@ const sanitizeData = (values) => { values.TurboInputEnabled = parseInt(values.TurboInputEnabled); if (!!values.WiiExtensionAddonEnabled) values.WiiExtensionAddonEnabled = parseInt(values.WiiExtensionAddonEnabled); + if (!!values.SidewinderGPEnabled) + values.SidewinderGPEnabled = parseInt(values.SidewinderGPEnabled); } function flattenObject(object) { @@ -1591,6 +1608,59 @@ export default function AddonsConfigPage() { onChange={(e) => {handleCheckbox("WiiExtensionAddonEnabled", values); handleChange(e);}} /> +
+ + {handleCheckbox("SidewinderGPEnabled", values); handleChange(e);}} + /> +
{saveMessage ? {saveMessage} : null}