From: drowe67 Date: Tue, 7 Feb 2017 04:36:55 +0000 (+0000) Subject: fixed occasional seg fault bug when 800XA starts due to test frames not being support... X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=eb70f25101d07f78efa2a5d38b01adfbef0641f8;p=freetel-svn-tracking.git fixed occasional seg fault bug when 800XA starts due to test frames not being supported/inited git-svn-id: https://svn.code.sf.net/p/freetel/code@3023 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/freedv-dev/src/fdmdv2_main.cpp b/freedv-dev/src/fdmdv2_main.cpp index 49fddfe2..c012128d 100644 --- a/freedv-dev/src/fdmdv2_main.cpp +++ b/freedv-dev/src/fdmdv2_main.cpp @@ -1236,9 +1236,11 @@ void MainFrame::OnTimer(wxTimerEvent &evt) g_rxUserdata->micInEQEnable = wxGetApp().m_MicInEQEnable; g_rxUserdata->spkOutEQEnable = wxGetApp().m_SpkOutEQEnable; - // Run time update of FreeDV 700 tx clipper if (g_mode != -1) { + + // Run time update of FreeDV 700 tx clipper + freedv_set_clip(g_pfreedv, (int)wxGetApp().m_FreeDV700txClip); // Test Frame Bit Error Updates ------------------------------------ @@ -1266,60 +1268,62 @@ void MainFrame::OnTimer(wxTimerEvent &evt) float b = (float)freedv_get_total_bit_errors(g_pfreedv)/(1E-6+freedv_get_total_bits(g_pfreedv)); sprintf(ber, "BER: %4.3f", b); wxString ber_string(ber); m_textBER->SetLabel(ber_string); - // update error plots + // update error pattern plots if supported int sz_error_pattern = freedv_get_sz_error_pattern(g_pfreedv); - short error_pattern[sz_error_pattern]; + if (sz_error_pattern) { + short error_pattern[sz_error_pattern]; - if (fifo_read(g_error_pattern_fifo, error_pattern, sz_error_pattern) == 0) { - int i,b; + if (fifo_read(g_error_pattern_fifo, error_pattern, sz_error_pattern) == 0) { + int i,b; - /* both modes map IQ to alternate bits, but one same carrier */ + /* both modes map IQ to alternate bits, but one same carrier */ - if (freedv_get_mode(g_pfreedv) == FREEDV_MODE_1600) { - /* FreeDV 1600 mapping from error pattern to bit on each carrier */ + if (freedv_get_mode(g_pfreedv) == FREEDV_MODE_1600) { + /* FreeDV 1600 mapping from error pattern to bit on each carrier */ - for(b=0; badd_new_sample(b, b + 0.8*error_pattern[i]); - g_error_hist[b] += error_pattern[i]; + for(b=0; badd_new_sample(b, b + 0.8*error_pattern[i]); + g_error_hist[b] += error_pattern[i]; + } + //if (b%2) + // printf("g_error_hist[%d]: %d\n", b/2, g_error_hist[b/2]); } - //if (b%2) - // printf("g_error_hist[%d]: %d\n", b/2, g_error_hist[b/2]); - } - int max_hist = 0; - for(b=0; b max_hist) - max_hist = g_error_hist[b]; + int max_hist = 0; + for(b=0; b max_hist) + max_hist = g_error_hist[b]; - m_panelTestFrameErrorsHist->add_new_short_samples(0, g_error_hist, 2*FDMDV_NC_MAX, max_hist); - } - - if ((freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) || (freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { - int c; - - /* FreeDV 700 mapping from error pattern to bit on each - carrier. Note we don't have access to carriers before - diversity re-combination, so this won't give us the full - picture, we have to assume Nc/2 carriers. */ - - for(i=0; iadd_new_sample(c, c + 0.8*error_pattern[i]); - g_error_hist[c] += error_pattern[i]; - //printf("i: %d c: %d\n", i, c); + m_panelTestFrameErrorsHist->add_new_short_samples(0, g_error_hist, 2*FDMDV_NC_MAX, max_hist); } + + if ((freedv_get_mode(g_pfreedv) == FREEDV_MODE_700B) || (freedv_get_mode(g_pfreedv) == FREEDV_MODE_700C)) { + int c; + + /* FreeDV 700 mapping from error pattern to bit on each + carrier. Note we don't have access to carriers before + diversity re-combination, so this won't give us the full + picture, we have to assume Nc/2 carriers. */ + + for(i=0; iadd_new_sample(c, c + 0.8*error_pattern[i]); + g_error_hist[c] += error_pattern[i]; + //printf("i: %d c: %d\n", i, c); + } - int max_hist = 0; - for(b=0; b max_hist) - max_hist = g_error_hist[b]; - m_panelTestFrameErrorsHist->add_new_short_samples(0, g_error_hist, 2*FDMDV_NC_MAX, max_hist); - } + int max_hist = 0; + for(b=0; b max_hist) + max_hist = g_error_hist[b]; + m_panelTestFrameErrorsHist->add_new_short_samples(0, g_error_hist, 2*FDMDV_NC_MAX, max_hist); + } - m_panelTestFrameErrors->Refresh(); - m_panelTestFrameErrorsHist->Refresh(); + m_panelTestFrameErrors->Refresh(); + m_panelTestFrameErrorsHist->Refresh(); + } } } } @@ -3845,6 +3849,14 @@ void fdmdv2_clickTune(float freq) { // we need to shift the input signal centred on 1500Hz down to // 1200Hz, an offset of -300Hz. + // Bit of an "indent" as we are often trying to get it back + // exactly in the centre + + if (fabs(FDMDV_FCENTRE - freq) < 10.0) { + freq = FDMDV_FCENTRE; + fprintf(stderr, "indent!\n"); + } + if (g_split) { g_RxFreqOffsetHz = FDMDV_FCENTRE - freq; }