forked from NaxdyOrg/NaxGCC-FW
feat: add ability to enter reset mode via button press + additional default values
This commit is contained in:
parent
f0d99a234b
commit
40f734f25d
2 changed files with 44 additions and 9 deletions
16
src/input.rs
16
src/input.rs
|
@ -22,8 +22,8 @@ use crate::{
|
||||||
gcc_hid::GcReport,
|
gcc_hid::GcReport,
|
||||||
packed_float::{PackedFloat, ToPackedFloatArray},
|
packed_float::{PackedFloat, ToPackedFloatArray},
|
||||||
stick::{
|
stick::{
|
||||||
linearize, notch_remap, StickParams, DEFAULT_CAL_POINTS_X, DEFAULT_CAL_POINTS_Y,
|
linearize, notch_remap, StickParams, DEFAULT_ANGLES, DEFAULT_CAL_POINTS_X,
|
||||||
NO_OF_NOTCHES,
|
DEFAULT_CAL_POINTS_Y, NO_OF_NOTCHES,
|
||||||
},
|
},
|
||||||
ADDR_OFFSET, FLASH_SIZE,
|
ADDR_OFFSET, FLASH_SIZE,
|
||||||
};
|
};
|
||||||
|
@ -34,7 +34,7 @@ static STICK_SIGNAL: Signal<CriticalSectionRawMutex, StickState> = Signal::new()
|
||||||
const STICK_HYST_VAL: f32 = 0.3;
|
const STICK_HYST_VAL: f32 = 0.3;
|
||||||
const FLOAT_ORIGIN: f32 = 127.5;
|
const FLOAT_ORIGIN: f32 = 127.5;
|
||||||
|
|
||||||
pub const CONTROLLER_CONFIG_REVISION: u8 = 1;
|
pub const CONTROLLER_CONFIG_REVISION: u8 = 2;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Format, PackedStruct)]
|
#[derive(Debug, Clone, Format, PackedStruct)]
|
||||||
#[packed_struct(endian = "msb")]
|
#[packed_struct(endian = "msb")]
|
||||||
|
@ -102,8 +102,8 @@ impl Default for ControllerConfig {
|
||||||
temp_cal_points_ay: *DEFAULT_CAL_POINTS_Y.to_packed_float_array(),
|
temp_cal_points_ay: *DEFAULT_CAL_POINTS_Y.to_packed_float_array(),
|
||||||
temp_cal_points_cx: *DEFAULT_CAL_POINTS_X.to_packed_float_array(),
|
temp_cal_points_cx: *DEFAULT_CAL_POINTS_X.to_packed_float_array(),
|
||||||
temp_cal_points_cy: *DEFAULT_CAL_POINTS_Y.to_packed_float_array(),
|
temp_cal_points_cy: *DEFAULT_CAL_POINTS_Y.to_packed_float_array(),
|
||||||
a_angles: [PackedFloat::default(); NO_OF_NOTCHES],
|
a_angles: *DEFAULT_ANGLES.to_packed_float_array(),
|
||||||
c_angles: [PackedFloat::default(); NO_OF_NOTCHES],
|
c_angles: *DEFAULT_ANGLES.to_packed_float_array(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -474,6 +474,12 @@ pub async fn input_loop(
|
||||||
mut spi_acs: Output<'static, PIN_24>,
|
mut spi_acs: Output<'static, PIN_24>,
|
||||||
mut spi_ccs: Output<'static, PIN_23>,
|
mut spi_ccs: Output<'static, PIN_23>,
|
||||||
) {
|
) {
|
||||||
|
if btn_a.is_low() && btn_x.is_low() && btn_y.is_low() {
|
||||||
|
info!("Detected reset button press, booting into flash.");
|
||||||
|
embassy_rp::rom_data::reset_to_usb_boot(0, 0);
|
||||||
|
loop {}
|
||||||
|
}
|
||||||
|
|
||||||
let mut gcc_state = GcReport::default();
|
let mut gcc_state = GcReport::default();
|
||||||
|
|
||||||
// Set the stick states to the center
|
// Set the stick states to the center
|
||||||
|
|
37
src/stick.rs
37
src/stick.rs
|
@ -14,13 +14,14 @@ use crate::{
|
||||||
const FIT_ORDER: usize = 3;
|
const FIT_ORDER: usize = 3;
|
||||||
const NUM_COEFFS: usize = FIT_ORDER + 1;
|
const NUM_COEFFS: usize = FIT_ORDER + 1;
|
||||||
pub const NO_OF_NOTCHES: usize = 16;
|
pub const NO_OF_NOTCHES: usize = 16;
|
||||||
|
const NO_OF_ADJ_NOTCHES: usize = 12;
|
||||||
pub const NO_OF_CALIBRATION_POINTS: usize = 32;
|
pub const NO_OF_CALIBRATION_POINTS: usize = 32;
|
||||||
const MAX_ORDER: usize = 20;
|
const MAX_ORDER: usize = 20;
|
||||||
|
|
||||||
/// 28 degrees; this is the max angular deflection of the stick.
|
/// 28 degrees; this is the max angular deflection of the stick.
|
||||||
const MAX_STICK_ANGLE: f32 = 0.4886921906;
|
const MAX_STICK_ANGLE: f32 = 0.4886921906;
|
||||||
|
|
||||||
const NOTCH_STATUS_DEFAULTS: [NotchStatus; NO_OF_NOTCHES] = [
|
const DEFAULT_NOTCH_STATUS: [NotchStatus; NO_OF_NOTCHES] = [
|
||||||
NotchStatus::Cardinal,
|
NotchStatus::Cardinal,
|
||||||
NotchStatus::TertActive,
|
NotchStatus::TertActive,
|
||||||
NotchStatus::Secondary,
|
NotchStatus::Secondary,
|
||||||
|
@ -79,6 +80,34 @@ pub const DEFAULT_CAL_POINTS_Y: [f32; NO_OF_CALIBRATION_POINTS] = [
|
||||||
0.3000802760,0.3008482317
|
0.3000802760,0.3008482317
|
||||||
];
|
];
|
||||||
|
|
||||||
|
pub const DEFAULT_ANGLES: [f32; NO_OF_NOTCHES] = [
|
||||||
|
0.,
|
||||||
|
PI / 8.0,
|
||||||
|
PI * 2. / 8.,
|
||||||
|
PI * 3. / 8.,
|
||||||
|
PI * 4. / 8.,
|
||||||
|
PI * 5. / 8.,
|
||||||
|
PI * 6. / 8.,
|
||||||
|
PI * 7. / 8.,
|
||||||
|
PI * 8. / 8.,
|
||||||
|
PI * 9. / 8.,
|
||||||
|
PI * 10. / 8.,
|
||||||
|
PI * 11. / 8.,
|
||||||
|
PI * 12. / 8.,
|
||||||
|
PI * 13. / 8.,
|
||||||
|
PI * 14. / 8.,
|
||||||
|
PI * 15. / 8.,
|
||||||
|
];
|
||||||
|
|
||||||
|
#[rustfmt::skip]
|
||||||
|
// right notch 1 up right notch 2 up notch 3 up left notch 4 left notch 5 down left notch 6 down notch 7 down right notch 8
|
||||||
|
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||||
|
const CALIBRATION_ORDER: [usize; NO_OF_CALIBRATION_POINTS] = [ 0, 1, 8, 9, 16, 17, 24, 25, 4, 5, 12, 13, 20, 21, 28, 29, 2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31 ];
|
||||||
|
|
||||||
|
#[rustfmt::skip]
|
||||||
|
// up right up left down left down right notch 1 notch 2 notch 3 notch 4 notch 5 notch 6 notch 7 notch 8
|
||||||
|
const NOTCH_ADJUSTMENT_ORDER: [usize; NO_OF_ADJ_NOTCHES] = [2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15];
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Format)]
|
#[derive(Clone, Debug, Default, Format)]
|
||||||
pub struct StickParams {
|
pub struct StickParams {
|
||||||
// these are the linearization coefficients
|
// these are the linearization coefficients
|
||||||
|
@ -133,7 +162,7 @@ impl Default for CleanedCalibrationPoints {
|
||||||
cleaned_points_y: [0f32; NO_OF_NOTCHES + 1],
|
cleaned_points_y: [0f32; NO_OF_NOTCHES + 1],
|
||||||
notch_points_x: [0f32; NO_OF_NOTCHES + 1],
|
notch_points_x: [0f32; NO_OF_NOTCHES + 1],
|
||||||
notch_points_y: [0f32; NO_OF_NOTCHES + 1],
|
notch_points_y: [0f32; NO_OF_NOTCHES + 1],
|
||||||
notch_status: NOTCH_STATUS_DEFAULTS,
|
notch_status: DEFAULT_NOTCH_STATUS,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,7 +267,7 @@ impl CleanedCalibrationPoints {
|
||||||
// Mark that notch adjustment should be skipped for this
|
// Mark that notch adjustment should be skipped for this
|
||||||
out.notch_status[i] = NotchStatus::TertInactive;
|
out.notch_status[i] = NotchStatus::TertInactive;
|
||||||
} else {
|
} else {
|
||||||
out.notch_status[i] = NOTCH_STATUS_DEFAULTS[i];
|
out.notch_status[i] = DEFAULT_NOTCH_STATUS[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +306,7 @@ impl LinearizedCalibration {
|
||||||
///
|
///
|
||||||
/// Outputs:
|
/// Outputs:
|
||||||
/// linearization fit coefficients for X and Y
|
/// linearization fit coefficients for X and Y
|
||||||
pub fn from_points(in_x: &[f64; 17], in_y: &[f64; 17]) -> Self {
|
pub fn from_calibration_points(in_x: &[f64; 17], in_y: &[f64; 17]) -> Self {
|
||||||
let mut fit_points_x = [0f64; 5];
|
let mut fit_points_x = [0f64; 5];
|
||||||
let mut fit_points_y = [0f64; 5];
|
let mut fit_points_y = [0f64; 5];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue