Coder Social home page Coder Social logo

jvankatwijk / eti-stuff Goto Github PK

View Code? Open in Web Editor NEW
21.0 9.0 12.0 134.68 MB

experimental software for creating and interpreting eti frames

License: GNU General Public License v2.0

CMake 2.82% QMake 0.31% C++ 65.59% C 31.28%
eti-frames dablin sdrplay-rsp-devices rtlsdr-dongle

eti-stuff's People

Contributors

andimik avatar jvankatwijk avatar kkubicki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eti-stuff's Issues

eti file does not contain all frames - older version works

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)

segfault invalid next size

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

eti-cmdline: no abort on wrong params

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.

rawfile from optical media not working

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

FR: System Date/Time from Ensemble

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.

eti-cmdline: add option to disable status

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.

Add option for time sync timeout

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.

Wrong paths in CMakeLists.txt

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 {
                                          ^

Can't compile on Ubuntu 18.04

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$ 

eti-lib: get ETI via callback instead of file

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).

eti-cmdline: phaseReference missing

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) {
                                                                  ^

obsolete directories

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.

rapidxml::parse_error in eti-cmdline-xmlfiles

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 &#xa; 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&#xa;" 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?

[WIP] eti-cmdline: FIFO controller file

Hi,

This is a Work-In-Progress. But I like to know your opinion about this idea:

  • After a lot of trials with the objective of a "remote" control for the 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:

  • If you don't use this file nothing changes, so it will be transparent and not disturbing.
  • Using this solution, and when 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.
  • As the protocol is unidirectional, the client process needs only to write 5 bytes in the control file for sending a command.
  • In the 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.
  • And finally the 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.

eti-cmdline: not able to generate DAB+ ETI file

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

eti-cmdline-rtlsdr does not find DAB+ channels, dab-scanner-rtlsdr shows

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?

[eti-cmdline-rtlsdr]: fibquality gets 0 on RPI3B

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).

image

On the same RPI3 qtdab works without any problems, even with Protection level 4A (used in Slovenia).

image
image

repeat after EOF for xml broken

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.

Missing closing }

See line 119 in eti-backend's main.cpp, otherwise compiling fails.

ETI output in SYNCH

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?

startIndex -3 error and FIC data index goes to 0 when writing eti-file

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.

eti-frontend Compile Error on RPi3

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

Compiling eti-commandline in Ubuntu 18.04

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

eti-cmdline: PIPE support for changing the frequency

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:

  • Add support for reading from the PIPE stdin file for commands. These commands can mimic (for convenience) the format used in the RTL_TCP tool. So, at time the idea is to only support the cmd "0x01" (set freq : https://github.com/osmocom/rtl-sdr/blob/master/src/rtl_tcp.c#L307). As this protocol is mainly async, for changing a frequency the pseudo-code algorithm in the server side is quite simple:
 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!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.