Moved hat switch binding to buttons layout. Improved Fn switchover
This commit is contained in:
parent
f0f687b6db
commit
d860e53127
@ -356,15 +356,15 @@ fn main() -> ! {
|
||||
// Set up usb button layout
|
||||
buttons[0].usb_button = 1;
|
||||
buttons[1].usb_button = 2;
|
||||
buttons[1].usb_button_sec_enable = true;
|
||||
buttons[1].usb_button_sec = 21;
|
||||
buttons[1].usb_button_sec_trigger_index = 0;
|
||||
buttons[2].usb_button = 3;
|
||||
buttons[3].usb_button = 4;
|
||||
buttons[3].usb_button_sec_enable = true;
|
||||
buttons[3].usb_button_sec = 21;
|
||||
buttons[3].usb_button_sec_trigger_index = 12;
|
||||
buttons[3].usb_button_sec = 22;
|
||||
buttons[3].usb_button_sec_trigger_index = 0;
|
||||
buttons[4].usb_button = 5;
|
||||
buttons[4].usb_button_sec_enable = true;
|
||||
buttons[4].usb_button_sec = 22;
|
||||
buttons[4].usb_button_sec_trigger_index = 12;
|
||||
buttons[5].usb_button = 6;
|
||||
buttons[6].usb_button = 7;
|
||||
buttons[7].usb_button = 8;
|
||||
@ -373,18 +373,26 @@ fn main() -> ! {
|
||||
buttons[8].usb_button = 9;
|
||||
buttons[9].usb_button = 10;
|
||||
buttons[10].usb_button = 11;
|
||||
buttons[10].usb_button_sec_enable = true;
|
||||
buttons[10].usb_button_sec = 23;
|
||||
buttons[10].usb_button_sec_trigger_index = 0;
|
||||
buttons[11].usb_button = 12;
|
||||
buttons[11].usb_button_sec_enable = true;
|
||||
buttons[11].usb_button_sec = 24;
|
||||
buttons[11].usb_button_sec_trigger_index = 0;
|
||||
buttons[12].usb_button = 13;
|
||||
buttons[12].usb_button_sec = 17;
|
||||
buttons[12].usb_button_toggle_enable = true;
|
||||
buttons[13].usb_button = 14;
|
||||
buttons[13].usb_button_sec_enable = true;
|
||||
buttons[13].usb_button_sec = 23;
|
||||
buttons[13].usb_button_sec_trigger_index = 12;
|
||||
buttons[14].usb_button = 15;
|
||||
buttons[14].usb_button_sec_enable = true;
|
||||
buttons[14].usb_button_sec = 24;
|
||||
buttons[14].usb_button_sec_trigger_index = 12;
|
||||
buttons[15].usb_button = 18;
|
||||
buttons[15].usb_button_sec_enable = true;
|
||||
buttons[15].usb_button_sec = 20;
|
||||
buttons[15].usb_button_sec_trigger_index = 0;
|
||||
buttons[20].usb_button = 19;
|
||||
buttons[20].usb_button_sec_enable = true;
|
||||
buttons[20].usb_button_sec = 25;
|
||||
buttons[20].usb_button_sec_trigger_index = 0;
|
||||
|
||||
// Set up elrs button layout
|
||||
buttons[0].elrs_channel = 7;
|
||||
@ -778,10 +786,10 @@ fn get_joystick_report(
|
||||
let mut rx: u16 = AXIS_CENTER;
|
||||
let mut ry: u16 = AXIS_CENTER;
|
||||
let rz: u16 = axis[GIMBAL_AXIS_LEFT_Y].value;
|
||||
let (mut hat1, mut hat_button1) = format_hat_value(0);
|
||||
let (mut hat2, mut hat_button2) = format_hat_value(0);
|
||||
let (mut hat3, mut hat_button3) = format_hat_value(0);
|
||||
let (mut hat4, mut hat_button4) = format_hat_value(0);
|
||||
let (mut hat1, _hat_button1) = format_hat_value(0);
|
||||
let (mut hat2, _hat_button2) = format_hat_value(0);
|
||||
let (mut hat3, _hat_button3) = format_hat_value(0);
|
||||
let (mut hat4, _hat_button4) = format_hat_value(0);
|
||||
|
||||
// Right Alt mode active (bit 5)
|
||||
// Right gimbal control third joystick axis when right Fn mode is active
|
||||
@ -792,6 +800,7 @@ fn get_joystick_report(
|
||||
ry = AXIS_MAX - axis[GIMBAL_AXIS_RIGHT_Y].value;
|
||||
}
|
||||
|
||||
// Store hat bits
|
||||
let mut hat_left: u8 = 0;
|
||||
let mut hat_right: u8 = 0;
|
||||
for (index, key) in matrix_keys.iter_mut().enumerate() {
|
||||
@ -804,22 +813,52 @@ fn get_joystick_report(
|
||||
}
|
||||
|
||||
// Convert hat switch data to HID code
|
||||
if matrix_keys[7].pressed {
|
||||
(hat3, hat_button3) = format_hat_value(hat_left);
|
||||
} else {
|
||||
(hat1, hat_button1) = format_hat_value(hat_left);
|
||||
let (hat_l, hat_button_l) = format_hat_value(hat_left);
|
||||
let (hat_r, hat_button_r) = format_hat_value(hat_right);
|
||||
|
||||
// Handle sec_button (Fn) for left hat switch
|
||||
let mut sec_button_pressed: bool = false;
|
||||
for (sec_index, sec_key) in matrix_keys.iter().enumerate() {
|
||||
if matrix_keys[15].usb_button_sec_enable
|
||||
&& matrix_keys[15].usb_button_sec_trigger_index == sec_index
|
||||
&& sec_key.pressed
|
||||
{
|
||||
sec_button_pressed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if matrix_keys[12].pressed {
|
||||
(hat4, hat_button4) = format_hat_value(hat_right);
|
||||
if matrix_keys[15].usb_changed {
|
||||
matrix_keys[15].usb_button_sec_pressed = sec_button_pressed;
|
||||
}
|
||||
if matrix_keys[15].usb_button_sec != 0 && matrix_keys[15].usb_button_sec_pressed {
|
||||
hat3 = hat_l;
|
||||
} else {
|
||||
(hat2, hat_button2) = format_hat_value(hat_right);
|
||||
hat1 = hat_l;
|
||||
}
|
||||
|
||||
// Update button state for joystick button 21-24 according to hat button 1-4
|
||||
let mut buttons: u32 = (hat_button1 as u32) << 17
|
||||
| ((hat_button2 as u32) << 18)
|
||||
| ((hat_button3 as u32) << 19)
|
||||
| ((hat_button4 as u32) << 24);
|
||||
// Handle sec_button (Fn) for right hat switch
|
||||
let mut sec_button_pressed: bool = false;
|
||||
for (sec_index, sec_key) in matrix_keys.iter().enumerate() {
|
||||
if matrix_keys[20].usb_button_sec_enable
|
||||
&& matrix_keys[20].usb_button_sec_trigger_index == sec_index
|
||||
&& sec_key.pressed
|
||||
{
|
||||
sec_button_pressed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if matrix_keys[20].usb_changed {
|
||||
matrix_keys[20].usb_button_sec_pressed = sec_button_pressed;
|
||||
}
|
||||
if matrix_keys[20].usb_button_sec != 0 && matrix_keys[20].usb_button_sec_pressed {
|
||||
hat4 = hat_r;
|
||||
} else {
|
||||
hat2 = hat_r;
|
||||
}
|
||||
|
||||
// Fix button state for center hat press on hat
|
||||
matrix_keys[15].pressed = hat_button_l != 0;
|
||||
matrix_keys[20].pressed = hat_button_r != 0;
|
||||
|
||||
// Update button array with Sec button trigger status
|
||||
// Using indexing instead of iterating to be able to iterate inside loop
|
||||
@ -834,10 +873,15 @@ fn get_joystick_report(
|
||||
break;
|
||||
}
|
||||
}
|
||||
matrix_keys[index].usb_button_sec_pressed = sec_button_pressed;
|
||||
// Only update button when "root key" is pressed (ie. Do not change sec button as soon as Fn
|
||||
// key is pressed
|
||||
if matrix_keys[index].usb_changed {
|
||||
matrix_keys[index].usb_button_sec_pressed = sec_button_pressed;
|
||||
}
|
||||
}
|
||||
|
||||
// Update button state for joystick buttons
|
||||
let mut buttons: u32 = 0;
|
||||
for key in matrix_keys.iter_mut() {
|
||||
// Toggle mode button
|
||||
if key.usb_changed && key.usb_button_toggle_enable {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user