* write s2n / rsid encapsulated within required mutex to
    correct misalignment of ARQ strings.
pull/1/head
David Freese 2013-05-20 20:11:09 -05:00
rodzic b03bde83d4
commit ffcdeb18aa
6 zmienionych plików z 27 dodań i 44 usunięć

Wyświetl plik

@ -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
}

Wyświetl plik

@ -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();
}
}

Wyświetl plik

@ -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<Mode:%s>\n", 0x12, mode_info[mode].name);
int n = snprintf(buf, sizeof(buf),
"\x12<Mode:%s>\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<s2n: %1.0f, %1.1f, %1.1f>",
0x12, s2n_ncount, s2n_avg, s2n_stddev);
int n = snprintf(buf, sizeof(buf),
"\x12<s2n: %1.0f, %1.1f, %1.1f>\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);
}
}

Wyświetl plik

@ -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();
}

Wyświetl plik

@ -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);

Wyświetl plik

@ -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)