// 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; i<nout; i++)
+ // printf("%d ", varicode[i]);
+ //printf("\n");
fifo_write(g_txDataInFifo, varicode, nout);
//printf("Callsign sending: %s nout: %d\n", callsign, nout);
}
// update stats on main page
- sprintf(bits, "Bits: %d", g_total_bits); wxString bits_string(bits); m_textBits->SetLabel(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);
// 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 ......
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 ---------------------------------------*/
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
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++;
}
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;
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<strlen(ascii_in); i++)
+ ascii_in[i] = tolower(ascii_in[i]);
+
+ for(i=0; i<3; i++) {
+ n_varicode_bits_out = varicode_encode(varicode, ascii_in, VARICODE_MAX_BITS*length, strlen(ascii_in), code_num);
+ printf("n_varicode_bits_out: %d\n", n_varicode_bits_out);
+
+ n_ascii_chars_out = 0;
+ for(j=0; j<n_varicode_bits_out; j++) {
+ n_out = varicode_decode(&dec_states, &ascii_out[n_ascii_chars_out], &varicode[j], 1, 1);
+ if (n_out)
+ n_ascii_chars_out++;
+ }
+ ascii_out[n_ascii_chars_out] = 0;
+
+ printf(" ascii_out: %s\n", ascii_out);
+ if (strcmp(ascii_in, ascii_out) == 0)
+ printf(" Test 3 Pass\n");
+ else
+ printf(" Test 3 Fail\n");
+ }
+
free(ascii_in);
free(ascii_out);
free(varicode);