Erst mal Danke an die Forengemeinde weil ohne eure Hilfe hätte ich es nicht geschaft.
Nun zum Programm. Funkamateure und Rodio höhrer drehen gerne über die Mittelwellen bzw. Kurzwellen Bänder. Es ist schon spannend wen aus dem Rauschen plötzlich eine Radiostaton auftaucht. Und manchmal vergist man die Frequenz. Dafür habe ich eine Webseite erstellt http://www.qrg-liste.de.vu
Jeder kann in die Liste Frequenzen eintragen. Beim Anzeigen der Frequenzen kann ein bestimmter Link (qrg://004.470.000;000.000.000;AM;; z.B für Radio Togo ) geklickt werden. Der Browser soll dann mein Programm aufrufen.

Mein Programm prüft beim Start ob ein Parameter übergeben wurde. Wenn Ja dann wird geprüft ob eine INI-Datei vorhanden ist. Wenn nicht dann wird sie angelegt. In der Datei steht der Port, Geschwindigkeit und die Nummer des Funkgerätes.
Wird das Programm mit einer Frequenzangabe z.B. qrg://004.470.000;000.000.000;AM;; oder mit dem Parameter -l aufgerufen dann wird
das Programm rigctl.exe ausgeführt. rigctl ist im Softwarepaket Hamlib enthalten. http://sourceforge.net/projects/hamlib/
Der Parameter -l listet alle verfügbare Geräte auf. bei einer Frequenzangabe wird dann das Funkgerät auf die Frequenz eingestellt.
Moderne Funkgeräte bzw. Empfänger haben eine Spezielle Schnittstelle (cat) für diese Zwecke.
Da Das Programm Kurz ist hier der Code:
Code: Alles auswählen
program qrg;
/////////////////////////////////////////////////////////////////////////////////////
/// qrg ein Programm um bei einen Empfänger/Sender die Frequenz (qrg) zu stellen ///
/// qrg.exe wertet ein übergebenen Link (qrg://Frequenz1;Frequenz2;Mode;;) aus ///
/// und ruft das Programm rigctl.exe auf welches den Sendeempfänger einstellt ///////////
/// rigctl.exe ist in dem Programmpaket HamLib http://sourceforge.net/projects/hamlib/ ///
/// ///
/// (c) Dirk Unverzagt yodi at gmx.net http://www.qrg-liste.de.vu ///
/// qrg.exe darf für Private zwecke Kostenlos verwendet und weitergegeben werden ///
/// Jeglicher gewerblicher Nutzung bedart der schriftlichen zustimmung ///
//////////////////////////////////////////////////////////////////////////////////////
{$mode objfpc}{$H+}
//http://www.qrg-liste.de.vu/
uses
{$ifdef Unix}
BaseUnix, Classes, sysutils, Process;
{$else}
Dialogs,sysutils, Process,Classes,Windows;
{$endif}
type
TStringArray = array of string;
// function strsplit(S: string): TStringArray;
var
Datei: Text; (* Dateizeiger *)
zeile: string; (* *)
trx: string; (* funkgerät *)
speed: string; (* Baudrate für serielle Schnittstelle *)
port: string; (* Serielle schnittstelle *)
Position : integer;(* Position im String *)
PositionA : integer;
PositionB : integer;
parameter: string;
wert: String;
AProcess: TProcess;
AStringList: TStringList;
zeilennr: integer;
befstr: string;
VFOa: string;
VFOb: String;
TRXMode: String;
rigctlpath : string;
outputstring,rigbinary:ansistring;
argumenten: array of string;
trxarray: array of string;
ok: boolean;
function strsplit(S,t: string): TStringArray;
var
tmparray: array of string;
z : integer;
z2 : integer;
begin
//writeln(s);
z2:=0;
SetLength(tmparray, 5); // Das Array wird auf eine Größe von 5 Elementen geändert
for z := 1 to Length(s) do
begin
if s[z] <> t then
begin
tmparray[z2] := tmparray[z2] + s[z] ;
end
else
begin
inc(z2)// um 1 erhöhen
end;
end;
result:=tmparray;
end;
begin
rigctlpath := 'c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\'; // Hier sollte sie liegen bei wondows7
if FileExists(rigctlpath+'rigctl.exe') then
begin
if not FileExists('qrg.ini') then
begin
//Datei existiert nicht --> erstellen
assignfile(Datei, 'qrg.ini');
rewrite(Datei);
WriteLn (Datei, '#########################################');
WriteLn (Datei, '# Ini Datei für das Programm qrg #');
WriteLn (Datei, '# qrg dient zum wechseln einer Frequenz #');
WriteLn (Datei, '# mittels HamLib bei ein Transceiver #');
WriteLn (Datei, '# (c) by Dirk Unverzagt, DL8AAX #');
WriteLn (Datei, '#########################################');
WriteLn (Datei, '# Serielle Schnittstelle');
WriteLn (Datei, '# port=/dev/ttyUSB0');
WriteLn (Datei, '#port=/dev/ttyS0 ');
WriteLn (Datei, '# für windos');
WriteLn (Datei, 'port=com1 ');
WriteLn (Datei, ' ');
WriteLn (Datei, '# Baudrate');
WriteLn (Datei, 'speed=4800 ');
WriteLn (Datei, ' ');
WriteLn (Datei, '# TRX=Nr. Die Nummer deines TRX ');
WriteLn (Datei, '# Abfragen kannst du die Nr.mir rigctl -l ');
WriteLn (Datei, 'trx=1 ');
WriteLn (Datei, ' ');
WriteLn (Datei, '# Pfad zu rigctl.exe');
WriteLn (Datei, 'rigctlpath=c:"\Program Files (x86)"\hamlib-win32-1.2.15.3\bin\');
closefile(Datei);
end
else
begin
// Datei existiert
Assign (Datei, 'qrg.ini'); (* Pfad festlegen *)
Reset (Datei); (* Datei zum Lesen oeffnen *)
REPEAT
ReadLn (Datei, zeile); (* eine Zeile lesen *)
if zeile[1]='#' then // beginnt die Zeile mit ein #
else
begin // nein
//WriteLn (zeile); (* eine Zeile am Bildschirm ausgeben *)
Position := Pos('=', AnsiLowerCase(zeile));
if Position <> 0 then // ein = ist vorhanden also parameter zeile
begin
parameter := Trim(Copy(zeile, 1,Position-1 )); // Text bis zum =
wert := Trim(Copy(zeile, Position+1, Length(zeile))); // Text bis zum =
case LowerCase(parameter) of
'port':
port := wert;
'speed':
speed := wert;
'trx':
trx := wert;
'rigctlpath':
rigctlpath :=wert;
end;
end;
end;
UNTIL EOF (Datei); (* Abbruch, wenn das Zeilenende erreicht ist; also wenn EOF TRUE liefert *)
Close (Datei); (* Datei schliessen *)
end; // datei einlesen
//Paremeter übergabe
if ParamCount > 0 then
begin
case LowerCase(ParamStr(1)) of
'-l':
begin
writeln('Unterstuetzte Transceiver');
setlength(argumenten,1); //
argumenten[0]:='-l';
rigbinary:=IncludeTrailingPathDelimiter(rigctlpath)+'rigctl.exe';
// rigbinary:=IncludeTrailingPathDelimiter(rigctlpath)+'test.bat';
//end;
ok:=fileexists(rigbinary);
writeln('fileexist'); writeln(ok);
if ok then
begin
ok:= RunCommand(rigbinary,argumenten,outputstring);
if ok then
begin
writeln(outputstring);
end
else
begin
writeln('Error: Befehl geht nicht');
end;
end;
end;
'-h','-help','--help':
begin
writeln(' ');
writeln('Hilfe ');
{$IFDEF WIN32}
writeln(' Programmaufruf: qrg.exe VFOa;VFOb;mode ');
writeln(' oder ');
writeln(' qrg.exe -l fuer eine liste der verfuegbaren TRX');
writeln(' qrg.exe -h fuer diese hilfe');
{$ENDIF}
{$IFDEF LINUX}
writeln(' Programmaufruf: qrg VFOa;VFOb;mode ');
writeln(' oder ');
writeln(' qrg -l für eine liste der verfügbaren TRX');
writeln(' qrg -h für diese hilfe');
{$ENDIF}
writeln(' ');
writeln(' Die Datei qrg.ini mus angepast werden');
writeln(' Port, Geschwindigkeit, TRX Nr. siehe qrg -l');
writeln(' ');
end;
else
begin // qrg Parameter= qrg://003.556.000;;CW;; oder qrg://028.780.000;000.000.000;USB;;
zeile := ParamStr(1);
zeile := StringReplace(zeile, 'qrg://', '', [rfReplaceAll]); //qrg:// entfernen
trxarray:=strsplit(zeile,';');
VFOa := trxarray[0];
VFOb := trxarray[1];
TRXMode := trxarray[2];
befstr :='rigctl -m ' + trx + ' -s '+speed+' -r '+port+' F ' + VFOa + ' m '+ TRXMode;
// RIGCTL aufrufen
setlength(argumenten,7); // 0..6 = 7 Elementen
argumenten[0]:='-m';
argumenten[1]:=trx ;
argumenten[2]:='-s';
argumenten[3]:=speed;
argumenten[4]:='-r';
argumenten[5]:=port;
argumenten[6]:='F';
// usw, immer ein Argument per Linie. -s speed sind zwei Argumenten.
rigbinary:=IncludeTrailingPathDelimiter(rigctlpath)+'rigctl.exe';
ok:=fileexists(rigbinary) and RunCommand(rigbinary,argumenten, outputstring);
if ok then
begin
writeln(outputstring);
end;
end;
end;// ende case
end
else
begin
writeln('Falscer Programmaufruf ');
writeln('qrg.exe -h fuer Hilfe');
end;
end
else
begin
writeln('Kann c:\Program Files (x86)\hamlib-win32-1.2.15.3\bin\rigctl.exe nicht finden');
end;
end.
Flotte Grüße