You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
316 lines
10 KiB
316 lines
10 KiB
/*
|
|
* Copyright (C) 2011-2015,2018 by Jonathan Naylor G4KLX
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef DStarRepeaterConfig_H
|
|
#define DStarRepeaterConfig_H
|
|
|
|
#include "DStarDefines.h"
|
|
|
|
#include <stdexcept>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
/*
|
|
* Parses the INI-style repeater configuration file.
|
|
*
|
|
* File format (MMDVMHost compatible):
|
|
* [Section] headers
|
|
* Key=Value pairs
|
|
* # comment lines
|
|
*
|
|
* The constructor takes the full path to the config file and throws
|
|
* std::runtime_error if the file does not exist or cannot be opened.
|
|
* There is no write-back facility; this class is read-only.
|
|
*
|
|
* Settings are grouped into logical sections exposed via typed getters.
|
|
* Every getter reads all fields for that group atomically (all by
|
|
* out-reference).
|
|
*/
|
|
class CDStarRepeaterConfig {
|
|
public:
|
|
/*
|
|
* Opens and parses filePath. Throws std::runtime_error if the file
|
|
* does not exist or cannot be opened. All members are initialised to
|
|
* built-in defaults before parsing, so any key absent from the file
|
|
* silently retains its default value.
|
|
*/
|
|
explicit CDStarRepeaterConfig(const std::string& filePath);
|
|
~CDStarRepeaterConfig();
|
|
|
|
// [General]
|
|
void getCallsign(std::string& callsign, std::string& gateway, DSTAR_MODE& mode, ACK_TYPE& ack, bool& restriction, bool& rpt1Validation, bool& dtmfBlanking, bool& errorReply) const;
|
|
|
|
// [Log]
|
|
void getLog(std::string& filePath, unsigned int& fileLevel, unsigned int& displayLevel, unsigned int& mqttLevel) const;
|
|
|
|
// [Paths]
|
|
void getPaths(std::string& dataDir, std::string& audioDir) const;
|
|
|
|
// [Network]
|
|
void getNetwork(std::string& gatewayAddress, unsigned int& gatewayPort, std::string& localAddress, unsigned int& localPort, std::string& name) const;
|
|
|
|
// [Modem]
|
|
void getModem(std::string& type) const;
|
|
|
|
// [Times]
|
|
void getTimes(unsigned int& timeout, unsigned int& ackTime) const;
|
|
|
|
// [Beacon]
|
|
void getBeacon(unsigned int& time, std::string& text, bool& voice, TEXT_LANG& language) const;
|
|
|
|
// [Announcement]
|
|
void getAnnouncement(bool& enabled, unsigned int& time, std::string& recordRPT1, std::string& recordRPT2, std::string& deleteRPT1, std::string& deleteRPT2) const;
|
|
|
|
// [Control]
|
|
void getControl(bool& enabled, std::string& rpt1Callsign, std::string& rpt2Callsign, std::string& shutdown, std::string& startup, std::string& status1, std::string& status2, std::string& status3, std::string& status4, std::string& status5, std::string& command1, std::string& command1Line, std::string& command2, std::string& command2Line, std::string& command3, std::string& command3Line, std::string& command4, std::string& command4Line, std::string& command5, std::string& command5Line, std::string& command6, std::string& command6Line, std::string& output1, std::string& output2, std::string& output3, std::string& output4) const;
|
|
|
|
// [Controller]
|
|
void getController(std::string& type, unsigned int& serialConfig, bool& pttInvert, unsigned int& activeHangTime) const;
|
|
|
|
// [Outputs]
|
|
void getOutputs(bool& out1, bool& out2, bool& out3, bool& out4) const;
|
|
|
|
// [Frame Logging]
|
|
void getLogging(bool& logging) const;
|
|
|
|
// [Whitelist] / [Blacklist] / [Greylist] (empty string = not configured)
|
|
void getWhitelist(std::string& file) const;
|
|
void getBlacklist(std::string& file) const;
|
|
void getGreylist(std::string& file) const;
|
|
|
|
// [DVAP]
|
|
void getDVAP(std::string& port, unsigned int& frequency, int& power, int& squelch) const;
|
|
|
|
// [GMSK]
|
|
void getGMSK(USB_INTERFACE& type, unsigned int& address) const;
|
|
|
|
// [DV-RPTR V1]
|
|
void getDVRPTR1(std::string& port, bool& rxInvert, bool& txInvert, bool& channel, unsigned int& modLevel, unsigned int& txDelay) const;
|
|
|
|
// [DV-RPTR V2]
|
|
void getDVRPTR2(CONNECTION_TYPE& connectionType, std::string& usbPort, std::string& address, unsigned int& port, bool& txInvert, unsigned int& modLevel, unsigned int& txDelay) const;
|
|
|
|
// [DV-RPTR V3]
|
|
void getDVRPTR3(CONNECTION_TYPE& connectionType, std::string& usbPort, std::string& address, unsigned int& port, bool& txInvert, unsigned int& modLevel, unsigned int& txDelay) const;
|
|
|
|
// [DVMEGA]
|
|
void getDVMEGA(std::string& port, DVMEGA_VARIANT& variant, bool& rxInvert, bool& txInvert, unsigned int& txDelay, unsigned int& rxFrequency, unsigned int& txFrequency, unsigned int& power) const;
|
|
|
|
// [MMDVM]
|
|
void getMMDVM(std::string& port, bool& rxInvert, bool& txInvert, bool& pttInvert, unsigned int& txDelay, unsigned int& rxLevel, unsigned int& txLevel) const;
|
|
|
|
// [Sound Card]
|
|
void getSoundCard(std::string& rxDevice, std::string& txDevice, bool& rxInvert, bool& txInvert, float& rxLevel, float& txLevel, unsigned int& txDelay, unsigned int& txTail) const;
|
|
|
|
// [Split]
|
|
void getSplit(std::string& localAddress, unsigned int& localPort, std::vector<std::string>& transmitterNames, std::vector<std::string>& receiverNames, unsigned int& timeout) const;
|
|
|
|
// [Icom]
|
|
void getIcom(std::string& port) const;
|
|
|
|
#if defined(MQTT)
|
|
// [MQTT]
|
|
void getMQTT(std::string& host, unsigned int& port, bool& auth, std::string& username, std::string& password, unsigned int& keepalive, std::string& name) const;
|
|
#endif
|
|
|
|
private:
|
|
// [General]
|
|
std::string m_callsign;
|
|
std::string m_gateway;
|
|
DSTAR_MODE m_mode;
|
|
ACK_TYPE m_ack;
|
|
bool m_restriction;
|
|
bool m_rpt1Validation;
|
|
bool m_dtmfBlanking;
|
|
bool m_errorReply;
|
|
|
|
// [Log]
|
|
std::string m_logFilePath;
|
|
unsigned int m_logFileLevel;
|
|
unsigned int m_logDisplayLevel;
|
|
unsigned int m_logMQTTLevel;
|
|
|
|
// [Paths]
|
|
std::string m_dataDir;
|
|
std::string m_audioDir;
|
|
|
|
// [Network]
|
|
std::string m_gatewayAddress;
|
|
unsigned int m_gatewayPort;
|
|
std::string m_localAddress;
|
|
unsigned int m_localPort;
|
|
std::string m_networkName;
|
|
|
|
// [Modem]
|
|
std::string m_modemType;
|
|
|
|
// [Times]
|
|
unsigned int m_timeout;
|
|
unsigned int m_ackTime;
|
|
|
|
// [Beacon]
|
|
unsigned int m_beaconTime;
|
|
std::string m_beaconText;
|
|
bool m_beaconVoice;
|
|
TEXT_LANG m_language;
|
|
|
|
// [Announcement]
|
|
bool m_announcementEnabled;
|
|
unsigned int m_announcementTime;
|
|
std::string m_announcementRecordRPT1;
|
|
std::string m_announcementRecordRPT2;
|
|
std::string m_announcementDeleteRPT1;
|
|
std::string m_announcementDeleteRPT2;
|
|
|
|
// [Control]
|
|
bool m_controlEnabled;
|
|
std::string m_controlRpt1Callsign;
|
|
std::string m_controlRpt2Callsign;
|
|
std::string m_controlShutdown;
|
|
std::string m_controlStartup;
|
|
std::string m_controlStatus1;
|
|
std::string m_controlStatus2;
|
|
std::string m_controlStatus3;
|
|
std::string m_controlStatus4;
|
|
std::string m_controlStatus5;
|
|
std::string m_controlCommand1;
|
|
std::string m_controlCommand1Line;
|
|
std::string m_controlCommand2;
|
|
std::string m_controlCommand2Line;
|
|
std::string m_controlCommand3;
|
|
std::string m_controlCommand3Line;
|
|
std::string m_controlCommand4;
|
|
std::string m_controlCommand4Line;
|
|
std::string m_controlCommand5;
|
|
std::string m_controlCommand5Line;
|
|
std::string m_controlCommand6;
|
|
std::string m_controlCommand6Line;
|
|
std::string m_controlOutput1;
|
|
std::string m_controlOutput2;
|
|
std::string m_controlOutput3;
|
|
std::string m_controlOutput4;
|
|
|
|
// [Controller]
|
|
std::string m_controllerType;
|
|
unsigned int m_serialConfig;
|
|
bool m_pttInvert;
|
|
unsigned int m_activeHangTime;
|
|
|
|
// [Outputs]
|
|
bool m_output1;
|
|
bool m_output2;
|
|
bool m_output3;
|
|
bool m_output4;
|
|
|
|
// [Frame Logging]
|
|
bool m_logging;
|
|
|
|
// [Whitelist] / [Blacklist] / [Greylist] (empty = not configured)
|
|
std::string m_whitelistFile;
|
|
std::string m_blacklistFile;
|
|
std::string m_greylistFile;
|
|
|
|
// [DVAP]
|
|
std::string m_dvapPort;
|
|
unsigned int m_dvapFrequency;
|
|
int m_dvapPower;
|
|
int m_dvapSquelch;
|
|
|
|
// [GMSK]
|
|
USB_INTERFACE m_gmskInterface;
|
|
unsigned int m_gmskAddress;
|
|
|
|
// [DV-RPTR V1]
|
|
std::string m_dvrptr1Port;
|
|
bool m_dvrptr1RXInvert;
|
|
bool m_dvrptr1TXInvert;
|
|
bool m_dvrptr1Channel;
|
|
unsigned int m_dvrptr1ModLevel;
|
|
unsigned int m_dvrptr1TXDelay;
|
|
|
|
// [DV-RPTR V2]
|
|
CONNECTION_TYPE m_dvrptr2Connection;
|
|
std::string m_dvrptr2USBPort;
|
|
std::string m_dvrptr2Address;
|
|
unsigned int m_dvrptr2Port;
|
|
bool m_dvrptr2TXInvert;
|
|
unsigned int m_dvrptr2ModLevel;
|
|
unsigned int m_dvrptr2TXDelay;
|
|
|
|
// [DV-RPTR V3]
|
|
CONNECTION_TYPE m_dvrptr3Connection;
|
|
std::string m_dvrptr3USBPort;
|
|
std::string m_dvrptr3Address;
|
|
unsigned int m_dvrptr3Port;
|
|
bool m_dvrptr3TXInvert;
|
|
unsigned int m_dvrptr3ModLevel;
|
|
unsigned int m_dvrptr3TXDelay;
|
|
|
|
// [DVMEGA]
|
|
std::string m_dvmegaPort;
|
|
DVMEGA_VARIANT m_dvmegaVariant;
|
|
bool m_dvmegaRXInvert;
|
|
bool m_dvmegaTXInvert;
|
|
unsigned int m_dvmegaTXDelay;
|
|
unsigned int m_dvmegaRXFrequency;
|
|
unsigned int m_dvmegaTXFrequency;
|
|
unsigned int m_dvmegaPower;
|
|
|
|
// [MMDVM]
|
|
std::string m_mmdvmPort;
|
|
bool m_mmdvmRXInvert;
|
|
bool m_mmdvmTXInvert;
|
|
bool m_mmdvmPTTInvert;
|
|
unsigned int m_mmdvmTXDelay;
|
|
unsigned int m_mmdvmRXLevel;
|
|
unsigned int m_mmdvmTXLevel;
|
|
|
|
// [Sound Card]
|
|
std::string m_soundCardRXDevice;
|
|
std::string m_soundCardTXDevice;
|
|
bool m_soundCardRXInvert;
|
|
bool m_soundCardTXInvert;
|
|
float m_soundCardRXLevel;
|
|
float m_soundCardTXLevel;
|
|
unsigned int m_soundCardTXDelay;
|
|
unsigned int m_soundCardTXTail;
|
|
|
|
// [Split]
|
|
std::string m_splitLocalAddress;
|
|
unsigned int m_splitLocalPort;
|
|
std::vector<std::string> m_splitTXNames;
|
|
std::vector<std::string> m_splitRXNames;
|
|
unsigned int m_splitTimeout;
|
|
|
|
// [Icom]
|
|
std::string m_icomPort;
|
|
|
|
#if defined(MQTT)
|
|
// [MQTT]
|
|
std::string m_mqttHost;
|
|
unsigned int m_mqttPort;
|
|
bool m_mqttAuth;
|
|
std::string m_mqttUsername;
|
|
std::string m_mqttPassword;
|
|
unsigned int m_mqttKeepalive;
|
|
std::string m_mqttName;
|
|
#endif
|
|
};
|
|
|
|
#endif
|