Bought the terratec S7, it has a CA module slot and has full-fledged linux support. Downloaded the firmware and driver code from http://linux.terratec.de, installed the firmware on my fedora 14 box, plugged it in and it works just like that, good.1 Buy a linuxtv compatible USB DVB-S2 tuner/receiver (with or without smartcard reader). Terratec has some of these (S2 and S7 models).
This took a bit longer. I made a dedicated development environment for the kernel modules (vanilla 2.6.18 kernel with approximately the same configuration as my tv's kernel (2.6.18-SELP-ARM)) I downloaded the v4l-dvb backport from linuxtv.org, and copied it piecemeal into the main linux source tree. This backport features DVB API version 5.0, while the 2.6.18 kernel only supports 3.1 (or 2, don't remember exactly). Because the dvb stack is only very loosely coupled to the main linux kernel tree, this was fairly easy, just a few patches were needed to make things work. This does not mean that everything is without glitches, but sufficient for TV reception.2 Compile the driver and v4l(2) software layer for it.
After testing I compiled all required modules (7 of them!) for samsung ARM. It was a clean build, no problems.
To be done.3 Do the settings for the receiver through the TV, over USB, via some injected code.
So far, I borrowed a satellite dish from a colleague of mine, single LNB, for Astra east 19.2. No decryption module installed yet.4 Set the tuner/receiver to spit out a Samsung tv compatible videostream over USB.
With the software available from linuxtv (dvb-apps) I can scan for channels and control the tuner. Will probably compile for ARM without too much trouble.
The FTA channels all emit MPEG_TS streams (mpeg transport stream, multiplexed mpeg 2 video, mpeg layer 3 audio and a vbi (teletext) channel). This is the same format as .VOB used on DVDs. These .VOBs, when renamed to .mpg play flawlessly on my TV, so I don't expect anything nasty there. HDTV hasn't been tested yet.
I tested these steps on my development box, works like a charm.
5 Open a pipe for video data collection, from USB.
6 Readout the pipe as if it is a USB pendrive.
7 Play the video stream as if it is a movie on a pendrive
Will do that anyway ...8 Live happily ever after.
Things to be done:
The installation of the kernel modules on my TV is easy, all required modules load, just the root file system needs two more mount points:
/dev/dvb and /lib/firmware (and possibly others). Work in progress. squashfs is not very friendly when it comes to portability across different software versions. If anyone could tell me what the easiest way of upgrading a root filesystem is, it will save me a lot of time.
Build scanning/zapping code for ARM:
Just a few hours work I guess. The scanning software (w_scan) has a full GNU implementation ( ./configure --host=xxx && make && make install). the zapping code needs some extras in the makefiles for cross compilation. Just things to be done, nothing seriously difficult.
Do channel hopping from the TV:
This will require injected code and some automated way of switching to movie playback, I have no experience there, so any advice will be more than welcome.