TMXR: Rework modem signaling support

- Fix ineffective setting of RNG modem bit when line with DTR isn't available
- Fix logic clearing modem signal bits
- Add API to set/clear modem control behavior fo a specific line.
- return -2 status from tmxr_poll_conn when RNG has been enabled
This commit is contained in:
Mark Pizzolato 2018-08-24 11:54:42 -07:00
parent b2ff00ab87
commit af173b7b6e
2 changed files with 12 additions and 3 deletions

View file

@ -1000,6 +1000,7 @@ SOCKET newsock;
TMLN *lp;
int32 *op;
int32 i, j;
int32 ringing = -1;
char *address;
char msg[512];
uint32 poll_time = sim_os_msec ();
@ -1094,11 +1095,12 @@ if (mp->master) {
(lp->ser_connect_pending == FALSE) &&
((lp->modembits & TMXR_MDM_DTR) == 0)) {
++ringable_count;
tmxr_set_get_modem_bits (lp, TMXR_MDM_RNG, 0, NULL);
lp->modembits |= TMXR_MDM_RNG;
tmxr_debug_connect_line (lp, "tmxr_poll_conn() - Ringing line");
}
}
if (ringable_count > 0) {
ringing = -2;
if (mp->ring_start_time == 0) {
mp->ring_start_time = poll_time;
mp->ring_sock = newsock;
@ -1285,7 +1287,7 @@ for (i = 0; i < mp->lines; i++) { /* check each line in se
}
return -1; /* no new connections made */
return ringing; /* no new connections made */
}
/* Reset a line.
@ -1546,7 +1548,7 @@ if ((bits_to_set & ~(TMXR_MDM_OUTGOING)) || /* Assure only settable bits
return SCPE_ARG;
before_modem_bits = lp->modembits;
lp->modembits |= bits_to_set;
lp->modembits &= ~(bits_to_clear | TMXR_MDM_INCOMING);
lp->modembits &= ~bits_to_clear;
if ((lp->sock) || (lp->serport) || (lp->loopback)) {
if (lp->modembits & TMXR_MDM_DTR) {
incoming_state = TMXR_MDM_DSR;
@ -2500,6 +2502,12 @@ while (1) {
return -1;
}
t_stat tmxr_set_line_modem_control (TMLN *lp, t_bool enab_disab)
{
lp->modem_control = enab_disab;
return SCPE_OK;
}
t_stat tmxr_set_line_speed (TMLN *lp, CONST char *speed)
{
UNIT *uptr;

View file

@ -260,6 +260,7 @@ t_stat tmxr_set_line_halfduplex (TMLN *lp, t_bool enable_loopback);
t_bool tmxr_get_line_halfduplex (TMLN *lp);
t_stat tmxr_set_line_speed (TMLN *lp, CONST char *speed);
t_stat tmxr_set_config_line (TMLN *lp, CONST char *config);
t_stat tmxr_set_line_modem_control (TMLN *lp, t_bool enabled);
t_stat tmxr_set_line_unit (TMXR *mp, int line, UNIT *uptr_poll);
t_stat tmxr_set_line_output_unit (TMXR *mp, int line, UNIT *uptr_poll);
t_stat tmxr_set_console_units (UNIT *rxuptr, UNIT *txuptr);