MMDVM/MMDVMCal/MMDVMCal.h
2022-08-24 08:10:10 +02:00

155 lines
3.8 KiB
C++
Executable File

/*
* Copyright (C) 2015,2016,2017,2020 by Jonathan Naylor G4KLX
* Copyright (C) 2017,2018 by Andy Uribe CA6JAU
* Copyright (C) 2018 by Bryan Biedenkapp N2PLL
*
* 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(MMDVMCAL_H)
#define MMDVMCAL_H
#include "SerialController.h"
#include "Console.h"
#include "BERCal.h"
#include <cstring>
#include <cstdlib>
enum RESP_TYPE_MMDVM {
RTM_OK,
RTM_TIMEOUT,
RTM_ERROR
};
enum HW_TYPE {
HWT_MMDVM,
HWT_MMDVM_HS
};
enum MMDVM_STATE {
STATE_IDLE = 0,
STATE_DSTAR = 1,
STATE_DMR = 2,
STATE_YSF = 3,
STATE_P25 = 4,
STATE_NXDN = 5,
STATE_POCSAG = 6,
STATE_NXDNCAL1K = 91,
STATE_DMRDMO1K = 92,
STATE_P25CAL1K = 93,
STATE_DMRCAL1K = 94,
STATE_LFCAL = 95,
STATE_RSSICAL = 96,
STATE_DMRCAL = 98,
STATE_DSTARCAL = 99,
STATE_INTCAL = 100,
STATE_POCSAGCAL = 101,
STATE_FMCAL10K = 102,
STATE_FMCAL12K = 103,
STATE_FMCAL15K = 104,
STATE_FMCAL20K = 105,
STATE_FMCAL25K = 106,
STATE_FMCAL30K = 107
};
class CMMDVMCal {
public:
CMMDVMCal(const std::string& port);
~CMMDVMCal();
int run();
private:
CSerialController m_serial;
CConsole m_console;
CBERCal m_ber;
bool m_transmit;
bool m_carrier;
float m_txLevel;
float m_rxLevel;
int m_txDCOffset;
int m_rxDCOffset;
bool m_txInvert;
bool m_rxInvert;
bool m_pttInvert;
unsigned int m_frequency;
unsigned int m_startfrequency;
unsigned int m_step;
float m_power;
MMDVM_STATE m_mode;
bool m_duplex;
bool m_debug;
unsigned char* m_buffer;
unsigned int m_length;
unsigned int m_offset;
HW_TYPE m_hwType;
bool m_dstarEnabled;
bool m_dmrEnabled;
bool m_dmrBERFEC;
bool m_ysfEnabled;
bool m_p25Enabled;
bool m_nxdnEnabled;
bool m_pocsagEnabled;
bool m_fmEnabled;
void displayHelp_MMDVM();
void displayHelp_MMDVM_HS();
void loop_MMDVM();
void loop_MMDVM_HS();
bool setTransmit();
bool setTXLevel(int incr);
bool setRXLevel(int incr);
bool setTXDCOffset(int incr);
bool setRXDCOffset(int incr);
bool setTXInvert();
bool setRXInvert();
bool setPTTInvert();
bool setDebug();
bool setFreq(int incr);
bool setStepFreq();
bool setPower(int incr);
bool setCarrier();
bool setEnterFreq();
bool setFMDeviation();
bool setDMRDeviation();
bool setLowFrequencyCal();
bool setDMRCal1K();
bool setDMRDMO1K();
bool setP25Cal1K();
bool setNXDNCal1K();
bool setPOCSAGCal();
bool setDSTARBER_FEC();
bool setDMRBER_FEC();
bool setDMRBER_1K();
bool setYSFBER_FEC();
bool setP25BER_FEC();
bool setNXDNBER_FEC();
bool setDSTAR();
bool setRSSI();
bool setIntCal();
bool initModem();
void displayModem(const unsigned char* buffer, unsigned int length);
bool writeConfig(float txlevel, bool debug);
void sleep(unsigned int ms);
bool setFrequency();
bool getStatus();
RESP_TYPE_MMDVM getResponse();
};
#endif