📄 unit1.pas
字号:
procedure loadposition(default: boolean);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure savedefClick(Sender: TObject);
procedure loaddefault1Click(Sender: TObject);
procedure Afrika1Click(Sender: TObject);
procedure Asia1Click(Sender: TObject);
procedure Antarctika1Click(Sender: TObject);
procedure Northamerica1Click(Sender: TObject);
procedure Southamerica1Click(Sender: TObject);
procedure Asiawest1Click(Sender: TObject);
procedure Asiacentral1Click(Sender: TObject);
procedure default1Click(Sender: TObject);
procedure cleanuposm1Click(Sender: TObject);
procedure about1Click(Sender: TObject);
procedure AirportILS1Click(Sender: TObject);
procedure colorbyaltitude1Click(Sender: TObject);
procedure N5111222Click(Sender: TObject);
procedure N5112341Click(Sender: TObject);
procedure N5111221Click(Sender: TObject);
procedure GroundRADAR1Click(Sender: TObject);
procedure GroundRADAR2Click(Sender: TObject);
procedure N100mV1Click(Sender: TObject);
procedure setAgcOffset(offset : byte);
function readAgcOffset:byte;
procedure decoderSetPwm(dc:integer);
procedure decoderReset;
procedure N40mV1Click(Sender: TObject);
procedure N60mV1Click(Sender: TObject);
procedure N80mV1Click(Sender: TObject);
procedure N120mV1Click(Sender: TObject);
procedure N140mV1Click(Sender: TObject);
procedure N160mV1Click(Sender: TObject);
procedure N180mV1Click(Sender: TObject);
procedure N200mV1Click(Sender: TObject);
procedure Reset1Click(Sender: TObject);
procedure activateBootloader1Click(Sender: TObject);
procedure off1Click(Sender: TObject);
procedure TestPWM501Click(Sender: TObject);
procedure TestPWM51Click(Sender: TObject);
procedure ButtonStartClick(Sender: TObject);
procedure ButtonStopClick(Sender: TObject);
procedure GetDecoderType;
procedure DecoderDependend(x : integer);
procedure makeIffMasks;
procedure N41Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure all1Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N31Click(Sender: TObject);
procedure sprut1Click(Sender: TObject);
procedure Airframesorg1Click(Sender: TObject);
procedure ServerStartStop;
procedure ServerSocketClientConnect (Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocketClientRead (Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSendAir(nr:integer);
procedure ServerSendId(nr:integer);
procedure ServerSendMSG(nr:integer; Transtyp:integer);
procedure ServerSend2All(nachricht:string);
procedure ToolButton10Click(Sender: TObject);
private
{ Private-Deklarationen }
BM : Tbitmap;
public
{ Public-Deklarationen }
end;
TFrame = record
B : Array[0..14] of byte;
T : TDateTime;
end;
Tosm = record
BM : Tbitmap;
ZentB : real; //radiant
ZentL : real;
Scale : real;
pos : integer; // position des zoom-reglers
xoff : integer;
yoff : integer;
OK : boolean;
formwidth : integer;
formheight : integer;
formtop : integer;
formleft : integer;
end;
Ttrack = Array[0..maxTrack] of Tkoordinaten;
TPlane = record
active : boolean;
missed : boolean; // seit 20 sec kein Kontakt mehr
AA : dword;
time_first : Tdatetime;
time_last : Tdatetime;
time_koord : Tdatetime;
nr : integer;
lat_0 : integer; // lat even frame
lat_1 : integer; // lat odd frame
long_0 : integer; // lon even frame
long_1 : integer; // lon odd frame
time_0 : Tdatetime; // zeit des Empfangs des even frames
time_1 : Tdatetime; // zeit des Empfangs des odd frames
latitude_old : real;
longitude_old : real;
latitude : real;
longitude : real;
guess : TKoordinaten;
altitude : integer;
color : Tcolor;
Track : Ttrack;
trackindex : integer;
airframe : Tairframe;
speed : real; // in knoten
heading : real; // in radiant
steigen : integer; // feet/min
ident : string[8];
mod3id : word; // alter 12Bit Mode3 Identifier
interogator : integer;
airborne : boolean;
distance : real; // DM: Entfernung zum Mittelpunkt
nr_nahe : integer; // DM: Nummerierung Sortiert nach Entfernung
gesendet : boolean; // DM: Plane wurde gesendet
end;
Tinfile = text; //textfile
TTownKoordinaten = record
Koord : Tkoordinaten;
Name : char; // Anfangsbuchstabe
pop : real; // Bev鰈kerung in Millionen des Gebiets
popcore : real; // Bev鰈kerung des Stadtbereichs
langname : string; // Name der Stadt
end;
TLandKoordinaten = record
Koord : Tkoordinaten;
name : string; // Name der Stadt
punkte : integer;
anstrich : real;
end;
PVecarray = array[0..2000000] of TKoordinaten;
Trunway = record
name : string[4]; // wenn nicht existier =''
A ,B : Tkoordinaten; // anfangs und Endpunkt
typ : integer;
end;
Tils = record
name : string[4]; // wenn nicht existier =''
A1,B1 : Tkoordinaten; // anfangs und Endpunkt
A2,B2 : Tkoordinaten; // anfangs und Endpunkt
A3,B3 : Tkoordinaten; // anfangs und Endpunkt
typ : integer;
end;
Tairport = record // Flughafen
icao : string[7]; // XXXX
iata : string[7]; // XXX
name : string[31];
town : string[31];
country : string[31];
koord : Tkoordinaten;
rw : array[0..5] of Trunway; // max 6 runways
ils : array[0..9] of Tils; // max 10 ils
end;
TKreuz = record
X : integer;
Y : integer;
v : boolean;
Nr : integer;
counter : integer;
end;
Tiff = record
name : string[15]; // wenn nicht existier =''
koord : Tkoordinaten;
code : integer;
end;
Ticao = record
anfang : integer;
ende : integer;
name : string[31];
end;
TChatNachricht = Record
Nickname: string[255];
Text: string[255]
end;
var
Form1: TForm1;
rxstr : string;
oldrxstr : string = '';
Frames : array[0..255] of TFrame;
Planes : array[0..maxPlane] of TPlane;
FramePointer : integer = 0;
LastFrame : integer = 0;
sg_update : integer = 0;
framerate_update : integer = 0;
repaint_update : integer = 0;
Framecounter : integer = 0;
CRCfehler : integer = 0;
Framemesszeit : TDateTime;
Logon : boolean = false;
Logfile : Tinfile;
M : PVecarray; //high res
G : array[0..200000] of TKoordinaten; //lat long
W : array[0..20000] of TKoordinaten; //grobe Welt
T : array[0..200] of TTownKoordinaten; //St鋎te
L : array[0..300] of TLandKoordinaten; //L鋘dermittelpunkte
Port : array[0..6000] of Tairport; //flughaefen
Jet : array[0..20000] of Tairframe; //flugzeuge der welt :-)
ATS : array[0..200000] of TKoordinaten; //ssb1 31000 im eddk-file
IFF : array[0..300] of Tiff; //sekundaerradare
ICAO : array[0..200] of Ticao;
pcounter : integer = 0;
Gcounter : integer = 0;
wcounter : integer = 0;
tcounter : integer = 0;
Lcounter : integer = 0;
Portcounter: integer = 0; // flughaefen
Jetcounter : integer = 0;
ATScounter : integer = 0;
IFFcounter : integer = 0;
icaocounter: integer = 0;
kennerdb : array[0..200000] of Tkenner;
interogatoren : array[0..maxInterogatoren] of integer; //0000000 .. 1001111 0..79
Pfad : string;
X, Y : real;
rusN,rusC, b1, b2 : real;
LandL, LandB : real;
Lmin : real = -pi; //8*rad;
Lmax : real = pi; //9*rad;
Bmin : real = -pi/2; //53*rad;
Bmax : real = +pi/2; //54*rad;
ZentB : real = 51*rad; //53.5*rad;
ZentL : real = 6*rad; //8.5*rad;
sin_ZentB: real;
cos_ZentB: real;
Scale : real = 100;
Stretch : integer = 1; // Verh鋖tnis von BM und Image1
Pdreh : Tkoordinaten; // fuer Erddrehung mit der Maus
hastomove : boolean; // koordinaten vor der anzeige berechnen
maxtotzeit : integer = 5*60; // Sekunden bis zum L鰏chen nach Kontaktverlust
Kreuz : TKreuz;
borderColor : TColor = clltGray;
latlongColor : TColor = clltGray;
townColor : TColor = clltBlue;
chairColor : TColor = clltGreen;
cooColor : TColor = clBlue;
stateColor : TColor = clltBlue;
portColor : TColor = clltBlue1;
AtsColor : TColor = clltYellow;
rrColor : TColor = clltGreen;
IffColor : TColor = clltRed;
osmserver : string = 'http://tah.openstreetmap.org/Tiles/';
mapserver : string = 'ftp://maproom.dlt.psu.edu/alabama2pts.txt';
osmOK : boolean = false;
osm : Tosm;
Decoder : integer = adsbPIC;
agc_mode : byte = 2; // aus dem decoder ausgelesener mode, 1= agc-on 0=agc-off
agc_offset : byte = 0; // aus dem decoder ausgelesener offset in mV
dontchangeoffset : boolean = false; // deaktiviert offsetaenderungen ueber das menue
IffFilter : integer = -1;
IffMasks : array[0..5] of integer;
implementation
{$R *.DFM}
//http://www.swissdelphicenter.ch/torry/showcode.php?id=412
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end; //DownloadFile
// liefert Bezeichnung des interrogators
function ifftostr(iff:integer):string;
begin
//SSS IIII
//0..15 = II-Code0..15
if iff<16 then result := 'II-'+inttostr(iff)
else result := 'SI-'+inttostr(iff-16);
end;
//wandelt Hoehe in Farbe
// input : fuss 0 .. 40000
// 0 rot $0000FF
// 20000 gruen $00FF00
// 40000 blau $FF0000
function altitudecolor(hoehe : integer):Tcolor;
var r,g,b,step : integer;
begin
if hoehe < 20000 then begin
step := round(hoehe/20000*255);
r := 255-step;
g := step;
b := 0;
end else begin // if hoehe >= 20000 then begin
step := round((hoehe-20000)/20000*255);
g := 255-step;
b := step;
r := 0;
end;
if hoehe < 0 then result := clRed else
if hoehe > 40000 then result := clBlue else
result:= r or (g shl 8) or (b shl 16);
end; // altitudecolor
//wandelt ein hex-char in einen Wert 0..15
function TForm1.asc2int(z : char):byte;
begin
result := 0;
if (z>='0') and (z<='9') then result:= ord(z)-ord('0');
if (z>='A') and (z<='F') then result:= ord(z)-ord('A') +10;
if (z>='a') and (z<='f') then result:= ord(z)-ord('a') +10;
end;
// wandelt einen koordinatenwert (radiant) in einen String
function TForm1.koordtostr(x: real):string;
begin
x:= x/rad;
if N5112341.checked then result := floattostrf(x,ffFixed,7,4)+'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -