Restore DZ modem control state to default on device detach. Properly clear modem bits when modem control enabled. Better display of modem control status.
This commit is contained in:
parent
2c941c86d2
commit
93c9f35948
4 changed files with 56 additions and 23 deletions
|
@ -241,6 +241,7 @@ TMXR dz_desc = { DZ_MUXES * DZ_LINES, 0, 0, NULL }; /* mux descriptor */
|
|||
#define DBG_INT 0x0002 /* display transfer requests */
|
||||
#define DBG_XMT TMXR_DBG_XMT /* display Transmitted Data */
|
||||
#define DBG_RCV TMXR_DBG_RCV /* display Received Data */
|
||||
#define DBG_MDM TMXR_DBG_MDM /* display Modem Signals */
|
||||
#define DBG_TRC TMXR_DBG_TRC /* display trace routine calls */
|
||||
#define DBG_ASY TMXR_DBG_ASY /* display Asynchronous Activities */
|
||||
|
||||
|
@ -249,6 +250,7 @@ DEBTAB dz_debug[] = {
|
|||
{"INT", DBG_INT},
|
||||
{"XMT", DBG_XMT},
|
||||
{"RCV", DBG_RCV},
|
||||
{"MDM", DBG_MDM},
|
||||
{"TRC", DBG_TRC},
|
||||
{"ASY", DBG_ASY},
|
||||
{0}
|
||||
|
@ -641,6 +643,7 @@ void dz_set_rxint (int32 dz)
|
|||
{
|
||||
dz_rxi = dz_rxi | (1 << dz); /* set mux rcv int */
|
||||
SET_INT (DZRX); /* set master intr */
|
||||
sim_debug(DBG_INT, &dz_dev, "dz_set_rxint(dz=%d)\n", dz);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -671,6 +674,7 @@ void dz_set_txint (int32 dz)
|
|||
{
|
||||
dz_txi = dz_txi | (1 << dz); /* set mux xmt int */
|
||||
SET_INT (DZTX); /* set master intr */
|
||||
sim_debug(DBG_INT, &dz_dev, "dz_set_txint(dz=%d)\n", dz);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -778,8 +782,11 @@ return SCPE_OK;
|
|||
|
||||
t_stat dz_detach (UNIT *uptr)
|
||||
{
|
||||
t_stat r = tmxr_detach (&dz_desc, uptr);
|
||||
|
||||
dz_mctl = dz_auto = 0; /* modem ctl off */
|
||||
return tmxr_detach (&dz_desc, uptr);
|
||||
tmxr_clear_modem_control_passthru (&dz_desc);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* SET LINES processor */
|
||||
|
|
2
scp.c
2
scp.c
|
@ -6641,7 +6641,7 @@ if (sim_deb && (dptr->dctrl & dbits)) {
|
|||
#endif /* NO_vsnprintf */
|
||||
va_end (arglist);
|
||||
|
||||
/* If it didn't fit into the buffer, then grow it and try again */
|
||||
/* If the formatted result didn't fit into the buffer, then grow the buffer and try again */
|
||||
|
||||
if ((len < 0) || (len >= bufsize-1)) {
|
||||
if (buf != stackbuf)
|
||||
|
|
59
sim_tmxr.c
59
sim_tmxr.c
|
@ -369,7 +369,15 @@
|
|||
#define TNS_CRPAD 005 /* CR padding */
|
||||
#define TNS_DO 006 /* DO request pending rejection */
|
||||
|
||||
|
||||
static BITFIELD tmxr_modem_bits[] = {
|
||||
BIT(DTR), /* Data Terminal Ready */
|
||||
BIT(RTS), /* Request To Send */
|
||||
BIT(DCD), /* Data Carrier Detect */
|
||||
BIT(RNG), /* Ring Indicator */
|
||||
BIT(CTS), /* Clear To Send */
|
||||
BIT(DSR), /* Data Set Ready */
|
||||
ENDBITS
|
||||
};
|
||||
|
||||
/* Local routines */
|
||||
|
||||
|
@ -1055,7 +1063,7 @@ return SCPE_OK;
|
|||
*/
|
||||
t_stat tmxr_set_get_modem_bits (TMLN *lp, int32 bits_to_set, int32 bits_to_clear, int32 *incoming_bits)
|
||||
{
|
||||
int32 changed_modem_bits;
|
||||
int32 before_modem_bits, incoming_state;
|
||||
|
||||
tmxr_debug_trace_line (lp, "tmxr_set_get_modem_bits()");
|
||||
|
||||
|
@ -1063,20 +1071,24 @@ if ((bits_to_set & ~(TMXR_MDM_OUTGOING)) || /* Assure only settable bits
|
|||
(bits_to_clear & ~(TMXR_MDM_OUTGOING)) ||
|
||||
(bits_to_set & bits_to_clear)) /* and can't set and clear the same bits */
|
||||
return SCPE_ARG;
|
||||
changed_modem_bits = lp->modembits;
|
||||
before_modem_bits = lp->modembits;
|
||||
lp->modembits |= bits_to_set;
|
||||
lp->modembits &= bits_to_clear;
|
||||
changed_modem_bits ^= lp->modembits;
|
||||
if (incoming_bits) {
|
||||
if ((lp->sock) || (lp->serport)) {
|
||||
if (lp->modembits & TMXR_MDM_DTR)
|
||||
*incoming_bits = TMXR_MDM_DCD | TMXR_MDM_CTS | TMXR_MDM_DSR;
|
||||
else
|
||||
*incoming_bits = TMXR_MDM_RNG | TMXR_MDM_DCD | TMXR_MDM_CTS | TMXR_MDM_DSR;
|
||||
}
|
||||
lp->modembits &= ~(bits_to_clear & TMXR_MDM_INCOMING);
|
||||
if ((lp->sock) || (lp->serport)) {
|
||||
if (lp->modembits & TMXR_MDM_DTR)
|
||||
incoming_state = TMXR_MDM_DCD | TMXR_MDM_CTS | TMXR_MDM_DSR;
|
||||
else
|
||||
*incoming_bits = (lp->mp && lp->mp->master) ? (TMXR_MDM_CTS | TMXR_MDM_DSR) : 0;
|
||||
incoming_state = TMXR_MDM_RNG | TMXR_MDM_DCD | TMXR_MDM_CTS | TMXR_MDM_DSR;
|
||||
}
|
||||
else
|
||||
incoming_state = (lp->mp && lp->mp->master) ? (TMXR_MDM_CTS | TMXR_MDM_DSR) : 0;
|
||||
lp->modembits |= incoming_state;
|
||||
if (sim_deb && lp->mp && lp->mp->dptr) {
|
||||
sim_debug_bits (TMXR_DBG_MDM, lp->mp->dptr, tmxr_modem_bits, before_modem_bits, lp->modembits, FALSE);
|
||||
sim_debug (TMXR_DBG_MDM, lp->mp->dptr, " - Line %d\n", (int)(lp-lp->mp->ldsc));
|
||||
}
|
||||
if (incoming_bits)
|
||||
*incoming_bits = incoming_state;
|
||||
if (lp->mp && lp->mp->modem_control) { /* This API ONLY works on modem_control enabled multiplexers */
|
||||
if (bits_to_set | bits_to_clear) { /* Anything to do? */
|
||||
if (lp->serport)
|
||||
|
@ -2620,15 +2632,19 @@ else {
|
|||
fprintf(st, ", ");
|
||||
}
|
||||
tmxr_show_summ(st, NULL, 0, mp);
|
||||
fprintf(st, ", sessions=%d\n", mp->sessions);
|
||||
fprintf(st, ", sessions=%d", mp->sessions);
|
||||
if (mp->modem_control)
|
||||
fprintf(st, ", ModemControl=enabled");
|
||||
if (mp->notelnet)
|
||||
fprintf(st, ", Telnet=disabled");
|
||||
fprintf(st, "\n");
|
||||
for (j = 0; j < mp->lines; j++) {
|
||||
lp = mp->ldsc + j;
|
||||
if (mp->lines > 1) {
|
||||
fprintf (st, "Line: %d", j);
|
||||
if (lp->uptr && (lp->uptr != lp->mp->uptr))
|
||||
fprintf (st, " - Unit: %s\n", sim_uname (lp->uptr));
|
||||
else
|
||||
fprintf (st, "\n");
|
||||
fprintf (st, " - Unit: %s", sim_uname (lp->uptr));
|
||||
fprintf (st, "\n");
|
||||
}
|
||||
if ((!lp->sock) && (!lp->connecting) && (!lp->serport) && (!lp->master))
|
||||
continue;
|
||||
|
@ -2977,6 +2993,15 @@ if (lp->cnms) {
|
|||
else
|
||||
fprintf (st, " Line disconnected\n");
|
||||
|
||||
if (lp->mp->modem_control) {
|
||||
fprintf (st, " Modem Bits: %s%s%s%s%s%s\n", (lp->modembits & TMXR_MDM_DTR) ? "DTR " : "",
|
||||
(lp->modembits & TMXR_MDM_RTS) ? "RTS " : "",
|
||||
(lp->modembits & TMXR_MDM_DCD) ? "DCD " : "",
|
||||
(lp->modembits & TMXR_MDM_RNG) ? "RNG " : "",
|
||||
(lp->modembits & TMXR_MDM_CTS) ? "CTS " : "",
|
||||
(lp->modembits & TMXR_MDM_DSR) ? "DSR " : "");
|
||||
}
|
||||
|
||||
if ((lp->serport == 0) && (lp->sock))
|
||||
fprintf (st, " %s\n", (lp->notelnet) ? "Telnet disabled (RAW data)" : "Telnet protocol");
|
||||
if (lp->txlog)
|
||||
|
|
|
@ -66,10 +66,11 @@ typedef int SERHANDLE;
|
|||
#define TMXR_DTR_DROP_TIME 500 /* milliseconds to drop DTR for 'pseudo' modem control */
|
||||
#define TMXR_CONNECT_POLL_INTERVAL 1000 /* milliseconds between connection polls */
|
||||
|
||||
#define TMXR_DBG_XMT 0x10000 /* Debug Transmit Data */
|
||||
#define TMXR_DBG_RCV 0x20000 /* Debug Received Data */
|
||||
#define TMXR_DBG_ASY 0x40000 /* Debug Asynchronous Activities */
|
||||
#define TMXR_DBG_TRC 0x80000 /* Debug trace routine calls */
|
||||
#define TMXR_DBG_XMT 0x010000 /* Debug Transmit Data */
|
||||
#define TMXR_DBG_RCV 0x020000 /* Debug Received Data */
|
||||
#define TMXR_DBG_MDM 0x040000 /* Debug Modem Signals */
|
||||
#define TMXR_DBG_ASY 0x080000 /* Debug Asynchronous Activities */
|
||||
#define TMXR_DBG_TRC 0x100000 /* Debug trace routine calls */
|
||||
|
||||
/* Modem Control Bits */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue