jvankatwijk / eti-stuff Goto Github PK
View Code? Open in Web Editor NEWexperimental software for creating and interpreting eti frames
License: GNU General Public License v2.0
experimental software for creating and interpreting eti frames
License: GNU General Public License v2.0
I have lots of sdr files (for instance 1,7 GB sdr = approx. 3 min). But when I write an eti file with eti-frontend, not all frames are saved and the eti is only 47 sec. instead of 3 min long. Same behavior with other sdr files. But all my clicks I make are not longer than 5 seconds, so there is still more than 2 mins missing.
I've loaded this eti in dablin_gtk and in eti-backend.
Then I found an older version from 14th January 2017, which worked :-) This eti is now 3 min long (and even eti frontend does not crash after writing the eti)
Hi,
In the Homepage (README.md
) isn't indicated the parameter for configure&compile the RTL-TCP module:
where XXX refers to the input device being supported, one of (RTLSDR, SDRPLAY, AIRSPY, RAWFILES, WAVFILES)
You need to complete to the list: AIRSPY, SDRPLAY, RTLSDR, RAWFILES, WAVFILES, RTL_TCP.
As indicated in the CMakeLists.txt
file:
https://github.com/JvanKatwijk/eti-stuff/blob/master/eti-cmdline/CMakeLists.txt#L60
Regards.
When trying to convert a raw file from German MDR Saxony multiplex I got from a German user which has a re-config, I got the following seg-fault:
$ LANG=C eti-cmdline-rawfiles -F Downloads/9A_MDR\ SACHSEN_2023-01-16_045841.raw > /tmp/test.eti
Period = 8000
program ( 1) MDR SACHSEN BZ D7C1 is in the list
program ( 2) MDR SACHSEN SORB D7C4 is in the list
program ( 3) MDRSACHSEN EXTRA D9C1 is in the list
program ( 4) MDR SchlagerW SN D6D7 is in the list
program ( 5) R.SA 14C2 is in the list
there might be a DAB signal here
ensemble MDR SACHSEN detected
program ( 6) MDR KLASSIK D3D6 is in the list
program ( 7) MDR KULTUR D3C3 is in the list
program ( 8) MDR AKTUELL D3D5 is in the list
program ( 9) MDR JUMP D3C2 is in the list
program (10) MDR SPUTNIK D3D4 is in the list
program (11) MDR TWEENS D3D3 is in the list
program (12) MDR SACHSEN DD D4C1 is in the list
program (13) MDR SACHSEN L D6C1 is in the list
program (14) MDR SACHSEN C D5C1 is in the list
yes, here we go
Handling ensemble MDR SACHSEN until you quit
changes in config not supported, choose again 100
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again
changes in config not supported, choose again 100
free(): invalid next size (normal)
Aborted (core dumped)
Thread 4995 "eti-cmdline-raw" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffe6ffd640 (LWP 45580)]
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140737068914240) at ./nptl/pthread_kill.c:44
44 ./nptl/pthread_kill.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737068914240) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140737068914240) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140737068914240, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007ffff7a88476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007ffff7a6e7f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007ffff7acf6f6 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff7c21b8c "%s\n")
at ../sysdeps/posix/libc_fatal.c:155
#6 0x00007ffff7ae6d7c in malloc_printerr (str=str@entry=0x7ffff7c247f8 "free(): invalid next size (normal)") at ./malloc/malloc.c:5664
#7 0x00007ffff7ae8d5c in _int_free (av=0x7fffd8000030, p=0x7fffd8000b60, have_lock=<optimized out>) at ./malloc/malloc.c:4596
#8 0x00007ffff7aeb4d3 in __GI___libc_free (mem=<optimized out>) at ./malloc/malloc.c:3391
#9 0x00007ffff7e512b3 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#10 0x00007ffff7adab43 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#11 0x00007ffff7b6ca00 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
When eti-cmdline
is called with a wrong param, the usage is printed - but the program nevertheless continues instead of aborting.
There is also no param (like -h
) to output the usage, so one currently has to try any possibly wrong param.
Hi,
I put this here only as an idea: create a Windows release for the backend.
It can be possible using Qt 5.0 and MinGW.
Regards.
tunedFrequency = 220352000
OK, functions seem to be loaded
No devices found
zsh: segmentation fault ./eti-cmdline-rtlsdr
i can see your goto err: but something goes wrong, if no rtl-sdr device is plugged in.
I wanted to use a file on my DVD which has a space in its filename:
$ eti-cmdline-rawfiles -F /media/andreas/DAB_europa/9D_SWR\ BW\ N_2018-01-06_112554.raw > dab/9D_SWR.eti
But it seems escaping did not work in the program:
could not open /media/andreas/DAB_europa/9D_SWR BW N_2018-01-06_112554.raw
Then I copied it to /tmp and renamed it and it worked
$ eti-cmdline-rawfiles -F /tmp/9D.raw > dab/9D_SWR.eti
Period = 8000
there might be a DAB signal here
When I write an ETI and want to stop it there is a seg fault
Hello,
I did some reading up after noticing how quickly my portable DAB radio obtains the date and time after power on.
The information is transmitted in local time offset, once per second, in Fig 0/10.
Do you think it might be possible to use this as a time source for an NTP server?
I know that there are better solutions available, like receiving MSF or local equivalent, but the thought occurred to me that if you are receiving DAB on an infrastructure device, like a beefy router, it may be useful for more than just audio.
It would be great if a command line parameter could be added, which disables the permanent status output like
125 estimated snr: 11, fibquality 100
The reason is that when the ETI output is forwarded to another tool (e.g. DABlin), the stderr
outputs might be mixed, especially when due to bad reception RS coding errors are found, fixed and output to the user.
As qt-dab saves dumps as *.sdr (s16le resp s16be), why not add support for it in eti-cmdline?
The waitingTime
can be set by -D
to cope with bad reception of a DAB channel. Just before that, some kind of time sync happens (using timesyncSet
and timeSynced
) which quite fast decides whether a DAB signal is found or out.
It would be great if also the waiting time for this time sync could be set/increased via parameter, as this would allow to adjust the antenna while waiting for a sync. Otherwise, dab2eti
quite fast exits with "There does not seem to be a DAB signal here" as no signal was found so far.
main.cpp:107:31: error: cannot convert ‘char*’ to ‘FILE* {aka _IO_FILE*}’ in assignment
outputFile = optarg;
^
Seems you have fixed the 4A issue only in qt-dab. eit-stuff still don't support protection level 4A.
./eti-backend -s -
produces a seg fault
So stdin is no more working
Some paths do not exist:
Lines 167: replace by ./devices/airspy-handler
, similar for lines 172 and 177
Line 191: replace by ./devices/rtlsdr-handler/
, similar for lines 196 and 201
When I change the above mentioned paths, and then make it, it fails:
In file included from /home/andreas/eti-stuff/eti-cmdline/eti-library/src/eti-api.cpp:33:0:
/home/andreas/eti-stuff/eti-cmdline/eti-library/./devices/rtlsdr-handler/rtlsdr-handler.h:60:42: error: expected class-name before ‘{’ token
class rtlsdrHandler: public inputHandler {
^
jordi@jordi-MS-7514:~/Downloads/eti-stuff/eti-cmdline/build$ cmake .. -DRTLSDR=on
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Build type not specified: defaulting to release.
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for module 'fftw3f >= 3.0'
-- Found fftw3f , version 3.3.7
-- Found FFTW3F: /usr/lib/x86_64-linux-gnu/libfftw3f.so
-- Found LibSndFile: /usr/lib/x86_64-linux-gnu/libsndfile.so
-- Found LibSampleRate: /usr/lib/x86_64-linux-gnu/libsndfile.so
-- Checking for module 'librtlsdr'
-- Found librtlsdr, version 0.6.0-25-gd794
-- Found librtlsdr: /usr/local/include, /usr/local/lib/librtlsdr.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jordi/Downloads/eti-stuff/eti-cmdline/build
jordi@jordi-MS-7514:~/Downloads/eti-stuff/eti-cmdline/build$ make
Scanning dependencies of target eti-cmdline-rtlsdr
[ 4%] Building CXX object CMakeFiles/eti-cmdline-rtlsdr.dir/main.cpp.o
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp: In function ‘int main(int, char**)’:
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:374:11: error: ‘deviceGain’ was not declared in this scope
deviceGain = atoi (optarg);
^~~~~~~~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:374:11: note: suggested alternative: ‘serviceid’
deviceGain = atoi (optarg);
^~~~~~~~~~
serviceid
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:380:11: error: ‘autoGain’ was not declared in this scope
autoGain = true;
^~~~~~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:380:11: note: suggested alternative: ‘autogain’
autoGain = true;
^~~~~~~~
autogain
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:433:39: error: ‘deviceGain’ was not declared in this scope
deviceGain,
^~~~~~~~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:433:39: note: suggested alternative: ‘serviceid’
deviceGain,
^~~~~~~~~~
serviceid
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:434:39: error: ‘autoGain’ was not declared in this scope
autoGain,
^~~~~~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:434:39: note: suggested alternative: ‘autogain’
autoGain,
^~~~~~~~
autogain
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:435:39: error: ‘deviceIndex’ was not declared in this scope
deviceIndex);
^~~~~~~~~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:435:39: note: suggested alternative: ‘deviceHandler’
deviceIndex);
^~~~~~~~~~~
deviceHandler
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:203:10: warning: unused variable ‘gain’ [-Wunused-variable]
int16_t gain = 50;
^~~~
/home/jordi/Downloads/eti-stuff/eti-cmdline/main.cpp:204:7: warning: unused variable ‘autogain’ [-Wunused-variable]
bool autogain = false;
^~~~~~~~
CMakeFiles/eti-cmdline-rtlsdr.dir/build.make:62: recipe for target 'CMakeFiles/eti-cmdline-rtlsdr.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/eti-cmdline-rtlsdr.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:99: recipe for target 'CMakeFiles/eti-cmdline-rtlsdr.dir/all' failed
make[1]: *** [CMakeFiles/eti-cmdline-rtlsdr.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
jordi@jordi-MS-7514:~/Downloads/eti-stuff/eti-cmdline/build$
It would be great if the ETI output was accessible via a callback, otherwise it would be difficult for a program using this lib to access the ETI stream.
I think it would be OK to entirely remove the possibility to specify a file, because one could just write a custom callback that does that file writing (to stdout in the eti-cmdline case).
Reason: Missing curly brace in eti-stuff/eti-cmdline/main.cpp, L400.
The current version of eti-cmdline
cannot be compiled, as the definition of phaseReference
is missing. When I go back to the previous commit, compilation works.
Used cmake
call:
cmake .. -DRTLSDR=ON
Output:
[...]/eti-stuff/eti-cmdline/src/ofdm/ofdm-processor.cpp: In constructor ‘ofdmProcessor::ofdmProcessor(deviceHandler*, SNDFILE*, uint8_t, void*, syncsignal_t, snrsignal_t, etiGenerator*, int16_t, uint8_t)’:
/home/stefan/Schreibtisch/DL-Source/eti-stuff/eti-cmdline/src/ofdm/ofdm-processor.cpp:65:66: error: no matching function for call to ‘phaseReference::phaseReference(dabParams*, int16_t&)’
threshold) {
^
can they be removed and a release be made?
since dablin author support eti-cmdline now, i'd like to rather package eti-cmdline for debian than dabtools.
Dear Jan,
I have no idea why I cannot play the attached file in eti-cmdline-xmlfiles
, which I have recorded an older version of Qt-DAB (3.4.1) with my Raspberry.
It seems it has nothing to do with the German-Austrian ä
in the month ("Jänner", have renamed it) and nothing to do with the missing >
at the end of the XML-header (have patched the header, see below) and nothing to do with the 

after the year. Why? Because I can play this file in Qt-DAB (and AbracaDABra as well).
As the header is 1024 bytes long and my file is u8 raw in fact, I've used the following command to get a valid eti out of it:
dd if=./foo.uff skip=1024 | eti-cmdline-rawfiles -F /dev/stdin | dablin_gtk
But eti-cmdline-xmlfiles
cannot handle the file at all (even after patching it in a hexeditor by replacing the header with another one), therefore I've checked with gdb
$ LANG=C ./eti-cmdline-xmlfiles -F /media/andreas/01782a32-19cf-4832-a802-039dbc61af5d/Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.uff
terminate called after throwing an instance of 'rapidxml::parse_error'
what(): expected >
Abgebrochen (Speicherabzug geschrieben)
$ gdb --args ./eti-cmdline-xmlfiles -F /media/andreas/01782a32-19cf-4832-a802-039dbc61af5d/Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.uff
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./eti-cmdline-xmlfiles...
(gdb) r
Starting program: /tmp/eti-stuff/eti-cmdline/build_xmlfiles/eti-cmdline-xmlfiles -F /media/andreas/01782a32-19cf-4832-a802-039dbc61af5d/Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.uff
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
terminate called after throwing an instance of 'rapidxml::parse_error'
what(): expected >
Program received signal SIGABRT, Aborted.
__pthread_kill_implementation (no_tid=0, signo=6, threadid=140737352618944) at ./nptl/pthread_kill.c:44
44 ./nptl/pthread_kill.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737352618944) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140737352618944) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140737352618944, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007ffff7842476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007ffff78287f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007ffff7ca2b9e in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff7cae20c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00007ffff7cae277 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#8 0x00007ffff7cae4d8 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#9 0x000055555555d1a9 in rapidxml::xml_node<char>* rapidxml::xml_document<char>::parse_node<0>(char*&) [clone .cold] ()
#10 0x0000555555575ac3 in xmlDescriptor::xmlDescriptor(_IO_FILE*, bool*) ()
#11 0x0000555555572f7c in xml_fileReader::xml_fileReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, void (*)()) ()
#12 0x000055555555db3d in main ()
This is the XML-header:
$ head -c 2048 < /tmp/Generic\ RTL2832U\ OEM-7D-Mi--Jan--24-2024-17-55-00.uff
<?xml version="1.0" encoding="utf-8"?>
<SDR>
<Recorder Name="Qt-DAB" Version="3.4.1"/>
<Device Name="rtlsdr" Model="Generic RTL2832U OEM"/>
<Time Value="Wed Jan 24 18:00:58 2024
" Unit="UTC"/>
<Sample>
<Samplerate Value="2048000" Unit="Hz"/>
<Channels Container="uint8" Bits="8" Ordering="LSB">
<Channel Value="I"/>
<Channel Value="Q"/>
</Channels>
</Sample>
<Datablocks>
<Datablock Number="1" Count="1447763254" Unit="Channel">
<Frequency Value="194064" Unit="KHz"/>
<Modulation Value="DAB"/>
</Datablock>
</Datablocks>
</SDR
The only difference to another XML-files on my drive is the sorting of the XML fields.
Generic RTL2832U OEM-7D-Mi--Jän--24-2024-17-55-00.zip
(the file is truncated to 20 MB in order to fit to Github.com extensions)
dd if=Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.uff skip=1024 > /tmp/Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.raw
$ eti-cmdline-rawfiles -F /tmp/Generic\ RTL2832U\ OEM-7D-Mi--Jän--24-2024-17-55-00.raw | dablin_gtk
DABlin v1.14.0-4-g9a99ed9 - capital DAB experience
Plays a DAB/DAB+ audio service from an ETI-NI or an EDI AF stream.
https://github.com/Opendigitalradio/dablin
Period = 8000
SDLOutput: using SDL version '2.0.20'
EnsembleSource: reading ETI from 'stdin'
there might be a DAB signal here
programt ( 1) 8s Radio Terminal 9467 is in the list
program ( 2) Retro Radio 9465 is in the list
program ( 3) ENTER 9464 is in the list
program ( 4) Radio 1 SLO HITI 9466 is in the list
program ( 5) Radio Energija 9468 is in the list
ensemble SLO DAB+ R3 detected
Hint: Other files work:
$ eti-cmdline-xmlfiles -F /tmp/Generic\ RTL2832U\ OEM-10D-Mi--Jan--24-2024-22-07-13.uff > /dev/null
rootnode SDR
Datablock detected
attribute Count (14201702)
attribute Unit (Channel)
attribute Number (1)
sampleRate = 2048000
nrChannels = 2
bitsperChannel = 8
container = uint8
byteOrder = LSB
iqOrder = IQ
nrBlocks = 1 (1)
>>> 1 14201702 Channel 215072000 DAB
nrElements = 14201702
7100851 samples have to be read, order is IQ
samples to read 7100851
ensemble SLO DAB+ R1 detected
program ( 1) VAL 202 9202 is in the list
program ( 2) Radio Si 933A is in the list
program ( 3) Center Slo 9414 is in the list
program ( 4) Rock Radio Slo 9516 is in the list
program ( 5) Radio Ognjisce 932F is in the list
program ( 6) Radio 1 DAB 9442 is in the list
program ( 7) Radio 1 80-a 9459 is in the list
program ( 8) Radio City 9415 is in the list
program ( 9) Radio Student 9440 is in the list
program (10) Radio Salomon 9463 is in the list
program (11) Radio Veseljak 9449 is in the list
program (12) Radio Net FM 942B is in the list
there might be a DAB signal here
programt (13) 9s Ekspres Slo 9462 is in the list
program (14) Radio Aktual 941C is in the list
program (15) ARS 9203 is in the list
program (16) PRVI 9201 is in the list
yes, here we go
Handling ensemble SLO DAB+ R1 until you quit
reached end of file, cont = 0: 16, fibquality 100
Maybe you have got an idea?
Hi,
This is a Work-In-Progress. But I like to know your opinion about this idea:
eti-cmdline
tool (mainly for changing the frequency) I found a "simple" solution. The solution is to add support for a FIFO contoller file. This file is passed as a parameter to the tool and when it exists you can send control commands. The protocol will be identical to the well known RTL_TCP (5 bytes for each packet, first byte the 'cmd' and the last four bytes an int32 as 'param'). So, when your send to this FIFO the command for changing the frequency, the tool will change the value internally. This file can be a FIFO file or a '3' PIPE between two programs (note that even file descriptors 0,1,2 exists for STDOUT, STDIN & STDERR I/O streams, you can use upper values like '3' if you like).Here some comments about this solution:
eti-backend
and DABlin
(or others) will have support to this, then you can run something like eti-cmdline -c /tmp/eti-cmd.sock | dablin -x /tmp/eti-cmd.sock
. And you have the option for changing the frequency.eti-cmdline
is only required to check regulary if new data comes to the control file. You can read it from time to time, so you don't disturb threads.eti-cmdline
requires that all driver handlers implement the corresponding functions for changing the frequency at any time.I hope that you will agree with this approach this time. Your comments are welcome. The idea is to put this into practice on my own.
And regarding the question Why you need to change the frequency instead of restart the tool? the answer is: Because restarting will consume a lot of time. Specifically using the RTL_TCP driver this implies more than 1 second only for reconnecting to the server. Plus the time to restart the eti-cmdline process. So sending only a message to change the frequency will be much more efficient.
Regards.
Hi!
Could you please give me some advice on how to get the rtl_tcp input working?
I could generate DAB file but am unable to generate DAB+ file. While playing the audio through dablin_gtk, audio is not clear.
SDLOutput: silence started...
SDLOutput: silence ended (115200 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (117760 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (199680 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (101376 bytes)
SDLOutput: silence started...
getting errors like (5+) or (AU #2), before the silence start/end messages
I wish to use eti-cmdline-rtlsdr in conjunction with dablin, to listen to DAB+ channels.
I did a search for avalilable channels with dab-scanner-rtlsdr with the following results:
Ensemble SWR BW N ; ensembleId 10EA; channel 9D;
Audio services
type;program name;channel;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; genre; prot level; code rate; language
audioservice;SWR4 MA ;9D;DC04;10;570;84;112;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR4 HN ;9D;DD04;8;402;84;112;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR4 S ;9D;D904;5;318;84;112;DAB+;0;EEP 3-A;1/2;unknown;
audioservice;SWR4 KA ;9D;D804;9;486;84;112;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR Aktuell ;9D;D3A6;1;0;54;72;DAB+;3;EEP 3-A;1/2;unknown;
audioservice;SWR2 ;9D;D3A2;3;138;96;128;DAB+;7;EEP 3-A;1/2;unknown;
audioservice;SWR1 BW ;9D;D301;2;54;84;112;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;DASDING ;9D;D3A5;13;738;84;112;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;SWR3 ;9D;D3A3;4;234;84;112;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;SWR4 UL ;9D;DE04;12;654;84;112;DAB+;9;EEP 3-A;1/2;unknown;
Data Services
type;program name;channel;serviceId;subchannelId;start address;length (CU); bit rate; FEC; prot level; appType; DSCTy; subService;
dataservice;EPG (data);9D;E0D010C9;20;822;18;24;no FEC;EEP 3-A;SPI, was EPG;Multimedia Object Transfer (MOT);no;
dataservice;TPEG (data);9D;E0D020EB;21;840;12;24;no FEC;EEP 4-A;TPEG;Transparent Data Channel (TDC);no;
Ensemble SWR RP ; ensembleId 10D9; channel 11A;
Audio services
type;program name;channel;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; genre; prot level; code rate; language
audioservice;SWR1 RP ;11A;D3A1;2;108;72;96;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;SWR Aktuell ;11A;D3A6;1;54;54;72;DAB+;3;EEP 3-A;1/2;unknown;
audioservice;SWR4 LU ;11A;D8A4;9;594;66;88;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR4 TR ;11A;DCA4;10;660;66;88;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;DASDING ;11A;D3A5;5;324;72;96;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;SWR3 ;11A;D3A3;4;252;72;96;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;SWR4 MZ ;11A;DAA4;6;396;66;88;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR4 KO ;11A;D6A4;8;528;66;88;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;SWR4 KL ;11A;D7A4;7;462;66;88;DAB+;9;EEP 3-A;1/2;unknown;
audioservice;RPR1. ;11A;D3A8;0;0;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;bigFM ;11A;100F;11;726;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;Rockland Radio ;11A;D3AA;12;780;54;72;DAB+;11;EEP 3-A;1/2;unknown;
audioservice;SWR2 ;11A;D3A2;3;180;72;96;DAB+;7;EEP 3-A;1/2;unknown;
Data Services
type;program name;channel;serviceId;subchannelId;start address;length (CU); bit rate; FEC; prot level; appType; DSCTy; subService;
dataservice;EPG (data);11A;E0D010D9;15;834;18;24;FEC;EEP 3-A;SPI, was EPG;Multimedia Object Transfer (MOT);no;
dataservice;TPEG (data);11A;E0D020EB;16;852;12;24;no FEC;EEP 4-A;TPEG;Transparent Data Channel (TDC);no;
Ensemble OAS BW ; ensembleId 10C9; channel 11B;
Audio services
type;program name;channel;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; genre; prot level; code rate; language
audioservice;Schlager Radio ;11B;1735;17;756;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;HITRADIO OHR ;11B;D40D;8;324;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;RADIO REGENBOGEN;11B;D308;9;378;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;DONAU 3 FM ;11B;DA08;7;270;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;REGENBOGEN 2 ;11B;D30E;10;432;54;72;DAB+;11;EEP 3-A;1/2;unknown;
audioservice;Radio Seefunk ;11B;140A;12;540;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;RADIO TEDDY ;11B;1B2E;14;648;54;72;DAB+;18;EEP 3-A;1/2;unknown;
audioservice;ANTENNA BW ;11B;130B;18;810;48;64;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;baden.fm ;11B;1702;4;108;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;DIE NEUE 107.7 ;11B;130A;5;162;54;72;DAB+;11;EEP 3-A;1/2;unknown;
audioservice;Radio Ton ;11B;D70D;11;486;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;die neue welle ;11B;D50C;6;216;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;antenne1 ;11B;D30A;15;702;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;bigFM ;11B;100F;13;594;54;72;DAB+;10;EEP 3-A;1/2;unknown;
audioservice;egoFM ;11B;1014;3;54;54;72;DAB+;15;EEP 3-A;1/2;unknown;
audioservice;RADIO 7 ;11B;D30B;1;0;54;72;DAB+;10;EEP 3-A;1/2;unknown;
when I try now to play some of those channels with dablin I use this command line for Channel 9B, 11A, 11B
./eti-cmdline-rtlsdr -C 9B -G 60 | dablin_gtk
and no matter, which gain mode (Q or 0-60) I use, the result is:
Found Fitipower FC0012 tuner
SDLOutput: using SDL version '2.26.5'
EnsembleSource: reading ETI from 'stdin'
samplerate set to 2048000
Supported gain values (5): -9.-9 -4.0 7.1 17.9 19.2
effective gain: gain 17.9
There does not seem to be a DAB signal here
EnsembleSource: EOF reached!
what I am doing wrong?
Dear Jan, I've lots of PCs and Laptops running with your great tools. But on my Raspberrry Pi 3B (not +) I've discovered that the eti-cmdline-rtlsdr does not work properly (no matter if I define a manual gain). eti-cmdline-rawfiles works, indeed.
At the start the fibquality is 100 but after a few seconds it gets less and will end at 0. At the same time the CPU load is not much (see screenshot).
On the same RPI3 qtdab works without any problems, even with Protection level 4A (used in Slovenia).
Whereas eti-cmdline-rawfiles
and eti-cmdline-wavfiles
play a file from the beginning after reaching EOF, the eti-cmdline-xml
does not.
bool xml_fileReader::restartReader (int32_t freq) {
(void)freq;
if (theReader != nullptr)
return true;ifnot
theReader = new xml_Reader (theFile,
theDescriptor,
5000,
&_I_Buffer,
continue_on_eof);
return true;
}
I guess it has to do as you need to skip some bytes.
See line 119 in eti-backend's main.cpp, otherwise compiling fails.
Hi @JvanKatwijk ,
Please, read my request at Opendigitalradio/dabtools#16
I suggest to add a proper "padding" output when the no-signal or insufficient data for decoding exists. This will provide the option for generate a CBR ETI bitstream that will be more easier to process in the "eti-backend" (aka DAB player).
You agree?
I can only test sdr IQ files at home as there is no DAB reception. Yesterday I was in Südtirol wanting to collect the 5 multiplexes with eti-frontend as eti in order to save disk space.
The reception was perfect, FIC data index was 100. Then I pressed eti waiting, and the FIC data went down to 0, the color for the indicator for time sync changed to red and I got lots of error each some seconds:
startIndex = -3
I've tested it with all 5 muxes and an Airspy mini as well as 2 different dabsticks and 2 antennas.
So I only could write an sdr file.
Today I tested the sdr files in eti-frontend and the FIC data index is always 100. So it seems it is just a matter of live receiving.
Hi Jan,
there is an compilation error:
pi@raspberrypi:~/eti-stuff/eti-frontend/build $ make
[ 2%] Building C object CMakeFiles/eti-frontend.dir/src/backend/spiral-code/spiral-sse.c.o
cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C
/home/pi/eti-stuff/eti-frontend/src/backend/spiral-code/spiral-sse.c:23:23: fatal error: emmintrin.h: Datei oder Verzeichnis nicht gefunden
#include <emmintrin.h>
^
compilation terminated.
CMakeFiles/eti-frontend.dir/build.make:106: recipe for target 'CMakeFiles/eti-frontend.dir/src/backend/spiral-code/spiral-sse.c.o' failed
make[2]: *** [CMakeFiles/eti-frontend.dir/src/backend/spiral-code/spiral-sse.c.o] Error 1
The following did not help to insert into eti-frontend.pro file:
CONFIG += NO_SSE_SUPPORT
Hi Jan,
I am trying to compile eti-commandline. I followed the README.md, using cmake .. -DRTLSDR=ON
I get a whole bunch of errors starting with
/eti-cmdline/main.cpp:360:2: error: #elif after #else
My C++ was never good and now rusty as well. Never been good with these conditional directives. On lines 300 and 313, why de you have #ifdef HAVE_SDRPLAY and #if defined (HAVE_SDRPLAY)?
dab2eti does not work for me, is say PLL not locked, which is why I'm trying this.
We restarted DAB+ trial transmission in Johannesburg and Pretoria last week. I'm using Qt-DAB on Windows at work and even the Windows installer on Ubuntu at home, with rtl_tcp. Now I need something to get from RF to ETI, to use many ETI tools.
eti-backend compiled, just with warnings. I haven't tried it, having no ETI feed!
Thanks a lot.
Chris
The parameters -S
and -h
are no longer available. It seems that they have been removed by mistake from the options string and the usage info during refactoring, as they are still present in the switch
block.
Hi @JvanKatwijk ,
In order to support a simple method for use "eti-cmdline-*" in conjunction with DABlin and enable the option for changing the frequency I suggest this "simple" change:
while (data in the STDIN) {
in=readline(STDIN); // Only read 5 bytes!
cmd=in[0];
param=ntohl(in[1:4]);
if (cmd=0x01)
change_freq(param);
}
You think it's good idea to support this?
In any case, this doesn't change the current behaviour. So, current tools don't see any change, and it doesn't disturbs.
Note: In the client side (for instance, in DABlin) the code will be even simpler!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.