1
0
Fork 0

[Core] Enable more detected OS's

[OS Detection] Add hacky support for weirdness
This commit is contained in:
Drashna Jael're 2022-12-09 12:46:33 -08:00
parent 15f93285b1
commit ed6ec8b4f9
Signed by: drashna
GPG key ID: DBA1FD3A860D1B11
3 changed files with 24 additions and 18 deletions

View file

@ -128,8 +128,10 @@ void process_wlength(const uint16_t w_length) {
// now try to make a guess // now try to make a guess
os_variant_t guessed = OS_UNSURE; os_variant_t guessed = OS_UNSURE;
if (setups_data.count >= 3) { if (setups_data.count >= 3) {
if (setups_data.cnt_ff >= 2 && setups_data.cnt_04 >= 1) { if (setups_data.cnt_04 >= 1 && setups_data.cnt_ff >= 2) {
guessed = OS_WINDOWS; guessed = OS_WINDOWS;
} else if (setups_data.cnt_04 >= 1 && setups_data.cnt_ff) {
guessed = OS_WINDOWS_UNSURE;
} else if (setups_data.count == setups_data.cnt_ff) { } else if (setups_data.count == setups_data.cnt_ff) {
// Linux has 3 packets with 0xFF. // Linux has 3 packets with 0xFF.
guessed = OS_LINUX; guessed = OS_LINUX;
@ -140,10 +142,10 @@ void process_wlength(const uint16_t w_length) {
guessed = OS_IOS; guessed = OS_IOS;
} else if (setups_data.cnt_ff == 0 && setups_data.cnt_02 == 3 && setups_data.cnt_04 == 1) { } else if (setups_data.cnt_ff == 0 && setups_data.cnt_02 == 3 && setups_data.cnt_04 == 1) {
// This is actually PS5. // This is actually PS5.
guessed = OS_LINUX; guessed = OS_PS5;
} else if (setups_data.cnt_ff >= 1 && setups_data.cnt_02 == 0 && setups_data.cnt_04 == 0) { } else if (setups_data.cnt_ff >= 1 && setups_data.cnt_02 == 0 && setups_data.cnt_04 == 0) {
// This is actually Quest 2 or Nintendo Switch. // This is actually Quest 2 or Nintendo Switch.
guessed = OS_LINUX; guessed = OS_HANDHELD;
} }
} }

View file

@ -24,8 +24,11 @@ typedef enum {
OS_UNSURE, OS_UNSURE,
OS_LINUX, OS_LINUX,
OS_WINDOWS, OS_WINDOWS,
OS_WINDOWS_UNSURE,
OS_MACOS, OS_MACOS,
OS_IOS, OS_IOS,
OS_PS5,
OS_HANDHELD,
} os_variant_t; } os_variant_t;
void process_wlength(const uint16_t w_length); void process_wlength(const uint16_t w_length);

View file

@ -242,68 +242,68 @@ TEST_F(OsDetectionTest, TestVusbWindows10_2) {
} }
TEST_F(OsDetectionTest, TestChibiosPs5) { TEST_F(OsDetectionTest, TestChibiosPs5) {
EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0x28, 0x2, 0x24}), OS_LINUX); EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0x28, 0x2, 0x24}), OS_PS5);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestLufaPs5) { TEST_F(OsDetectionTest, TestLufaPs5) {
EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2, 0x10}), OS_LINUX); EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2, 0x10}), OS_PS5);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestVusbPs5) { TEST_F(OsDetectionTest, TestVusbPs5) {
EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2}), OS_LINUX); EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2}), OS_PS5);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestChibiosNintendoSwitch) { TEST_F(OsDetectionTest, TestChibiosNintendoSwitch) {
EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_LINUX); EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestLufaNintendoSwitch) { TEST_F(OsDetectionTest, TestLufaNintendoSwitch) {
EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_LINUX); EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestVusbNintendoSwitch) { TEST_F(OsDetectionTest, TestVusbNintendoSwitch) {
EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40}), OS_LINUX); EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestChibiosQuest2) { TEST_F(OsDetectionTest, TestChibiosQuest2) {
EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF}), OS_LINUX); EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestVusbQuest2) { TEST_F(OsDetectionTest, TestVusbQuest2) {
EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
} }
TEST_F(OsDetectionTest, TestDoNotReportIfUsbUnstable) { TEST_F(OsDetectionTest, TestDoNotReportIfUsbUnstable) {
EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_HANDHELD);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
advance_time(OS_DETECTION_DEBOUNCE); advance_time(OS_DETECTION_DEBOUNCE);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
EXPECT_EQ(detected_host_os(), OS_LINUX); EXPECT_EQ(detected_host_os(), OS_HANDHELD);
} }
static struct usb_device_state usb_device_state_configured = {.configure_state = USB_DEVICE_STATE_CONFIGURED}; static struct usb_device_state usb_device_state_configured = {.configure_state = USB_DEVICE_STATE_CONFIGURED};
TEST_F(OsDetectionTest, TestReportAfterDebounce) { TEST_F(OsDetectionTest, TestReportAfterDebounce) {
EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_HANDHELD);
os_detection_notify_usb_device_state_change(usb_device_state_configured); os_detection_notify_usb_device_state_change(usb_device_state_configured);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
@ -311,22 +311,22 @@ TEST_F(OsDetectionTest, TestReportAfterDebounce) {
advance_time(1); advance_time(1);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
EXPECT_EQ(detected_host_os(), OS_LINUX); EXPECT_EQ(detected_host_os(), OS_HANDHELD);
advance_time(OS_DETECTION_DEBOUNCE - 3); advance_time(OS_DETECTION_DEBOUNCE - 3);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
EXPECT_EQ(detected_host_os(), OS_LINUX); EXPECT_EQ(detected_host_os(), OS_HANDHELD);
advance_time(1); advance_time(1);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
EXPECT_EQ(detected_host_os(), OS_LINUX); EXPECT_EQ(detected_host_os(), OS_HANDHELD);
// advancing the timer alone must not cause a report // advancing the timer alone must not cause a report
advance_time(1); advance_time(1);
assert_not_reported(); assert_not_reported();
EXPECT_EQ(detected_host_os(), OS_LINUX); EXPECT_EQ(detected_host_os(), OS_HANDHELD);
// the task will cause a report // the task will cause a report
os_detection_task(); os_detection_task();
assert_reported(OS_LINUX); assert_reported(OS_LINUX);
@ -441,4 +441,5 @@ TEST_F(OsDetectionTest, TestDoNotGoBackToUnsure) {
EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0x02}), OS_LINUX); EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0x02}), OS_LINUX);
os_detection_task(); os_detection_task();
assert_not_reported(); assert_not_reported();
EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0x28, 0x2, 0x24}), OS_PS5);
} }