From ffcdeb18aa35a15e170c29571099f18ff6ca1c19 Mon Sep 17 00:00:00 2001 From: David Freese Date: Mon, 20 May 2013 20:11:09 -0500 Subject: [PATCH] PSKMAIL * write s2n / rsid encapsulated within required mutex to correct misalignment of ARQ strings. --- src/dialogs/fl_digi.cxx | 9 +++------ src/mfsk/mfsk.cxx | 2 +- src/misc/arq_io.cxx | 38 +++++++++++++++++++++----------------- src/psk/psk.cxx | 18 ------------------ src/rsid/rsid.cxx | 2 +- src/trx/modem.cxx | 2 +- 6 files changed, 27 insertions(+), 44 deletions(-) diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx index a99da152..8afee674 100644 --- a/src/dialogs/fl_digi.cxx +++ b/src/dialogs/fl_digi.cxx @@ -6215,12 +6215,6 @@ static void put_rx_char_flmain(unsigned int data, int style) { ENSURE_THREAD(FLMAIN_TID); - // save raw data if autoextracting - if (progdefaults.autoextract == true) - rx_extract_add(data); - - WriteARQ(data); - // possible destinations for the data enum dest_type { DEST_RECV, // ordinary received text @@ -6276,6 +6270,9 @@ void put_rx_char(unsigned int data, int style) benchmark.buffer += (char)data; } #else + if (progdefaults.autoextract == true) + rx_extract_add(data); + WriteARQ(data); REQ(put_rx_char_flmain, data, style); #endif } diff --git a/src/mfsk/mfsk.cxx b/src/mfsk/mfsk.cxx index ec26b763..8c30d3d2 100644 --- a/src/mfsk/mfsk.cxx +++ b/src/mfsk/mfsk.cxx @@ -442,7 +442,7 @@ void mfsk::recvchar(int c) s2n_sum += s2n_metric; s2n_sum2 += (s2n_metric * s2n_metric); s2n_ncount++; - if (c == EOT && (mailserver || mailclient)) + if (c == EOT) s2nreport(); } } diff --git a/src/misc/arq_io.cxx b/src/misc/arq_io.cxx index 1b6e8fa2..c0700870 100644 --- a/src/misc/arq_io.cxx +++ b/src/misc/arq_io.cxx @@ -707,8 +707,7 @@ bool Socket_arqRx() pthread_mutex_lock (&arq_rx_mutex); arqtext.assign(txstring); - if (mailserver || mailclient) - parse_arqtext(arqtext); + parse_arqtext(arqtext); txstring.clear(); LOG_VERBOSE("arqtext\n%s\n", arqtext.c_str()); @@ -754,6 +753,14 @@ void WriteARQ(unsigned char data) return; } +void WriteARQ(const char *data) +{ + pthread_mutex_lock (&tosend_mutex); + tosend.append(data); + pthread_mutex_unlock (&tosend_mutex); + return; +} + static void *arq_loop(void *args) { SET_THREAD_ID(ARQ_TID); @@ -880,14 +887,13 @@ void AbortARQ() { void pskmail_notify_rsid(trx_mode mode) { char buf[64]; - int n = snprintf(buf, sizeof(buf), "%c\n", 0x12, mode_info[mode].name); + int n = snprintf(buf, sizeof(buf), + "\x12\n", + mode_info[mode].name); if (n > 0 && n < (int)sizeof(buf)) { - WriteARQsocket((unsigned char*)buf, n); -#if !defined(__WOE32__) && !defined(__APPLE__) - for (int ii=0; ii < n; ii++) - WriteARQSysV((unsigned char)buf[ii]); -#endif - ReceiveText->addstr(buf, FTextBase::CTRL); + WriteARQ((const char *)buf); + REQ(&FTextBase::addstr, ReceiveText, buf, FTextBase::CTRL); + LOG_VERBOSE("%s", buf); } } @@ -897,15 +903,13 @@ void pskmail_notify_rsid(trx_mode mode) void pskmail_notify_s2n(double s2n_ncount, double s2n_avg, double s2n_stddev) { char buf[64]; - int n = snprintf(buf, sizeof(buf), "%c", - 0x12, s2n_ncount, s2n_avg, s2n_stddev); + int n = snprintf(buf, sizeof(buf), + "\x12\n", + s2n_ncount, s2n_avg, s2n_stddev); if (n > 0 && n < (int)sizeof(buf)) { - WriteARQsocket((unsigned char*)buf, n); -#if !defined(__WOE32__) && !defined(__APPLE__) - for (int ii=0; ii < n; ii++) - WriteARQSysV((unsigned char)buf[ii]); -#endif - ReceiveText->addstr(buf, FTextBase::CTRL); + WriteARQ((const char *)buf); + REQ(&FTextBase::addstr, ReceiveText, buf, FTextBase::CTRL); + LOG_VERBOSE("%s", buf); } } diff --git a/src/psk/psk.cxx b/src/psk/psk.cxx index b05c3f1c..76d9d172 100644 --- a/src/psk/psk.cxx +++ b/src/psk/psk.cxx @@ -731,12 +731,6 @@ void psk::rx_bit(int bit) s2n_sum += s2n_metric; s2n_sum2 += (s2n_metric * s2n_metric); s2n_ncount ++; -/* if (c == SOH && noSOHyet) { - s2n_sum = s2n_sum2 = 0.0; - s2n_ncount = 1.0; - noSOHyet = false; - } -*/ if (c == EOT) s2nreport(); } @@ -753,12 +747,6 @@ void psk::rx_bit(int bit) s2n_sum += s2n_metric; s2n_sum2 += (s2n_metric * s2n_metric); s2n_ncount++; -/* if (c == SOH && noSOHyet) { - s2n_sum = s2n_sum2 = 0.0; - s2n_ncount = 1.0; - noSOHyet = false; - } -*/ if (c == EOT) s2nreport(); } @@ -787,12 +775,6 @@ void psk::rx_bit2(int bit) s2n_sum += s2n_metric; s2n_sum2 += (s2n_metric * s2n_metric); s2n_ncount++; -/* if (c == SOH && noSOHyet) { - s2n_sum = s2n_sum2 = 0.0; - s2n_ncount = 1.0; - noSOHyet = false; - } -*/ if (c == EOT) s2nreport(); } diff --git a/src/rsid/rsid.cxx b/src/rsid/rsid.cxx index c19ac962..18d13c90 100644 --- a/src/rsid/rsid.cxx +++ b/src/rsid/rsid.cxx @@ -370,7 +370,7 @@ void cRsId::apply(int iSymbol, int iBin) LOG_INFO("RSID: %s @ %0.0f Hz", rsid_ids[n].name, freq); if (mailclient || mailserver) - REQ(pskmail_notify_rsid, mbin); + pskmail_notify_rsid(mbin); if(progdefaults.rsid_auto_disable) REQ(toggleRSID); diff --git a/src/trx/modem.cxx b/src/trx/modem.cxx index dfa32bf0..0c358b7d 100644 --- a/src/trx/modem.cxx +++ b/src/trx/modem.cxx @@ -408,7 +408,7 @@ void modem::s2nreport(void) double s2n_avg = s2n_sum / s2n_ncount; double s2n_stddev = sqrt((s2n_sum2 / s2n_ncount) - (s2n_avg * s2n_avg)); - REQ(pskmail_notify_s2n, s2n_ncount, s2n_avg, s2n_stddev); + pskmail_notify_s2n(s2n_ncount, s2n_avg, s2n_stddev); } void modem::ModulateXmtr(double *buffer, int len)