[gelöst] RTL_SDR Funktionen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] RTL_SDR Funktionen

Beitrag von juelin »

Hallo,
ich bin's wieder.
jetzt habe ich ja die Librarry librtlsdr.dll mit rtl_sdr.pas zum laufen gebracht.
Die ersten Funktionen klappen auch schon (rtlsdr_get_device_count und rtlsdr_get_device_name(h3)).
Als Beispiel habe ich meinen Sourcecode im Anhang.
Bei folgenden Funktionen habe ich aber noch Probleme.
----------------------------------------------------------------------------------------
Variablen fur 1. und 2.:
h2: Prtlsdr_dev_t;
h3: Trtlsdr_tuner;
h4: Tuint32_t;
h5: PPrtlsdr_dev_t;
sdrdev: longint;
sdropennum: Prtlsdr_dev_t;

1. in rtl_sdr.pas function rtlsdr_open(dev: PPrtlsdr_dev_t; index: Tuint32_t): longint; cdecl; external librtlsdr;
in Unit1.pas sdrdev:=rtlsdr_open(h5, h4); in Procedure TForm1.ComboBox1Change(Sender: TObject)
vor Aufruf der Funktion ist h4=0
nach Aufruf der Funktion ist sdrdev=0 und h5=siehe Anhang File Inhalt von h7.txt und h4=134565936
muss vor Aufruf der Funktion etwas in die Variable h5 geladen werden?
und wenn ja was?
---------------------------------------------------------------------------------------
2. in rtl_sdr.pas function rtlsdr_get_tuner_type(dev: Prtlsdr_dev_t): Trtlsdr_tuner; cdecl; external librtlsdr;
in Unit1.pas h3:=rtlsdr_get_tuner_type(sdropennum); in Procedure TForm1.ComboBox1Change(Sender: TObject)
vor Aufruf der Funktion sdropennum=h2
wie kommen Daten in h2 und welche?
in etl_sdr.pas ist ja folgendes definiert.
type
Trtlsdr_dev_t = record end;
Prtlsdr_dev_t = ^Trtlsdr_dev_t;
PPrtlsdr_dev_t = ^Prtlsdr_dev_t;
---------------------------------------------------------------------------------------
3. Variablen
h1: Trtlsdr_read_async_cb_t;
h2: Tuint32_t;
h3: Tuint32_t;
h4: pointer;
h5: Tuint32_t;
sdropennum: Prtlsdr_dev_t;

in rtl_sdr.pas function rtlsdr_read_async(dev: Prtlsdr_dev_t; cb: Trtlsdr_read_async_cb_t; ctx: pointer; buf_num: Tuint32_t; buf_len: Tuint32_t): longint; cdecl; external librtlsdr;
in Unit1.pas in Procedure TForm1.Timer1Timer(Sender: TObject)
h2:=DEFAULT_ASYNC_BUF_NUMBER; (Inhalt = 12)
h3:=DEFAULT_BUF_LENGTH; (Inhalt = 16*16384)
h5:=rtlsdr_read_async(sdropennum, h1, h4, h2, h3);
ich weiss nicht was in die Varibalen h1 und h4 geladen werden muss?
---------------------------------------------------------------------------------------

So das sind meine Fragen.
Ich hoffe Ihr könnt mir helfen.

Danke und Gruß
Jürgen
Dateianhänge
adsb.zip
(759.03 KiB) 45-mal heruntergeladen
Zuletzt geändert von juelin am Mi 11. Jun 2025, 22:24, insgesamt 1-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: RTL_SDR Funktionen

Beitrag von Zvoni »

rtlsdr_open(dev: PPrtlsdr_dev_t; index: Tuint32_t)

rtlsdr_dev_t ist ein Typedef für rtlsdr_dev, was eine Struktur ist (Pascal = Record)

prtlsdr_dev_t ist ein Zeiger auf diese Struktur,
pprtlsdr_dev_t ist ein Zeiger auf den Zeiger dieser Struktur, entspricht in der Regel einem Array

"dev" ist ein "Output"-Argument (Der Rückgabewert der Funktion selbst ist "Fehler/Kein Fehler")

Du musst also die Adresse eines Array-Elements übergeben, im Sinne von:
(Absoluter Aircode)

Code: Alles auswählen

Var
  MyDevs:Array Of prtlsdr_dev;  //Array der Zeiger
  r:Longint;
  dc:tuint32_t;  //Devicecount
Begin
dc:=rtlsdr_get_device_count;
SetLength(MyDevs,dc);
....
r:=rtlsdr_open(@MyDevs[0]; 0); //für das erste Device
bzw. um in deinem Code zu bleiben:

Code: Alles auswählen

sdrdev:=rtlsdr_open(@h2, h4); //Adresse von h2
denk dran: h2 bzw. auch h5 sind ADRESSEN im Speicher!
Wenn du wissen willst, was da drin ist, musst du dereferenzieren
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: RTL_SDR Funktionen

Beitrag von juelin »

Hallo Zvoni,
recht herzlichen Dank.
Der Open funktioniert jetzt.
Allerdings nicht mit einem Array sonder mit PPrtlsdr_dev_t als Varibalentype von h5.
Leider habe ich jetzt ein neues Problem.
Beim Befehl: h4:=rtlsdr_set_tuner_gain(sdropennum, h5);
bekomme ich den Fehler (siehe bild1 im Anhang).
h5 ist jetzt vom Type longint und enthält -100.
Kannst du bitte nochmal schauen.
Danke und Gruß
Jürgen
Dateianhänge
bild1.jpg
bild1.jpg (19.18 KiB) 324 mal betrachtet

Mathias
Beiträge: 6952
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: RTL_SDR Funktionen

Beitrag von Mathias »

@juelin

Hast du ein Muster Programm, oder bist du einfach am probieren ?
Ich würde mal ein einfaches C-Programm anschauen und dieses mal nach Pascal portieren und probieren.
Wen dieses läuft, kannst es immer noch in den LCL-Programm einbauen.

So mache ich es, wen ich eine C-Lib ausprobiere.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: RTL_SDR Funktionen

Beitrag von juelin »

ja Mathias hab ich.
siehe Anhang
Gruß
Jürgen
Dateianhänge
rtl_adsb.zip
(4.57 KiB) 70-mal heruntergeladen

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: RTL_SDR Funktionen

Beitrag von juelin »

hier noch im Anhng das EXE File
Dateianhänge
rtl_adsb.zip
(27.87 KiB) 71-mal heruntergeladen

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: [gelöst] RTL_SDR Funktionen

Beitrag von juelin »

so hat sich erledigt.
Ich habe es nach vielem Probieren rausgefunden.
Hatte beim OPEN ein falschen Variablentyp insdropennum.
Das hat zwar kein Fehler gemeldet, aber flsche Werte gebracht.
Danke an Alle.
Gruß
Jürgen

Antworten