diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp new file mode 100644 index 0000000..a449232 --- /dev/null +++ b/CalPOCSAG.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2018 by Florian Wolters DF2ET + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "Config.h" +#include "Globals.h" +#include "CalPOCSAG.h" + +// POCSAG 600 Hz Test Pattern + +CCalPOCSAG::CCalPOCSAG() : +m_transmit(false), +m_state(POCSAGCAL_IDLE), +m_audioSeq(0U) +{ +} + +void CCalPOCSAG::process() +{ + pocsagTX.process(); + + uint16_t space = pocsagTX.getSpace(); + if (space < 1U) + return; + + switch (m_state) { + case POCSAGCAL_TX: + //pocsagTX.writeData(POCSAG_CAL[m_audioSeq], POCSAG_FRAME_LENGTH_BYTES + 1U); + m_audioSeq = (m_audioSeq + 1U) % 4U; + if(!m_transmit) + m_state = POCSAGCAL_IDLE; + break; + default: + m_state = POCSAGCAL_IDLE; + m_audioSeq = 0U; + break; + } +} + +uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) +{ + if (length != 1U) + return 4U; + + m_transmit = data[0U] == 1U; + + if(m_transmit && m_state == POCSAGCAL_IDLE) + m_state = POCSAGCAL_TX; + + return 0U; +} + diff --git a/CalPOCSAG.h b/CalPOCSAG.h new file mode 100644 index 0000000..7d4abab --- /dev/null +++ b/CalPOCSAG.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019 by Florian Wolters DF2ET + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if !defined(CALPOCSAG_H) +#define CALPOCSAG_H + +#include "Config.h" + +enum POCSAGCAL { + POCSAGCAL_IDLE, + POCSAGCAL_TX +}; + +class CCalPOCSAG { +public: + CCalPOCSAG(); + + void process(); + + uint8_t write(const uint8_t* data, uint8_t length); + +private: + bool m_transmit; + POCSAGCAL m_state; + uint8_t m_audioSeq; +}; + +#endif + diff --git a/Globals.h b/Globals.h index c082d60..b52074f 100644 --- a/Globals.h +++ b/Globals.h @@ -60,7 +60,9 @@ enum MMDVM_STATE { STATE_RSSICAL = 96, STATE_CWID = 97, STATE_DMRCAL = 98, - STATE_DSTARCAL = 99 + STATE_DSTARCAL = 99, + STATE_INTCAL = 100, + STATE_POCSAGCAL = 101 }; #include "SerialPort.h" @@ -83,6 +85,7 @@ enum MMDVM_STATE { #include "CalDMR.h" #include "CalP25.h" #include "CalNXDN.h" +#include "CalPOCSAG.h" #include "CalRSSI.h" #include "CWIdTX.h" #include "Debug.h" diff --git a/MMDVM.cpp b/MMDVM.cpp index 6fd894c..306cdcd 100644 --- a/MMDVM.cpp +++ b/MMDVM.cpp @@ -64,6 +64,7 @@ CCalDStarTX calDStarTX; CCalDMR calDMR; CCalP25 calP25; CCalNXDN calNXDN; +CCalPOCSAG calPOCSAG; CCalRSSI calRSSI; CCWIdTX cwIdTX; @@ -117,6 +118,9 @@ void loop() if (m_modemState == STATE_NXDNCAL1K) calNXDN.process(); + if (m_modemState == STATE_POCSAGCAL) + calPOCSAG.process(); + if (m_modemState == STATE_IDLE) cwIdTX.process(); } diff --git a/MMDVM.ino b/MMDVM.ino index ff392e1..dcb1fcf 100644 --- a/MMDVM.ino +++ b/MMDVM.ino @@ -61,6 +61,7 @@ CCalDStarTX calDStarTX; CCalDMR calDMR; CCalP25 calP25; CCalNXDN calNXDN; +CCalPOCSAG calPOCSAG; CCalRSSI calRSSI; CCWIdTX cwIdTX; @@ -114,6 +115,9 @@ void loop() if (m_modemState == STATE_NXDNCAL1K) calNXDN.process(); + if (m_modemState == STATE_POCSAGCAL) + calPOCSAG.process(); + if (m_modemState == STATE_IDLE) cwIdTX.process(); }