Serial mouse, microtouch, and modem: Add some more sanity checks.
This commit is contained in:
@@ -322,6 +322,8 @@ void
|
|||||||
mtouch_write_to_host(void *priv)
|
mtouch_write_to_host(void *priv)
|
||||||
{
|
{
|
||||||
mouse_microtouch_t *dev = (mouse_microtouch_t *) 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 ((dev->serial->type >= SERIAL_16550) && dev->serial->fifo_enabled) {
|
||||||
if (fifo_get_full(dev->serial->rcvr_fifo)) {
|
if (fifo_get_full(dev->serial->rcvr_fifo)) {
|
||||||
goto no_write_to_machine;
|
goto no_write_to_machine;
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ sermouse_transmit_byte(mouse_t *dev, int do_next)
|
|||||||
if (dev->buf_pos == 0)
|
if (dev->buf_pos == 0)
|
||||||
dev->acc_time = 0.0;
|
dev->acc_time = 0.0;
|
||||||
|
|
||||||
|
if (dev->serial)
|
||||||
serial_write_fifo(dev->serial, dev->buf[dev->buf_pos]);
|
serial_write_fifo(dev->serial, dev->buf[dev->buf_pos]);
|
||||||
|
|
||||||
if (do_next) {
|
if (do_next) {
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ host_to_modem_cb(void *priv)
|
|||||||
{
|
{
|
||||||
modem_t *modem = (modem_t *) priv;
|
modem_t *modem = (modem_t *) priv;
|
||||||
|
|
||||||
if (modem->in_warmup)
|
if (modem->in_warmup || (modem->serial == NULL))
|
||||||
goto no_write_to_machine;
|
goto no_write_to_machine;
|
||||||
|
|
||||||
if ((modem->serial->type >= SERIAL_16550) && modem->serial->fifo_enabled) {
|
if ((modem->serial->type >= SERIAL_16550) && modem->serial->fifo_enabled) {
|
||||||
@@ -621,11 +621,13 @@ modem_enter_idle_state(modem_t *modem)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modem->serial != NULL) {
|
||||||
serial_set_cts(modem->serial, 1);
|
serial_set_cts(modem->serial, 1);
|
||||||
serial_set_dsr(modem->serial, 1);
|
serial_set_dsr(modem->serial, 1);
|
||||||
serial_set_dcd(modem->serial, (!modem->dcdmode ? 1 : 0));
|
serial_set_dcd(modem->serial, (!modem->dcdmode ? 1 : 0));
|
||||||
serial_set_ri(modem->serial, 0);
|
serial_set_ri(modem->serial, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
modem_enter_connected_state(modem_t *modem)
|
modem_enter_connected_state(modem_t *modem)
|
||||||
@@ -640,9 +642,12 @@ modem_enter_connected_state(modem_t *modem)
|
|||||||
plat_netsocket_close(modem->serversocket);
|
plat_netsocket_close(modem->serversocket);
|
||||||
modem->serversocket = -1;
|
modem->serversocket = -1;
|
||||||
memset(&modem->telClient, 0, sizeof(modem->telClient));
|
memset(&modem->telClient, 0, sizeof(modem->telClient));
|
||||||
|
|
||||||
|
if (modem->serial != NULL) {
|
||||||
serial_set_dcd(modem->serial, 1);
|
serial_set_dcd(modem->serial, 1);
|
||||||
serial_set_ri(modem->serial, 0);
|
serial_set_ri(modem->serial, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
modem_reset(modem_t *modem)
|
modem_reset(modem_t *modem)
|
||||||
@@ -1391,6 +1396,7 @@ modem_cmdpause_timer_callback(void *priv)
|
|||||||
} else {
|
} else {
|
||||||
modem->ringing = true;
|
modem->ringing = true;
|
||||||
modem_send_res(modem, ResRING);
|
modem_send_res(modem, ResRING);
|
||||||
|
if (modem->serial != NULL)
|
||||||
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
|
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
|
||||||
modem->ringtimer = 3000;
|
modem->ringtimer = 3000;
|
||||||
modem->reg[MREG_RING_COUNT] = 0;
|
modem->reg[MREG_RING_COUNT] = 0;
|
||||||
@@ -1405,6 +1411,7 @@ modem_cmdpause_timer_callback(void *priv)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
modem_send_res(modem, ResRING);
|
modem_send_res(modem, ResRING);
|
||||||
|
if (modem->serial != NULL)
|
||||||
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
|
serial_set_ri(modem->serial, !serial_get_ri(modem->serial));
|
||||||
|
|
||||||
modem->ringtimer = 3000;
|
modem->ringtimer = 3000;
|
||||||
|
|||||||
Reference in New Issue
Block a user