feat(hid): distinguish "OG" from "PC" mode

This commit is contained in:
Naxdy 2024-04-19 17:14:20 +02:00
parent 818e0abf76
commit 2a01cd732a
Signed by: Naxdy
GPG key ID: CC15075846BCE91B
2 changed files with 17 additions and 4 deletions

View file

@ -558,6 +558,9 @@ pub enum InputConsistencyMode {
/// to something your opponent does. /// to something your opponent does.
/// The name is not meant to imply that this is a hack that is super, but rather that this is super hacky. /// The name is not meant to imply that this is a hack that is super, but rather that this is super hacky.
SuperHack = 2, SuperHack = 2,
/// Transmit inputs every 1 ms, for use on PC or other devices that are not garbage.
/// This is not recommended for use on the Switch!
PC = 3,
} }
#[derive(Debug, Clone, Format, PackedStruct)] #[derive(Debug, Clone, Format, PackedStruct)]
@ -1689,7 +1692,8 @@ async fn configuration_main_loop<
// input consistency toggle // input consistency toggle
37 => { 37 => {
final_config.input_consistency_mode = match final_config.input_consistency_mode { final_config.input_consistency_mode = match final_config.input_consistency_mode {
InputConsistencyMode::Original => InputConsistencyMode::ConsistencyHack, InputConsistencyMode::Original => InputConsistencyMode::PC,
InputConsistencyMode::PC => InputConsistencyMode::ConsistencyHack,
InputConsistencyMode::ConsistencyHack => InputConsistencyMode::SuperHack, InputConsistencyMode::ConsistencyHack => InputConsistencyMode::SuperHack,
InputConsistencyMode::SuperHack => InputConsistencyMode::Original, InputConsistencyMode::SuperHack => InputConsistencyMode::Original,
}; };
@ -1713,6 +1717,7 @@ async fn configuration_main_loop<
stick_y: (127_i8 stick_y: (127_i8
+ match final_config.input_consistency_mode { + match final_config.input_consistency_mode {
InputConsistencyMode::Original => -69, InputConsistencyMode::Original => -69,
InputConsistencyMode::PC => -42,
InputConsistencyMode::ConsistencyHack => 42, InputConsistencyMode::ConsistencyHack => 42,
InputConsistencyMode::SuperHack => 69, InputConsistencyMode::SuperHack => 69,
}) as u8, }) as u8,

View file

@ -302,6 +302,7 @@ pub async fn usb_transfer_task(raw_serial: [u8; 8], driver: Driver<'static, USB>
InputConsistencyMode::Original => "NaxGCC (OG Mode)", InputConsistencyMode::Original => "NaxGCC (OG Mode)",
InputConsistencyMode::ConsistencyHack => "NaxGCC (Consistency Mode)", InputConsistencyMode::ConsistencyHack => "NaxGCC (Consistency Mode)",
InputConsistencyMode::SuperHack => "NaxGCC (SuperHack Mode)", InputConsistencyMode::SuperHack => "NaxGCC (SuperHack Mode)",
InputConsistencyMode::PC => "NaxGCC (PC Mode)",
}); });
usb_config.serial_number = Some(serial); usb_config.serial_number = Some(serial);
usb_config.max_power = 200; usb_config.max_power = 200;
@ -338,7 +339,12 @@ pub async fn usb_transfer_task(raw_serial: [u8; 8], driver: Driver<'static, USB>
let hid_config = embassy_usb::class::hid::Config { let hid_config = embassy_usb::class::hid::Config {
report_descriptor: GCC_REPORT_DESCRIPTOR, report_descriptor: GCC_REPORT_DESCRIPTOR,
request_handler: Some(&request_handler), request_handler: Some(&request_handler),
poll_ms: 1, poll_ms: match input_consistency_mode {
InputConsistencyMode::Original => 8,
InputConsistencyMode::ConsistencyHack
| InputConsistencyMode::SuperHack
| InputConsistencyMode::PC => 1,
},
max_packet_size_in: 37, max_packet_size_in: 37,
max_packet_size_out: 5, max_packet_size_out: 5,
}; };
@ -378,7 +384,7 @@ pub async fn usb_transfer_task(raw_serial: [u8; 8], driver: Driver<'static, USB>
// "Ticker at home", so we can use this for both consistency and SuperHack mode // "Ticker at home", so we can use this for both consistency and SuperHack mode
Timer::at(rate_limit_end_time).await; Timer::at(rate_limit_end_time).await;
} }
InputConsistencyMode::Original => {} InputConsistencyMode::Original | InputConsistencyMode::PC => {}
} }
match writer match writer
@ -395,7 +401,9 @@ pub async fn usb_transfer_task(raw_serial: [u8; 8], driver: Driver<'static, USB>
let polltime = currtime.duration_since(last_report_time); let polltime = currtime.duration_since(last_report_time);
let micros = polltime.as_micros(); let micros = polltime.as_micros();
debug!("Report written in {}us", micros); debug!("Report written in {}us", micros);
if input_consistency_mode != InputConsistencyMode::Original { if input_consistency_mode != InputConsistencyMode::Original
&& input_consistency_mode != InputConsistencyMode::PC
{
while rate_limit_end_time < currtime { while rate_limit_end_time < currtime {
rate_limit_end_time += Duration::from_micros(8333); rate_limit_end_time += Duration::from_micros(8333);
} }