From 61bcb0d1f8ee6f254370d516cc690ef90a9d0ce0 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Sat, 8 Mar 2025 18:09:07 +0100 Subject: [PATCH] Updated layout --- rp2040/src/main.rs | 52 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/rp2040/src/main.rs b/rp2040/src/main.rs index a5087e9..b99095a 100644 --- a/rp2040/src/main.rs +++ b/rp2040/src/main.rs @@ -22,7 +22,7 @@ // --------------------------------------------------------------- // | Fn L| B2 U| B26 U| | B3 | | B28 U| B5 U| B4 L| // --------------------------------------------------------------- -// | | TH | B6 | B8 | | B13 | B12 | B11 | | +// | | B1 | B6 | B8 | | B13 | B12 | B11 | | // | | // | | B9 | | B14 | | // | | B10 | | B15 | | @@ -34,7 +34,7 @@ // // USB HID joystick map (Fn): // --------------------------------------------------------------- -// | Fn L| B21 U| B27 U| | B3 | | B28 U| B5 U| B22 L| +// | Fn L| B21 U| B27 U| | B3 | | B28 U| B32 U| B22 L| // --------------------------------------------------------------- // | | TH | B7 | B16 | | B17 | B24 | B23 | | // | | @@ -310,8 +310,13 @@ fn main() -> ! { let mut buttons: [Button; NUMBER_OF_BUTTONS + 2] = [Button::default(); NUMBER_OF_BUTTONS + 2]; let mut gimbal_mode: u8; + // Special button functions + // Throttle hold: + pub const TH_BUTTON: u8 = 5; + pub const TH_BUTTON_TRIGGER: u8 = 0; + // Set up usb button layout - buttons[0].usb_button = 0; + buttons[0].usb_button = 0; // Fn buttons[1].usb_button = 2; buttons[1].usb_button_sec_enable = true; buttons[1].usb_button_sec = 21; @@ -322,7 +327,15 @@ fn main() -> ! { buttons[3].usb_button_sec = 22; buttons[3].usb_button_sec_trigger_index = 0; buttons[4].usb_button = 5; - buttons[5].usb_button = 0; + buttons[4].usb_button_sec_enable = true; + buttons[4].usb_button_sec = 32; + buttons[4].usb_button_sec_trigger_index = 0; + buttons[5].usb_button = 1; + buttons[5].usb_button_sec_enable = true; + // Dummy definition to inhibit button press on throttle hold + buttons[5].usb_button_sec = 0; + buttons[5].usb_button_sec_trigger_index = 0; + // Dummy end ----------------------------------------------- buttons[6].usb_button = 6; buttons[6].usb_button_sec_enable = true; buttons[6].usb_button_sec = 7; @@ -332,10 +345,10 @@ fn main() -> ! { buttons[7].usb_button_sec = 16; buttons[7].usb_button_sec_trigger_index = 0; buttons[8].usb_button = 9; + buttons[8].usb_button_sec_enable = true; + buttons[8].usb_button_sec = 29; + buttons[8].usb_button_sec_trigger_index = 0; buttons[9].usb_button = 10; - buttons[9].usb_button_sec_enable = true; - buttons[9].usb_button_sec = 29; - buttons[9].usb_button_sec_trigger_index = 0; buttons[10].usb_button = 11; buttons[10].usb_button_sec_enable = true; buttons[10].usb_button_sec = 23; @@ -349,10 +362,10 @@ fn main() -> ! { buttons[12].usb_button_sec = 17; buttons[12].usb_button_sec_trigger_index = 0; buttons[13].usb_button = 14; + buttons[13].usb_button_sec_enable = true; + buttons[13].usb_button_sec = 31; + buttons[13].usb_button_sec_trigger_index = 0; buttons[14].usb_button = 15; - buttons[14].usb_button_sec_enable = true; - buttons[14].usb_button_sec = 31; - buttons[14].usb_button_sec_trigger_index = 0; buttons[15].usb_button = 18; buttons[15].usb_button_sec_enable = true; buttons[15].usb_button_sec = 20; @@ -587,6 +600,12 @@ fn main() -> ! { } // Generate led activity when a button is pressed + let mut th_trigger_pressed: bool = false; + for (index, key) in buttons.iter_mut().enumerate() { + if key.pressed && index == TH_BUTTON_TRIGGER.into() { + th_trigger_pressed = true; + } + } for (index, key) in buttons.iter_mut().enumerate() { if key.pressed != key.previous_pressed { key.usb_changed = true; @@ -596,14 +615,16 @@ fn main() -> ! { // Set throttle_hold_value if key.pressed != key.previous_pressed && key.pressed - && index == 5 + && index == TH_BUTTON.into() + && th_trigger_pressed && unprocessed_value != AXIS_CENTER { axis[GIMBAL_AXIS_LEFT_Y].hold = axis[GIMBAL_AXIS_LEFT_Y].value; axis[GIMBAL_AXIS_LEFT_Y].hold_pending = true; } else if key.pressed != key.previous_pressed && key.pressed - && index == 5 + && index == TH_BUTTON.into() + && th_trigger_pressed && unprocessed_value == AXIS_CENTER { axis[GIMBAL_AXIS_LEFT_Y].hold = AXIS_CENTER; @@ -796,7 +817,12 @@ fn get_joystick_report( // Sec button mode } else if key.pressed && key.usb_button_sec != 0 && key.usb_button_sec_pressed { buttons |= 1 << (key.usb_button_sec - 1); - } else if key.pressed && key.usb_button != 0 && !key.usb_button_toggle_enable { + // Standard mode + } else if key.pressed + && key.usb_button != 0 + && !key.usb_button_toggle_enable + && !key.usb_button_sec_pressed + { buttons |= 1 << (key.usb_button - 1); } }