⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 ADS-B接收机DIY全套资料
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    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 + -