Hi all,
Given the recent patches by Maik Broemme adding support for a DVB-C
modulator, I thought I would mention that I'm working on a driver for a
DVB-T modulator and would like to open a discussion regarding how to
integrate modulator support into the existing DVB API and kernel sub-system.
The device I'm working with is a $169 (USD) USB DVB-T modulator based on
the it9507 ASIC from ITE. ITE provide a GPL'd Linux driver, but this is
40K+ lines of code and is based on their generic cross-platform SDK
supporting a range of devices.
The device can be purchased here in various incarnations:
http://www.idealez.com/hides/product-gallery/en_US/1-0/554
and I have been working on github here:
https://github.com/linuxstb/it9507
The original ITE driver is in the it950x_linux_v13.06.27.1 directory
there, and my work-in-progress version is in it9507-driver. ITE have
also provided me with some documentation, which is in the docs directory.
Some versions of the modulator USB stick come with a demodulator (based
on the it9133), the output of which can be sent to the modulator
directly via a TS interface. The it9507 also has a USB interface.
For initial simplicity (and because I don't own such a device), my
driver only supports the modulator, but in discussing an API, it's
obviously useful to be aware of such devices.
The hardware also has hardware PID filtering (allowing both whitelisting
and blacklisting of data being transferred from the demod to the mod)
and also the ability to insert SI packets into the modulated stream at
user-definited intervals. Again, my driver doesn't support these
features yet.
Regarding the API, I've looked at the ddbridge driver here:
http://www.metzlerbros.de/dddvb/dddvb-0.9.10.tar.bz2
and from what I can understand, this adds a new "mod0" device to access
the DVB-C modulator. The API is as follows:
struct dvb_mod_params {
__u32 base_frequency;
__u32 attenuator;
};
struct dvb_mod_channel_params {
enum fe_modulation modulation;
__u32 rate_increment;
};
#define DVB_MOD_SET _IOW('o', 208, struct dvb_mod_params)
#define DVB_MOD_CHANNEL_SET _IOW('o', 209, struct
dvb_mod_channel_params)
I've no idea what "rate_increment" is.
Looking in the docs/modulator file, there also appears to be some
ability to redirect data from a demod to a mod via
/sys/class/ddbridge/ddbridge0/redirect
As a comparison, the current API for my driver can be seen here:
https://github.com/linuxstb/it9507/blob/master/it9507-driver/include/dvbmod.h
My driver is currently not integrated into the DVB subsystem, and as
such creates /dev/dvbmod%d device. This is used for the ioctls and also
for writing the TS to the modulator.
The it9507 driver uses a software attenuation, and the range is
dependent (but only very slightly - +/- a couple of dB at either end of
the scale) on the frequency. So I've currently implemented a
DVBMOD_GET_RF_GAIN_RANGE ioctl to get the available gain range for a
specific frequency, but it wouldn't be a big loss to change the driver
to just limit the gain to the subset that works on all frequencies,
removing that call from the API.
I haven't had chance yet to seriously consider a generic modulator API,
but with one modulator driver now being considered for inclusion I
wanted to make those considering the API aware of my work.
It seems clear however that neither my current API, nor that included
with the ddbridge DVB-C modulator is generic enough at the moment.
Regards,
Dave.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html