From edcdc19f6789fe6654114abf7c13e85bb212ffb0 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 26 Nov 2012 06:03:20 +0000 Subject: [PATCH] receive data now doing something sensible, but I think rxid window is too big git-svn-id: https://svn.code.sf.net/p/freetel/code@1073 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/fdmdv2_defines.h | 3 +- fdmdv2/src/fdmdv2_main.cpp | 99 +++++++++++++++++++++++++++++-------- fdmdv2/src/fdmdv2_main.h | 4 +- fdmdv2/src/topFrame.cpp | 51 +++++++++++++++---- 4 files changed, 124 insertions(+), 33 deletions(-) diff --git a/fdmdv2/src/fdmdv2_defines.h b/fdmdv2/src/fdmdv2_defines.h index 7492d19d..889201cb 100644 --- a/fdmdv2/src/fdmdv2_defines.h +++ b/fdmdv2/src/fdmdv2_defines.h @@ -71,7 +71,8 @@ // Data #define MAX_TXID 1024 -#define SILENCE_THRESHOLD 100 +#define SILENCE_THRESHOLD 300 // when Mic In beneath this level we drop vocie frame and send data +#define TXID_PERIOD 10 // period between sending data enum { diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 88d877d2..e2341096 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -52,6 +52,8 @@ float g_snr; // sending and receiving data struct FIFO *g_txDataInFifo; struct VARICODE_DEC g_varicode_dec_states; +unsigned char g_prev_packed_bits[BYTES_PER_CODEC_FRAME]; +struct FIFO *g_rxDataOutFifo; // tx/rx processing states int g_nRxIn = FDMDV_NOM_SAMPLES_PER_FRAME; @@ -308,6 +310,14 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) wxGetApp().m_codec2LPCPostFilterBeta = (float)pConfig->Read(wxT("/Filter/codec2LPCPostFilterBeta"), CODEC2_LPC_PF_BETA*100)/100.0; //printf("main(): m_codec2LPCPostFilterBeta: %f\n", wxGetApp().m_codec2LPCPostFilterBeta); + wxString txID = pConfig->Read("/Data/txID", wxT("")); + m_txtCtrlTx->SetValue(txID); + bool f = false; + bool txIDEnable = pConfig->Read("/Data/txIDEnable", f); + m_togTxID->SetValue(txIDEnable); + bool rxIDEnable = pConfig->Read("/Data/rxIDEnable", f); + m_togRxID->SetValue(rxIDEnable); + pConfig->SetPath(wxT("/")); // this->Connect(m_menuItemHelpUpdates->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler(TopFrame::OnHelpCheckUpdatesUI)); @@ -320,7 +330,7 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) m_btnTogTX->Connect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MainFrame::OnTogBtnTXClickUI), NULL, this); m_togBtnSplit->Disable(); - //m_togRxID->Disable(); + m_togRxID->Disable(); m_togTxID->Disable(); m_togBtnAnalog->Disable(); //m_togBtnALC->Disable(); @@ -382,8 +392,8 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent) // data states g_txDataInFifo = fifo_create(MAX_TXID*VARICODE_MAX_BITS); + g_rxDataOutFifo = fifo_create(MAX_TXID*VARICODE_MAX_BITS); varicode_decode_init(&g_varicode_dec_states); - } //------------------------------------------------------------------------- @@ -443,7 +453,11 @@ MainFrame::~MainFrame() pConfig->Write(wxT("/File/recFileFromRadioSecs"), wxGetApp().m_recFileFromRadioSecs); pConfig->Write(wxT("/Audio/snrSlow"), wxGetApp().m_snrSlow); - } + + pConfig->Write(wxT("/Data/txID"), m_txtCtrlTx->GetValue()); + pConfig->Write(wxT("/Data/txIDEnable"), m_togTxID->GetValue()); + pConfig->Write(wxT("/Data/rxIDEnable"), m_togRxID->GetValue()); + } //m_togRxID->Disconnect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MainFrame::OnTogBtnRxIDUI), NULL, this); m_togTxID->Disconnect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(MainFrame::OnTogBtnTxIDUI), NULL, this); @@ -569,6 +583,28 @@ void MainFrame::OnTimer(wxTimerEvent &evt) m_rbSync->SetForegroundColour( wxColour( 255, 0, 0 ) ); // red m_rbSync->SetValue(false); } + + // send Tx ID + + if (m_togTxID->GetValue()) { + m_txIDTimerTics += DT; + if (m_txIDTimerTics > TXID_PERIOD) { + m_txIDTimerTics = 0.0; + sendTxID(); + } + } + + // See if any ID info received + + if (m_togRxID->GetValue()) { + short ashort; + while (fifo_read(g_rxDataOutFifo, &ashort, 1) == 0) { + wxString s; + s.Printf("%c", (char)ashort); + m_txtCtrlRx->AppendText(s); + } + } + } #endif @@ -735,11 +771,11 @@ void MainFrame::OnTogBtnRxID(wxCommandEvent& event) } //------------------------------------------------------------------------- -// OnTogBtnTxID() +// sendTxID() //------------------------------------------------------------------------- -void MainFrame::OnTogBtnTxID(wxCommandEvent& event) +void MainFrame::sendTxID(void) { - wxString txid = m_txtCtrlTx->GetValue(); + wxString txid = m_txtCtrlTx->GetValue() + " "; char txid2[MAX_TXID]; strncpy(txid2, (const char*) txid.mb_str(wxConvUTF8), MAX_TXID-1); @@ -747,13 +783,20 @@ void MainFrame::OnTogBtnTxID(wxCommandEvent& event) short varicode[MAX_TXID*VARICODE_MAX_BITS]; int nout = varicode_encode(varicode, txid2, MAX_TXID*VARICODE_MAX_BITS, strlen(txid2)); - printf("tx varicode: "); - for(int i=0; iDisable(); - //m_togRxID->Disable(); + m_togRxID->Disable(); m_togTxID->Disable(); m_togBtnAnalog->Disable(); //m_togBtnALC->Disable(); @@ -1180,7 +1223,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) if (startStop.IsSameAs("Start")) { m_togBtnSplit->Enable(); - //m_togRxID->Enable(); + m_togRxID->Enable(); m_togTxID->Enable(); m_togBtnAnalog->Enable(); m_btnTogTX->Enable(); @@ -1202,6 +1245,9 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) g_State = 0; g_snr = 0.0; + m_txIDTimerTics = 0.0; + m_txtCtrlRx->SetValue(wxT("")); + //printf("g_stats.snr: %f\n", g_stats.snr_est); // attempt to start sound cards and tx/rx processing @@ -1230,7 +1276,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) codec2_destroy(g_pCodec2); m_togBtnSplit->Disable(); - //m_togRxID->Disable(); + m_togRxID->Disable(); m_togTxID->Disable(); m_togBtnAnalog->Disable(); m_btnTogTX->Disable(); @@ -1983,7 +2029,8 @@ void per_frame_rx_processing( } if(sync_bit == 1) { - int data_flag_index; + int data_flag_index; + char ascii_out[MAX_TXID]; // second half of frame of codec bits memcpy(&codec_bits[FDMDV_BITS_PER_FRAME], rx_bits, FDMDV_BITS_PER_FRAME*sizeof(int)); @@ -2003,7 +2050,6 @@ void per_frame_rx_processing( // if data construct data frame, varicode decode, write to fifo, send event short varicode[BITS_PER_CODEC_FRAME - 1]; - char ascii_out[MAX_TXID]; int n_ascii; for(i=0,j=0; iAdd(m_auiNbookCtrl, 1, wxALIGN_TOP|wxEXPAND, 1); centerSizer->Add(upperSizer, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_TOP|wxEXPAND, 0); + + // lower middle used for user ID + +#ifdef NEW + wxBoxSizer* lowerSizer = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer* lowerSizerTop = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* lowerSizerBottom = new wxBoxSizer(wxHORIZONTAL); + + m_txtCtrlTx = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + lowerSizerTop->Add(m_txtCtrlTx, 0, wxALL|wxEXPAND, 5); + + m_togTxID = new wxToggleButton(this, wxID_ANY, _("TxID"), wxDefaultPosition, wxDefaultSize, 0); + m_togTxID->SetToolTip(_("Send Tx ID information")); + //lowerSizerTop->Add(m_togTxID, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); + /* + m_txtCtrlRx = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + lowerSizerBottom->Add(m_txtCtrlRx, 1, wxALL|wxEXPAND, 5); + + m_togRxID = new wxToggleButton(this, wxID_ANY, _("RxID"), wxDefaultPosition, wxDefaultSize, 0); + m_togRxID->SetToolTip(_("Enable reception of ID information")); + lowerSizerBottom->Add(m_togRxID, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); + */ + lowerSizer->Add(lowerSizerTop, 0 ,wxEXPAND); + //lowerSizer->Add(lowerSizerBottom); +#endif + wxBoxSizer* lowerSizer; lowerSizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* bSizer15; bSizer15 = new wxBoxSizer(wxVERTICAL); + m_txtCtrlTx = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); bSizer15->Add(m_txtCtrlTx, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5); - m_txtCtrlRx = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); + m_txtCtrlRx = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_MULTILINE); bSizer15->Add(m_txtCtrlRx, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5); lowerSizer->Add(bSizer15, 1, wxEXPAND, 5); + wxBoxSizer* bSizer141; - bSizer141 = new wxBoxSizer(wxHORIZONTAL); + bSizer141 = new wxBoxSizer(wxVERTICAL); //===================================================== // These are the buttons that autosend the userid (?) //===================================================== -#ifdef UNIMPLEMENTED - // RxID - //--------- - m_togRxID = new wxToggleButton(this, wxID_ANY, _("RxID"), wxDefaultPosition, wxDefaultSize, 0); - bSizer141->Add(m_togRxID, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL|wxFIXED_MINSIZE, 5); -#endif - // TxID //--------- m_togTxID = new wxToggleButton(this, wxID_ANY, _("TxID"), wxDefaultPosition, wxDefaultSize, 0); - bSizer141->Add(m_togTxID, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + m_togTxID->SetToolTip(_("Send Tx ID information")); + bSizer141->Add(m_togTxID, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + // RxID + //--------- + m_togRxID = new wxToggleButton(this, wxID_ANY, _("RxID"), wxDefaultPosition, wxDefaultSize, 0); + m_togRxID->SetToolTip(_("Enable reception of ID information")); + bSizer141->Add(m_togRxID, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_LEFT|wxALL|wxFIXED_MINSIZE, 5); lowerSizer->Add(bSizer141, 0, wxALIGN_RIGHT, 5); + centerSizer->Add(lowerSizer, 0, wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 2); bSizer1->Add(centerSizer, 4, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 1); -- 2.25.1