From 5cd95192f1a42ecb0240599e7ac98bec4704fc06 Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 30 Jul 2025 10:31:50 +0200 Subject: [PATCH] Logitech Serial Mouse: Do not disable prompt mode on baud rate setting in most cases, fixes detection by the NT 3.1 driver. --- src/device/mouse_serial.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/device/mouse_serial.c b/src/device/mouse_serial.c index 7310b0e6d..45750ef09 100644 --- a/src/device/mouse_serial.c +++ b/src/device/mouse_serial.c @@ -480,7 +480,7 @@ ltsermouse_update_report_period(mouse_t *dev) } static void -ltsermouse_switch_baud_rate(mouse_t *dev, int next_state) +ltsermouse_switch_baud_rate(mouse_t *dev, int next_state, int prompt_off) { double word_lens[FORMATS_NUM] = { [FORMAT_BP1_ABS] = 7.0 + 1.0, /* 7 data bits + even parity */ @@ -517,7 +517,7 @@ ltsermouse_switch_baud_rate(mouse_t *dev, int next_state) ltsermouse_set_report_period(dev, dev->rps); if (!dev->continuous && (next_state != STATE_BAUD_RATE)) { - if (dev->prompt) + if (dev->prompt && prompt_off) ltsermouse_set_prompt_mode(dev, 0); sermouse_transmit_report(dev, 0); @@ -569,7 +569,7 @@ ltsermouse_process_command(mouse_t *dev) dev->buf[0] = 0x06; sermouse_transmit(dev, 1, 0, 0); - ltsermouse_switch_baud_rate(dev, STATE_BAUD_RATE); + ltsermouse_switch_baud_rate(dev, STATE_BAUD_RATE, 0); break; case 0x4a: /* Report Rate Selection commands */ @@ -614,7 +614,7 @@ ltsermouse_process_command(mouse_t *dev) case 0x58: /* Microsoft Compatible Format (3+1 byte 3-button, from the FreeBSD source code) */ if ((dev->rev >= 0x02) && ((dev->command != 0x58) || (dev->rev > 0x04))) { dev->format = dev->command & 0x1f; - ltsermouse_switch_baud_rate(dev, sermouse_next_state(dev)); + ltsermouse_switch_baud_rate(dev, sermouse_next_state(dev), 0); } break; @@ -706,7 +706,7 @@ ltsermouse_process_data(mouse_t *dev) dev->bps = 9600; break; } - ltsermouse_switch_baud_rate(dev, (dev->prompt || dev->continuous) ? STATE_IDLE : STATE_TRANSMIT_REPORT); + ltsermouse_switch_baud_rate(dev, (dev->prompt || dev->continuous) ? STATE_IDLE : STATE_TRANSMIT_REPORT, 0); break; default: dev->state = STATE_IDLE; @@ -744,7 +744,7 @@ sermouse_reset(mouse_t *dev, int callback) break; } - ltsermouse_switch_baud_rate(dev, callback ? STATE_TRANSMIT : STATE_IDLE); + ltsermouse_switch_baud_rate(dev, callback ? STATE_TRANSMIT : STATE_IDLE, 1); } static void