From 5ab1be62e43875583eb2eda2f9a16f150009d850 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Mon, 5 Jun 2017 17:22:34 -0400 Subject: [PATCH] 2017-06-05 Fred Gleason * Added a 'Air Gate' ['AG'] RML. --- ChangeLog | 2 ++ docs/docbook/rml.xml | 27 +++++++++++++++++++++++++++ lib/rdmacro.cpp | 1 + lib/rdmacro.h | 21 +++++++++++---------- ripcd/ripcd.cpp | 17 +++++++++++++++++ 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98b547eb..635a8fb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15822,3 +15822,5 @@ 2017-06-05 Fred Gleason * Modified the 'Command Send' ['CC'] RML so as to have a destination argument of 'localhost' be sent to the localhost. +2017-06-05 Fred Gleason + * Added a 'Air Gate' ['AG'] RML. diff --git a/docs/docbook/rml.xml b/docs/docbook/rml.xml index c25b9570..0655694a 100644 --- a/docs/docbook/rml.xml +++ b/docs/docbook/rml.xml @@ -181,6 +181,33 @@ Commands + + <command>Air Gate [AG]</command> + + + + Module + ripcd8 + + + Mnemonic + AG + + + + + Process an RML only if the On-Air flag is ON. + + + AG + rml! + + + Execute RML rml only if the On-Air flag on + the local machine is ON. + + + <command>Add Next [PX]</command> diff --git a/lib/rdmacro.cpp b/lib/rdmacro.cpp index c18b0cb8..5e991711 100644 --- a/lib/rdmacro.cpp +++ b/lib/rdmacro.cpp @@ -161,6 +161,7 @@ bool RDMacro::parseString(const char *str,int n) // rml_cmd=(RDMacro::Command)((str[0]<<8)+str[1]); switch(rml_cmd) { + case RDMacro::AG: case RDMacro::AL: case RDMacro::BO: case RDMacro::CC: diff --git a/lib/rdmacro.h b/lib/rdmacro.h index a254202c..d5d8a5c9 100644 --- a/lib/rdmacro.h +++ b/lib/rdmacro.h @@ -35,16 +35,17 @@ class RDMacro { public: - enum Command {AL=0x414C,BO=0x424F,CC=0x4343,CE=0x4345,CL=0x434C,CP=0x4350, - DB=0x4442,DL=0x444C,DP=0x4450,DS=0x4453,DX=0x4458,EX=0x4558, - FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JC=0x4A43,JD=0x4A44, - LB=0x4C42,LC=0x4C43,LL=0x4C4C,LO=0x4C4F,MB=0x4D42,MD=0x4D44, - MN=0x4D4E,MT=0x4D54,NN=0x4E4E,PB=0x5042,PC=0x5043,PD=0x5044, - PE=0x5045,PL=0x504C,PM=0x504D,PN=0x504E,PP=0x5050,PS=0x5053, - PT=0x5054,PU=0x5055,PW=0x5057,PX=0x5058,RL=0x524C,RN=0x524E, - RS=0x5253,RR=0x5252,SA=0x5341,SC=0x5343,SD=0x5344,SG=0x5347, - SI=0x5349,SL=0x534C,SN=0x534e,SO=0x534F,SP=0x5350,SR=0x5352, - ST=0x5354,SX=0x5358,SY=0x5359,SZ=0x535A,TA=0x5441,UO=0x554F}; + enum Command {AG=0x4147,AL=0x414C,BO=0x424F,CC=0x4343,CE=0x4345,CL=0x434C, + CP=0x4350,DB=0x4442,DL=0x444C,DP=0x4450,DS=0x4453,DX=0x4458, + EX=0x4558,FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JC=0x4A43, + JD=0x4A44,LB=0x4C42,LC=0x4C43,LL=0x4C4C,LO=0x4C4F,MB=0x4D42, + MD=0x4D44,MN=0x4D4E,MT=0x4D54,NN=0x4E4E,PB=0x5042,PC=0x5043, + PD=0x5044,PE=0x5045,PL=0x504C,PM=0x504D,PN=0x504E,PP=0x5050, + PS=0x5053,PT=0x5054,PU=0x5055,PW=0x5057,PX=0x5058,RL=0x524C, + RN=0x524E,RS=0x5253,RR=0x5252,SA=0x5341,SC=0x5343,SD=0x5344, + SG=0x5347,SI=0x5349,SL=0x534C,SN=0x534e,SO=0x534F,SP=0x5350, + SR=0x5352,ST=0x5354,SX=0x5358,SY=0x5359,SZ=0x535A,TA=0x5441, + UO=0x554F}; enum Role {Invalid=0,Cmd=1,Reply=2}; RDMacro(); RDMacro::Role role() const; diff --git a/ripcd/ripcd.cpp b/ripcd/ripcd.cpp index 1392b51c..b45f9470 100644 --- a/ripcd/ripcd.cpp +++ b/ripcd/ripcd.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -701,6 +702,22 @@ void MainObject::ReadRmlSocket(QSocketDevice *dev,RDMacro::Role role, while((n=dev->readBlock(buffer,RD_RML_MAX_LENGTH))>0) { buffer[n]=0; if(macro.parseString(buffer,n)) { + if(macro.command()==RDMacro::AG) { + if(ripc_onair_flag) { + QStringList f0=f0.split(" ",buffer); + f0.pop_front(); + QString rmlstr=f0.join(" "); + if(!macro.parseString(rmlstr,rmlstr.length())) { + break; + } + } + else { + LogLine(RDConfig::LogDebug, + QString("rejected rml: \"")+buffer+ + "\": on-air flag not active"); + break; + } + } macro.setRole(role); macro.setAddress(dev->peerAddress()); macro.setEchoRequested(echo);