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:
parent
b2ff00ab87
commit
af173b7b6e
2 changed files with 12 additions and 3 deletions
14
sim_tmxr.c
14
sim_tmxr.c
|
@ -1000,6 +1000,7 @@ SOCKET newsock;
|
||||||
TMLN *lp;
|
TMLN *lp;
|
||||||
int32 *op;
|
int32 *op;
|
||||||
int32 i, j;
|
int32 i, j;
|
||||||
|
int32 ringing = -1;
|
||||||
char *address;
|
char *address;
|
||||||
char msg[512];
|
char msg[512];
|
||||||
uint32 poll_time = sim_os_msec ();
|
uint32 poll_time = sim_os_msec ();
|
||||||
|
@ -1094,11 +1095,12 @@ if (mp->master) {
|
||||||
(lp->ser_connect_pending == FALSE) &&
|
(lp->ser_connect_pending == FALSE) &&
|
||||||
((lp->modembits & TMXR_MDM_DTR) == 0)) {
|
((lp->modembits & TMXR_MDM_DTR) == 0)) {
|
||||||
++ringable_count;
|
++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");
|
tmxr_debug_connect_line (lp, "tmxr_poll_conn() - Ringing line");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ringable_count > 0) {
|
if (ringable_count > 0) {
|
||||||
|
ringing = -2;
|
||||||
if (mp->ring_start_time == 0) {
|
if (mp->ring_start_time == 0) {
|
||||||
mp->ring_start_time = poll_time;
|
mp->ring_start_time = poll_time;
|
||||||
mp->ring_sock = newsock;
|
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.
|
/* Reset a line.
|
||||||
|
@ -1546,7 +1548,7 @@ if ((bits_to_set & ~(TMXR_MDM_OUTGOING)) || /* Assure only settable bits
|
||||||
return SCPE_ARG;
|
return SCPE_ARG;
|
||||||
before_modem_bits = lp->modembits;
|
before_modem_bits = lp->modembits;
|
||||||
lp->modembits |= bits_to_set;
|
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->sock) || (lp->serport) || (lp->loopback)) {
|
||||||
if (lp->modembits & TMXR_MDM_DTR) {
|
if (lp->modembits & TMXR_MDM_DTR) {
|
||||||
incoming_state = TMXR_MDM_DSR;
|
incoming_state = TMXR_MDM_DSR;
|
||||||
|
@ -2500,6 +2502,12 @@ while (1) {
|
||||||
return -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)
|
t_stat tmxr_set_line_speed (TMLN *lp, CONST char *speed)
|
||||||
{
|
{
|
||||||
UNIT *uptr;
|
UNIT *uptr;
|
||||||
|
|
|
@ -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_bool tmxr_get_line_halfduplex (TMLN *lp);
|
||||||
t_stat tmxr_set_line_speed (TMLN *lp, CONST char *speed);
|
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_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_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_line_output_unit (TMXR *mp, int line, UNIT *uptr_poll);
|
||||||
t_stat tmxr_set_console_units (UNIT *rxuptr, UNIT *txuptr);
|
t_stat tmxr_set_console_units (UNIT *rxuptr, UNIT *txuptr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue