From ceeee11220334e5badfe7325515a9dd4666605a4 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 5 Jun 2014 10:50:43 +0000 Subject: [PATCH] added checksum and checksums stats display for txt messages, haven't tested on poor channels yet, works OK in analog loopback git-svn-id: https://svn.code.sf.net/p/freetel/code@1640 01035d8c-6547-0410-b346-abe4f91aad63 --- fdmdv2/src/fdmdv2_main.cpp | 48 +++++++++++++++++++++++++++++++------- fdmdv2/src/fdmdv2_main.h | 4 +++- fdmdv2/src/topFrame.cpp | 15 +++++++----- fdmdv2/src/topFrame.h | 6 ++++- 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/fdmdv2/src/fdmdv2_main.cpp b/fdmdv2/src/fdmdv2_main.cpp index 18f1b0c8..d1e87101 100644 --- a/fdmdv2/src/fdmdv2_main.cpp +++ b/fdmdv2/src/fdmdv2_main.cpp @@ -885,18 +885,23 @@ void MainFrame::OnTimer(wxTimerEvent &evt) 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)) { + if ((unsigned)fifo_used(g_txDataInFifo) < strlen(callsign)) { + unsigned char checksum = 0; + for(unsigned int i=0; i MAX_CALLSIGN-1)) { // CR completes line *m_pcallsign = 0; + + // lets see if checksum is OK + + unsigned char checksum_rx = 0; + for(unsigned int i=0; iSetValue(s); + + m_checksumGood++; + s.Printf("%d", m_checksumGood); + m_txtChecksumGood->SetLabel(s); + } + else { + m_checksumBad++; + s.Printf("%d", m_checksumBad); + m_txtChecksumBad->SetLabel(s); + } + + // reset ptr to start of string m_pcallsign = m_callsign; } else { *m_pcallsign++ = (char)ashort; - wxString s; - s.Printf("%s", m_callsign); - m_txtCtrlCallSign->SetValue(s); } } @@ -1901,6 +1930,7 @@ void MainFrame::OnTogBtnOnOff(wxCommandEvent& event) g_half_duplex = wxGetApp().m_boolHalfDuplex; m_pcallsign = m_callsign; + m_checksumGood = m_checksumBad = 0; m_maxLevel = 0; m_textLevel->SetLabel(wxT("")); diff --git a/fdmdv2/src/fdmdv2_main.h b/fdmdv2/src/fdmdv2_main.h index 460e8e82..d52351ff 100644 --- a/fdmdv2/src/fdmdv2_main.h +++ b/fdmdv2/src/fdmdv2_main.h @@ -472,9 +472,11 @@ class MainFrame : public TopFrame int m_zoom; float m_snrBeta; - // Callsign + // Callsign/text messaging char m_callsign[MAX_CALLSIGN]; char *m_pcallsign; + unsigned int m_checksumGood; + unsigned int m_checksumBad; // level Gauge float m_maxLevel; diff --git a/fdmdv2/src/topFrame.cpp b/fdmdv2/src/topFrame.cpp index 3409ac3a..9174c89f 100644 --- a/fdmdv2/src/topFrame.cpp +++ b/fdmdv2/src/topFrame.cpp @@ -209,20 +209,20 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const wxBoxSizer* lowerSizer; lowerSizer = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer* bSizer15; - bSizer15 = new wxBoxSizer(wxVERTICAL); - m_BtnCallSignReset = new wxButton(this, wxID_ANY, _("Clear"), wxDefaultPosition, wxDefaultSize, 0); lowerSizer->Add(m_BtnCallSignReset, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer(wxVERTICAL); m_txtCtrlCallSign = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY); m_txtCtrlCallSign->SetToolTip(_("Call Sign of transmitting station will appear here")); bSizer15->Add(m_txtCtrlCallSign, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5); - lowerSizer->Add(bSizer15, 1, wxEXPAND, 5); - wxBoxSizer* bSizer141; - bSizer141 = new wxBoxSizer(wxHORIZONTAL); + m_txtChecksumGood = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); + lowerSizer->Add(m_txtChecksumGood, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); + m_txtChecksumBad = new wxStaticText(this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); + lowerSizer->Add(m_txtChecksumBad, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 1); //===================================================== // These are the buttons that autosend the userid (?) @@ -231,6 +231,9 @@ TopFrame::TopFrame(wxWindow* parent, wxWindowID id, const wxString& title, const // DR 4 Dec - taken off for screen for Beta release to avoid questions on their use until // we implement this feature #ifdef UNIMPLEMENTED + wxBoxSizer* bSizer141; + bSizer141 = new wxBoxSizer(wxHORIZONTAL); + // TxID //--------- m_togTxID = new wxToggleButton(this, wxID_ANY, _("TxID"), wxDefaultPosition, wxDefaultSize, 0); diff --git a/fdmdv2/src/topFrame.h b/fdmdv2/src/topFrame.h index 5e914f8b..bf556d9b 100644 --- a/fdmdv2/src/topFrame.h +++ b/fdmdv2/src/topFrame.h @@ -87,8 +87,12 @@ class TopFrame : public wxFrame wxCheckBox* m_ckboxSNR; wxGauge* m_gaugeLevel; wxStaticText* m_textLevel; - wxTextCtrl* m_txtCtrlCallSign; + wxButton* m_BtnCallSignReset; + wxTextCtrl* m_txtCtrlCallSign; + wxStaticText* m_txtChecksumGood; + wxStaticText* m_txtChecksumBad; + wxSlider* m_sliderSQ; wxCheckBox* m_ckboxSQ; wxStaticText* m_textSQ; -- 2.25.1