Serial mouse, microtouch, and modem: Add some more sanity checks.

This commit is contained in:
OBattler
2024-09-20 13:36:01 +02:00
parent 6d5fd97cda
commit ea878410b0
3 changed files with 20 additions and 10 deletions

View File

@@ -322,6 +322,8 @@ void
mtouch_write_to_host(void *priv)
{
mouse_microtouch_t *dev = (mouse_microtouch_t *) priv;
if (dev->serial == NULL)
goto no_write_to_machine;
if ((dev->serial->type >= SERIAL_16550) && dev->serial->fifo_enabled) {
if (fifo_get_full(dev->serial->rcvr_fifo)) {
goto no_write_to_machine;

View File

@@ -142,7 +142,8 @@ sermouse_transmit_byte(mouse_t *dev, int do_next)
if (dev->buf_pos == 0)
dev->acc_time = 0.0;
serial_write_fifo(dev->serial, dev->buf[dev->buf_pos]);
if (dev->serial)
serial_write_fifo(dev->serial, dev->buf[dev->buf_pos]);
if (do_next) {
dev->buf_pos = (dev->buf_pos + 1) % dev->buf_len;

View File

@@ -434,7 +434,7 @@ host_to_modem_cb(void *priv)
{
modem_t *modem = (modem_t *) priv;
if (modem->in_warmup)
if (modem->in_warmup || (modem->serial == NULL))
goto no_write_to_machine;
if ((modem->serial->type >= SERIAL_16550) && modem->serial->fifo_enabled) {
@@ -621,10 +621,12 @@ modem_enter_idle_state(modem_t *modem)
}
}
serial_set_cts(modem->serial, 1);
serial_set_dsr(modem->serial, 1);
serial_set_dcd(modem->serial, (!modem->dcdmode ? 1 : 0));
serial_set_ri(modem->serial, 0);
if (modem->serial != NULL) {
serial_set_cts(modem->serial, 1);
serial_set_dsr(modem->serial, 1);
serial_set_dcd(modem->serial, (!modem->dcdmode ? 1 : 0));
serial_set_ri(modem->serial, 0);
}
}
void
@@ -640,8 +642,11 @@ modem_enter_connected_state(modem_t *modem)
plat_netsocket_close(modem->serversocket);
modem->serversocket = -1;
memset(&modem->telClient, 0, sizeof(modem->telClient));
serial_set_dcd(modem->serial, 1);
serial_set_ri(modem->serial, 0);
if (modem->serial != NULL) {
serial_set_dcd(modem->serial, 1);
serial_set_ri(modem->serial, 0);
}
}
void
@@ -1391,7 +1396,8 @@ modem_cmdpause_timer_callback(void *priv)
} else {
modem->ringing = true;
modem_send_res(modem, ResRING);
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
if (modem->serial != NULL)
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
modem->ringtimer = 3000;
modem->reg[MREG_RING_COUNT] = 0;
}
@@ -1405,7 +1411,8 @@ modem_cmdpause_timer_callback(void *priv)
return;
}
modem_send_res(modem, ResRING);
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
if (modem->serial != NULL)
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
modem->ringtimer = 3000;
}