From bad77fe10770bad25af1a0ff3270ce01a6ac7c5d Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 5 Jun 2014 03:57:44 +0000 Subject: [PATCH] more compact varicode option working git-svn-id: https://svn.code.sf.net/p/freetel/code@1636 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/fdmdv2_main.cpp | 29 +++++++++++++++++++---------- fdmdv2/src/varicode.c | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index b7c11979..29e2e007 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -889,17 +889,24 @@ void MainFrame::OnTimer(wxTimerEvent &evt) // send Callsign ---------------------------------------------------- - if (fifo_used(g_txDataInFifo) == 0) { - char callsign[MAX_CALLSIGN]; - strncpy(callsign, (const char*) wxGetApp().m_callSign.mb_str(wxConvUTF8), MAX_CALLSIGN-1); - char callsigncr[MAX_CALLSIGN+1]; - strcpy(callsigncr, callsign); - callsigncr[strlen(callsign)] = 13; + char callsign[MAX_CALLSIGN]; + strncpy(callsign, (const char*) wxGetApp().m_callSign.mb_str(wxConvUTF8), MAX_CALLSIGN-1); + char callsigncr[MAX_CALLSIGN+1]; + strcpy(callsigncr, callsign); + callsigncr[strlen(callsign)] = 13; + + // buffer 1 txt message to senure tx data fifo doesn't "run dry" + + if ((unsigned)fifo_used(g_txDataInFifo) < strlen(callsigncr)) { // varicode encode and write to tx data fifo short varicode[MAX_CALLSIGN*VARICODE_MAX_BITS]; int nout = varicode_encode(varicode, callsigncr, MAX_CALLSIGN*VARICODE_MAX_BITS, strlen(callsign)+1, wxGetApp().m_textEncoding); + //printf("\ntx varicode nout = %d: ", nout); + //for(int i=0; iSetLabel(bits_string); - sprintf(errors, "Errs: %d", g_total_bit_errors); wxString errors_string(errors); m_textErrors->SetLabel(errors_string); + sprintf(bits, "Bits: %d", (int)g_total_bits); wxString bits_string(bits); m_textBits->SetLabel(bits_string); + sprintf(errors, "Errs: %d", (int)g_total_bit_errors); wxString errors_string(errors); m_textErrors->SetLabel(errors_string); float b = (float)g_total_bit_errors/(1E-6+g_total_bits); sprintf(ber, "BER: %4.3f", b); wxString ber_string(ber); m_textBER->SetLabel(ber_string); @@ -1908,7 +1915,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) // Init text msg decoding varicode_decode_init(&g_varicode_dec_states, wxGetApp().m_textEncoding); - printf("m_textEncoding = %d\n", wxGetApp().m_textEncoding); + //printf("m_textEncoding = %d\n", wxGetApp().m_textEncoding); //printf("g_stats.snr: %f\n", g_stats.snr_est); // attempt to start PTT ...... @@ -3265,8 +3272,10 @@ void per_frame_tx_processing( if (fifo_read(g_txDataInFifo, &abit, 1) == 0) bits[data_flag_index] = abit; - else + else { bits[data_flag_index] = 0; + //printf("tx fifle empty - sending a 0!"); + } /* add FEC ---------------------------------------*/ diff --git a/fdmdv2/src/varicode.c b/fdmdv2/src/varicode.c index 6e0dfa4c..540680be 100644 --- a/fdmdv2/src/varicode.c +++ b/fdmdv2/src/varicode.c @@ -317,7 +317,7 @@ int varicode_decode2(struct VARICODE_DEC *dec_states, char ascii_out[], short va n_out = 0; //printf("varicode_decode2: n_in: %d varicode_in[0] %d dec_states->n_in: %d\n", n_in, varicode_in[0], dec_states->n_in); - + //printf("%d ", varicode_in[0]); while(n_in && (n_out < max_out)) { // keep two bit buffer so we can process two at a time @@ -334,7 +334,7 @@ int varicode_decode2(struct VARICODE_DEC *dec_states, char ascii_out[], short va dec_states->n_in = 0; if (output) { - printf(" output: %d single_ascii: 0x%x %c\n", output, (int)single_ascii, single_ascii); + //printf(" output: %d single_ascii: 0x%x %c\n", output, (int)single_ascii, single_ascii); *ascii_out++ = single_ascii; n_out++; } @@ -357,7 +357,7 @@ int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short var void test_varicode(int code_num) { char *ascii_in; short *varicode; - int i, n_varicode_bits_out, n_ascii_chars_out, length, half; + int i, n_varicode_bits_out, n_ascii_chars_out, length, half, n_out, j, len; char *ascii_out; struct VARICODE_DEC dec_states; @@ -438,6 +438,37 @@ void test_varicode(int code_num) { assert(n_ascii_chars_out == 0); } + // 3. Test receiving one bit at a time ----------------------------------------------------- + + sprintf(ascii_in, "s=vk5dgr qth=adelaide"); + len = strlen(ascii_in); + ascii_in[len] = 13; + ascii_in[len+1] = 0; + + assert(strlen(ascii_in) < length); + if (code_num == 2) + for(i=0; i