From efd0b2fd867d181d2d9313a095bd9f0afb9e29d4 Mon Sep 17 00:00:00 2001 From: OH1KH Date: Wed, 2 Dec 2020 10:51:26 +0200 Subject: [PATCH] Fixes for N1MM remote JS8CALL has changed it's UDP datagrams in version 2.2.2. UDP frame having clear ADIF content has been removed (it still exist in v2.2.2-devel) that stops logging to work with cqrlog's N1MM remote. They use now JSON based UDP frames but the same ADIF content can be found from inside of logging UDP frame. To make N1MM remote work with old and new versions of JS8CALL the detecting procedure has bee rewritten. Naming "N1MM remote" has been changed to "ADIF remote" as there has been misunderstoods that N1MM contest logger could be connected to cqrlog. ADIF remote can read ADIF tags from UDP datagram as follows: - Datagram has full ADIF export including proper header and one or more qso records.(used by wsjt-x primary UDP datagram) - Datagram has qso record without header starting with tag " (used by wsjt-x secondary UDP datagram) - Datagram has JSON record including 'LOG.QSO","value":' followed by ADIF tags starting with tag " Date: Wed Dec 2 09:51:38 2020 +0200 Fine tuning after testing commit a02bce3cd5cf441a513e58776d729c008d4a7190 Author: OH1KH Date: Tue Dec 1 19:19:13 2020 +0200 small fix commit 7612263261951dfe462ab9c991fe05d9a7f43e30 Author: OH1KH Date: Tue Dec 1 19:16:00 2020 +0200 help fix commit 8d4003b2e6f3e34af6a7f444ecde07dc9c3a5289 Author: OH1KH Date: Tue Dec 1 18:45:00 2020 +0200 Seems to work now as expected. commit 8413409baa4303146f281f3fdf125a0f9994ed37 Author: OH1KH Date: Tue Dec 1 12:57:44 2020 +0200 Settings to separate adif datagram and json datagram including adif. Help fixes commit d3fc4b66a084530c66948ecdbe644b1aed7ea4e5 Author: OH1KH Date: Tue Dec 1 11:26:06 2020 +0200 Initial naming change from N1MM to ADIF --- help/{n1mm.html => adif.html} | 19 +- help/h1.html | 14 +- help/h20.html | 4 +- help/img/adif1.png | Bin 0 -> 19052 bytes help/img/{n1mm2.png => adif2.png} | Bin help/img/adif3.png | Bin 0 -> 33348 bytes help/img/n1mm1.png | Bin 22621 -> 0 bytes help/img/n1mm3.png | Bin 13899 -> 0 bytes help/index_left.html | 4 +- src/fNewQSO.lfm | 18 +- src/fNewQSO.pas | 300 ++++++++++++++++++------------ src/fPreferences.lfm | 26 +-- src/fPreferences.pas | 18 +- 13 files changed, 236 insertions(+), 167 deletions(-) rename help/{n1mm.html => adif.html} (66%) create mode 100644 help/img/adif1.png rename help/img/{n1mm2.png => adif2.png} (100%) create mode 100644 help/img/adif3.png delete mode 100644 help/img/n1mm1.png delete mode 100644 help/img/n1mm3.png diff --git a/help/n1mm.html b/help/adif.html similarity index 66% rename from help/n1mm.html rename to help/adif.html index 3e0e0ed..1b6a40e 100644 --- a/help/n1mm.html +++ b/help/adif.html @@ -39,20 +39,27 @@ function goBack() {

-

N1MM logger remote

- -

N1MM logger remote connection is just for copying logged qso infromation from other program like wsjt-x or js8call (or similars that support this kind of logging) to cqrlog. +

ADIF logger remote

+ +

ADIF remote connection (former "N1MM+ remote logger") is just for copying logged qso infromation from other program like wsjt-x or js8call (or similars that support this kind of logging) to cqrlog. There is no other finctionality than just transfer the logged data. +

ADIF remote can read adif tags from UDP datagram as follows: +

    +
  • Datagram has full adif export including proper header and one or more qso records.(used by wsjt-x primary UDP datagram)
  • +
  • Datagram has qso record without header starting with tag "<CALL" and ending to <EOR> (used by wsjt-x secondary UDP datagram)
  • +
  • Datagram has JSON record including 'LOG.QSO","value":' followed by adif tags starting with tag "<CALL" and ending to '"}'
  • +

Remote mode is activated from NewQSO/File selection list, or pressing Ctrl-K when NewQSO window is focused.

- +
Settings must be done at wsjt-x or js8call Settings/reporting. At least checking the checkbox. Port and address values can be defaults.

-
+
No indication of logging can be seen unless user has set "cqrlog/preferences/NewQSO/Show recent qso records for last X days" active.
If this is set, after pressing "OK" at companion program's logging window logged qso will appear to cqrlog's NewQSO recent qsos list. +If QSO list window is open and "cqrlog/preferences/NewQSQ/Refresh data after save qso" is checked QSO list is also updated after QSO is logged.

-N1MM remote can not be used at same time as fldigi or wsjt remotes.
How ever if you allow N1MM logger support at wsjt-x and js8call settings and choose remote mode for N1MM from cqrlog you can keep both programs running at same time if your rigctld settings support that. +ADIF remote can not be used at same time as fldigi or wsjt remotes.
How ever if you allow ADIF logger support at wsjt-x and js8call settings and choose remote mode for ADIF from cqrlog you can keep both programs running at same time if your rigctld settings support that. See: setting_rigctld_for_all_programs, and log qsos from both programs to cqrlog without problems.


diff --git a/help/h1.html b/help/h1.html index 4ae4479..62e5d0e 100644 --- a/help/h1.html +++ b/help/h1.html @@ -57,7 +57,7 @@
  • fldigi interface
  • fldigi XmlRpc remote
  • wsjt-x interface
  • -
  • N1MM interface
  • +
  • ADIF interface
  • Exit & Auto backup
  • External viewers
  • Callbook support
  • @@ -620,19 +620,19 @@ There are no known dependencies issues.

    Pressing calendar icon is easy way to set date. Double click on selected date closes calendar and sets the date. Pressing ESC closes calendar, but does not set date. Date can also be typed in manually.

    -

    N1MM interface

    - Setting of N1MM interface is similar as wsjt-x interface. Only IP address and PORT have to be set if they are not defaults. +

    ADIF interface

    + Setting of ADIF interface is similar as wsjt-x interface. Only IP address and PORT have to be set if they are not defaults.
    Default values are 127.0.0.1 or localhost for address and 2333 for port. These are set in wsjt-x, or js8call, settings/reporting and if changed there, must also to be changed here.
    Address can also be other PC's IP address if wsjt-x is running in different networked PC than cqrlog, or even 0.0.0.0 when cqrlog listens all transmits from every wsjt-x in network.

    - At WSJT-X 2.1.0 settings N1MM remote is renamed to "Secondary UDP server (deprecated)" and it is reported to be removed completely in future. Because of that it is now possible to set cqrlog's N1MM port to wsjt-x UDP server port number. WSJT-X 2.1.x UDP frames contain message #12 that - includes log information in ADIF format and N1MM remote can now parse that from binary data if you do not like to have monitoring properties (using wsjt remote) but want just qso logging (using N1MM remote). + At WSJT-X 2.1.0 settings ADIF remote is renamed to "Secondary UDP server (deprecated)" and it is reported to be removed completely in future. Because of that it is now possible to set cqrlog's ADIF port to wsjt-x UDP server port number. WSJT-X 2.1.x UDP frames contain message #12 that + includes log information in ADIF format and ADIF remote can now parse that from binary data if you do not like to have monitoring properties (using wsjt remote) but want just qso logging (using ADIF remote).

    - N1MM remote has now better support for QRZ/HamQTH info fetch. If this is not allowed in preferences, or if there is no reponse from Web max waiting time (timeout) is 5 seconds (You can not remove this property, so be patient. You can not have new qso for logging during 5 seconds!). + ADIF remote has now better support for QRZ/HamQTH info fetch. If this is not allowed in preferences, or if there is no reponse from Web max waiting time (timeout) is 5 seconds (You can not remove this property, so be patient. You can not have new qso for logging during 5 seconds!).
    While having qso you can write some notes like Name, QTH, Comment to QSO, etc. to NewQSO and it will saved with qso data during next wsjt-x "log qso/OK" event. They will not be overwritten by possible Qrz/HamQth info.

    - NOTE !! Wstx- does not send contest -name, -number and -string in ADIF logging datagram. Contest exchanges are placed to regular rst_s and rst_r strings. So cqrlog can not fill proper contest columns when logging is done with ADIF datagram using N1MM remote. + NOTE !! Wstx- does not send contest -name, -number and -string in ADIF logging datagram. Contest exchanges are placed to regular rst_s and rst_r strings. So cqrlog can not fill proper contest columns when logging is done with ADIF datagram using ADIF remote.

    Exit & Auto backup

    diff --git a/help/h20.html b/help/h20.html index fc4337c..66c7586 100644 --- a/help/h20.html +++ b/help/h20.html @@ -95,7 +95,7 @@ Ctrl-K - Remote mode for N1MM logger + Remote mode for ADIF logger Ctrl-L @@ -441,7 +441,7 @@ best digimode softwares available.
    For wsjt-x, setup is done at same tab of preferences as fldigi. For operating with wsjt-x see: Wsjt-x operation

    To use fldigi, CQRLOG must be switched to Remote from the menu File -> Remote mode for fldigi(or Ctrl-M).
    To use wsjt-x, CQRLOG must be switched to Remote from the menu File -> Remote mode for wsjt. -
    To use N1MM logger, CQRLOG must be switched to Remote from the menu File -> Remote mode for N1MM logger.

    +
    To use ADIF logger, CQRLOG must be switched to Remote from the menu File -> Remote mode for ADIF logger.



    The logging screen changes to indicate that CQRLOG is now working in 'Remote mode!' and can be controlled either from fldigi or can "dictate" the mode and frequency diff --git a/help/img/adif1.png b/help/img/adif1.png new file mode 100644 index 0000000000000000000000000000000000000000..958f7932e64a4e52403810819291d4f112a2fdd9 GIT binary patch literal 19052 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 TWc3NYsEixq;&jMi#)|(1bucMS literal 0 HcmV?d00001 diff --git a/help/img/n1mm1.png b/help/img/n1mm1.png deleted file mode 100644 index 1fc4ab236cccd549958f3799784e89b75d147bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22621 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 I#g_s91v45Gtc0YDkiA8Ak}YIsCNd(~ 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 N3+FD&zmqla{9k1x(k}o2 diff --git a/help/index_left.html b/help/index_left.html index d629d4e..03ad61a 100644 --- a/help/index_left.html +++ b/help/index_left.html @@ -36,7 +36,7 @@
  • Voice messages
  • fldigi interface
  • wsjt-x interface
  • -
  • N1MM interface
  • +
  • ADIF remote interface
  • Auto backup
  • External viewers
  • Callbook support
  • @@ -57,7 +57,7 @@
  • CW Type
  • Digital modes: fldigi
  • Digital modes: fldigi XmlRpc
  • -
  • Digital modes: N1MM
  • +
  • Digital modes: ADIF remote
  • Digital modes: wsjt-x
  • DX Cluster Operation
  • Filtering
  • diff --git a/src/fNewQSO.lfm b/src/fNewQSO.lfm index 2184606..9f149d4 100644 --- a/src/fNewQSO.lfm +++ b/src/fNewQSO.lfm @@ -4941,11 +4941,11 @@ object frmNewQSO: TfrmNewQSO ShortCut = 16458 OnClick = acRemoteWsjtExecute end - object mnuRemoteModeN1MM: TMenuItem - Action = acRemoteModeN1MM - Caption = 'Remote mode for N1MM logger' + object mnuRemoteModeADIF: TMenuItem + Action = acRemoteModeADIF + Caption = 'Remote mode for ADIF' ShortCut = 16459 - OnClick = acRemoteModeN1MMExecute + OnClick = acRemoteModeADIFExecute end object MenuItem59: TMenuItem Caption = '-' @@ -5774,10 +5774,10 @@ object frmNewQSO: TfrmNewQSO Caption = 'Contest' OnExecute = acContestExecute end - object acRemoteModeN1MM: TAction + object acRemoteModeADIF: TAction Category = 'File' - Caption = 'N1MM' - OnExecute = acRemoteModeN1MMExecute + Caption = 'ADIF' + OnExecute = acRemoteModeADIFExecute end end object imgMain: TImageList @@ -7267,9 +7267,9 @@ object frmNewQSO: TfrmNewQSO left = 392 top = 720 end - object tmrN1MM: TTimer + object tmrADIF: TTimer Enabled = False - OnTimer = tmrN1MMTimer + OnTimer = tmrADIFTimer left = 800 top = 32 end diff --git a/src/fNewQSO.pas b/src/fNewQSO.pas index 4ad8b03..0676fe6 100644 --- a/src/fNewQSO.pas +++ b/src/fNewQSO.pas @@ -32,7 +32,7 @@ const cCntyVersionCheckUrl = 'http://www.ok2cqr.com/linux/cqrlog/ctyfiles/ver.dat'; type - TRemoteModeType = (rmtFldigi, rmtWsjt, n1mm); + TRemoteModeType = (rmtFldigi, rmtWsjt, rmtADIF); type @@ -81,7 +81,7 @@ type acProp: TAction; acReminder: TAction; acContest: TAction; - acRemoteModeN1MM: TAction; + acRemoteModeADIF: TAction; acUploadToAll: TAction; acUploadToHrdLog: TAction; acUploadToClubLog: TAction; @@ -142,7 +142,7 @@ type MenuItem63: TMenuItem; MenuItem94 : TMenuItem; mnueQSLView: TMenuItem; - mnuRemoteModeN1MM: TMenuItem; + mnuRemoteModeADIF: TMenuItem; mnuReminder: TMenuItem; MenuItem86: TMenuItem; MenuItem87: TMenuItem; @@ -357,7 +357,7 @@ type tabDXCCStat : TTabSheet; tabSatellite : TTabSheet; tabLOConfig: TTabSheet; - tmrN1MM: TTimer; + tmrADIF: TTimer; tmrWsjtSpd: TTimer; tmrWsjtx: TTimer; tmrUploadAll: TTimer; @@ -388,7 +388,7 @@ type procedure acSCPExecute(Sender : TObject); procedure acSendSpotExecute(Sender : TObject); procedure acShowStatBarExecute(Sender: TObject); - procedure acRemoteModeN1MMExecute(Sender: TObject); + procedure acRemoteModeADIFExecute(Sender: TObject); procedure acTuneExecute(Sender : TObject); procedure acUploadToAllExecute(Sender: TObject); procedure acUploadToClubLogExecute(Sender: TObject); @@ -568,7 +568,7 @@ type procedure tmrEndStartTimer(Sender: TObject); procedure tmrEndTimer(Sender: TObject); procedure tmrFldigiTimer(Sender: TObject); - procedure tmrN1MMTimer(Sender: TObject); + procedure tmrADIFTimer(Sender: TObject); procedure tmrRadioTimer(Sender: TObject); procedure tmrStartStartTimer(Sender: TObject); procedure tmrStartTimer(Sender: TObject); @@ -614,6 +614,7 @@ type WsjtxDecodeRunning : boolean; RememberAutoMode : Boolean; + IsJS8Callrmt : Boolean; //way to isolate adif from JS8's JSON Op : String; procedure showDOK(stat:boolean); @@ -673,7 +674,7 @@ type WsjtxSock : TUDPBlockSocket; //receive socket WsjtxSockS : TUDPBlockSocket; //multicast send socket - N1MMSock : TUDPBlockSocket; + ADIFSock : TUDPBlockSocket; WsjtxMode : String; //Moved from private WsjtxBand : String; @@ -683,7 +684,7 @@ type was_call : String; //holds recent edtCallsign.text before it was cleared FldigiXmlRpc : Boolean; - AnyRemoteOn : Boolean; //true if any of remotes fldigi,wsjt,or n1mm is active); + AnyRemoteOn : Boolean; //true if any of remotes fldigi,wsjt,or ADIF is active); ClearAfterFreqChange : Boolean; ChangeFreqLimit : Double; @@ -2089,111 +2090,171 @@ begin end; -procedure TfrmNewQSO.tmrN1MMTimer(Sender: TObject); +procedure TfrmNewQSO.tmrADIFTimer(Sender: TObject); var Buf, + buf2, prik, - data:string; + data :string; chkDuplicates :boolean; - i:longint; - l:integer; + i :longint; + a,b,l :integer; begin - tmrN1MM.Enabled:=false; + tmrADIF.Enabled:=false; chkDuplicates:=false; - if N1MMsock.WaitingData > 0 then + if ADIFsock.WaitingData > 0 then Begin - if dmData.DebugLevel>=1 then Writeln('N1MM has data'); - while N1MMsock.WaitingData > 0 do //do all pending messages in one go + if dmData.DebugLevel>=1 then Writeln('rmtADIF has data. JS8CALL mode is now ',IsJS8Callrmt); + while ADIFsock.WaitingData > 0 do //do all pending messages in one go begin - Buf := N1MMsock.RecvPacket(1000); - if dmData.DebugLevel>=1 then Writeln('N1MM read data'); - if N1MMSock.lasterror=0 then + Buf := trim(ADIFsock.RecvPacket(500)); //Read all data waitingtimeout 500ms + if dmData.DebugLevel>=1 then Writeln('rmtADIF read data'); + if ADIFSock.lasterror=0 then begin - //check data. Is there string ' 0 then - Begin - if dmData.DebugLevel>=1 then writeln('adif_ver found'); - Begin //cut all before ' 0 then - Begin - if dmData.DebugLevel>=1 then writeln(Buf); - //this is fake as call info(qslmgr) needs date. We use current date if call tag comes before qso_date tag - //qso_date will then replace this - edtDate.Text := FormatDateTime('YYYY-MM-DD',now()); - repeat + //check data. + //if JS8CALL JSON with ADIF inside + a:= pos('"LOG.QSO","value":"',Buf); + b:= pos('"}',Buf); + if (a>0 ) and (b>0) then + Begin + IsJS8Callrmt:=true; //once this is set it resets only when remote is closed + lblCall.Caption := 'rmt ADIF JS8CALL'; + Buf:=copy(Buf,a+19,length(Buf)-a-19-1)+' '; + if dmData.DebugLevel>=1 then writeln('Modified JS8CALL JSON: ',Buf); + end + else + begin + //if not JS8CALL and has proper ADIF header with at least one qso record with CALL and EOR (wsjt-x primary UDP msg #12) + if not IsJS8Callrmt then + Begin + a:=pos('',uppercase (Buf)); + if (a>0) and (b>0) then //proper adif block starts with header + Begin + if dmData.DebugLevel>=1 then writeln('ADIF_VER header block found!'); + Buf:=copy(Buf,b+5,length(Buf)); + a:=pos('',uppercase (Buf)); + if (b>a) and (a>0) and (b>0) then + Begin + if dmData.DebugLevel>=1 then writeln('There seems to be at least one qso record!') + end + else + Begin + if dmData.DebugLevel>=1 then writeln('There seems to be something wrong with qso record(s)!'); + tmrADIF.Enabled:=true; + exit; + end; + end; + + + //if not JS8CALL and not proper ADIF header but has CALL and EOR (wsjt-x secondary UDP frame) + if (a=0) and (b=0) then + Begin + a:=pos('',uppercase (Buf)); + if (a>0) and (b>0) then + Begin + if dmData.DebugLevel>=1 then writeln('There seems to be at least one qso record!') + end + else + Begin + if dmData.DebugLevel>=1 then writeln('No qso record(s)!'); + tmrADIF.Enabled:=true; + exit; + end; + end; + end + else + Begin //this will block the second adif frame sent by JS8CALL without JSON and ADIF header + tmrADIF.Enabled:=true; + exit; + end; + end; //else JS8CALL with JSON included ADIF + + Buf2:=Buf; + //here check if several qsos in block + repeat //here check if several qsos in block begin - if frmAdifImport.getNextAdifTag(Buf,prik,data) then - if dmData.DebugLevel>=1 then - Begin - write(prik,'->'); - writeln(data); - end; - case uppercase(prik) of - 'CALL' : Begin - edtCall.Text := uppercase(data); - c_lock :=false; - edtCallExit(nil); //does info fetch - WaitWeb(5); //wait for web response 5sec timeout - end; - 'GRIDSQUARE' :Begin - data := uppercase(data); - if dmUtils.IsLocOK(data) then - if pos(data,edtGrid.Text)=0 then //if qso loc does not fit to QRZ loc , or qrz loc is empty - edtGrid.Text := data; //replace qrz loc, otherwise keep it - end; - 'MODE' : cmbMode.Text := uppercase(data); - //now this overrides MODE, if exists - 'SUBMODE' : cmbMode.Text := uppercase(data); - 'FREQ' : cmbFreq.Text := data; - 'RST_SENT' : edtHisRST.Text := data; - 'RST_RCVD' : edtMyRST.Text := data; - 'QSO_DATE' : Begin - edtDate.Text := copy(data,1,4)+'-'+ - copy(data,5,2)+'-'+ - copy(data,7,2); - end; - 'TIME_ON' : edtStartTime.Text := copy(data,1,2)+':'+ copy(data,3,2); - 'TIME_OFF': edtStartTime.Text := copy(data,1,2)+':'+ copy(data,3,2); - 'TX_PWR' : edtPWR.Text := data; - 'NAME' : if edtName.Text='' then edtName.Text := data; - 'QTH' : if edtQTH.Text='' then edtQTH.Text := data; - 'COMMENT': if edtRemQSO.Text = '' then edtRemQSO.Text := data; - 'NAME_INTL' : if edtName.Text='' then edtName.Text := data; - 'QTH_INTL' : if edtQTH.Text='' then edtQTH.Text := data; - 'COMMENT_INTL': if edtRemQSO.Text = '' then edtRemQSO.Text := data; - 'IOTA' : if cmbIOTA.Text = '' then cmbIOTA.Text := data; - 'STATE' : if edtState.Text='' then edtState.Text := data; - 'CQZ' : edtWaz.Text := data; - 'ITUZ' : edtITU.Text := data; - 'CONTEST_ID': edtContestName.Text := data; - 'STX': edtContestSerialSent.Text := data; - 'SRX': edtContestSerialReceived.Text := data; - //N1MM logger+ definition does not have STXString tag. Added anyway(future?). - 'STX_STRING':edtContestExchangeMessageSent.Text := data; - //same with SRX - 'SRX_STRING': edtContestExchangeMessageReceived.Text:= data; - 'OPERATOR': Begin - if ((data<>'') and (Op = UpperCase(cqrini.ReadString('Station', 'Call', '')))) then - Begin - Op := data; - sbNewQSO.Panels[2].Text := cOperator+Op; - end; - end; - end; //case - end; //repeat + b:=pos('',uppercase(buf2)); + buf:=copy(Buf2,1,b+5); //holds one record + buf2:= copy(buf2,b+6,length(buf2)); //holds remaining records + //check now that at least tag ' 0 then + Begin + if dmData.DebugLevel>=1 then writeln('Handle qso record: ',Buf); + //this is fake as call info(qslmgr) needs date. We use current date if call tag comes before qso_date tag + //qso_date will then replace this + edtDate.Text := FormatDateTime('YYYY-MM-DD',now()); + repeat + begin + if frmAdifImport.getNextAdifTag(Buf,prik,data) then + if dmData.DebugLevel>=1 then + Begin + write(prik,'->'); + writeln(data); + end; + case uppercase(prik) of + 'CALL' : Begin + edtCall.Text := uppercase(data); + c_lock :=false; + edtCallExit(nil); //does info fetch + WaitWeb(5); //wait for web response 5sec timeout + end; + 'GRIDSQUARE' :Begin + data := uppercase(data); + if dmUtils.IsLocOK(data) then + if pos(data,edtGrid.Text)=0 then //if qso loc does not fit to QRZ loc , or qrz loc is empty + edtGrid.Text := data; //replace qrz loc, otherwise keep it + end; + 'MODE' : cmbMode.Text := uppercase(data); + //now this overrides MODE, if exists + 'SUBMODE' : cmbMode.Text := uppercase(data); + 'FREQ' : cmbFreq.Text := data; + 'RST_SENT' : edtHisRST.Text := data; + 'RST_RCVD' : edtMyRST.Text := data; + 'QSO_DATE' : Begin + edtDate.Text := copy(data,1,4)+'-'+ + copy(data,5,2)+'-'+ + copy(data,7,2); + end; + 'TIME_ON' : edtStartTime.Text := copy(data,1,2)+':'+ copy(data,3,2); + 'TIME_OFF' : edtEndTime.Text := copy(data,1,2)+':'+ copy(data,3,2); + 'TX_PWR' : edtPWR.Text := data; + 'NAME_INTL','NAME' : if (data<>edtName.Text) and (data<>'') then edtName.Text := data; + 'QTH_INTL','QTH' : if (data<>edtQTH.Text) and (data<>'') then edtQTH.Text := data; + 'COMMENT_INTL','COMMENT' : if (data<>edtRemQSO.Text) and (data<>'') then edtRemQSO.Text := data; + 'IOTA' : if cmbIOTA.Text = '' then cmbIOTA.Text := data; + 'STATE' : if edtState.Text='' then edtState.Text := data; + 'CQZ' : edtWaz.Text := data; + 'ITUZ' : edtITU.Text := data; + 'CONTEST_ID': edtContestName.Text := data; + 'STX' : edtContestSerialSent.Text := data; + 'SRX' : edtContestSerialReceived.Text := data; + //ADIF logger+ definition does not have STXString tag. Added anyway(future?). + 'STX_STRING':edtContestExchangeMessageSent.Text := data; + //same with SRX + 'SRX_STRING': edtContestExchangeMessageReceived.Text:= data; + 'OPERATOR' : Begin + if ((data<>'') and (Op = UpperCase(cqrini.ReadString('Station', 'Call', '')))) then + Begin + Op := data; + sbNewQSO.Panels[2].Text := cOperator+Op; + end; + end; + end; //case + end; //repeat + until pos('',uppercase(Buf))=1; + SaveRemote; + buf:=copy(buf,6,length(buf)); //cut eof away. + end; // has tag call + end; //here check if several qsos in block until Buf = ''; - SaveRemote; - end; // has tag call end; //lasterror=0 end; // while waiting data end; //if waiting data - tmrN1MM.Enabled:=true; + tmrADIF.Enabled:=true; end; procedure TfrmNewQSO.tmrRadioTimer(Sender: TObject); @@ -3088,7 +3149,7 @@ begin end; { The latest UDP message protocol as always is documented in the latest revision of the NetworkMessage.hpp header file: - https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/NetworkMessage.hpp + https://sourceforge.net/p/wsjt/wsjtx/ci/master/tree/Network/NetworkMessage.hpp The reference implementations, particularly message_aggregator, can always be used to verify behaviour or to construct a recipe to replicate an issue. @@ -4497,12 +4558,12 @@ begin end end; -procedure TfrmNewQSO.acRemoteModeN1MMExecute(Sender: TObject); +procedure TfrmNewQSO.acRemoteModeADIFExecute(Sender: TObject); begin - if mnuRemoteModeN1MM.Checked then + if mnuRemoteModeADIF.Checked then DisableRemoteMode else - GoToRemoteMode(n1mm) + GoToRemoteMode(rmtADIF) end; procedure TfrmNewQSO.acTuneExecute(Sender : TObject); @@ -7224,7 +7285,7 @@ begin chkAutoMode.Checked := False; if mnuRemoteModeWsjt.Checked then //not both on at same time DisableRemoteMode; - if mnuRemoteModeN1MM.Checked then //not both on at same time + if mnuRemoteModeADIF.Checked then //not both on at same time DisableRemoteMode; mnuRemoteMode.Checked := True; AnyRemoteOn := True; @@ -7242,7 +7303,7 @@ begin chkAutoMode.Checked := False; if mnuRemoteMode.Checked then //not both on at same time DisableRemoteMode; - if mnuRemoteModeN1MM.Checked then //not both on at same time + if mnuRemoteModeADIF.Checked then //not both on at same time DisableRemoteMode; mnuRemoteModeWsjt.Checked := True; AnyRemoteOn := True; @@ -7318,7 +7379,7 @@ begin if cqrini.ReadBool('Window','MonWsjtx',true) then acMonitorWsjtxExecute(nil) end; - n1mm : begin + rmtADIF : begin RememberAutoMode := chkAutoMode.Checked; chkAutoMode.Checked := False; if mnuRemoteModeWsjt.Checked then //not both on at same time wsjt @@ -7326,33 +7387,34 @@ begin if mnuRemoteMode.Checked then //not both on at same time fldigi DisableRemoteMode; - mnuRemoteModeN1MM.Checked := True; + mnuRemoteModeADIF.Checked := True; AnyRemoteOn := True; - lblCall.Caption := 'N1MM logger+'; + lblCall.Caption := 'remote ADIF'; + IsJS8Callrmt := false; // start UDP server http://synapse.ararat.cz/doc/help/blcksock.TBlockSocket.html //use lot of wsjtx stuff as it can not be running at same time - N1MMSock := TUDPBlockSocket.Create; + ADIFSock := TUDPBlockSocket.Create; if dmData.DebugLevel>=1 then Writeln('Socket created!'); - N1MMSock.EnableReuse(true); + ADIFSock.EnableReuse(true); if dmData.DebugLevel>=1 then Writeln('Reuse enabled!'); try //fix these in preferences - N1MMSock.bind(cqrini.ReadString('n1mm','ip','127.0.0.1'),cqrini.ReadString('n1mm','port','2333')); + ADIFSock.bind(cqrini.ReadString('n1mm','ip','127.0.0.1'),cqrini.ReadString('n1mm','port','2333')); if dmData.DebugLevel>=1 then Writeln('Bind issued '+cqrini.ReadString('n1mm','ip','127.0.0.1')+ ':'+cqrini.ReadString('n1mm','port','2333')); // On bind failure try to rebind every second - while ((N1MMSock.LastError <> 0) and (tries > 0 )) do + while ((ADIFSock.LastError <> 0) and (tries > 0 )) do begin dec(tries); sleep(1000); - N1MMSock.bind(cqrini.ReadString('n1mm','ip','127.0.0.1'),cqrini.ReadString('n1mm','port','2333')); + ADIFSock.bind(cqrini.ReadString('n1mm','ip','127.0.0.1'),cqrini.ReadString('n1mm','port','2333')); end; - tmrN1MM.Enabled := True; + tmrADIF.Enabled := True; except - {if dmData.DebugLevel>=1 then} Writeln('Could not bind socket for N1MM!'); - edtRemQSO.Text := 'Could not bind socket for N1MM!'; + {if dmData.DebugLevel>=1 then} Writeln('Could not bind socket for ADIF!'); + edtRemQSO.Text := 'Could not bind socket for ADIF!'; DisableRemoteMode; exit end; @@ -7405,11 +7467,11 @@ begin AnyRemoteOn := False; end ; - if mnuRemoteModeN1MM.Checked then + if mnuRemoteModeADIF.Checked then begin - tmrN1MM.Enabled:=false; - if Assigned(N1MMSock) then FreeAndNil(N1MMSock); // to release UDP socket - mnuRemoteModeN1MM.Checked:= False; + tmrADIF.Enabled:=false; + if Assigned(ADIFSock) then FreeAndNil(ADIFSock); // to release UDP socket + mnuRemoteModeADIF.Checked:= False; AnyRemoteOn := False; end; diff --git a/src/fPreferences.lfm b/src/fPreferences.lfm index c00ef63..2134f37 100644 --- a/src/fPreferences.lfm +++ b/src/fPreferences.lfm @@ -7500,7 +7500,7 @@ object frmPreferences: TfrmPreferences object lblwsjtport: TLabel AnchorSideLeft.Control = edtWsjtPort AnchorSideLeft.Side = asrCenter - AnchorSideTop.Control = lbln1mmport + AnchorSideTop.Control = lblADIFport AnchorSideBottom.Side = asrBottom Left = 603 Height = 17 @@ -7511,9 +7511,9 @@ object frmPreferences: TfrmPreferences ParentColor = False end object edtWsjtPort: TEdit - AnchorSideLeft.Control = edtN1MMPort + AnchorSideLeft.Control = edtADIFPort AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = edtN1MMPort + AnchorSideTop.Control = edtADIFPort AnchorSideRight.Side = asrBottom Left = 596 Height = 25 @@ -7708,7 +7708,7 @@ object frmPreferences: TfrmPreferences Text = ' . . ' end end - object edtN1MMPort: TEdit + object edtADIFPort: TEdit AnchorSideLeft.Control = GroupBox52 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = GroupBox52 @@ -7721,7 +7721,7 @@ object frmPreferences: TfrmPreferences BorderSpacing.Top = 18 TabOrder = 8 end - object lbln1mmport: TLabel + object lblADIFport: TLabel AnchorSideLeft.Control = GroupBox52 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = GroupBox52 @@ -7732,12 +7732,12 @@ object frmPreferences: TfrmPreferences Width = 83 BorderSpacing.Left = 12 BorderSpacing.Bottom = 35 - Caption = 'N1MM port:' + Caption = 'ADIF port:' ParentColor = False end - object edtn1mmIp: TEdit - AnchorSideLeft.Control = edtN1MMPort - AnchorSideTop.Control = lbln1mmaddr + object edtADIFIp: TEdit + AnchorSideLeft.Control = edtADIFPort + AnchorSideTop.Control = lblADIFaddr AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 500 @@ -7747,17 +7747,17 @@ object frmPreferences: TfrmPreferences BorderSpacing.Top = 2 TabOrder = 9 end - object lbln1mmaddr: TLabel - AnchorSideLeft.Control = edtn1mmIp + object lblADIFaddr: TLabel + AnchorSideLeft.Control = edtADIFIp AnchorSideLeft.Side = asrCenter - AnchorSideTop.Control = edtN1MMPort + AnchorSideTop.Control = edtADIFPort AnchorSideTop.Side = asrBottom Left = 498 Height = 17 Top = 51 Width = 84 BorderSpacing.Top = 2 - Caption = 'N1MM addr:' + Caption = 'ADIF addr:' ParentColor = False end end diff --git a/src/fPreferences.pas b/src/fPreferences.pas index e930475..ffbf37d 100644 --- a/src/fPreferences.pas +++ b/src/fPreferences.pas @@ -600,11 +600,11 @@ type edtK3NGPort1: TEdit; edtK3NGSpeed: TSpinEdit; edtFldigiIp: TEdit; - edtn1mmIp: TEdit; + edtADIFIp: TEdit; edtWsjtPath: TEdit; edtWsjtPort: TEdit; edtFldigiPort: TEdit; - edtN1MMPort: TEdit; + edtADIFPort: TEdit; edtXRefresh: TEdit; edtXLastSpots: TEdit; edtXTop: TEdit; @@ -831,8 +831,8 @@ type lblHamLibSpeed: TLabel; lblHamLibWPM: TLabel; Label202: TLabel; - lbln1mmport: TLabel; - lbln1mmaddr: TLabel; + lblADIFport: TLabel; + lblADIFaddr: TLabel; lblWinPort2: TLabel; lblwsjtport: TLabel; Label204: TLabel; @@ -1561,8 +1561,8 @@ begin cqrini.WriteBool('wsjt','wb4CCall', cgLimit.Checked[0]); cqrini.WriteBool('wsjt','wb4CLoc', cgLimit.Checked[1]); - cqrini.WriteString('n1mm','port',edtn1mmPort.Text); - cqrini.WriteString('n1mm','ip',edtn1mmIp.Text); + cqrini.WriteString('n1mm','port',edtADIFPort.Text); + cqrini.WriteString('n1mm','ip',edtADIFIp.Text); if edtBackupPath.Text <> '' then if edtBackupPath.Text[Length(edtBackupPath.Text)] <> PathDelim then @@ -1797,7 +1797,7 @@ var 'h1.html#bh3', //zip code tracking 'h1.html#bh4', //lotw support 'h1.html#ch1', //cw interface - 'h1.html#ch2', //fldigi wsjt-x n1mm interface + 'h1.html#ch2', //fldigi wsjt-x ADIF interface 'h1.html#ch3', //autobackup 'h1.html#ch4', //external viewers 'h1.html#ch5', //callbook support @@ -3083,8 +3083,8 @@ begin cgLimit.Checked[0] := cqrini.ReadBool('wsjt','wb4CCall', False); cgLimit.Checked[1] := cqrini.ReadBool('wsjt','wb4CLoc', False); - edtn1mmPort.Text := cqrini.ReadString('n1mm','port','2333'); - edtn1mmIp.Text := cqrini.ReadString('n1mm','ip','127.0.0.1'); + edtADIFPort.Text := cqrini.ReadString('n1mm','port','2333'); + edtADIFIp.Text := cqrini.ReadString('n1mm','ip','127.0.0.1'); chkEnableBackup.Checked := cqrini.ReadBool('Backup', 'Enable', False);