[linux-dvb] Siano subsystem (DAB/DMB support) library for linux?

Uri Shkolnik urishk at yahoo.com
Sun Jan 18 13:31:54 CET 2009




--- On Sun, 1/18/09, BOUWSMA Barry <freebeer.bouwsma at gmail.com> wrote:

> From: BOUWSMA Barry <freebeer.bouwsma at gmail.com>
> Subject: Re: [linux-dvb] Siano subsystem (DAB/DMB support) library for linux?
> To: "Ståle Helleberg / drc.no" <staale at drc.no>
> Cc: urishk at yahoo.com
> Date: Sunday, January 18, 2009, 1:36 PM
> A reply to myself.  A copy to you, in case you are
> interested.
> You will still be laughing at me.  Go ahead.  Laugh.
> 
> On Sat, 17 Jan 2009, BOUWSMA Barry wrote:
> 
> > > Please find my testprogram attached. It probably
> has quite a lot of errors,
> > 
> > Many thanks.  I've tried to hack a few things,
> with as little
> > as I know, to make it easier to build with the
> downloaded Siano
> > library somewhere else.
> 
> I wrote yesterday that I had a few problems on the machine
> where I installed this.  So I had the idea to copy the
> Siano
> library and your source to another machine which I've
> been
> upgrading, but where major 251 was free, in case that might
> be one of the many possibilities why it might work.
> 
> For background, the initial installation was done on a
> notebook
> laptop type machine based on debian 4.0, and presently
> running
> kernel 2.6.27-rc4.  `gcc' there is a 4.4.0 CVS-type,
> and that
> might be the reason I needed to add <unistd.h> (if I
> read a
> linux-kernel post yesterday properly)...
> 
> 
> The newer machine has been partly upgraded from an original
> 2.6.8-flavour debian installation where some sort of fsck
> problem or similar resulted in a good deal of the system
> files disappearing, which I've upgraded to a 2-week old
> debian-testing DVD snapshot, and am running a 2.6.28-rc8
> kernel.  This seems to have helped with some things.  Also
> it's not a notebook with pcmcia and major 251 is free,
> the
> biggest reason for me to try it...
> 
> 
> > Here is how I modified compile.sh, to allow me to
> specify with
> > CPPFLAGS and LDFLAGS the path to my copy of the Siano
> library:
> 
> I've also added ${CFLAGS} to allow me to specify
> CFLAGS=-DDEBUG
> in order to better follow the code...
> 
> 
> > gcc -Wall -Werror  -o dab *.o -Llinux_x86_c_lib
> -L../linux_x86_c_lib ${LDFLAGS} -lsmscontrol -lssp
> 
> The -lssp which I apparently had to add is no longer
> needed.
> And so far, it hasn't even been installed...
> 
> 
> > +/* XXX HACK */
> > +#include <unistd.h> // for usleep
> 
> This, however, is still needed...
> 
> 
> > Another thing I needed to do was to modify the
> Siano-supplied
> > `create_char_dev.sh' to make use of the proper
> major number,
> 
> I added a little bit more to this, as I also noted that
> one could specify a non-zero minor number as well (which
> probably wouldn't help me reclaim the use of major 251
> on
> the problematic notebook, but hey)
> 
> Here's the complete file to do this, again.  Note that
> I'm
> well aware that anyone with the least bit of skill should
> be able to do far better than I can in far fewer lines,
> but hey, it's the ideas that count, isn't it?  No? 
> It isn't?
> 
> 
> #!/bin/sh
> 
> # USAGE:  $0  major  minor  (arguments optional)
> #  if major is 0 or not specified, will make a feeble
> half-hearted
> #  attempt to determine which major is in use by smsmdtv
> #  default being 251.  minor is 0 unless specified
> otherwise
> 
> # HACK:  major 251 is used on my test system.
> #  allow user to specify major.
> #  else try to get it from /proc/devices.
> #  else fallback to the default (251)
> 
> # more HACK:  the module also allows one to specify a
> particular
> #  starting minor number.  Not sure how to detect that
> automagically.
> #  assume 0, but allow user to override this as second
> argument
> #  (in which case first is required, or perhaps 0 to
> detect)
> 
> SMSMINOR=0
> if [ "x$1" != "x" ]
> then
> 	SMSCHAR=$1
> 	if [ "x$2" != "x" ]
> 	then
> 		SMSMINOR=$2
> 	fi
> 	if [ "x$SMSCHAR" = "x0" ]
> 	then
> 		SMSCHAR=""
> 	fi
> fi
> 
> if [ "x$SMSCHAR" = "x" ]
> then
> 	SMSCHAR=`grep smschar /proc/devices 2>/dev/null | cut
> -f1 -d ' ' | head -1 `
> fi
> 
> if [ "x$SMSCHAR" = "x" ]
> then
> 	SMSCHAR="251"
> fi
> echo Using major $SMSCHAR, starting at minor $SMSMINOR...
> 
> cd /dev && mknod -m 766 /dev/mdtvctrl c $SMSCHAR
> $(($SMSMINOR + 0))
> cd /dev && mknod -m 766 /dev/mdtv1 c $SMSCHAR
> $(($SMSMINOR + 1))
> cd /dev && mknod -m 766 /dev/mdtv2 c $SMSCHAR
> $(($SMSMINOR + 2))
> cd /dev && mknod -m 766 /dev/mdtv3 c $SMSCHAR
> $(($SMSMINOR + 3))
> cd /dev && mknod -m 766 /dev/mdtv4 c $SMSCHAR
> $(($SMSMINOR + 4))
> cd /dev && mknod -m 766 /dev/mdtv5 c $SMSCHAR
> $(($SMSMINOR + 5))
> cd /dev && mknod -m 766 /dev/mdtv6 c $SMSCHAR
> $(($SMSMINOR + 6))
> cd /dev && mknod -m 766 /dev/mdtv7 c $SMSCHAR
> $(($SMSMINOR + 7))
> cd /dev && mknod -m 766 /dev/mdtv8 c $SMSCHAR
> $(($SMSMINOR + 8))
> cd /dev && mknod -m 766 /dev/mdtv9 c $SMSCHAR
> $(($SMSMINOR + 9))
> cd /dev && mknod -m 766 /dev/mdtv10 c $SMSCHAR
> $(($SMSMINOR + 10))
> cd /dev && mknod -m 766 /dev/mdtv11 c $SMSCHAR
> $(($SMSMINOR + 11))
> cd /dev && mknod -m 766 /dev/mdtv12 c $SMSCHAR
> $(($SMSMINOR + 12))
> cd /dev && mknod -m 766 /dev/mdtv13 c $SMSCHAR
> $(($SMSMINOR + 13))
> cd /dev && mknod -m 766 /dev/mdtv14 c $SMSCHAR
> $(($SMSMINOR + 14))
> cd /dev && mknod -m 766 /dev/mdtv15 c $SMSCHAR
> $(($SMSMINOR + 15))
> cd /dev && mknod -m 766 /dev/mdtv16 c $SMSCHAR
> $(($SMSMINOR + 16))
> 
> 
> 
> > All my hacks should be considered either public domain
> or
> > at best, BSD licensed, with the ideas behind them
> probably
> > far more worthy than the code.
> 
> Given the value of the code, that's not difficult...
> 
> 
> > I'm not quite that far yet, as I may have some
> further
> > hardware debugging to do -- plus I will learn far more
> from
> 
> It was not hardware debugging needed, so it seems.  On the
> new installation, I have finally had success!  Yay!  Oh
> Joy!
> Rapture!
> 
> But first, you need some good laughs, so here's what I
> learned:
> 
> * Do not `scp -r' the v4l-dvb source which I patched
> with the
>   Siano hacks before falling asleep.  `scp' follows
> symlinks,
>   so when I woke up, the destination was still in the
> process
>   of trying to copy most of the origin machine's
> filesystem.
> 
> * I don't know how this happened, but I had a zero-size
> top-
>   level makefile in the obj tree of my linux kernel on the
>   destination machine, which had no effect on rebuilding
> the
>   kernel with the latest installed-from-DVD tools.  Normal
>   build commands wouldn't fix that, and v4l-dvb
> didn't like it.
>   It's fixed, but I wasted an hour when I could have
> been
>   sleeping wondering how it happened.
> 
> * Oh joy, it looks like more ice-rain now, and the ice from
>   the last ice-rain storm two weeks ago is still present
> and
>   causing problems.  And I hoped to finally go out
> tomorrow...
> 
> 
> Anyway, now I see this, and am happy:
> 
> SmSHostApiDeviceInit_Req with payload 0
> Well, that was just yow
> Tuning into a frequency
> Kenneth, the frequency is  227360000
> Esemble Info Result
> Well, no problems there
> Tuning...
> Esemble Info Result
> EID: 16385 with 12 services 'SRG SSR D01     '
> Get Combined Components result
> Found 12 services...
> 
> Service: 0 - DRS 1
> Service: 1 - DRS 2
> Service: 2 - DRS 3
> Service: 3 - DRS MUSIKWELLE
> Service: 4 - DRS Virus
> Service: 5 - CH-POP
> Service: 6 - CH-CLASSIC
> Service: 7 - CH-JAZZ
> Service: 8 - RSR-1ERE
> Service: 9 - RETE UNO
> Service: 10 -  RR-SRG
> Service: 11 - DRS 4 NEWS
> Please select service [0..12] and press enter:
> 
> 
> I guess I'll force the module to major 249 and see if I
> still
> experience the same problems (timeout during device init)
> as
> on the other machine.  If so, I'll complain loudly to
> Uri
> that the Siano binary library seems to have major 251
> hardcoded
> somewhere within, rather than the device names linked by
> the
> script, or some similar problem.
> 
> If not, the problem will be elsewhere, I *won't*
> complain to
> Uri, until I figure out what it could be.
> 
> 
> Again, many thanks for your simple program!  I'll see
> what
> else I can do with it...
> 
> 
> barry bouwsma


It's not hard-coded in the library. The library just open the node by name -
    int fd = open( "/dev/mdtvctrl", O_RDWR );



Uri





      



More information about the linux-dvb mailing list