mirror of
https://github.com/ok2cqr/cqrlog.git
synced 2024-09-21 10:27:17 +00:00
Added serial CW keyer commanding menu item
Suddenly noticed that my winkeyer and IC7300 have different order of CW paddle plug's pin order. It was ok with IC7300, reverse with winkey. Fastest way to fix this is to set/reset winkeyer moderegister bit4 This could not be done with Cqrlog as it sends only text to winkeyer. Added menuitem: NewQSO/File/Send hex bytes to keyer (W or K) Item is visible with winkeyer or K3NG keyer and allows non text hex bytes to be sent to serial line. Tested with Winkeyer. I do not have K3NG to test but assume it possible can be useful also with it in some cases. The serial sending protocol is same with both keyers. Help files fixed.
This commit is contained in:
parent
98a8ba5d0d
commit
2a04c27459
@ -75,7 +75,14 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</p><a name=mk1><br></a> <img src="img/misc8.png" name="8" width="500" height="85">
|
</p>
|
||||||
|
<p>
|
||||||
|
<img src=img/h96a.png><br>
|
||||||
|
<strong>Send hex bytes to keyer</strong>. Will send hex bytes to Winkeyer or K3NG allowing non charcter bytes to be sent from Cqrlog in case there sudden need to change some of keyer's settings.
|
||||||
|
<br>Consult your keyer's manual to find needed commands.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a name=mk1><br></a> <img src="img/misc8.png" name="8" width="500" height="85">
|
||||||
</img>
|
</img>
|
||||||
<p><strong>Memory keys</strong> form has buttons PgUp and PgDn that are not configurable. They alter CW speed in same way as keyboard keys PgUp and PgDn that some, specially laptop computers, may not even have.
|
<p><strong>Memory keys</strong> form has buttons PgUp and PgDn that are not configurable. They alter CW speed in same way as keyboard keys PgUp and PgDn that some, specially laptop computers, may not even have.
|
||||||
<br>When using <strong>Memory keys</strong>-form with mouse, or keyboard, you are able to lauch memories by mouse click or by <strong>F</strong>-key press from keyboard keys. Same with PgUp and PgDn, both are working, keys and mouse click.
|
<br>When using <strong>Memory keys</strong>-form with mouse, or keyboard, you are able to lauch memories by mouse click or by <strong>F</strong>-key press from keyboard keys. Same with PgUp and PgDn, both are working, keys and mouse click.
|
||||||
|
BIN
help/img/h96.png
BIN
help/img/h96.png
Binary file not shown.
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 38 KiB |
BIN
help/img/h96a.png
Normal file
BIN
help/img/h96a.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
@ -5041,6 +5041,10 @@ object frmNewQSO: TfrmNewQSO
|
|||||||
object MenuItem39: TMenuItem
|
object MenuItem39: TMenuItem
|
||||||
Action = acReloadCW
|
Action = acReloadCW
|
||||||
end
|
end
|
||||||
|
object MenuItem45: TMenuItem
|
||||||
|
Caption = 'Send hex bytes to keyer (W or K)'
|
||||||
|
OnClick = MenuItem45Click
|
||||||
|
end
|
||||||
object MenuItem51: TMenuItem
|
object MenuItem51: TMenuItem
|
||||||
Caption = '-'
|
Caption = '-'
|
||||||
end
|
end
|
||||||
|
@ -133,6 +133,7 @@ type
|
|||||||
MenuItem40: TMenuItem;
|
MenuItem40: TMenuItem;
|
||||||
MenuItem41: TMenuItem;
|
MenuItem41: TMenuItem;
|
||||||
MenuItem43: TMenuItem;
|
MenuItem43: TMenuItem;
|
||||||
|
MenuItem45: TMenuItem;
|
||||||
MenuItem51: TMenuItem;
|
MenuItem51: TMenuItem;
|
||||||
MenuItem52: TMenuItem;
|
MenuItem52: TMenuItem;
|
||||||
MenuItem53: TMenuItem;
|
MenuItem53: TMenuItem;
|
||||||
@ -451,6 +452,7 @@ type
|
|||||||
procedure MenuItem11Click(Sender: TObject);
|
procedure MenuItem11Click(Sender: TObject);
|
||||||
procedure MenuItem12Click(Sender: TObject);
|
procedure MenuItem12Click(Sender: TObject);
|
||||||
procedure MenuItem17Click(Sender: TObject);
|
procedure MenuItem17Click(Sender: TObject);
|
||||||
|
procedure MenuItem45Click(Sender: TObject);
|
||||||
procedure mnuQrzClick(Sender: TObject);
|
procedure mnuQrzClick(Sender: TObject);
|
||||||
procedure mnuIK3QARClick(Sender: TObject);
|
procedure mnuIK3QARClick(Sender: TObject);
|
||||||
procedure mnuHamQthClick(Sender : TObject);
|
procedure mnuHamQthClick(Sender : TObject);
|
||||||
@ -5010,6 +5012,16 @@ begin
|
|||||||
ShowHelp
|
ShowHelp
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrmNewQSO.MenuItem45Click(Sender: TObject);
|
||||||
|
var
|
||||||
|
S: string;
|
||||||
|
begin
|
||||||
|
//message box here for commands
|
||||||
|
if not assigned(CWint) then exit;
|
||||||
|
if InputQuery('Send hex commands to Win/K3NG keyer','Type in comma separated hex bytes 00-ff (can be: 0xff, xff or ff)',False,S) then
|
||||||
|
CWint.SendHex(Uppercase(s));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TfrmNewQSO.mnuQrzClick(Sender: TObject);
|
procedure TfrmNewQSO.mnuQrzClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
dmUtils.ShowQRZInBrowser(dmData.qQSOBefore.Fields[4].AsString)
|
dmUtils.ShowQRZInBrowser(dmData.qQSOBefore.Fields[4].AsString)
|
||||||
@ -7176,6 +7188,7 @@ begin
|
|||||||
if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then Writeln('Radio'+n+' CW settings:');
|
if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then Writeln('Radio'+n+' CW settings:');
|
||||||
KeyerType := cqrini.ReadInteger('CW','Type'+n,0);
|
KeyerType := cqrini.ReadInteger('CW','Type'+n,0);
|
||||||
if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then Writeln('CW init keyer type:',KeyerType);
|
if ((dmData.DebugLevel>=1 ) or ((abs(dmData.DebugLevel) and 8) = 8 )) then Writeln('CW init keyer type:',KeyerType);
|
||||||
|
Menuitem45.Visible:=False; //send hex commands to win/k3ng keyer
|
||||||
case KeyerType of
|
case KeyerType of
|
||||||
1 : begin
|
1 : begin
|
||||||
CWint := TCWWinKeyerUSB.Create;
|
CWint := TCWWinKeyerUSB.Create;
|
||||||
@ -7186,6 +7199,7 @@ begin
|
|||||||
CWint.Device := cqrini.ReadString('CW','wk_port'+n,'');
|
CWint.Device := cqrini.ReadString('CW','wk_port'+n,'');
|
||||||
CWint.PortSpeed := 1200;
|
CWint.PortSpeed := 1200;
|
||||||
UseSpeed := cqrini.ReadInteger('CW','wk_speed',30);
|
UseSpeed := cqrini.ReadInteger('CW','wk_speed',30);
|
||||||
|
Menuitem45.Visible:=True;
|
||||||
end;
|
end;
|
||||||
2 : begin
|
2 : begin
|
||||||
CWint := TCWDaemon.Create;
|
CWint := TCWDaemon.Create;
|
||||||
@ -7206,6 +7220,7 @@ begin
|
|||||||
CWint.Device := cqrini.ReadString('CW','K3NGPort'+n,'');
|
CWint.Device := cqrini.ReadString('CW','K3NGPort'+n,'');
|
||||||
CWint.PortSpeed := cqrini.ReadInteger('CW','K3NGSerSpeed',115200);
|
CWint.PortSpeed := cqrini.ReadInteger('CW','K3NGSerSpeed',115200);
|
||||||
UseSpeed := cqrini.ReadInteger('CW','K3NGSpeed',30);
|
UseSpeed := cqrini.ReadInteger('CW','K3NGSpeed',30);
|
||||||
|
Menuitem45.Visible:=True;
|
||||||
end;
|
end;
|
||||||
4 : begin
|
4 : begin
|
||||||
CWint := TCWHamLib.Create;
|
CWint := TCWHamLib.Create;
|
||||||
|
@ -5,7 +5,7 @@ unit uCWKeying;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, synaser, synautil, lNet, lNetComponents, Forms;
|
Classes, SysUtils, synaser, synautil, lNet, lNetComponents, Forms, Dialogs, StrUtils;
|
||||||
|
|
||||||
type TKeyType = (ktCWdaemon, ktWinKeyer);
|
type TKeyType = (ktCWdaemon, ktWinKeyer);
|
||||||
type TKeyStatus = (ksReady, ksBusy);
|
type TKeyStatus = (ksReady, ksBusy);
|
||||||
@ -40,6 +40,7 @@ type
|
|||||||
procedure Close; virtual; abstract;
|
procedure Close; virtual; abstract;
|
||||||
procedure SetSpeed(speed : Word); virtual; abstract;
|
procedure SetSpeed(speed : Word); virtual; abstract;
|
||||||
procedure SendText(text : String); virtual; abstract;
|
procedure SendText(text : String); virtual; abstract;
|
||||||
|
procedure SendHex(text:String); virtual; abstract;
|
||||||
procedure StopSending; virtual; abstract;
|
procedure StopSending; virtual; abstract;
|
||||||
procedure DelLastChar; virtual; abstract;
|
procedure DelLastChar; virtual; abstract;
|
||||||
procedure SetMixManSpeed(min,max : Word); virtual; abstract;
|
procedure SetMixManSpeed(min,max : Word); virtual; abstract;
|
||||||
@ -64,6 +65,7 @@ type
|
|||||||
procedure Close; override;
|
procedure Close; override;
|
||||||
procedure SetSpeed(speed : Word); override;
|
procedure SetSpeed(speed : Word); override;
|
||||||
procedure SendText(text : String); override;
|
procedure SendText(text : String); override;
|
||||||
|
procedure SendHex(text:String); override;
|
||||||
procedure StopSending; override;
|
procedure StopSending; override;
|
||||||
procedure DelLastChar; override;
|
procedure DelLastChar; override;
|
||||||
procedure SetMixManSpeed(min,max : Word); override;
|
procedure SetMixManSpeed(min,max : Word); override;
|
||||||
@ -87,6 +89,7 @@ type
|
|||||||
procedure Close; override;
|
procedure Close; override;
|
||||||
procedure SetSpeed(speed : Word); override;
|
procedure SetSpeed(speed : Word); override;
|
||||||
procedure SendText(text : String); override;
|
procedure SendText(text : String); override;
|
||||||
|
procedure SendHex(text:String); override;
|
||||||
procedure StopSending; override;
|
procedure StopSending; override;
|
||||||
procedure DelLastChar; override;
|
procedure DelLastChar; override;
|
||||||
procedure SetMixManSpeed(min,max : Word); override;
|
procedure SetMixManSpeed(min,max : Word); override;
|
||||||
@ -110,6 +113,7 @@ type
|
|||||||
procedure Close; override;
|
procedure Close; override;
|
||||||
procedure SetSpeed(speed : Word); override;
|
procedure SetSpeed(speed : Word); override;
|
||||||
procedure SendText(text : String); override;
|
procedure SendText(text : String); override;
|
||||||
|
procedure SendHex(text:String); override;
|
||||||
procedure StopSending; override;
|
procedure StopSending; override;
|
||||||
procedure DelLastChar; override;
|
procedure DelLastChar; override;
|
||||||
procedure SetMixManSpeed(min,max : Word); override;
|
procedure SetMixManSpeed(min,max : Word); override;
|
||||||
@ -142,6 +146,7 @@ type
|
|||||||
procedure WaitMorse;
|
procedure WaitMorse;
|
||||||
procedure SetSpeed(speed : Word); override;
|
procedure SetSpeed(speed : Word); override;
|
||||||
procedure SendText(text : String); override;
|
procedure SendText(text : String); override;
|
||||||
|
procedure SendHex(text:String); override;
|
||||||
procedure StopSending; override;
|
procedure StopSending; override;
|
||||||
procedure DelLastChar; override;
|
procedure DelLastChar; override;
|
||||||
procedure SetMixManSpeed(min,max : Word); override;
|
procedure SetMixManSpeed(min,max : Word); override;
|
||||||
@ -363,7 +368,7 @@ begin
|
|||||||
ser.SendString('A');
|
ser.SendString('A');
|
||||||
ser.SendString('C');
|
ser.SendString('C');
|
||||||
end;
|
end;
|
||||||
{ 'ß' : begin
|
{ 'ß' : begin
|
||||||
ser.SendByte($1B);
|
ser.SendByte($1B);
|
||||||
ser.SendString('S');
|
ser.SendString('S');
|
||||||
ser.SendString('Z');
|
ser.SendString('Z');
|
||||||
@ -394,6 +399,61 @@ begin
|
|||||||
ser.SendString(text)
|
ser.SendString(text)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCWWinKeyerUSB.SendHex(text : String);
|
||||||
|
var
|
||||||
|
H : String;
|
||||||
|
p : integer;
|
||||||
|
index :integer;
|
||||||
|
paramList :TStringList;
|
||||||
|
|
||||||
|
function send(ok:boolean):boolean;
|
||||||
|
Begin
|
||||||
|
Result:=true;
|
||||||
|
try
|
||||||
|
index:=0;
|
||||||
|
paramList := TStringList.Create;
|
||||||
|
paramList.Delimiter := ',';
|
||||||
|
paramList.DelimitedText := text;
|
||||||
|
while index < paramList.Count do
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
if Pos('X', paramList[index])>0 then
|
||||||
|
H:=copy(paramList[index],Pos('X', paramList[index])+1,2)
|
||||||
|
else
|
||||||
|
H:= paramList[index];
|
||||||
|
p:=Hex2Dec(H);
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
Begin
|
||||||
|
ShowMessage( ' Hex error: '+paramList[index]+' '+ E.ClassName + #13#10 + E.Message );
|
||||||
|
Result:=false;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if p>255 then
|
||||||
|
Begin
|
||||||
|
ShowMessage( ' Hex error: '+paramList[index]+' Value too big' );
|
||||||
|
Result:=false;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if fDebugMode and ok then Writeln('Sending value: ',paramList[index],'=',p);
|
||||||
|
if ok then ser.SendByte(p);
|
||||||
|
inc(index);
|
||||||
|
end;
|
||||||
|
|
||||||
|
paramList.Free;
|
||||||
|
finally
|
||||||
|
//Done all
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
//test hex conversion
|
||||||
|
if not send(false) then exit;
|
||||||
|
//if passed do real send
|
||||||
|
send(true);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCWWinKeyerUSB.Close;
|
procedure TCWWinKeyerUSB.Close;
|
||||||
begin
|
begin
|
||||||
ser.SendByte(0);
|
ser.SendByte(0);
|
||||||
@ -518,6 +578,10 @@ begin
|
|||||||
else
|
else
|
||||||
udp.SendMessage(text)
|
udp.SendMessage(text)
|
||||||
end;
|
end;
|
||||||
|
procedure TCWDaemon.SendHex(text : String);
|
||||||
|
Begin
|
||||||
|
//not implemented
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCWDaemon.Close;
|
procedure TCWDaemon.Close;
|
||||||
begin
|
begin
|
||||||
@ -667,6 +731,60 @@ begin
|
|||||||
else
|
else
|
||||||
ser.SendString(text)
|
ser.SendString(text)
|
||||||
end;
|
end;
|
||||||
|
procedure TCWK3NG.SendHex(text : String);
|
||||||
|
var
|
||||||
|
H : String;
|
||||||
|
p : integer;
|
||||||
|
index :integer;
|
||||||
|
paramList :TStringList;
|
||||||
|
|
||||||
|
function send(ok:boolean):boolean;
|
||||||
|
Begin
|
||||||
|
Result:=true;
|
||||||
|
try
|
||||||
|
index:=0;
|
||||||
|
paramList := TStringList.Create;
|
||||||
|
paramList.Delimiter := ',';
|
||||||
|
paramList.DelimitedText := text;
|
||||||
|
while index < paramList.Count do
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
if Pos('X', paramList[index])>0 then
|
||||||
|
H:=copy(paramList[index],Pos('X', paramList[index])+1,2)
|
||||||
|
else
|
||||||
|
H:= paramList[index];
|
||||||
|
p:=Hex2Dec(H);
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
Begin
|
||||||
|
ShowMessage( ' Hex error: '+paramList[index]+' '+ E.ClassName + #13#10 + E.Message );
|
||||||
|
Result:=false;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if p>255 then
|
||||||
|
Begin
|
||||||
|
ShowMessage( ' Hex error: '+paramList[index]+' Value too big' );
|
||||||
|
Result:=false;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if fDebugMode and ok then Writeln('Sending value: ',paramList[index],'=',p);
|
||||||
|
if ok then ser.SendByte(p);
|
||||||
|
inc(index);
|
||||||
|
end;
|
||||||
|
|
||||||
|
paramList.Free;
|
||||||
|
finally
|
||||||
|
//Done all
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
//test hex conversion
|
||||||
|
if not send(false) then exit;
|
||||||
|
//if passed do real send
|
||||||
|
send(true);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCWK3NG.Close;
|
procedure TCWK3NG.Close;
|
||||||
begin
|
begin
|
||||||
@ -909,7 +1027,10 @@ begin
|
|||||||
end
|
end
|
||||||
else if fDebugMode then Writeln('Empty message!');
|
else if fDebugMode then Writeln('Empty message!');
|
||||||
end;
|
end;
|
||||||
|
procedure TCWHamLib.SendHex(text : String);
|
||||||
|
Begin
|
||||||
|
//not implemented
|
||||||
|
end;
|
||||||
procedure TCWHamLib.Close;
|
procedure TCWHamLib.Close;
|
||||||
begin
|
begin
|
||||||
if tcp.Connected then
|
if tcp.Connected then
|
||||||
|
Loading…
Reference in New Issue
Block a user