From f42db0c6eac1607165a5ca5c1b7b0cf1f72faaad Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 12 Jul 2018 10:12:49 -0700 Subject: [PATCH] TMXR: Add tmxr_txdone_ln() to provide precise completion speed timing Multi line TMXR devices can simplify state maintenance and better leverage output scheduling when they use this API --- doc/simh.doc | Bin 278528 -> 283648 bytes sim_tmxr.c | 28 ++++++++++++++++++++++++---- sim_tmxr.h | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index 83ad839338970993cfbc46a22c1792c107dc183f..3de349664ee913acfd8d2943c0f3b9d6bec93f15 100644 GIT binary patch delta 19120 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 B$fy7S delta 14887 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 bsl2XvZJf?bN0!~;?v~Zn<(+YpZI1rGReqUr diff --git a/sim_tmxr.c b/sim_tmxr.c index 2377de8c..5475c133 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -721,6 +721,7 @@ else { written = sim_write_sock (lp->sock, &(lp->txb[i]), length); if (written == SOCKET_ERROR) { /* did an error occur? */ + lp->txdone = TRUE; if (lp->datagram) return written; /* ignore errors on datagram sockets */ else @@ -736,8 +737,11 @@ else { } } } -if ((written > 0) && (lp->txbps) && (sim_is_running)) - lp->txnexttime = floor (sim_gtime () + ((written * lp->txdeltausecs * sim_timer_inst_per_sec ()) / USECS_PER_SECOND)); +if (written > 0) { + lp->txdone = FALSE; + if ((lp->txbps) && (sim_is_running)) + lp->txnexttime = floor (sim_gtime () + ((written * lp->txdeltausecs * sim_timer_inst_per_sec ()) / USECS_PER_SECOND)); + } return written; } @@ -2372,6 +2376,22 @@ t_bool tmxr_tpbusyln (const TMLN *lp) return (0 != (lp->txppsize - lp->txppoffset)); } +/* Return transmitted data complete status */ +/* 0 – not done, 1 – just now done, -1 – previously done. */ + +int32 tmxr_txdone_ln (TMLN *lp) +{ +if (lp->txdone) + return -1; /* previously done */ +if ((lp->conn == 0) || + (lp->txbps == 0) || + (lp->txnexttime <= sim_gtime ())) { + lp->txdone = TRUE; /* done now */ + return 1; + } +return 0; /* not done */ +} + static void _mux_detach_line (TMLN *lp, t_bool close_listener, t_bool close_connecting) { if (close_listener && lp->master) { @@ -5370,9 +5390,9 @@ if ((dptr) && (dbits & dptr->dctrl)) { } if ((lp->rxnexttime != 0.0) || (lp->txnexttime != 0.0)) { if (lp->rxnexttime != 0.0) - sim_debug (dbits, dptr, " rxnexttime=%.0f", lp->rxnexttime); + sim_debug (dbits, dptr, " rxnexttime=%.0f (%.0f usecs)", lp->rxnexttime, ((lp->rxnexttime - sim_gtime ()) / sim_timer_inst_per_sec ()) * 1000000.0); if (lp->txnexttime != 0.0) - sim_debug (dbits, dptr, " txnexttime=%.0f", lp->txnexttime); + sim_debug (dbits, dptr, " txnexttime=%.0f (%.0f usecs)", lp->txnexttime, ((lp->txnexttime - sim_gtime ()) / sim_timer_inst_per_sec ()) * 1000000.0); sim_debug (dbits, dptr, "\n"); } } diff --git a/sim_tmxr.h b/sim_tmxr.h index f80dd6e0..f9bf277a 100644 --- a/sim_tmxr.h +++ b/sim_tmxr.h @@ -176,6 +176,7 @@ struct tmln { uint32 txbps; /* xmt bps speed (0 - unlimited) */ uint32 txdeltausecs; /* xmt inter character min time (usecs) */ double txnexttime; /* min time for next transmit character */ + t_bool txdone; /* sent data complete indicator - private */ uint8 *txpb; /* xmt packet buffer */ uint32 txpbsize; /* xmt packet buffer size */ uint32 txppsize; /* xmt packet packet size */ @@ -277,6 +278,7 @@ t_stat tmxr_dscln (UNIT *uptr, int32 val, CONST char *cptr, void *desc); int32 tmxr_rqln (const TMLN *lp); int32 tmxr_tqln (const TMLN *lp); int32 tmxr_tpqln (const TMLN *lp); +int32 tmxr_txdone_ln (TMLN *lp); t_bool tmxr_tpbusyln (const TMLN *lp); t_stat tmxr_set_lnorder (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat tmxr_show_lnorder (FILE *st, UNIT *uptr, int32 val, CONST void *desc);