diff --git a/src/svxlink/reflector/Reflector.cpp b/src/svxlink/reflector/Reflector.cpp index f26dd418..26e8ca7e 100644 --- a/src/svxlink/reflector/Reflector.cpp +++ b/src/svxlink/reflector/Reflector.cpp @@ -324,6 +324,12 @@ void Reflector::updateRssistate(Json::Value eventmessage) } /* Reflector::updateRssistate */ +void Reflector::updateSysteminfostate(Json::Value eventmessage) +{ + cout << jsonToString(eventmessage) << endl; +} /* Reflector::updateSysteminfostate */ + + void Reflector::nodeList(std::vector& nodes) const { nodes.clear(); diff --git a/src/svxlink/reflector/Reflector.h b/src/svxlink/reflector/Reflector.h index 9678cb6a..4394cad4 100644 --- a/src/svxlink/reflector/Reflector.h +++ b/src/svxlink/reflector/Reflector.h @@ -200,6 +200,12 @@ class Reflector : public sigc::trackable */ void updateQsostate(Json::Value eventmessage); + /** + * @brief Update System information + * @param event message with System information + */ + void updateSysteminfostate(Json::Value eventmessage); + /** * @brief Update Rssi information * @param event message with rssi info diff --git a/src/svxlink/reflector/ReflectorClient.cpp b/src/svxlink/reflector/ReflectorClient.cpp index 393b9c23..3b7f1eb0 100644 --- a/src/svxlink/reflector/ReflectorClient.cpp +++ b/src/svxlink/reflector/ReflectorClient.cpp @@ -722,6 +722,10 @@ void ReflectorClient::handleStateEvent(std::istream& is) { m_reflector->updateRssistate(eventmessage); } + else if (msg.name() == "System:info") + { + m_reflector->updateSysteminfostate(eventmessage); + } } /* ReflectorClient::handleStateEvent */ diff --git a/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.cpp b/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.cpp index fc2eb3c3..a6ba2165 100644 --- a/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.cpp +++ b/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.cpp @@ -117,6 +117,8 @@ using namespace SvxLink; #define WAP_MESSAGE 32 #define LOCATION_SYSTEM_TSDU 33 #define RSSI 34 +#define VENDOR 35 +#define MODEL 36 #define DMO_OFF 7 #define DMO_ON 8 @@ -132,7 +134,7 @@ using namespace SvxLink; #define MAX_TRIES 5 -#define TETRA_LOGIC_VERSION "10012023" +#define TETRA_LOGIC_VERSION "13012023" /**************************************************************************** * @@ -210,7 +212,7 @@ TetraLogic::TetraLogic(void) dmcc(0), dissi(0), infosds(""), is_tx(false), last_sdsid(0), pei_pty_path(""), pei_pty(0), ai(-1), check_qos(0), qos_sds_to("0815"), qos_limit(-90), qosTimer(300000, Timer::TYPE_ONESHOT, false), min_rssi(100), max_rssi(100), - reg_cell(0), reg_la(0), reg_mni(0) + reg_cell(0), reg_la(0), reg_mni(0), vendor(""), model("") { peiComTimer.expired.connect(mem_fun(*this, &TetraLogic::onComTimeout)); peiActivityTimer.expired.connect(mem_fun(*this, @@ -729,7 +731,7 @@ bool TetraLogic::initialize(Async::Config& cfgobj, const std::string& logic_name rxValveSetOpen(true); setTxCtrlMode(Tx::TX_AUTO); - + processEvent("startup"); cout << ">>> Started SvxLink with special TetraLogic extension (v" @@ -904,6 +906,7 @@ void TetraLogic::initPei(void) ss << "pei_init_finished"; processEvent(ss.str()); sendUserInfo(); // send userinfo to reflector + if (vendor.length() > 1) sendSystemInfo(); // send systeminfo to reflector peirequest = INIT_COMPLETE; } } /* TetraLogic::initPei */ @@ -1072,6 +1075,14 @@ void TetraLogic::handlePeiAnswer(std::string m_message) handleCreg(m_message); break; + case VENDOR: + handleVendor(m_message); + break; + + case MODEL: + handleModel(m_message); + break; + case INVALID: log(LOGWARN, "+++ Pei answer not known, ignoring ;)"); @@ -2037,6 +2048,8 @@ int TetraLogic::handleMessage(std::string mesg) mre["^\\+CLVL:"] = CLVL; mre["^\\+CSQ:"] = RSSI; mre["^\\+CREG:"] = REGISTRATION; + mre["^\\+GMI:"] = VENDOR; + mre["^\\+GMM:"] = MODEL; mre["^01"] = OTAK; mre["^02"] = SIMPLE_TEXT_SDS; mre["^03"] = SIMPLE_LIP_SDS; @@ -2487,6 +2500,36 @@ void TetraLogic::handleCreg(std::string m_message) } /* TetraLogic::handleCreg */ +void TetraLogic::handleModel(std::string m_message) +{ + // +GMM: 54007,M83PF-----AN,88.2.0.0 + m_message.erase(0,6); + model = getNextStr(m_message); +} /* TetraLogic::handleModel */ + + +void TetraLogic::handleVendor(std::string m_message) +{ + // +GMI: MOTOROLA + m_message.erase(0,6); + vendor = m_message; +} /* TetraLogic::handleVendor */ + + +void TetraLogic::sendSystemInfo(void) +{ + // prepare event systeminfo for reflector + Json::Value systeminfo(Json::objectValue); + systeminfo["vendor"] = vendor; + systeminfo["model"] = model; + systeminfo["call"] = callsign(); + systeminfo["issi"] = issi; + systeminfo["message"] = "Signal:info"; + systeminfo["tl_version"] = TETRA_LOGIC_VERSION; + publishInfo("System:info", systeminfo); +} /* TetraLogic::sendSystemInfo */ + + std::string TetraLogic::jsonToString(Json::Value eventmessage) { Json::StreamWriterBuilder builder; diff --git a/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.h b/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.h index 2e834dce..968e8c93 100644 --- a/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.h +++ b/src/svxlink/svxlink/contrib/TetraLogic/TetraLogic.h @@ -297,7 +297,7 @@ class TetraLogic : public Logic { SDS_SEND_OK = 4, SDS_SEND_FAILED = 5 } SdsSentState; - + typedef enum { TMO=0, DMO_MS=1, VD_DUAL_WATCH_DMO=2, DMO_DUAL_WATCH_DV=3, GATEWAY=5, @@ -366,6 +366,8 @@ class TetraLogic : public Logic int reg_la; int reg_mni; int reg_state; + std::string vendor; + std::string model; void initPei(void); void onCharactersReceived(char *buf, int count); @@ -419,6 +421,9 @@ class TetraLogic : public Logic void handleRssi(std::string m_message); void handleCreg(std::string m_message); void checkReg(void); + void handleModel(std::string m_message); + void handleVendor(std::string m_message); + void sendSystemInfo(void); std::string jsonToString(Json::Value eventmessage); }; /* class TetraLogic */ diff --git a/src/svxlink/svxlink/contrib/TetraLogic/pei-init.json b/src/svxlink/svxlink/contrib/TetraLogic/pei-init.json index ae80ff9e..55f7cc34 100644 --- a/src/svxlink/svxlink/contrib/TetraLogic/pei-init.json +++ b/src/svxlink/svxlink/contrib/TetraLogic/pei-init.json @@ -1,6 +1,6 @@ [ - { "mode" : "TMO", "commands" : ["AT+CTOM=0", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0"]}, - { "mode" : "DMO-RPT", "commands" : ["AT+CTOM=6", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0"]}, - { "mode" : "DMO-MS", "commands" : ["AT+CTOM=1", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0"]}, - { "mode" : "GATEWAY", "commands" : ["AT+CTOM=5", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0"]} + { "mode" : "TMO", "commands" : ["AT+CTOM=0", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0", "AT+GMI", "AT+GMM"]}, + { "mode" : "DMO-RPT", "commands" : ["AT+CTOM=6", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0", "AT+GMI", "AT+GMM"]}, + { "mode" : "DMO-MS", "commands" : ["AT+CTOM=1", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0", "AT+GMI", "AT+GMM"]}, + { "mode" : "GATEWAY", "commands" : ["AT+CTOM=5", "AT+CTSP=1,3,131", "AT+CTSP=1,3,130", "AT+CTSP=1,3,138", "AT+CTSP=1,2,20", "AT+CTSP=2,0,0", "AT+CTSP=1,3,24", "AT+CTSP=1,3,25", "AT+CTSP=1,3,3", "AT+CTSP=1,3,10", "AT+CTSP=1,1,11", "AT+CTSDC=0,0,0,1,1,0,1,1,0,0", "AT+GMI", "AT+GMM"]} ]