[gelöst] RTL_SDR Funktionen
- 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
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
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.
- 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
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)
bzw. um in deinem Code zu bleiben:
denk dran: h2 bzw. auch h5 sind ADRESSEN im Speicher!
Wenn du wissen willst, was da drin ist, musst du dereferenzieren
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
Code: Alles auswählen
sdrdev:=rtlsdr_open(@h2, h4); //Adresse von h2
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.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- 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
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
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 (19.18 KiB) 324 mal betrachtet
-
- 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
@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.
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
Mit Java und C/C++ sehe ich rot
- 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
ja Mathias hab ich.
siehe Anhang
Gruß
Jürgen
siehe Anhang
Gruß
Jürgen
- Dateianhänge
-
rtl_adsb.zip
- (4.57 KiB) 70-mal heruntergeladen
- 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
hier noch im Anhng das EXE File
- Dateianhänge
-
rtl_adsb.zip
- (27.87 KiB) 71-mal heruntergeladen
- 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
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
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