Jelajahi Sumber

Add dvb general purpose tools.

The tools can be modified and experimented with on the
host pc and uploaded to the raspberry target device.

Signed-off-by: Iliya Iliev <iliyailiev3592@gmail.com>
Iliya Iliev 5 tahun lalu
induk
melakukan
e3818901ec
100 mengubah file dengan 3900 tambahan dan 0 penghapusan
  1. 105 0
      dvb-tools/Make.rules
  2. 12 0
      dvb-tools/Makefile
  3. 85 0
      dvb-tools/README.md
  4. 16 0
      dvb-tools/buid/channels.conf
  5. TEMPAT SAMPAH
      dvb-tools/build/lib/libdvbapi.so
  6. TEMPAT SAMPAH
      dvb-tools/build/lib/libdvbcfg.so
  7. TEMPAT SAMPAH
      dvb-tools/build/lib/libdvben50221.so
  8. TEMPAT SAMPAH
      dvb-tools/build/lib/libdvbsec.so
  9. TEMPAT SAMPAH
      dvb-tools/build/lib/libesg.so
  10. TEMPAT SAMPAH
      dvb-tools/build/lib/libucsi.so
  11. TEMPAT SAMPAH
      dvb-tools/build/test/diseqc
  12. TEMPAT SAMPAH
      dvb-tools/build/test/dvbcfg_test
  13. TEMPAT SAMPAH
      dvb-tools/build/test/evtest
  14. TEMPAT SAMPAH
      dvb-tools/build/test/lock_s
  15. TEMPAT SAMPAH
      dvb-tools/build/test/sendburst
  16. TEMPAT SAMPAH
      dvb-tools/build/test/set22k
  17. TEMPAT SAMPAH
      dvb-tools/build/test/setpid
  18. TEMPAT SAMPAH
      dvb-tools/build/test/setvoltage
  19. TEMPAT SAMPAH
      dvb-tools/build/test/szap2
  20. TEMPAT SAMPAH
      dvb-tools/build/test/test-app
  21. TEMPAT SAMPAH
      dvb-tools/build/test/test-session
  22. TEMPAT SAMPAH
      dvb-tools/build/test/test-transport
  23. TEMPAT SAMPAH
      dvb-tools/build/test/test_av
  24. TEMPAT SAMPAH
      dvb-tools/build/test/test_av_play
  25. TEMPAT SAMPAH
      dvb-tools/build/test/test_dvr
  26. TEMPAT SAMPAH
      dvb-tools/build/test/test_dvr_play
  27. TEMPAT SAMPAH
      dvb-tools/build/test/test_pes
  28. TEMPAT SAMPAH
      dvb-tools/build/test/test_sec_ne
  29. TEMPAT SAMPAH
      dvb-tools/build/test/test_sections
  30. TEMPAT SAMPAH
      dvb-tools/build/test/test_stc
  31. TEMPAT SAMPAH
      dvb-tools/build/test/test_stillimage
  32. TEMPAT SAMPAH
      dvb-tools/build/test/test_tapdmx
  33. TEMPAT SAMPAH
      dvb-tools/build/test/test_tt
  34. TEMPAT SAMPAH
      dvb-tools/build/test/test_vevent
  35. TEMPAT SAMPAH
      dvb-tools/build/test/test_video
  36. TEMPAT SAMPAH
      dvb-tools/build/test/testesg
  37. TEMPAT SAMPAH
      dvb-tools/build/test/testucsi
  38. TEMPAT SAMPAH
      dvb-tools/build/util/atsc_epg
  39. TEMPAT SAMPAH
      dvb-tools/build/util/av7110_loadkeys
  40. TEMPAT SAMPAH
      dvb-tools/build/util/azap
  41. TEMPAT SAMPAH
      dvb-tools/build/util/czap
  42. TEMPAT SAMPAH
      dvb-tools/build/util/dib3000-watch
  43. TEMPAT SAMPAH
      dvb-tools/build/util/dst_test
  44. TEMPAT SAMPAH
      dvb-tools/build/util/dvbdate
  45. TEMPAT SAMPAH
      dvb-tools/build/util/dvbnet
  46. TEMPAT SAMPAH
      dvb-tools/build/util/dvbscan
  47. TEMPAT SAMPAH
      dvb-tools/build/util/dvbtraffic
  48. TEMPAT SAMPAH
      dvb-tools/build/util/femon
  49. TEMPAT SAMPAH
      dvb-tools/build/util/gnutv
  50. TEMPAT SAMPAH
      dvb-tools/build/util/gotox
  51. TEMPAT SAMPAH
      dvb-tools/build/util/lsdvb
  52. TEMPAT SAMPAH
      dvb-tools/build/util/scan
  53. TEMPAT SAMPAH
      dvb-tools/build/util/szap
  54. TEMPAT SAMPAH
      dvb-tools/build/util/tzap
  55. TEMPAT SAMPAH
      dvb-tools/build/util/zap
  56. 16 0
      dvb-tools/config/channels.conf
  57. 40 0
      dvb-tools/deploy
  58. 3 0
      dvb-tools/getVersion
  59. 140 0
      dvb-tools/include/audio.h
  60. 90 0
      dvb-tools/include/ca.h
  61. 154 0
      dvb-tools/include/dmx.h
  62. 648 0
      dvb-tools/include/frontend.h
  63. 53 0
      dvb-tools/include/net.h
  64. 142 0
      dvb-tools/include/osd.h
  65. 29 0
      dvb-tools/include/version.h
  66. 277 0
      dvb-tools/include/video.h
  67. 11 0
      dvb-tools/lib/Makefile
  68. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libdvbapi.so
  69. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libdvbcfg.so
  70. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libdvben50221.so
  71. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libdvbsec.so
  72. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libesg.so
  73. TEMPAT SAMPAH
      dvb-tools/lib/deploy/libucsi.so
  74. 25 0
      dvb-tools/lib/libdvbapi/Makefile
  75. 50 0
      dvb-tools/lib/libdvbapi/dvbaudio.c
  76. 1 0
      dvb-tools/lib/libdvbapi/dvbaudio.d
  77. 55 0
      dvb-tools/lib/libdvbapi/dvbaudio.h
  78. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbaudio.o
  79. 159 0
      dvb-tools/lib/libdvbapi/dvbca.c
  80. 1 0
      dvb-tools/lib/libdvbapi/dvbca.d
  81. 135 0
      dvb-tools/lib/libdvbapi/dvbca.h
  82. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbca.o
  83. 255 0
      dvb-tools/lib/libdvbapi/dvbdemux.c
  84. 1 0
      dvb-tools/lib/libdvbapi/dvbdemux.d
  85. 204 0
      dvb-tools/lib/libdvbapi/dvbdemux.h
  86. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbdemux.o
  87. 574 0
      dvb-tools/lib/libdvbapi/dvbfe.c
  88. 1 0
      dvb-tools/lib/libdvbapi/dvbfe.d
  89. 333 0
      dvb-tools/lib/libdvbapi/dvbfe.h
  90. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbfe.o
  91. 104 0
      dvb-tools/lib/libdvbapi/dvbnet.c
  92. 1 0
      dvb-tools/lib/libdvbapi/dvbnet.d
  93. 87 0
      dvb-tools/lib/libdvbapi/dvbnet.h
  94. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbnet.o
  95. 46 0
      dvb-tools/lib/libdvbapi/dvbvideo.c
  96. 1 0
      dvb-tools/lib/libdvbapi/dvbvideo.d
  97. 46 0
      dvb-tools/lib/libdvbapi/dvbvideo.h
  98. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/dvbvideo.o
  99. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/libdvbapi.a
  100. TEMPAT SAMPAH
      dvb-tools/lib/libdvbapi/libdvbapi.so

+ 105 - 0
dvb-tools/Make.rules

@@ -0,0 +1,105 @@
+# build rules for linuxtv.org dvb-apps
+
+CC = arm-linux-gnueabi-gcc
+CFLAGS ?= -g -Wall -W -Wshadow -Wpointer-arith -Wstrict-prototypes
+
+ifneq ($(lib_name),)
+
+# additional rules for libraries
+
+CFLAGS_LIB ?= -fPIC
+CFLAGS += $(CFLAGS_LIB)
+
+libraries = $(lib_name).so $(lib_name).a
+
+.PHONY: library
+
+library: $(libraries)
+
+$(libraries): $(objects)
+
+endif
+
+prerequisites = $(subst .o,.d,$(objects)) $(addsuffix .d,$(binaries))
+
+.PHONY: clean install
+
+ifeq ($(static),1)
+LDFLAGS += -static
+endif
+
+prefix ?= /usr
+
+bindir     ?= $(prefix)/bin
+includedir ?= $(prefix)/include
+libdir     ?= $(prefix)/lib
+sharedir   ?= $(prefix)/share
+
+ifneq ($(DESTDIR),)
+DESTDIR := $(DESTDIR)/
+endif
+
+ifeq ($(V),1)
+%.o: %.c
+	$(CC) -c $(CPPFLAGS) $(CFLAGS) -MMD -o $@ $< $(filter-out %.h %.c,$^)
+%: %.o
+	$(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
+%: %.c
+	$(CC) $(CPPFLAGS) $(CFLAGS) -MMD $(LDFLAGS) -o $@ $< $(filter-out %.h %.c,$^) $(LOADLIBES) $(LDLIBS)
+%.so:
+	$(CC) -shared -o $@ $^
+%.a:
+	$(AR) rcs $@ $^
+clean::
+	$(RM) -f $(prerequisites) $(objects) $(libraries) $(binaries) $(removing) *~
+install::
+ifneq ($(includes),)
+	mkdir -p $(DESTDIR)$(includedir)/$(lib_name)
+	install -m 644 $(includes) $(DESTDIR)$(includedir)/$(lib_name)/
+endif
+ifneq ($(libraries),)
+	mkdir -p $(DESTDIR)$(libdir)
+	install -m 644 $(libraries) $(DESTDIR)$(libdir)/
+endif
+ifneq ($(inst_bin),)
+	mkdir -p $(DESTDIR)$(bindir)
+	install -m 755 $(inst_bin) $(DESTDIR)$(bindir)/
+endif
+else
+%.o: %.c
+	@echo CC $@
+	@$(CC) -c $(CPPFLAGS) $(CFLAGS) -MMD -o $@ $< $(filter-out %.h %.c,$^)
+%: %.o
+	@echo CC $@
+	@$(CC) $(LDFLAGS) -o $@ $^ $(LOADLIBES) $(LDLIBS)
+%: %.c
+	@echo CC $@
+	@$(CC) $(CPPFLAGS) $(CFLAGS) -MMD $(LDFLAGS) -o $@ $< $(filter-out %.h %.c,$^) $(LOADLIBES) $(LDLIBS)
+%.so:
+	@echo CC $@
+	@$(CC) -shared -o $@ $^
+%.a:
+	@echo AR $@
+	@$(AR) rcs $@ $^
+clean::
+	@echo cleaning
+	@$(RM) -f $(prerequisites) $(objects) $(libraries) $(binaries) $(removing) *~
+install::
+ifneq ($(includes),)
+	@echo installing headers
+	@mkdir -p $(DESTDIR)$(includedir)/$(lib_name)
+	@install -m 644 $(includes) $(DESTDIR)$(includedir)/$(lib_name)/
+endif
+ifneq ($(libraries),)
+	@echo installing libraries
+	@mkdir -p $(DESTDIR)$(libdir)
+	@install -m 644 $(libraries) $(DESTDIR)$(libdir)/
+endif
+ifneq ($(inst_bin),)
+	@echo installing binaries
+	@mkdir -p $(DESTDIR)$(bindir)
+	@install -m 755 $(inst_bin) $(DESTDIR)$(bindir)/
+endif
+endif
+
+-include $(prerequisites)

+ 12 - 0
dvb-tools/Makefile

@@ -0,0 +1,12 @@
+# get DVB API version
+VERSION_FILE := "dvbVersion"
+
+DVB_API_MAJOR := $(word 3, $(shell grep -m1 "DVB_API_VERSION" $(VERSION_FILE)) )
+DVB_API_MINOR := $(word 3, $(shell grep -m1 "DVB_API_VERSION_MINOR" $(VERSION_FILE)) )
+
+.PHONY: all clean
+
+all clean install:
+	$(MAKE) -C lib $@
+	$(MAKE) -C test $@
+	$(MAKE) -C util $@

+ 85 - 0
dvb-tools/README.md

@@ -0,0 +1,85 @@
+# DVB - TOOLS
+
+## SetUp
+1. ./setup
+2. ./getVersion <ip_address_of_Pi_target_device>
+3. make
+4. ./deploy <ip_address_of_Pi_target_device>
+
+## Usage
+All the dvb-applications are deployed on the Desktop of the pi device
+in the following maner:
+
+/home/pi/Desktop
+            ├── lib
+            ├── test
+            ├── util
+
+Use SSH in order to use the applications:
+ssh pi@<ip_address_of_Pi_target_device>
+
+The default passowrd is:
+raspberry
+
+*Note*
+The TVHeadend service can be accessed the following way:
+<ip_address_of_Pi_target_device>:9981
+user:   pass:
+admin   admin
+
+Before start using the dvb-apps stop the tvheadend service
+since it is also using the /dev/dvb/adapter0 interfaces:
+
+$ cd /etc/init.d
+$ sudo ./tvheadend stop
+
+
+## Linux DVB API applications and utilities.
+**Libraries**
+libdvbapi - Interface library to digital TV devices.
+libdvbcfg - Library to parse/create digital TV channel configuration files.
+libdvbsec - Library for Satellite Equipment Control operations.
+**libucsi - Fast MPEG2 Transport Stream SI table parsing library.**
+libdvben50221- Complete implementation of a CENELEC (European Committee for Electrotechnical Standardization) EN 50221 CAM stack.
+libdvbmisc - Miscellaneous utilities used by the other libraries.
+
+**Utils**
+- Main User Applications:
+        **scan: the original frequency scanning tool used to generate channel lists**
+        **dvbscan: another frequency scanning tool used to generate channel lists .... some distro package managers have rebranded this as "scandvb" ... also note that "atscscan", if included, is simply a copy of dvbscan. The DVB or ATSC protocol is determined by a tuning file feed to these programs. Tuning files are kept in the scan/atsc, scan/dvb-[csth] directories. This program discovers carriers on candidate frequencies and also determines sub-channels. sub-channels may be the main program at a lower data rate or completely new content. With the output produced, a short name can be used to identify the frequency and the streams needed to get a channel.**
+        **czap, szap, tzap: tuning utilities for DVB-C, DVB-S, DVB-T. These change the channel/sub-channel as identified by the file output by scan above.
+        azap: tuning utility for ATSC.**
+        util/gnutv - Tune, watch and stream TV. I.e. a DVB UI.
+- General Utilities:
+        util/dvbdate - Read date time information from the currently tuned multiplex.
+        util/dvbnet - Control digital data network interfaces. DVB network interface manager (IP over DVB).
+        util/dvbtraffic - Monitor traffic on a digital device. PID analysis of currently tuned multiplex.
+        **util/femon - Frontend (fe) monitor. Monitor the tuning status on a digital TV device.**
+        util/zap - *Just* tunes a digital device - really intended for developers. Note that this is a seperate app then those *zap utilities listed above.
+        util/atsc_epg - Recent versions of dvb-apps include a program to print out the next three hours worth of programs on a given frequency (for ATSC only).
+- Hardware Specific Utilities:
+        util/av7110_loadkeys - A utiltity to load IR remote keymaps into an av7110 based card using the /proc/av7110_ir interface
+        util/dib3000-watch - Monitor DIB3000 demodulators
+        util/dst-utils/dst-test - Utilities for DST based cards.
+        util/ttusb_dec_reset - Reset a TechnoTrends TTUSB DEC device.
+
+
+**test**
+    diseqc: Sends various diseqc sequences on a SAT frontend.
+    set22k: Legacy tone switching for SAT frontends.
+    setvoltage: Legacy voltage switching for SAT frontends.
+    setpid: Set video and audio PIDs in the demux (only for hardware MPEG decoder)
+    video: tiny video watching application
+    **test_sections: Hex dump of section data from stream.**
+    test_sec_ne: Like test_sections, but also test Not-Equal filter mode.
+    **test_pes: Hex dump of PES data from stream.**
+    test_tt: Demonstrate teletext decoding from PES data.
+    test_av: Test audio and video MPEG decoder API.
+    test_vevent: Test VIDEO_GET_EVENT and poll() for video events
+    test_stc: Test DMX_GET_STC.
+    test_stillimage: Display single iframes as stillimages
+    test_dvr: Record a partial transport stream of selected PIDs to a file or a full stream if supported by the hardware
+
+## Aditional information
+https://www.linuxtv.org/wiki/index.php/Testing_your_DVB_device
+https://www.linuxtv.org/wiki/index.php/LinuxTV_dvb-apps

+ 16 - 0
dvb-tools/buid/channels.conf

@@ -0,0 +1,16 @@
+CT2.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:512:650:1
+Nova.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:513:661:2
+CT1.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2325:2326:3
+Prima.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:514:671:4
+Stanice O.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2322:2323:5
+Radiozurnal.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:652:6
+Praha.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:653:7
+Vltava.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:651:8
+iTV:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:0:9
+Prima:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:161:84:1
+CT2:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:164:96:4
+TV Program:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2501:2502:5
+RADIO2:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2832:6
+RADIO:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2831:9
+Proglas:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:180:11
+Nova.:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:205:206:3

TEMPAT SAMPAH
dvb-tools/build/lib/libdvbapi.so


TEMPAT SAMPAH
dvb-tools/build/lib/libdvbcfg.so


TEMPAT SAMPAH
dvb-tools/build/lib/libdvben50221.so


TEMPAT SAMPAH
dvb-tools/build/lib/libdvbsec.so


TEMPAT SAMPAH
dvb-tools/build/lib/libesg.so


TEMPAT SAMPAH
dvb-tools/build/lib/libucsi.so


TEMPAT SAMPAH
dvb-tools/build/test/diseqc


TEMPAT SAMPAH
dvb-tools/build/test/dvbcfg_test


TEMPAT SAMPAH
dvb-tools/build/test/evtest


TEMPAT SAMPAH
dvb-tools/build/test/lock_s


TEMPAT SAMPAH
dvb-tools/build/test/sendburst


TEMPAT SAMPAH
dvb-tools/build/test/set22k


TEMPAT SAMPAH
dvb-tools/build/test/setpid


TEMPAT SAMPAH
dvb-tools/build/test/setvoltage


TEMPAT SAMPAH
dvb-tools/build/test/szap2


TEMPAT SAMPAH
dvb-tools/build/test/test-app


TEMPAT SAMPAH
dvb-tools/build/test/test-session


TEMPAT SAMPAH
dvb-tools/build/test/test-transport


TEMPAT SAMPAH
dvb-tools/build/test/test_av


TEMPAT SAMPAH
dvb-tools/build/test/test_av_play


TEMPAT SAMPAH
dvb-tools/build/test/test_dvr


TEMPAT SAMPAH
dvb-tools/build/test/test_dvr_play


TEMPAT SAMPAH
dvb-tools/build/test/test_pes


TEMPAT SAMPAH
dvb-tools/build/test/test_sec_ne


TEMPAT SAMPAH
dvb-tools/build/test/test_sections


TEMPAT SAMPAH
dvb-tools/build/test/test_stc


TEMPAT SAMPAH
dvb-tools/build/test/test_stillimage


TEMPAT SAMPAH
dvb-tools/build/test/test_tapdmx


TEMPAT SAMPAH
dvb-tools/build/test/test_tt


TEMPAT SAMPAH
dvb-tools/build/test/test_vevent


TEMPAT SAMPAH
dvb-tools/build/test/test_video


TEMPAT SAMPAH
dvb-tools/build/test/testesg


TEMPAT SAMPAH
dvb-tools/build/test/testucsi


TEMPAT SAMPAH
dvb-tools/build/util/atsc_epg


TEMPAT SAMPAH
dvb-tools/build/util/av7110_loadkeys


TEMPAT SAMPAH
dvb-tools/build/util/azap


TEMPAT SAMPAH
dvb-tools/build/util/czap


TEMPAT SAMPAH
dvb-tools/build/util/dib3000-watch


TEMPAT SAMPAH
dvb-tools/build/util/dst_test


TEMPAT SAMPAH
dvb-tools/build/util/dvbdate


TEMPAT SAMPAH
dvb-tools/build/util/dvbnet


TEMPAT SAMPAH
dvb-tools/build/util/dvbscan


TEMPAT SAMPAH
dvb-tools/build/util/dvbtraffic


TEMPAT SAMPAH
dvb-tools/build/util/femon


TEMPAT SAMPAH
dvb-tools/build/util/gnutv


TEMPAT SAMPAH
dvb-tools/build/util/gotox


TEMPAT SAMPAH
dvb-tools/build/util/lsdvb


TEMPAT SAMPAH
dvb-tools/build/util/scan


TEMPAT SAMPAH
dvb-tools/build/util/szap


TEMPAT SAMPAH
dvb-tools/build/util/tzap


TEMPAT SAMPAH
dvb-tools/build/util/zap


+ 16 - 0
dvb-tools/config/channels.conf

@@ -0,0 +1,16 @@
+CT2.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:512:650:1
+Nova.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:513:661:2
+CT1.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2325:2326:3
+Prima.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:514:671:4
+Stanice O.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:2322:2323:5
+Radiozurnal.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:652:6
+Praha.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:653:7
+Vltava.:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:651:8
+iTV:506000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:0:9
+Prima:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:161:84:1
+CT2:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:164:96:4
+TV Program:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2501:2502:5
+RADIO2:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2832:6
+RADIO:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2831:9
+Proglas:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:180:11
+Nova.:674000000:INVERSION_OFF:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:205:206:3

+ 40 - 0
dvb-tools/deploy

@@ -0,0 +1,40 @@
+#!/bin/bash
+
+
+if [ "$#" -ne 1 ]; then
+    echo "./deploy  <ip_address_of_Pi_target_device>"
+    exit
+fi
+
+getBins() {
+    utilBinList="$(find $1  -executable -type f)"
+    for bin in $utilBinList; do cp $bin $2; done
+}  &>/dev/null
+
+setup() {
+    if [ -d $1 ]; then
+        rm -rf $1
+    else
+        mkdir $1
+    fi
+
+    mkdir ./$1/util
+    mkdir ./$1/test
+    mkdir ./$1/lib
+} &>/dev/null
+
+upload() {
+    scp -r $1/* pi@$2:/home/pi/Desktop
+}
+
+
+setup build
+
+getBins ./util ./build/util
+getBins ./test ./build/test
+getBins ./lib ./build/lib
+
+echo "Deploying dvb-apps to the target device. [$1]"
+upload build $1
+
+

+ 3 - 0
dvb-tools/getVersion

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+scp pi@$1:/usr/include/linux/dvb/version.h dvbVersion

+ 140 - 0
dvb-tools/include/audio.h

@@ -0,0 +1,140 @@
+/*
+ * audio.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBAUDIO_H_
+#define _DVBAUDIO_H_
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#else
+#include <stdint.h>
+#endif
+
+
+typedef enum {
+	AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */
+	AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */
+} audio_stream_source_t;
+
+
+typedef enum {
+	AUDIO_STOPPED,      /* Device is stopped */
+	AUDIO_PLAYING,      /* Device is currently playing */
+	AUDIO_PAUSED        /* Device is paused */
+} audio_play_state_t;
+
+
+typedef enum {
+	AUDIO_STEREO,
+	AUDIO_MONO_LEFT,
+	AUDIO_MONO_RIGHT,
+	AUDIO_MONO,
+	AUDIO_STEREO_SWAPPED
+} audio_channel_select_t;
+
+
+typedef struct audio_mixer {
+	unsigned int volume_left;
+	unsigned int volume_right;
+  // what else do we need? bass, pass-through, ...
+} audio_mixer_t;
+
+
+typedef struct audio_status {
+	int                    AV_sync_state;  /* sync audio and video? */
+	int                    mute_state;     /* audio is muted */
+	audio_play_state_t     play_state;     /* current playback state */
+	audio_stream_source_t  stream_source;  /* current stream source */
+	audio_channel_select_t channel_select; /* currently selected channel */
+	int                    bypass_mode;    /* pass on audio data to */
+	audio_mixer_t	       mixer_state;    /* current mixer state */
+} audio_status_t;                              /* separate decoder hardware */
+
+
+typedef
+struct audio_karaoke{  /* if Vocal1 or Vocal2 are non-zero, they get mixed  */
+	int vocal1;    /* into left and right t at 70% each */
+	int vocal2;    /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/
+	int melody;    /* mixed into the left channel and */
+		       /* Vocal2 into the right channel at 100% each. */
+		       /* if Melody is non-zero, the melody channel gets mixed*/
+} audio_karaoke_t;     /* into left and right  */
+
+
+typedef uint16_t audio_attributes_t;
+/*   bits: descr. */
+/*   15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */
+/*   12    multichannel extension */
+/*   11-10 audio type (0=not spec, 1=language included) */
+/*    9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */
+/*    7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit,  */
+/*    5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */
+/*    2- 0 number of audio channels (n+1 channels) */
+
+
+/* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */
+#define AUDIO_CAP_DTS    1
+#define AUDIO_CAP_LPCM   2
+#define AUDIO_CAP_MP1    4
+#define AUDIO_CAP_MP2    8
+#define AUDIO_CAP_MP3   16
+#define AUDIO_CAP_AAC   32
+#define AUDIO_CAP_OGG   64
+#define AUDIO_CAP_SDDS 128
+#define AUDIO_CAP_AC3  256
+
+#define AUDIO_STOP                 _IO('o', 1)
+#define AUDIO_PLAY                 _IO('o', 2)
+#define AUDIO_PAUSE                _IO('o', 3)
+#define AUDIO_CONTINUE             _IO('o', 4)
+#define AUDIO_SELECT_SOURCE        _IO('o', 5)
+#define AUDIO_SET_MUTE             _IO('o', 6)
+#define AUDIO_SET_AV_SYNC          _IO('o', 7)
+#define AUDIO_SET_BYPASS_MODE      _IO('o', 8)
+#define AUDIO_CHANNEL_SELECT       _IO('o', 9)
+#define AUDIO_GET_STATUS           _IOR('o', 10, audio_status_t)
+
+#define AUDIO_GET_CAPABILITIES     _IOR('o', 11, unsigned int)
+#define AUDIO_CLEAR_BUFFER         _IO('o',  12)
+#define AUDIO_SET_ID               _IO('o', 13)
+#define AUDIO_SET_MIXER            _IOW('o', 14, audio_mixer_t)
+#define AUDIO_SET_STREAMTYPE       _IO('o', 15)
+#define AUDIO_SET_EXT_ID           _IO('o', 16)
+#define AUDIO_SET_ATTRIBUTES       _IOW('o', 17, audio_attributes_t)
+#define AUDIO_SET_KARAOKE          _IOW('o', 18, audio_karaoke_t)
+
+/**
+ * AUDIO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define AUDIO_GET_PTS              _IOR('o', 19, __u64)
+#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
+
+#endif /* _DVBAUDIO_H_ */

+ 90 - 0
dvb-tools/include/ca.h

@@ -0,0 +1,90 @@
+/*
+ * ca.h
+ *
+ * Copyright (C) 2000 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBCA_H_
+#define _DVBCA_H_
+
+/* slot interface types and info */
+
+typedef struct ca_slot_info {
+	int num;               /* slot number */
+
+	int type;              /* CA interface this slot supports */
+#define CA_CI            1     /* CI high level interface */
+#define CA_CI_LINK       2     /* CI link layer level interface */
+#define CA_CI_PHYS       4     /* CI physical layer level interface */
+#define CA_DESCR         8     /* built-in descrambler */
+#define CA_SC          128     /* simple smart card interface */
+
+	unsigned int flags;
+#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
+#define CA_CI_MODULE_READY   2
+} ca_slot_info_t;
+
+
+/* descrambler types and info */
+
+typedef struct ca_descr_info {
+	unsigned int num;          /* number of available descramblers (keys) */
+	unsigned int type;         /* type of supported scrambling system */
+#define CA_ECD           1
+#define CA_NDS           2
+#define CA_DSS           4
+} ca_descr_info_t;
+
+typedef struct ca_caps {
+	unsigned int slot_num;     /* total number of CA card and module slots */
+	unsigned int slot_type;    /* OR of all supported types */
+	unsigned int descr_num;    /* total number of descrambler slots (keys) */
+	unsigned int descr_type;   /* OR of all supported types */
+} ca_caps_t;
+
+/* a message to/from a CI-CAM */
+typedef struct ca_msg {
+	unsigned int index;
+	unsigned int type;
+	unsigned int length;
+	unsigned char msg[256];
+} ca_msg_t;
+
+typedef struct ca_descr {
+	unsigned int index;
+	unsigned int parity;	/* 0 == even, 1 == odd */
+	unsigned char cw[8];
+} ca_descr_t;
+
+typedef struct ca_pid {
+	unsigned int pid;
+	int index;		/* -1 == disable*/
+} ca_pid_t;
+
+#define CA_RESET          _IO('o', 128)
+#define CA_GET_CAP        _IOR('o', 129, ca_caps_t)
+#define CA_GET_SLOT_INFO  _IOR('o', 130, ca_slot_info_t)
+#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
+#define CA_GET_MSG        _IOR('o', 132, ca_msg_t)
+#define CA_SEND_MSG       _IOW('o', 133, ca_msg_t)
+#define CA_SET_DESCR      _IOW('o', 134, ca_descr_t)
+#define CA_SET_PID        _IOW('o', 135, ca_pid_t)
+
+#endif

+ 154 - 0
dvb-tools/include/dmx.h

@@ -0,0 +1,154 @@
+/*
+ * dmx.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBDMX_H_
+#define _DVBDMX_H_
+
+#include <asm/types.h>
+#ifdef __KERNEL__
+#include <linux/time.h>
+#else
+#include <time.h>
+#endif
+
+
+#define DMX_FILTER_SIZE 16
+
+typedef enum
+{
+	DMX_OUT_DECODER, /* Streaming directly to decoder. */
+	DMX_OUT_TAP,     /* Output going to a memory buffer */
+			 /* (to be retrieved via the read command).*/
+	DMX_OUT_TS_TAP   /* Output multiplexed into a new TS  */
+			 /* (to be retrieved by reading from the */
+			 /* logical DVR device).                 */
+} dmx_output_t;
+
+
+typedef enum
+{
+	DMX_IN_FRONTEND, /* Input from a front-end device.  */
+	DMX_IN_DVR       /* Input from the logical DVR device.  */
+} dmx_input_t;
+
+
+typedef enum
+{
+	DMX_PES_AUDIO0,
+	DMX_PES_VIDEO0,
+	DMX_PES_TELETEXT0,
+	DMX_PES_SUBTITLE0,
+	DMX_PES_PCR0,
+
+	DMX_PES_AUDIO1,
+	DMX_PES_VIDEO1,
+	DMX_PES_TELETEXT1,
+	DMX_PES_SUBTITLE1,
+	DMX_PES_PCR1,
+
+	DMX_PES_AUDIO2,
+	DMX_PES_VIDEO2,
+	DMX_PES_TELETEXT2,
+	DMX_PES_SUBTITLE2,
+	DMX_PES_PCR2,
+
+	DMX_PES_AUDIO3,
+	DMX_PES_VIDEO3,
+	DMX_PES_TELETEXT3,
+	DMX_PES_SUBTITLE3,
+	DMX_PES_PCR3,
+
+	DMX_PES_OTHER
+} dmx_pes_type_t;
+
+#define DMX_PES_AUDIO    DMX_PES_AUDIO0
+#define DMX_PES_VIDEO    DMX_PES_VIDEO0
+#define DMX_PES_TELETEXT DMX_PES_TELETEXT0
+#define DMX_PES_SUBTITLE DMX_PES_SUBTITLE0
+#define DMX_PES_PCR      DMX_PES_PCR0
+
+
+typedef struct dmx_filter
+{
+	__u8  filter[DMX_FILTER_SIZE];
+	__u8  mask[DMX_FILTER_SIZE];
+	__u8  mode[DMX_FILTER_SIZE];
+} dmx_filter_t;
+
+
+struct dmx_sct_filter_params
+{
+	__u16          pid;
+	dmx_filter_t   filter;
+	__u32          timeout;
+	__u32          flags;
+#define DMX_CHECK_CRC       1
+#define DMX_ONESHOT         2
+#define DMX_IMMEDIATE_START 4
+#define DMX_KERNEL_CLIENT   0x8000
+};
+
+
+struct dmx_pes_filter_params
+{
+	__u16          pid;
+	dmx_input_t    input;
+	dmx_output_t   output;
+	dmx_pes_type_t pes_type;
+	__u32          flags;
+};
+
+typedef struct dmx_caps {
+	__u32 caps;
+	int num_decoders;
+} dmx_caps_t;
+
+typedef enum {
+	DMX_SOURCE_FRONT0 = 0,
+	DMX_SOURCE_FRONT1,
+	DMX_SOURCE_FRONT2,
+	DMX_SOURCE_FRONT3,
+	DMX_SOURCE_DVR0   = 16,
+	DMX_SOURCE_DVR1,
+	DMX_SOURCE_DVR2,
+	DMX_SOURCE_DVR3
+} dmx_source_t;
+
+struct dmx_stc {
+	unsigned int num;	/* input : which STC? 0..N */
+	unsigned int base;	/* output: divisor for stc to get 90 kHz clock */
+	__u64 stc;		/* output: stc in 'base'*90 kHz units */
+};
+
+
+#define DMX_START                _IO('o', 41)
+#define DMX_STOP                 _IO('o', 42)
+#define DMX_SET_FILTER           _IOW('o', 43, struct dmx_sct_filter_params)
+#define DMX_SET_PES_FILTER       _IOW('o', 44, struct dmx_pes_filter_params)
+#define DMX_SET_BUFFER_SIZE      _IO('o', 45)
+#define DMX_GET_PES_PIDS         _IOR('o', 47, __u16[5])
+#define DMX_GET_CAPS             _IOR('o', 48, dmx_caps_t)
+#define DMX_SET_SOURCE           _IOW('o', 49, dmx_source_t)
+#define DMX_GET_STC              _IOWR('o', 50, struct dmx_stc)
+
+#endif /*_DVBDMX_H_*/

+ 648 - 0
dvb-tools/include/frontend.h

@@ -0,0 +1,648 @@
+/*
+ * frontend.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *		    Ralph  Metzler <ralph@convergence.de>
+ *		    Holger Waechtler <holger@convergence.de>
+ *		    Andre Draszik <ad@convergence.de>
+ *		    for convergence integrated media GmbH
+ *
+ * Copyright (C) Manu Abraham <abraham.manu@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBFRONTEND_H_
+#define _DVBFRONTEND_H_
+
+#include <asm/types.h>
+
+
+typedef enum fe_type {
+	FE_QPSK,
+	FE_QAM,
+	FE_OFDM,
+	FE_ATSC
+} fe_type_t;
+
+
+typedef enum fe_caps {
+	FE_IS_STUPID			= 0,
+	FE_CAN_INVERSION_AUTO		= 0x1,
+	FE_CAN_FEC_1_2			= 0x2,
+	FE_CAN_FEC_2_3			= 0x4,
+	FE_CAN_FEC_3_4			= 0x8,
+	FE_CAN_FEC_4_5			= 0x10,
+	FE_CAN_FEC_5_6			= 0x20,
+	FE_CAN_FEC_6_7			= 0x40,
+	FE_CAN_FEC_7_8			= 0x80,
+	FE_CAN_FEC_8_9			= 0x100,
+	FE_CAN_FEC_AUTO			= 0x200,
+	FE_CAN_QPSK			= 0x400,
+	FE_CAN_QAM_16			= 0x800,
+	FE_CAN_QAM_32			= 0x1000,
+	FE_CAN_QAM_64			= 0x2000,
+	FE_CAN_QAM_128			= 0x4000,
+	FE_CAN_QAM_256			= 0x8000,
+	FE_CAN_QAM_AUTO			= 0x10000,
+	FE_CAN_TRANSMISSION_MODE_AUTO	= 0x20000,
+	FE_CAN_BANDWIDTH_AUTO		= 0x40000,
+	FE_CAN_GUARD_INTERVAL_AUTO	= 0x80000,
+	FE_CAN_HIERARCHY_AUTO		= 0x100000,
+	FE_CAN_8VSB			= 0x200000,
+	FE_CAN_16VSB			= 0x400000,
+	FE_NEEDS_BENDING		= 0x20000000, // not supported anymore, don't use (frontend requires frequency bending)
+	FE_CAN_RECOVER			= 0x40000000, // frontend can recover from a cable unplug automatically
+	FE_CAN_MUTE_TS			= 0x80000000  // frontend can stop spurious TS data output
+} fe_caps_t;
+
+
+struct dvb_frontend_info {
+	char       name[128];
+	fe_type_t  type;
+	__u32      frequency_min;
+	__u32      frequency_max;
+	__u32      frequency_stepsize;
+	__u32      frequency_tolerance;
+	__u32      symbol_rate_min;
+	__u32      symbol_rate_max;
+	__u32      symbol_rate_tolerance;	/* ppm */
+	__u32      notifier_delay;		/* DEPRECATED */
+	fe_caps_t  caps;
+};
+
+
+/**
+ *  Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
+ *  the meaning of this struct...
+ */
+struct dvb_diseqc_master_cmd {
+	__u8 msg [6];	/*  { framing, address, command, data [3] } */
+	__u8 msg_len;	/*  valid values are 3...6  */
+};
+
+
+struct dvb_diseqc_slave_reply {
+	__u8 msg [4];	/*  { framing, data [3] } */
+	__u8 msg_len;	/*  valid values are 0...4, 0 means no msg  */
+	int  timeout;	/*  return from ioctl after timeout ms with */
+};			/*  errorcode when no message was received  */
+
+
+typedef enum fe_sec_voltage {
+	SEC_VOLTAGE_13,
+	SEC_VOLTAGE_18,
+	SEC_VOLTAGE_OFF
+} fe_sec_voltage_t;
+
+
+typedef enum fe_sec_tone_mode {
+	SEC_TONE_ON,
+	SEC_TONE_OFF
+} fe_sec_tone_mode_t;
+
+
+typedef enum fe_sec_mini_cmd {
+	SEC_MINI_A,
+	SEC_MINI_B
+} fe_sec_mini_cmd_t;
+
+
+typedef enum fe_status {
+	FE_HAS_SIGNAL	= 0x01,   /*  found something above the noise level */
+	FE_HAS_CARRIER	= 0x02,   /*  found a DVB signal  */
+	FE_HAS_VITERBI	= 0x04,   /*  FEC is stable  */
+	FE_HAS_SYNC	= 0x08,   /*  found sync bytes  */
+	FE_HAS_LOCK	= 0x10,   /*  everything's working... */
+	FE_TIMEDOUT	= 0x20,   /*  no lock within the last ~2 seconds */
+	FE_REINIT	= 0x40    /*  frontend was reinitialized,  */
+} fe_status_t;			  /*  application is recommended to reset */
+				  /*  DiSEqC, tone and parameters */
+
+typedef enum fe_spectral_inversion {
+	INVERSION_OFF,
+	INVERSION_ON,
+	INVERSION_AUTO
+} fe_spectral_inversion_t;
+
+
+typedef enum fe_code_rate {
+	FEC_NONE = 0,
+	FEC_1_2,
+	FEC_2_3,
+	FEC_3_4,
+	FEC_4_5,
+	FEC_5_6,
+	FEC_6_7,
+	FEC_7_8,
+	FEC_8_9,
+	FEC_AUTO
+} fe_code_rate_t;
+
+
+typedef enum fe_modulation {
+	QPSK,
+	QAM_16,
+	QAM_32,
+	QAM_64,
+	QAM_128,
+	QAM_256,
+	QAM_AUTO,
+	VSB_8,
+	VSB_16
+} fe_modulation_t;
+
+typedef enum fe_transmit_mode {
+	TRANSMISSION_MODE_2K,
+	TRANSMISSION_MODE_8K,
+	TRANSMISSION_MODE_AUTO
+} fe_transmit_mode_t;
+
+typedef enum fe_bandwidth {
+	BANDWIDTH_8_MHZ,
+	BANDWIDTH_7_MHZ,
+	BANDWIDTH_6_MHZ,
+	BANDWIDTH_AUTO
+} fe_bandwidth_t;
+
+
+typedef enum fe_guard_interval {
+	GUARD_INTERVAL_1_32,
+	GUARD_INTERVAL_1_16,
+	GUARD_INTERVAL_1_8,
+	GUARD_INTERVAL_1_4,
+	GUARD_INTERVAL_AUTO
+} fe_guard_interval_t;
+
+
+typedef enum fe_hierarchy {
+	HIERARCHY_NONE,
+	HIERARCHY_1,
+	HIERARCHY_2,
+	HIERARCHY_4,
+	HIERARCHY_AUTO
+} fe_hierarchy_t;
+
+
+struct dvb_qpsk_parameters {
+	__u32		symbol_rate;  /* symbol rate in Symbols per second */
+	fe_code_rate_t	fec_inner;    /* forward error correction (see above) */
+};
+
+struct dvb_qam_parameters {
+	__u32		symbol_rate; /* symbol rate in Symbols per second */
+	fe_code_rate_t	fec_inner;   /* forward error correction (see above) */
+	fe_modulation_t	modulation;  /* modulation type (see above) */
+};
+
+struct dvb_vsb_parameters {
+	fe_modulation_t	modulation;  /* modulation type (see above) */
+};
+
+struct dvb_ofdm_parameters {
+	fe_bandwidth_t      bandwidth;
+	fe_code_rate_t      code_rate_HP;  /* high priority stream code rate */
+	fe_code_rate_t      code_rate_LP;  /* low priority stream code rate */
+	fe_modulation_t     constellation; /* modulation type (see above) */
+	fe_transmit_mode_t  transmission_mode;
+	fe_guard_interval_t guard_interval;
+	fe_hierarchy_t      hierarchy_information;
+};
+
+
+struct dvb_frontend_parameters {
+	__u32 frequency;     /* (absolute) frequency in Hz for QAM/OFDM/ATSC */
+			     /* intermediate frequency in kHz for QPSK */
+	fe_spectral_inversion_t inversion;
+	union {
+		struct dvb_qpsk_parameters qpsk;
+		struct dvb_qam_parameters  qam;
+		struct dvb_ofdm_parameters ofdm;
+		struct dvb_vsb_parameters vsb;
+	} u;
+};
+
+
+/**
+ * When set, this flag will disable any zigzagging or other "normal" tuning
+ * behaviour. Additionally, there will be no automatic monitoring of the lock
+ * status, and hence no frontend events will be generated. If a frontend device
+ * is closed, this flag will be automatically turned off when the device is
+ * reopened read-write.
+ */
+#define FE_TUNE_MODE_ONESHOT 0x01
+
+
+#define FE_GET_INFO		   _IOR('o', 61, struct dvb_frontend_info)
+
+#define FE_DISEQC_RESET_OVERLOAD   _IO('o', 62)
+#define FE_DISEQC_SEND_MASTER_CMD  _IOW('o', 63, struct dvb_diseqc_master_cmd)
+#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
+#define FE_DISEQC_SEND_BURST       _IO('o', 65)  /* fe_sec_mini_cmd_t */
+
+#define FE_SET_TONE		   _IO('o', 66)  /* fe_sec_tone_mode_t */
+#define FE_SET_VOLTAGE		   _IO('o', 67)  /* fe_sec_voltage_t */
+#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68)  /* int */
+
+#define FE_READ_STATUS		   _IOR('o', 69, fe_status_t)
+#define FE_READ_BER		   _IOR('o', 70, __u32)
+#define FE_READ_SIGNAL_STRENGTH    _IOR('o', 71, __u16)
+#define FE_READ_SNR		   _IOR('o', 72, __u16)
+#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
+
+#define FE_SET_FRONTEND		   _IOW('o', 76, struct dvb_frontend_parameters)
+#define FE_GET_FRONTEND		   _IOR('o', 77, struct dvb_frontend_parameters)
+#define FE_SET_FRONTEND_TUNE_MODE  _IO('o', 81) /* unsigned int */
+
+#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
+
+/*
+ * References:
+ * DVB-S : EN 300 421
+ * DVB-S2: EN 302 307, TR 102 376, EN 301 210
+ * DVB-C : EN 300 429
+ * DVB-T : EN 300 744
+ * DVB-H : EN 300 304
+ * ATSC  : A/53A
+ */
+
+/*
+ * Delivery Systems
+ * needs to set/queried for multistandard frontends
+ */
+enum dvbfe_delsys {
+	DVBFE_DELSYS_DVBS		= (1 <<  0),
+	DVBFE_DELSYS_DSS		= (1 <<  1),
+	DVBFE_DELSYS_DVBS2		= (1 <<  2),
+	DVBFE_DELSYS_DVBC		= (1 <<  3),
+	DVBFE_DELSYS_DVBT		= (1 <<  4),
+	DVBFE_DELSYS_DVBH		= (1 <<  5),
+	DVBFE_DELSYS_ATSC		= (1 <<  6),
+	DVBFE_DELSYS_DUMMY		= (1 << 31)
+};
+#define DVBFE_GET_DELSYS		_IOR('o', 82, enum dvbfe_delsys)
+#define DVBFE_SET_DELSYS		_IOW('o', 87, enum dvbfe_delsys)
+
+/* Modulation types			*/
+enum dvbfe_modulation {
+	DVBFE_MOD_NONE			= (0 <<  0),
+	DVBFE_MOD_BPSK			= (1 <<  0),
+	DVBFE_MOD_QPSK			= (1 <<  1),
+	DVBFE_MOD_OQPSK			= (1 <<  2),
+	DVBFE_MOD_8PSK			= (1 <<  3),
+	DVBFE_MOD_16APSK		= (1 <<  4),
+	DVBFE_MOD_32APSK		= (1 <<  5),
+	DVBFE_MOD_QAM4			= (1 <<  6),
+	DVBFE_MOD_QAM16			= (1 <<  7),
+	DVBFE_MOD_QAM32			= (1 <<  8),
+	DVBFE_MOD_QAM64			= (1 <<  9),
+	DVBFE_MOD_QAM128		= (1 << 10),
+	DVBFE_MOD_QAM256		= (1 << 11),
+	DVBFE_MOD_QAM512		= (1 << 12),
+	DVBFE_MOD_QAM1024		= (1 << 13),
+	DVBFE_MOD_QAMAUTO		= (1 << 14),
+	DVBFE_MOD_OFDM			= (1 << 15),
+	DVBFE_MOD_COFDM			= (1 << 16),
+	DVBFE_MOD_VSB8			= (1 << 17),
+	DVBFE_MOD_VSB16			= (1 << 18),
+	DVBFE_MOD_AUTO			= (1 << 31)
+};
+
+/*
+ * Convolution Code Rate (Viterbi Inner Code Rate)
+ * DVB-S2 uses LDPC. Information on LDPC can be found at
+ * http://www.ldpc-codes.com
+ */
+enum dvbfe_fec {
+	DVBFE_FEC_NONE			= (0 <<  0),
+	DVBFE_FEC_1_4			= (1 <<  0),
+	DVBFE_FEC_1_3			= (1 <<  1),
+	DVBFE_FEC_2_5			= (1 <<  2),
+	DVBFE_FEC_1_2			= (1 <<  3),
+	DVBFE_FEC_3_5			= (1 <<  4),
+	DVBFE_FEC_2_3			= (1 <<  5),
+	DVBFE_FEC_3_4			= (1 <<  6),
+	DVBFE_FEC_4_5			= (1 <<  7),
+	DVBFE_FEC_5_6			= (1 <<  8),
+	DVBFE_FEC_6_7			= (1 <<  9),
+	DVBFE_FEC_7_8			= (1 << 10),
+	DVBFE_FEC_8_9			= (1 << 11),
+	DVBFE_FEC_9_10			= (1 << 12),
+	DVBFE_FEC_AUTO			= (1 << 31)
+};
+
+/* Frontend Inversion (I/Q Swap)	*/
+enum dvbfe_inversion {
+	DVBFE_INVERSION_OFF		= 0,
+	DVBFE_INVERSION_ON		= 1,
+	DVBFE_INVERSION_AUTO		= 2
+};
+
+/* DVB-S parameters			*/
+struct dvbs_params {
+	__u32				symbol_rate;
+
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+};
+
+/* DSS parameters			*/
+struct dss_params {
+	__u32				symbol_rate;
+
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+};
+
+/*
+ * Rolloff Rate (Nyquist Filter Rolloff)
+ * NOTE: DVB-S2 has rates of 0.20, 0.25, 0.35
+ * Values are x100
+ * Applies to DVB-S2
+ */
+enum dvbfe_rolloff {
+	DVBFE_ROLLOFF_35		= 0,
+	DVBFE_ROLLOFF_25		= 1,
+	DVBFE_ROLLOFF_20		= 2,
+	DVBFE_ROLLOFF_UNKNOWN		= 3
+};
+
+/* DVB-S2 parameters			*/
+struct dvbs2_params {
+	__u32				symbol_rate;
+
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+
+	/* Informational fields only	*/
+	enum dvbfe_rolloff		rolloff;
+
+	__u8				matype_1;
+	__u8				matype_2;
+	__u8				upl_1;
+	__u8				upl_2;
+	__u8				dfl_1;
+	__u8				dfl_2;
+	__u8				sync;
+	__u8				syncd_1;
+	__u8				syncd_2;
+
+	__u8				pad[32];
+};
+
+/* DVB-C parameters			*/
+struct dvbc_params {
+	__u32				symbol_rate;
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+};
+
+/* DVB-T Channel bandwidth		*/
+enum dvbfe_bandwidth {
+	DVBFE_BANDWIDTH_8_MHZ		= (1 <<  0),
+	DVBFE_BANDWIDTH_7_MHZ		= (1 <<  1),
+	DVBFE_BANDWIDTH_6_MHZ		= (1 <<  2),
+	DVBFE_BANDWIDTH_5_MHZ		= (1 <<  3),
+	DVBFE_BANDWIDTH_AUTO		= (1 << 31)
+};
+
+/* DVB-T/DVB-H transmission mode	*/
+enum dvbfe_transmission_mode {
+	DVBFE_TRANSMISSION_MODE_2K	= (1 <<  0),
+	DVBFE_TRANSMISSION_MODE_4K	= (1 <<  1),
+	DVBFE_TRANSMISSION_MODE_8K	= (1 <<  2),
+	DVBFE_TRANSMISSION_MODE_AUTO	= (1 << 31)
+};
+
+/* DVB-T/DVB-H Guard interval		*/
+enum dvbfe_guard_interval {
+	DVBFE_GUARD_INTERVAL_1_32	= (1 <<  1),
+	DVBFE_GUARD_INTERVAL_1_16	= (1 <<  2),
+	DVBFE_GUARD_INTERVAL_1_8	= (1 <<  3),
+	DVBFE_GUARD_INTERVAL_1_4	= (1 <<  4),
+	DVBFE_GUARD_INTERVAL_AUTO	= (1 << 31)
+};
+
+/* DVB-T/DVB-H Hierarchial modulation	*/
+enum dvbfe_hierarchy {
+	DVBFE_HIERARCHY_OFF		= (1 <<  0),
+	DVBFE_HIERARCHY_ON		= (1 <<  1),
+	DVBFE_HIERARCHY_AUTO		= (1 <<  2)
+};
+
+/* DVB-T/DVB-H Rolloff's		*/
+enum dvbfe_alpha {
+	DVBFE_ALPHA_1			= (1 <<  0),
+	DVBFE_ALPHA_2			= (1 <<  1),
+	DVBFE_ALPHA_4			= (1 <<  2)
+};
+
+/* Stream priority (Hierachial coding)	*/
+enum dvbfe_stream_priority {
+	DVBFE_STREAM_PRIORITY_HP	= (0 << 0),
+	DVBFE_STREAM_PRIORITY_LP	= (1 << 0)
+};
+
+/* DVB-T parameters			*/
+struct dvbt_params {
+	enum dvbfe_modulation		constellation;
+	enum dvbfe_bandwidth		bandwidth;
+	enum dvbfe_fec			code_rate_HP;
+	enum dvbfe_fec			code_rate_LP;
+	enum dvbfe_transmission_mode	transmission_mode;
+	enum dvbfe_guard_interval	guard_interval;
+	enum dvbfe_hierarchy		hierarchy;
+	enum dvbfe_alpha		alpha;
+	enum dvbfe_stream_priority	priority;
+
+	__u8				pad[32];
+};
+
+/* DVB-H Interleaver type		*/
+enum dvbfe_interleaver {
+	DVBFE_INTERLEAVER_NATIVE	= (1 <<  0),
+	DVBFE_INTERLEAVER_INDEPTH	= (1 <<  1),
+	DVBFE_INTERLEAVER_AUTO		= (1 << 31)
+};
+
+/* DVB-H MPE-FEC Indicator		*/
+enum dvbfe_mpefec {
+	DVBFE_MPEFEC_OFF		= (1 <<  0),
+	DVBFE_MPEFEC_ON			= (1 <<  1)
+};
+
+/* DVB-H Timeslicing Indicator		*/
+enum dvbfe_timeslicing {
+	DVBFE_TIMESLICING_OFF		= (1 <<  0),
+	DVBFE_TIMESLICING_ON		= (1 <<  1)
+};
+
+/* DVB-H parameters			*/
+struct dvbh_params {
+	enum dvbfe_modulation		constellation;
+	enum dvbfe_fec			code_rate_HP;
+	enum dvbfe_fec			code_rate_LP;
+	enum dvbfe_transmission_mode	transmission_mode;
+	enum dvbfe_guard_interval	guard_interval;
+	enum dvbfe_hierarchy		hierarchy;
+	enum dvbfe_alpha		alpha;
+	enum dvbfe_interleaver		interleaver;
+	enum dvbfe_mpefec		mpefec;
+	enum dvbfe_timeslicing		timeslicing;
+	enum dvbfe_stream_priority	priority;
+
+	__u32				bandwidth;
+	__u8				pad[32];
+};
+
+/* ATSC parameters			*/
+struct atsc_params {
+	enum dvbfe_modulation		modulation;
+
+	__u8				pad[32];
+};
+
+/* DVB Frontend Tuning Parameters	*/
+struct dvbfe_params {
+	__u32				frequency;
+	enum fe_spectral_inversion	inversion;
+	enum dvbfe_delsys		delivery;
+
+	__u8				pad[32];
+
+	union {
+		struct dvbs_params	dvbs;
+		struct dss_params	dss;
+		struct dvbs2_params	dvbs2;
+		struct dvbc_params	dvbc;
+		struct dvbt_params	dvbt;
+		struct dvbh_params	dvbh;
+		struct atsc_params	atsc;
+
+		__u8			pad[128];
+	} delsys;
+};
+#define DVBFE_SET_PARAMS		_IOW('o', 83, struct dvbfe_params)
+#define DVBFE_GET_PARAMS		_IOWR('o', 84, struct dvbfe_params)
+
+/* DVB-S capability bitfields		*/
+struct dvbfe_dvbs_info {
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+};
+
+/* DSS capability bitfields		*/
+struct dvbfe_dss_info {
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+};
+
+/* DVB-S2 capability bitfields		*/
+struct dvbfe_dvbs2_info {
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_fec			fec;
+
+	__u8				pad[32];
+};
+
+/* DVB-C capability bitfields		*/
+struct dvbfe_dvbc_info {
+	enum dvbfe_modulation		modulation;
+};
+
+/* DVB-T capability bitfields		*/
+struct dvbfe_dvbt_info {
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_stream_priority	stream_priority;
+
+	__u8				pad[32];
+};
+
+/* DVB-H capability bitfields		*/
+struct dvbfe_dvbh_info {
+	enum dvbfe_modulation		modulation;
+	enum dvbfe_stream_priority	stream_priority;
+
+	__u8				pad[32];
+};
+
+/* ATSC capability bitfields		*/
+struct dvbfe_atsc_info {
+	enum dvbfe_modulation		modulation;
+
+	__u8				pad[32];
+};
+
+/* DVB Frontend related Information	*/
+struct dvbfe_info {
+	char				name[128];
+
+	union {
+		struct dvbfe_dvbs_info	dvbs;
+		struct dvbfe_dss_info	dss;
+		struct dvbfe_dvbs2_info	dvbs2;
+		struct dvbfe_dvbc_info	dvbc;
+		struct dvbfe_dvbt_info	dvbt;
+		struct dvbfe_dvbh_info	dvbh;
+		struct dvbfe_atsc_info	atsc;
+
+		__u8			pad[128];
+	} delsys;
+
+	__u32				frequency_min;
+	__u32				frequency_max;
+	__u32				frequency_step;
+	__u32				frequency_tolerance;
+	__u32				symbol_rate_min;
+	__u32				symbol_rate_max;
+	__u32				symbol_rate_tolerance;
+
+	enum fe_spectral_inversion	inversion;
+
+	__u8				pad[128];
+};
+#define DVBFE_GET_INFO			_IOR('o', 85, struct dvbfe_info)
+
+enum dvbfe_status {
+	DVBFE_HAS_SIGNAL		= (1 <<  0),	/*  something above noise floor	*/
+	DVBFE_HAS_CARRIER		= (1 <<  1),	/*  Signal found		*/
+	DVBFE_HAS_VITERBI		= (1 <<  2),	/*  FEC is stable		*/
+	DVBFE_HAS_SYNC			= (1 <<  3),	/*  SYNC found			*/
+	DVBFE_HAS_LOCK			= (1 <<  4),	/*  OK ..			*/
+	DVBFE_TIMEDOUT			= (1 <<  5),	/*  no lock in last ~2 s	*/
+	DVBFE_STATUS_DUMMY		= (1 << 31)
+};
+
+/* DVB Frontend events			*/
+struct dvbfe_events {
+	enum dvbfe_status		status;
+
+	__u8				pad[32];
+};
+
+struct dvb_frontend_event {
+	fe_status_t status;
+	struct dvb_frontend_parameters parameters;
+};
+#define FE_GET_EVENT		   _IOR('o', 78, struct dvb_frontend_event)
+
+struct dvbfe_event {
+	struct dvbfe_events fe_events;
+	struct dvbfe_params fe_params;
+};
+#define DVBFE_GET_EVENT			_IOR('o', 86, struct dvbfe_event)
+
+#endif /*_DVBFRONTEND_H_*/

+ 53 - 0
dvb-tools/include/net.h

@@ -0,0 +1,53 @@
+/*
+ * net.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBNET_H_
+#define _DVBNET_H_
+
+#include <asm/types.h>
+
+
+struct dvb_net_if {
+	__u16 pid;
+	__u16 if_num;
+	__u8  feedtype;
+#define DVB_NET_FEEDTYPE_MPE 0	/* multi protocol encapsulation */
+#define DVB_NET_FEEDTYPE_ULE 1	/* ultra lightweight encapsulation */
+};
+
+
+#define NET_ADD_IF    _IOWR('o', 52, struct dvb_net_if)
+#define NET_REMOVE_IF _IO('o', 53)
+#define NET_GET_IF    _IOWR('o', 54, struct dvb_net_if)
+
+
+/* binary compatibility cruft: */
+struct __dvb_net_if_old {
+	__u16 pid;
+	__u16 if_num;
+};
+#define __NET_ADD_IF_OLD _IOWR('o', 52, struct __dvb_net_if_old)
+#define __NET_GET_IF_OLD _IOWR('o', 54, struct __dvb_net_if_old)
+
+
+#endif /*_DVBNET_H_*/

+ 142 - 0
dvb-tools/include/osd.h

@@ -0,0 +1,142 @@
+/*
+ * osd.h
+ *
+ * Copyright (C) 2001 Ralph  Metzler <ralph@convergence.de>
+ *                  & Marcus Metzler <marcus@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBOSD_H_
+#define _DVBOSD_H_
+
+typedef enum {
+  // All functions return -2 on "not open"
+  OSD_Close=1,    // ()
+  // Disables OSD and releases the buffers
+  // returns 0 on success
+  OSD_Open,       // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0))
+  // Opens OSD with this size and bit depth
+  // returns 0 on success, -1 on DRAM allocation error, -2 on "already open"
+  OSD_Show,       // ()
+  // enables OSD mode
+  // returns 0 on success
+  OSD_Hide,       // ()
+  // disables OSD mode
+  // returns 0 on success
+  OSD_Clear,      // ()
+  // Sets all pixel to color 0
+  // returns 0 on success
+  OSD_Fill,       // (color)
+  // Sets all pixel to color <col>
+  // returns 0 on success
+  OSD_SetColor,   // (color,R{x0},G{y0},B{x1},opacity{y1})
+  // set palette entry <num> to <r,g,b>, <mix> and <trans> apply
+  // R,G,B: 0..255
+  // R=Red, G=Green, B=Blue
+  // opacity=0:      pixel opacity 0% (only video pixel shows)
+  // opacity=1..254: pixel opacity as specified in header
+  // opacity=255:    pixel opacity 100% (only OSD pixel shows)
+  // returns 0 on success, -1 on error
+  OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data)
+  // Set a number of entries in the palette
+  // sets the entries "firstcolor" through "lastcolor" from the array "data"
+  // data has 4 byte for each color:
+  // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel
+  OSD_SetTrans,   // (transparency{color})
+  // Sets transparency of mixed pixel (0..15)
+  // returns 0 on success
+  OSD_SetPixel,   // (x0,y0,color)
+  // sets pixel <x>,<y> to color number <col>
+  // returns 0 on success, -1 on error
+  OSD_GetPixel,   // (x0,y0)
+  // returns color number of pixel <x>,<y>,  or -1
+  OSD_SetRow,     // (x0,y0,x1,data)
+  // fills pixels x0,y through  x1,y with the content of data[]
+  // returns 0 on success, -1 on clipping all pixel (no pixel drawn)
+  OSD_SetBlock,   // (x0,y0,x1,y1,increment{color},data)
+  // fills pixels x0,y0 through  x1,y1 with the content of data[]
+  // inc contains the width of one line in the data block,
+  // inc<=0 uses blockwidth as linewidth
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillRow,    // (x0,y0,x1,color)
+  // fills pixels x0,y through  x1,y with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_FillBlock,  // (x0,y0,x1,y1,color)
+  // fills pixels x0,y0 through  x1,y1 with the color <col>
+  // returns 0 on success, -1 on clipping all pixel
+  OSD_Line,       // (x0,y0,x1,y1,color)
+  // draw a line from x0,y0 to x1,y1 with the color <col>
+  // returns 0 on success
+  OSD_Query,      // (x0,y0,x1,y1,xasp{color}}), yasp=11
+  // fills parameters with the picture dimensions and the pixel aspect ratio
+  // returns 0 on success
+  OSD_Test,       // ()
+  // draws a test picture. for debugging purposes only
+  // returns 0 on success
+// TODO: remove "test" in final version
+  OSD_Text,       // (x0,y0,size,color,text)
+  OSD_SetWindow, //  (x0) set window with number 0<x0<8 as current
+  OSD_MoveWindow, //  move current window to (x0, y0)
+  OSD_OpenRaw,	// Open other types of OSD windows
+} OSD_Command;
+
+typedef struct osd_cmd_s {
+	OSD_Command cmd;
+	int x0;
+	int y0;
+	int x1;
+	int y1;
+	int color;
+	void *data;
+} osd_cmd_t;
+
+/* OSD_OpenRaw: set 'color' to desired window type */
+typedef enum {
+	OSD_BITMAP1,           /* 1 bit bitmap */
+	OSD_BITMAP2,           /* 2 bit bitmap */
+	OSD_BITMAP4,           /* 4 bit bitmap */
+	OSD_BITMAP8,           /* 8 bit bitmap */
+	OSD_BITMAP1HR,         /* 1 Bit bitmap half resolution */
+	OSD_BITMAP2HR,         /* 2 bit bitmap half resolution */
+	OSD_BITMAP4HR,         /* 4 bit bitmap half resolution */
+	OSD_BITMAP8HR,         /* 8 bit bitmap half resolution */
+	OSD_YCRCB422,          /* 4:2:2 YCRCB Graphic Display */
+	OSD_YCRCB444,          /* 4:4:4 YCRCB Graphic Display */
+	OSD_YCRCB444HR,        /* 4:4:4 YCRCB graphic half resolution */
+	OSD_VIDEOTSIZE,        /* True Size Normal MPEG Video Display */
+	OSD_VIDEOHSIZE,        /* MPEG Video Display Half Resolution */
+	OSD_VIDEOQSIZE,        /* MPEG Video Display Quarter Resolution */
+	OSD_VIDEODSIZE,        /* MPEG Video Display Double Resolution */
+	OSD_VIDEOTHSIZE,       /* True Size MPEG Video Display Half Resolution */
+	OSD_VIDEOTQSIZE,       /* True Size MPEG Video Display Quarter Resolution*/
+	OSD_VIDEOTDSIZE,       /* True Size MPEG Video Display Double Resolution */
+	OSD_VIDEONSIZE,        /* Full Size MPEG Video Display */
+	OSD_CURSOR             /* Cursor */
+} osd_raw_window_t;
+
+typedef struct osd_cap_s {
+	int  cmd;
+#define OSD_CAP_MEMSIZE         1  /* memory size */
+	long val;
+} osd_cap_t;
+
+
+#define OSD_SEND_CMD            _IOW('o', 160, osd_cmd_t)
+#define OSD_GET_CAPABILITY      _IOR('o', 161, osd_cap_t)
+
+#endif

+ 29 - 0
dvb-tools/include/version.h

@@ -0,0 +1,29 @@
+/*
+ * version.h
+ *
+ * Copyright (C) 2000 Holger Waechtler <holger@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVERSION_H_
+#define _DVBVERSION_H_
+
+#define DVB_API_VERSION 3
+#define DVB_API_VERSION_MINOR 3
+
+#endif /*_DVBVERSION_H_*/

+ 277 - 0
dvb-tools/include/video.h

@@ -0,0 +1,277 @@
+/*
+ * video.h
+ *
+ * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
+ *                  & Ralph  Metzler <ralph@convergence.de>
+ *                    for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBVIDEO_H_
+#define _DVBVIDEO_H_
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#else
+#include <asm/types.h>
+#include <stdint.h>
+#include <time.h>
+#endif
+
+
+typedef enum {
+	VIDEO_FORMAT_4_3,     /* Select 4:3 format */
+	VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
+	VIDEO_FORMAT_221_1    /* 2.21:1 */
+} video_format_t;
+
+
+typedef enum {
+	 VIDEO_SYSTEM_PAL,
+	 VIDEO_SYSTEM_NTSC,
+	 VIDEO_SYSTEM_PALN,
+	 VIDEO_SYSTEM_PALNc,
+	 VIDEO_SYSTEM_PALM,
+	 VIDEO_SYSTEM_NTSC60,
+	 VIDEO_SYSTEM_PAL60,
+	 VIDEO_SYSTEM_PALM60
+} video_system_t;
+
+
+typedef enum {
+	VIDEO_PAN_SCAN,       /* use pan and scan format */
+	VIDEO_LETTER_BOX,     /* use letterbox format */
+	VIDEO_CENTER_CUT_OUT  /* use center cut out format */
+} video_displayformat_t;
+
+typedef struct {
+	int w;
+	int h;
+	video_format_t aspect_ratio;
+} video_size_t;
+
+typedef enum {
+	VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
+	VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
+			       comes from the user through the write
+			       system call */
+} video_stream_source_t;
+
+
+typedef enum {
+	VIDEO_STOPPED, /* Video is stopped */
+	VIDEO_PLAYING, /* Video is currently playing */
+	VIDEO_FREEZED  /* Video is freezed */
+} video_play_state_t;
+
+
+/* Decoder commands */
+#define VIDEO_CMD_PLAY        (0)
+#define VIDEO_CMD_STOP        (1)
+#define VIDEO_CMD_FREEZE      (2)
+#define VIDEO_CMD_CONTINUE    (3)
+
+/* Flags for VIDEO_CMD_FREEZE */
+#define VIDEO_CMD_FREEZE_TO_BLACK     	(1 << 0)
+
+/* Flags for VIDEO_CMD_STOP */
+#define VIDEO_CMD_STOP_TO_BLACK      	(1 << 0)
+#define VIDEO_CMD_STOP_IMMEDIATELY     	(1 << 1)
+
+/* Play input formats: */
+/* The decoder has no special format requirements */
+#define VIDEO_PLAY_FMT_NONE         (0)
+/* The decoder requires full GOPs */
+#define VIDEO_PLAY_FMT_GOP          (1)
+
+/* The structure must be zeroed before use by the application
+   This ensures it can be extended safely in the future. */
+struct video_command {
+	__u32 cmd;
+	__u32 flags;
+	union {
+		struct {
+			__u64 pts;
+		} stop;
+
+		struct {
+			/* 0 or 1000 specifies normal speed,
+			   1 specifies forward single stepping,
+			   -1 specifies backward single stepping,
+			   >1: playback at speed/1000 of the normal speed,
+			   <-1: reverse playback at (-speed/1000) of the normal speed. */
+			__s32 speed;
+			__u32 format;
+		} play;
+
+		struct {
+			__u32 data[16];
+		} raw;
+	};
+};
+
+/* FIELD_UNKNOWN can be used if the hardware does not know whether
+   the Vsync is for an odd, even or progressive (i.e. non-interlaced)
+   field. */
+#define VIDEO_VSYNC_FIELD_UNKNOWN  	(0)
+#define VIDEO_VSYNC_FIELD_ODD 		(1)
+#define VIDEO_VSYNC_FIELD_EVEN		(2)
+#define VIDEO_VSYNC_FIELD_PROGRESSIVE	(3)
+
+struct video_event {
+	int32_t type;
+#define VIDEO_EVENT_SIZE_CHANGED	1
+#define VIDEO_EVENT_FRAME_RATE_CHANGED	2
+#define VIDEO_EVENT_DECODER_STOPPED 	3
+#define VIDEO_EVENT_VSYNC 		4
+	time_t timestamp;
+	union {
+		video_size_t size;
+		unsigned int frame_rate;	/* in frames per 1000sec */
+		unsigned char vsync_field;	/* unknown/odd/even/progressive */
+	} u;
+};
+
+
+struct video_status {
+	int                   video_blank;   /* blank video on freeze? */
+	video_play_state_t    play_state;    /* current state of playback */
+	video_stream_source_t stream_source; /* current source (demux/memory) */
+	video_format_t        video_format;  /* current aspect ratio of stream*/
+	video_displayformat_t display_format;/* selected cropping mode */
+};
+
+
+struct video_still_picture {
+	char *iFrame;        /* pointer to a single iframe in memory */
+	int32_t size;
+};
+
+
+typedef
+struct video_highlight {
+	int     active;      /*    1=show highlight, 0=hide highlight */
+	uint8_t contrast1;   /*    7- 4  Pattern pixel contrast */
+			     /*    3- 0  Background pixel contrast */
+	uint8_t contrast2;   /*    7- 4  Emphasis pixel-2 contrast */
+			     /*    3- 0  Emphasis pixel-1 contrast */
+	uint8_t color1;      /*    7- 4  Pattern pixel color */
+			     /*    3- 0  Background pixel color */
+	uint8_t color2;      /*    7- 4  Emphasis pixel-2 color */
+			     /*    3- 0  Emphasis pixel-1 color */
+	uint32_t ypos;       /*   23-22  auto action mode */
+			     /*   21-12  start y */
+			     /*    9- 0  end y */
+	uint32_t xpos;       /*   23-22  button color number */
+			     /*   21-12  start x */
+			     /*    9- 0  end x */
+} video_highlight_t;
+
+
+typedef struct video_spu {
+	int active;
+	int stream_id;
+} video_spu_t;
+
+
+typedef struct video_spu_palette {      /* SPU Palette information */
+	int length;
+	uint8_t *palette;
+} video_spu_palette_t;
+
+
+typedef struct video_navi_pack {
+	int length;          /* 0 ... 1024 */
+	uint8_t data[1024];
+} video_navi_pack_t;
+
+
+typedef uint16_t video_attributes_t;
+/*   bits: descr. */
+/*   15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
+/*   13-12 TV system (0=525/60, 1=625/50) */
+/*   11-10 Aspect ratio (0=4:3, 3=16:9) */
+/*    9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
+/*    7    line 21-1 data present in GOP (1=yes, 0=no) */
+/*    6    line 21-2 data present in GOP (1=yes, 0=no) */
+/*    5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
+/*    2    source letterboxed (1=yes, 0=no) */
+/*    0    film/camera mode (0=camera, 1=film (625/50 only)) */
+
+
+/* bit definitions for capabilities: */
+/* can the hardware decode MPEG1 and/or MPEG2? */
+#define VIDEO_CAP_MPEG1   1
+#define VIDEO_CAP_MPEG2   2
+/* can you send a system and/or program stream to video device?
+   (you still have to open the video and the audio device but only
+    send the stream to the video device) */
+#define VIDEO_CAP_SYS     4
+#define VIDEO_CAP_PROG    8
+/* can the driver also handle SPU, NAVI and CSS encoded data?
+   (CSS API is not present yet) */
+#define VIDEO_CAP_SPU    16
+#define VIDEO_CAP_NAVI   32
+#define VIDEO_CAP_CSS    64
+
+
+#define VIDEO_STOP                 _IO('o', 21)
+#define VIDEO_PLAY                 _IO('o', 22)
+#define VIDEO_FREEZE               _IO('o', 23)
+#define VIDEO_CONTINUE             _IO('o', 24)
+#define VIDEO_SELECT_SOURCE        _IO('o', 25)
+#define VIDEO_SET_BLANK            _IO('o', 26)
+#define VIDEO_GET_STATUS           _IOR('o', 27, struct video_status)
+#define VIDEO_GET_EVENT            _IOR('o', 28, struct video_event)
+#define VIDEO_SET_DISPLAY_FORMAT   _IO('o', 29)
+#define VIDEO_STILLPICTURE         _IOW('o', 30, struct video_still_picture)
+#define VIDEO_FAST_FORWARD         _IO('o', 31)
+#define VIDEO_SLOWMOTION           _IO('o', 32)
+#define VIDEO_GET_CAPABILITIES     _IOR('o', 33, unsigned int)
+#define VIDEO_CLEAR_BUFFER         _IO('o',  34)
+#define VIDEO_SET_ID               _IO('o', 35)
+#define VIDEO_SET_STREAMTYPE       _IO('o', 36)
+#define VIDEO_SET_FORMAT           _IO('o', 37)
+#define VIDEO_SET_SYSTEM           _IO('o', 38)
+#define VIDEO_SET_HIGHLIGHT        _IOW('o', 39, video_highlight_t)
+#define VIDEO_SET_SPU              _IOW('o', 50, video_spu_t)
+#define VIDEO_SET_SPU_PALETTE      _IOW('o', 51, video_spu_palette_t)
+#define VIDEO_GET_NAVI             _IOR('o', 52, video_navi_pack_t)
+#define VIDEO_SET_ATTRIBUTES       _IO('o', 53)
+#define VIDEO_GET_SIZE             _IOR('o', 55, video_size_t)
+#define VIDEO_GET_FRAME_RATE       _IOR('o', 56, unsigned int)
+
+/**
+ * VIDEO_GET_PTS
+ *
+ * Read the 33 bit presentation time stamp as defined
+ * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
+ *
+ * The PTS should belong to the currently played
+ * frame if possible, but may also be a value close to it
+ * like the PTS of the last decoded frame or the last PTS
+ * extracted by the PES parser.
+ */
+#define VIDEO_GET_PTS              _IOR('o', 57, __u64)
+
+/* Read the number of displayed frames since the decoder was started */
+#define VIDEO_GET_FRAME_COUNT  	   _IOR('o', 58, __u64)
+
+#define VIDEO_COMMAND     	   _IOWR('o', 59, struct video_command)
+#define VIDEO_TRY_COMMAND 	   _IOWR('o', 60, struct video_command)
+
+#endif /*_DVBVIDEO_H_*/

+ 11 - 0
dvb-tools/lib/Makefile

@@ -0,0 +1,11 @@
+# Makefile for linuxtv.org dvb-apps/lib
+
+.PHONY: all clean install
+
+all clean install:
+	$(MAKE) -C libdvbapi $@
+	$(MAKE) -C libdvbcfg $@
+	$(MAKE) -C libdvben50221 $@
+	$(MAKE) -C libdvbsec $@
+	$(MAKE) -C libesg $@
+	$(MAKE) -C libucsi $@

TEMPAT SAMPAH
dvb-tools/lib/deploy/libdvbapi.so


TEMPAT SAMPAH
dvb-tools/lib/deploy/libdvbcfg.so


TEMPAT SAMPAH
dvb-tools/lib/deploy/libdvben50221.so


TEMPAT SAMPAH
dvb-tools/lib/deploy/libdvbsec.so


TEMPAT SAMPAH
dvb-tools/lib/deploy/libesg.so


TEMPAT SAMPAH
dvb-tools/lib/deploy/libucsi.so


+ 25 - 0
dvb-tools/lib/libdvbapi/Makefile

@@ -0,0 +1,25 @@
+# Makefile for linuxtv.org dvb-apps/lib/libdvbapi
+
+includes = dvbaudio.h \
+           dvbca.h    \
+           dvbdemux.h \
+           dvbfe.h    \
+           dvbnet.h   \
+           dvbvideo.h
+
+objects  = dvbaudio.o \
+           dvbca.o    \
+           dvbdemux.o \
+           dvbfe.o    \
+           dvbnet.o   \
+           dvbvideo.o
+
+lib_name = libdvbapi
+
+CPPFLAGS += -I../../lib
+
+.PHONY: all
+
+all: library
+
+include ../../Make.rules

+ 50 - 0
dvb-tools/lib/libdvbapi/dvbaudio.c

@@ -0,0 +1,50 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/dvb/audio.h>
+#include <errno.h>
+#include "dvbaudio.h"
+
+int dvbaudio_open(int adapter, int audiodeviceid)
+{
+	char filename[PATH_MAX+1];
+	int fd;
+
+	sprintf(filename, "/dev/dvb/adapter%i/audio%i", adapter, audiodeviceid);
+	if ((fd = open(filename, O_RDWR)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.audio%i", adapter, audiodeviceid);
+		fd = open(filename, O_RDWR);
+	}
+
+	return fd;
+}
+
+int dvbaudio_set_bypass(int fd, int bypass)
+{
+	return ioctl(fd, AUDIO_SET_BYPASS_MODE, bypass);
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbaudio.d

@@ -0,0 +1 @@
+dvbaudio.o: dvbaudio.c dvbaudio.h

+ 55 - 0
dvb-tools/lib/libdvbapi/dvbaudio.h

@@ -0,0 +1,55 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBAUDIO_H
+#define LIBDVBAUDIO_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * Open a DVB audio device.
+ *
+ * @param adapter DVB adapter ID.
+ * @param audiodeviceid Id of audio device of that adapter to open.
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbaudio_open(int adapter, int audiodeviceid);
+
+/**
+ * Control audio bypass - i.e. output decoded audio, or the raw bitstream (e.g. AC3).
+ *
+ * @param fd Audio device opened with dvbaudio_open().
+ * @param bypass 1=> enable bypass, 0=> disable.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbaudio_set_bypass(int fd, int bypass);
+
+// FIXME: this is a stub library
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBAUDIO_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbaudio.o


+ 159 - 0
dvb-tools/lib/libdvbapi/dvbca.c

@@ -0,0 +1,159 @@
+/*
+ * libdvbca - interface onto raw CA devices
+ *
+ * Copyright (C) 2006 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <errno.h>
+#include <linux/dvb/ca.h>
+#include "dvbca.h"
+
+
+int dvbca_open(int adapter, int cadevice)
+{
+	char filename[PATH_MAX+1];
+	int fd;
+
+	sprintf(filename, "/dev/dvb/adapter%i/ca%i", adapter, cadevice);
+	if ((fd = open(filename, O_RDWR)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.ca%i", adapter, cadevice);
+		fd = open(filename, O_RDWR);
+	}
+
+	return fd;
+}
+
+int dvbca_reset(int fd, uint8_t slot)
+{
+	return ioctl(fd, CA_RESET, (1 << slot));
+}
+
+int dvbca_get_interface_type(int fd, uint8_t slot)
+{
+	ca_slot_info_t info;
+
+	info.num = slot;
+	if (ioctl(fd, CA_GET_SLOT_INFO, &info))
+		return -1;
+
+	if (info.type & CA_CI_LINK)
+		return DVBCA_INTERFACE_LINK;
+	if (info.type & CA_CI)
+		return DVBCA_INTERFACE_HLCI;
+
+	return -1;
+}
+
+int dvbca_get_cam_state(int fd, uint8_t slot)
+{
+	ca_slot_info_t info;
+
+	info.num = slot;
+	if (ioctl(fd, CA_GET_SLOT_INFO, &info))
+		return -1;
+
+	if (info.flags == 0)
+		return DVBCA_CAMSTATE_MISSING;
+	if (info.flags & CA_CI_MODULE_READY)
+		return DVBCA_CAMSTATE_READY;
+	if (info.flags & CA_CI_MODULE_PRESENT)
+		return DVBCA_CAMSTATE_INITIALISING;
+
+	return -1;
+}
+
+int dvbca_link_write(int fd, uint8_t slot, uint8_t connection_id,
+		     uint8_t *data, uint16_t data_length)
+{
+	uint8_t *buf = malloc(data_length + 2);
+	if (buf == NULL)
+		return -1;
+
+	buf[0] = slot;
+	buf[1] = connection_id;
+	memcpy(buf+2, data, data_length);
+
+	int result = write(fd, buf, data_length+2);
+	free(buf);
+	return result;
+}
+
+int dvbca_link_read(int fd, uint8_t *slot, uint8_t *connection_id,
+		     uint8_t *data, uint16_t data_length)
+{
+	int size;
+
+	uint8_t *buf = malloc(data_length + 2);
+	if (buf == NULL)
+		return -1;
+
+	if ((size = read(fd, buf, data_length+2)) < 2)
+		return -1;
+
+	*slot = buf[0];
+	*connection_id = buf[1];
+	memcpy(data, buf+2, size-2);
+	free(buf);
+
+	return size - 2;
+}
+
+int dvbca_hlci_write(int fd, uint8_t *data, uint16_t data_length)
+{
+	struct ca_msg msg;
+
+	if (data_length > 256) {
+		return -1;
+	}
+	memset(&msg, 0, sizeof(msg));
+	msg.length = data_length;
+
+	memcpy(msg.msg, data, data_length);
+
+	return ioctl(fd, CA_SEND_MSG, &msg);
+}
+
+int dvbca_hlci_read(int fd, uint32_t app_tag, uint8_t *data,
+		    uint16_t data_length)
+{
+	struct ca_msg msg;
+
+	if (data_length > 256) {
+		data_length = 256;
+	}
+	memset(&msg, 0, sizeof(msg));
+	msg.length = data_length;
+	msg.msg[0] = app_tag >> 16;
+	msg.msg[1] = app_tag >> 8;
+	msg.msg[2] = app_tag;
+
+	int status = ioctl(fd, CA_GET_MSG, &msg);
+	if (status < 0) return status;
+
+	if (msg.length > data_length) msg.length = data_length;
+	memcpy(data, msg.msg, msg.length);
+	return msg.length;
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbca.d

@@ -0,0 +1 @@
+dvbca.o: dvbca.c dvbca.h

+ 135 - 0
dvb-tools/lib/libdvbapi/dvbca.h

@@ -0,0 +1,135 @@
+/*
+ * libdvbca - interface onto raw CA devices
+ *
+ * Copyright (C) 2006 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBCA_H
+#define LIBDVBCA_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * The types of CA interface we support.
+ */
+#define DVBCA_INTERFACE_LINK 0
+#define DVBCA_INTERFACE_HLCI 1
+
+/**
+ * States a CAM in a slot can be in.
+ */
+#define DVBCA_CAMSTATE_MISSING 0
+#define DVBCA_CAMSTATE_INITIALISING 1
+#define DVBCA_CAMSTATE_READY 2
+
+
+/**
+ * Open a CA device. Multiple CAMs can be accessed through a CA device.
+ *
+ * @param adapter Index of the DVB adapter.
+ * @param cadevice Index of the CA device on that adapter (usually 0).
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbca_open(int adapter, int cadevice);
+
+/**
+ * Reset a CAM.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param slot Slot where the requested CAM is in.
+ * @return 0 on success, -1 on failure.
+ */
+extern int dvbca_reset(int fd, uint8_t slot);
+
+/**
+ * Get the interface type of a CAM.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param slot Slot where the requested CAM is in.
+ * @return One of the DVBCA_INTERFACE_* values, or -1 on failure.
+ */
+extern int dvbca_get_interface_type(int fd, uint8_t slot);
+
+/**
+ * Get the state of a CAM.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param slot Slot where the requested CAM is in.
+ * @return One of the DVBCA_CAMSTATE_* values, or -1 on failure.
+ */
+extern int dvbca_get_cam_state(int fd, uint8_t slot);
+
+/**
+ * Write a message to a CAM using a link-layer interface.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param slot Slot where the requested CAM is in.
+ * @param connection_id Connection ID of the message.
+ * @param data Data to write.
+ * @param data_length Number of bytes to write.
+ * @return 0 on success, or -1 on failure.
+ */
+extern int dvbca_link_write(int fd, uint8_t slot, uint8_t connection_id,
+			    uint8_t *data, uint16_t data_length);
+
+/**
+ * Read a message from a CAM using a link-layer interface.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param slot Slot where the responding CAM is in.
+ * @param connection_id Destination for the connection ID the message came from.
+ * @param data Data that was read.
+ * @param data_length Max number of bytes to read.
+ * @return Number of bytes read on success, or -1 on failure.
+ */
+extern int dvbca_link_read(int fd, uint8_t *slot, uint8_t *connection_id,
+			   uint8_t *data, uint16_t data_length);
+
+// FIXME how do we determine which CAM slot of a CA is meant?
+/**
+ * Write a message to a CAM using an HLCI interface.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param data Data to write.
+ * @param data_length Number of bytes to write.
+ * @return 0 on success, or -1 on failure.
+ */
+extern int dvbca_hlci_write(int fd, uint8_t *data, uint16_t data_length);
+
+// FIXME how do we determine which CAM slot of a CA is meant?
+/**
+ * Read a message from a CAM using an HLCI interface.
+ *
+ * @param fd File handle opened with dvbca_open.
+ * @param app_tag Application layer tag giving the message type to read.
+ * @param data Data that was read.
+ * @param data_length Max number of bytes to read.
+ * @return Number of bytes read on success, or -1 on failure.
+ */
+extern int dvbca_hlci_read(int fd, uint32_t app_tag, uint8_t *data,
+			   uint16_t data_length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBCA_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbca.o


+ 255 - 0
dvb-tools/lib/libdvbapi/dvbdemux.c

@@ -0,0 +1,255 @@
+/*
+ * libdvbdemux - a DVB demux library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <errno.h>
+#include <linux/dvb/dmx.h>
+#include "dvbdemux.h"
+
+
+int dvbdemux_open_demux(int adapter, int demuxdevice, int nonblocking)
+{
+	char filename[PATH_MAX+1];
+	int flags = O_RDWR;
+	int fd;
+
+	if (nonblocking)
+		flags |= O_NONBLOCK;
+
+	sprintf(filename, "/dev/dvb/adapter%i/demux%i", adapter, demuxdevice);
+	if ((fd = open(filename, flags)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.demux%i", adapter, demuxdevice);
+		fd = open(filename, flags);
+	}
+
+	return fd;
+}
+
+int dvbdemux_open_dvr(int adapter, int dvrdevice, int readonly, int nonblocking)
+{
+	char filename[PATH_MAX+1];
+	int flags = O_RDWR;
+	int fd;
+
+	if (readonly)
+		flags = O_RDONLY;
+	if (nonblocking)
+		flags |= O_NONBLOCK;
+
+	sprintf(filename, "/dev/dvb/adapter%i/dvr%i", adapter, dvrdevice);
+	if ((fd = open(filename, flags)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.dvr%i", adapter, dvrdevice);
+		fd = open(filename, flags);
+	}
+
+	return fd;
+}
+
+int dvbdemux_set_section_filter(int fd, int pid,
+				uint8_t filter[18], uint8_t mask[18],
+				int start, int checkcrc)
+{
+	struct dmx_sct_filter_params sctfilter;
+
+	memset(&sctfilter, 0, sizeof(sctfilter));
+	sctfilter.pid = pid;
+	memcpy(sctfilter.filter.filter, filter, 1);
+	memcpy(sctfilter.filter.filter+1, filter+3, 15);
+	memcpy(sctfilter.filter.mask, mask, 1);
+	memcpy(sctfilter.filter.mask+1, mask+3, 15);
+	memset(sctfilter.filter.mode, 0, 16);
+	if (start)
+		sctfilter.flags |= DMX_IMMEDIATE_START;
+	if (checkcrc)
+		sctfilter.flags |= DMX_CHECK_CRC;
+
+	return ioctl(fd, DMX_SET_FILTER, &sctfilter);
+}
+
+int dvbdemux_set_pes_filter(int fd, int pid,
+			    int input, int output,
+			    int pestype,
+			    int start)
+{
+	struct dmx_pes_filter_params filter;
+
+	memset(&filter, 0, sizeof(filter));
+	filter.pid = pid;
+
+	switch(input) {
+	case DVBDEMUX_INPUT_FRONTEND:
+		filter.input = DMX_IN_FRONTEND;
+		break;
+
+	case DVBDEMUX_INPUT_DVR:
+		filter.input = DMX_IN_DVR;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	switch(output) {
+	case DVBDEMUX_OUTPUT_DECODER:
+		filter.output = DMX_OUT_DECODER;
+		break;
+
+	case DVBDEMUX_OUTPUT_DEMUX:
+		filter.output = DMX_OUT_TAP;
+		break;
+
+	case DVBDEMUX_OUTPUT_DVR:
+		filter.output = DMX_OUT_TS_TAP;
+		break;
+
+#ifdef DMX_OUT_TSDEMUX_TAP
+	case DVBDEMUX_OUTPUT_TS_DEMUX:
+		filter.output = DMX_OUT_TSDEMUX_TAP;
+		break;
+#endif
+
+	default:
+		return -EINVAL;
+	}
+
+	switch(pestype) {
+	case DVBDEMUX_PESTYPE_AUDIO:
+		filter.pes_type = DMX_PES_AUDIO;
+		break;
+
+	case DVBDEMUX_PESTYPE_VIDEO:
+		filter.pes_type = DMX_PES_VIDEO;
+		break;
+
+	case DVBDEMUX_PESTYPE_TELETEXT:
+		filter.pes_type = DMX_PES_TELETEXT;
+		break;
+
+	case DVBDEMUX_PESTYPE_SUBTITLE:
+		filter.pes_type = DMX_PES_SUBTITLE;
+		break;
+
+	case DVBDEMUX_PESTYPE_PCR:
+		filter.pes_type = DMX_PES_PCR;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	if (start)
+		filter.flags |= DMX_IMMEDIATE_START;
+
+	return ioctl(fd, DMX_SET_PES_FILTER, &filter);
+}
+
+int dvbdemux_set_pid_filter(int fd, int pid,
+			    int input, int output,
+			    int start)
+{
+	struct dmx_pes_filter_params filter;
+
+	memset(&filter, 0, sizeof(filter));
+	if (pid == -1)
+		filter.pid = 0x2000;
+	else
+		filter.pid = pid;
+
+	switch(input) {
+	case DVBDEMUX_INPUT_FRONTEND:
+		filter.input = DMX_IN_FRONTEND;
+		break;
+
+	case DVBDEMUX_INPUT_DVR:
+		filter.input = DMX_IN_DVR;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	switch(output) {
+	case DVBDEMUX_OUTPUT_DECODER:
+		filter.output = DMX_OUT_DECODER;
+		break;
+
+	case DVBDEMUX_OUTPUT_DEMUX:
+		filter.output = DMX_OUT_TAP;
+		break;
+
+	case DVBDEMUX_OUTPUT_DVR:
+		filter.output = DMX_OUT_TS_TAP;
+		break;
+
+#ifdef DMX_OUT_TSDEMUX_TAP
+	case DVBDEMUX_OUTPUT_TS_DEMUX:
+		filter.output = DMX_OUT_TSDEMUX_TAP;
+		break;
+#endif
+
+	default:
+		return -EINVAL;
+	}
+
+	filter.pes_type = DMX_PES_OTHER;
+
+	if (start)
+		filter.flags |= DMX_IMMEDIATE_START;
+
+	return ioctl(fd, DMX_SET_PES_FILTER, &filter);
+}
+
+int dvbdemux_start(int fd)
+{
+	return ioctl(fd, DMX_START);
+}
+
+int dvbdemux_stop(int fd)
+{
+	return ioctl(fd, DMX_STOP);
+}
+
+int dvbdemux_get_stc(int fd, uint64_t *stc)
+{
+	struct dmx_stc _stc;
+	int result;
+
+	memset(stc, 0, sizeof(_stc));
+	if ((result = ioctl(fd, DMX_GET_STC, &_stc)) != 0) {
+		return result;
+	}
+
+	*stc = _stc.stc / _stc.base;
+	return 0;
+}
+
+int dvbdemux_set_buffer(int fd, int bufsize)
+{
+	return ioctl(fd, DMX_SET_BUFFER_SIZE, bufsize);
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbdemux.d

@@ -0,0 +1 @@
+dvbdemux.o: dvbdemux.c dvbdemux.h

+ 204 - 0
dvb-tools/lib/libdvbapi/dvbdemux.h

@@ -0,0 +1,204 @@
+/*
+ * libdvbdemux - a DVB demux library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBDEMUX_H
+#define LIBDVBDEMUX_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * Source of the data to be demuxed.
+ *
+ * FRONTEND. The data will be read from the frontend on the adapter.
+ *
+ * DVR. The data will be read from the DVR device of the adapter (of course,
+ * you need to write data TO the DVR device as well).
+ */
+#define DVBDEMUX_INPUT_FRONTEND 0
+#define DVBDEMUX_INPUT_DVR 1
+
+/**
+ * Destination of the demuxed data.
+ *
+ * DECODER. Sends the data directly to a hardware decoder (if present).
+ *
+ * DEMUX. Sends the PID stream to the current demux file descriptor. HOWEVER, the
+ * data will be the payload *only* - transport stream headers will be stripped.
+ *
+ * DVR sends the data to the DVR device. The data will be the complete transport
+ * stream packets with headers intact. Note: if multiple filters specify
+ * DVBDEMUX_OUTPUT_DVR, the individual PID streams will be re-multiplexed
+ * together.
+ */
+#define DVBDEMUX_OUTPUT_DECODER 0
+#define DVBDEMUX_OUTPUT_DEMUX 1
+#define DVBDEMUX_OUTPUT_DVR 2
+#define DVBDEMUX_OUTPUT_TS_DEMUX 3
+
+/**
+ * PES types.
+ */
+#define DVBDEMUX_PESTYPE_AUDIO 0
+#define DVBDEMUX_PESTYPE_VIDEO 1
+#define DVBDEMUX_PESTYPE_TELETEXT 2
+#define DVBDEMUX_PESTYPE_SUBTITLE 3
+#define DVBDEMUX_PESTYPE_PCR 4
+
+
+/**
+ * Open a demux device. Can be called multiple times. These let you setup a
+ * single filter per FD. It can can also be read() from if you use a section
+ * filter, or create a pes_filter or raw_filter with output DVBDEMUX_OUTPUT_DEMUX.
+ *
+ * @param adapter Index of the DVB adapter.
+ * @param demuxdevice Index of the demux device on that adapter (usually 0).
+ * @param nonblocking If 1, frontend will be opened in nonblocking mode.
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbdemux_open_demux(int adapter, int demuxdevice, int nonblocking);
+
+/**
+ * Open a DVR device. May be opened for writing or reading once.
+ * It is used to either write() transport stream data to be demuxed
+ * (if input == DVBDEMUX_INPUT_DVR), or to read() a stream of demuxed data
+ * (if output == DVBDEMUX_OUTPUT_DVR).
+ *
+ * Note, all demux filters with output set to DVBDEMUX_OUTPUT_DVR will be
+ * multiplexed together and output their data on this device.
+ *
+ * @param adapter Index of the DVB adapter.
+ * @param dvrdevice Index of the dvr device on that adapter (usually 0)
+ * @param readonly If 1, frontend will be opened in readonly mode only.
+ * @param nonblocking If 1, frontend will be opened in nonblocking mode.
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbdemux_open_dvr(int adapter, int dvrdevice, int readonly, int nonblocking);
+
+/**
+ * Set filter for the first 18 bytes of decoded SI table sections. Note that
+ * bytes 1 and 2 are _not_ filtered since they contain the length field.
+ *
+ * Conceptually, the driver computes the following for each filtered bit.
+ *
+ * (filter[X].bit[Y] & mask[X].bit[Y]) == (header[X].bit[Y] & mask[X].bit[Y])
+ *
+ * Any sections which do not match this criteria for every bit will be discarded.
+ *
+ * The SI data is always read from the frontend, and is always returned by
+ * read()ing the demux fd. FIXME: check this statement!
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @param pid PID of the stream.
+ * @param filter The filter values of the first 18 bytes of the desired sections.
+ * @param mask Bitmask indicating which bits in the filter array should be tested
+ * (if a bit is 1, it will be tested).
+ * @param start If 1, the filter will be started immediately. Otherwise you must
+ * call dvbdemux_start() manually.
+ * @param checkcrc If 1, the driver will check the CRC on the table sections.
+ * Any bad sections will be dropped.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_set_section_filter(int fd, int pid,
+                                       uint8_t filter[18], uint8_t mask[18],
+                                       int start, int checkcrc);
+
+/**
+ * Set filter for a stream of PES data. This call can only used for cards
+ * equipped with a hardware decoder.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @param pid PID of the stream.
+ * @param input One of DVBDEMUX_INPUT_*.
+ * @param output One of DVBDEMUX_OUTPUT_*.
+ * @param pestype One of DVBDEMUX_PESTYPE_* - this tells the decoder the type
+ * of data in this stream.
+ * @param start If 1, the filter will be started immediately. Otherwise you must
+ * call dvbdemux_start() manually.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_set_pes_filter(int fd, int pid,
+                                   int input, int output,
+                                   int pestype,
+                                   int start);
+
+/**
+ * Create a pid filter - this will extract transport stream packets for a
+ * specified PID.
+ *
+ * Note: The wildcard PID can only be used on "budget" cards.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @param pid PID to retrieve, or use -1 as a wildcard for ALL PIDs.
+ * @param input One of DVBDEMUX_INPUT_*.
+ * @param output One of DVBDEMUX_OUTPUT_*.
+ * @param start If 1, the filter will be started immediately. Otherwise you must
+ * call dvbdemux_start() manually.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_set_pid_filter(int fd, int pid,
+                                   int input, int output,
+                                   int start);
+
+/**
+ * Start a demux going.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_start(int fd);
+
+/**
+ * Stop a demux.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_stop(int fd);
+
+/**
+ * Retrieve the current STC from the demux. This call can only used for cards
+ * equipped with a hardware decoder.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @param stc Where to put the retrieved STC value (in 90kHz clock).
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_get_stc(int fd, uint64_t *stc);
+
+/**
+ * Change the internal buffer size used by the demuxer. The default buffer size
+ * is 8192 bytes. Can only be used if the demux in question is stopped.
+ *
+ * @param fd FD as opened with dvbdemux_open_demux() above.
+ * @param bufsize New buffer size to use.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbdemux_set_buffer(int fd, int bufsize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBDEMUX_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbdemux.o


+ 574 - 0
dvb-tools/lib/libdvbapi/dvbfe.c

@@ -0,0 +1,574 @@
+/*
+ * libdvbfe - a DVB frontend library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ * Copyright (C) 2005 Manu Abraham <abraham.manu@gmail.com>
+ * Copyright (C) 2005 Kenneth Aafloy (kenneth@linuxtv.org)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <errno.h>
+#include <linux/dvb/frontend.h>
+#include <libdvbmisc/dvbmisc.h>
+#include "dvbfe.h"
+
+int verbose = 0;
+
+static int dvbfe_spectral_inversion_to_kapi[][2] =
+{
+	{ DVBFE_INVERSION_OFF, INVERSION_OFF },
+	{ DVBFE_INVERSION_ON, INVERSION_ON },
+	{ DVBFE_INVERSION_AUTO, INVERSION_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_code_rate_to_kapi[][2] =
+{
+	{ DVBFE_FEC_NONE, FEC_NONE },
+	{ DVBFE_FEC_1_2, FEC_1_2 },
+	{ DVBFE_FEC_2_3, FEC_2_3 },
+	{ DVBFE_FEC_3_4, FEC_3_4 },
+	{ DVBFE_FEC_4_5, FEC_4_5 },
+	{ DVBFE_FEC_5_6, FEC_5_6 },
+	{ DVBFE_FEC_6_7, FEC_6_7 },
+	{ DVBFE_FEC_7_8, FEC_7_8 },
+	{ DVBFE_FEC_8_9, FEC_8_9 },
+	{ DVBFE_FEC_AUTO, FEC_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbt_const_to_kapi[][2] =
+{
+	{ DVBFE_DVBT_CONST_QPSK, FE_QPSK },
+	{ DVBFE_DVBT_CONST_QAM_16, QAM_16 },
+	{ DVBFE_DVBT_CONST_QAM_32, QAM_32 },
+	{ DVBFE_DVBT_CONST_QAM_64, QAM_64 },
+	{ DVBFE_DVBT_CONST_QAM_128, QAM_128 },
+	{ DVBFE_DVBT_CONST_QAM_256, QAM_256 },
+	{ DVBFE_DVBT_CONST_AUTO, QAM_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbc_mod_to_kapi[][2] =
+{
+	{ DVBFE_DVBC_MOD_QAM_16, QAM_16 },
+	{ DVBFE_DVBC_MOD_QAM_32, QAM_32 },
+	{ DVBFE_DVBC_MOD_QAM_64, QAM_64 },
+	{ DVBFE_DVBC_MOD_QAM_128, QAM_128 },
+	{ DVBFE_DVBC_MOD_QAM_256, QAM_256 },
+	{ DVBFE_DVBC_MOD_AUTO, QAM_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_atsc_mod_to_kapi[][2] =
+{
+	{ DVBFE_ATSC_MOD_QAM_64, QAM_64 },
+	{ DVBFE_ATSC_MOD_QAM_256, QAM_256 },
+	{ DVBFE_ATSC_MOD_VSB_8, VSB_8 },
+	{ DVBFE_ATSC_MOD_VSB_16, VSB_16 },
+	{ DVBFE_ATSC_MOD_AUTO, QAM_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbt_transmit_mode_to_kapi[][2] =
+{
+	{ DVBFE_DVBT_TRANSMISSION_MODE_2K, TRANSMISSION_MODE_2K },
+	{ DVBFE_DVBT_TRANSMISSION_MODE_8K, TRANSMISSION_MODE_8K },
+	{ DVBFE_DVBT_TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbt_bandwidth_to_kapi[][2] =
+{
+	{ DVBFE_DVBT_BANDWIDTH_8_MHZ, BANDWIDTH_8_MHZ },
+	{ DVBFE_DVBT_BANDWIDTH_7_MHZ, BANDWIDTH_7_MHZ },
+	{ DVBFE_DVBT_BANDWIDTH_6_MHZ, BANDWIDTH_6_MHZ },
+	{ DVBFE_DVBT_BANDWIDTH_AUTO, BANDWIDTH_AUTO },
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbt_guard_interval_to_kapi[][2] =
+{
+	{ DVBFE_DVBT_GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_32},
+	{ DVBFE_DVBT_GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_16},
+	{ DVBFE_DVBT_GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_8},
+	{ DVBFE_DVBT_GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_4},
+	{ DVBFE_DVBT_GUARD_INTERVAL_AUTO, GUARD_INTERVAL_AUTO},
+	{ -1, -1 }
+};
+
+static int dvbfe_dvbt_hierarchy_to_kapi[][2] =
+{
+	{ DVBFE_DVBT_HIERARCHY_NONE, HIERARCHY_NONE },
+	{ DVBFE_DVBT_HIERARCHY_1, HIERARCHY_1 },
+	{ DVBFE_DVBT_HIERARCHY_2, HIERARCHY_2 },
+	{ DVBFE_DVBT_HIERARCHY_4, HIERARCHY_4 },
+	{ DVBFE_DVBT_HIERARCHY_AUTO, HIERARCHY_AUTO },
+	{ -1, -1 }
+};
+
+
+static int lookupval(int val, int reverse, int table[][2])
+{
+	int i =0;
+
+	while(table[i][0] != -1) {
+		if (!reverse) {
+			if (val == table[i][0]) {
+				return table[i][1];
+			}
+		} else {
+			if (val == table[i][1]) {
+				return table[i][0];
+			}
+		}
+		i++;
+	}
+
+	return -1;
+}
+
+
+struct dvbfe_handle {
+	int fd;
+	enum dvbfe_type type;
+	char *name;
+};
+
+struct dvbfe_handle *dvbfe_open(int adapter, int frontend, int readonly)
+{
+	char filename[PATH_MAX+1];
+	struct dvbfe_handle *fehandle;
+	int fd;
+	struct dvb_frontend_info info;
+
+	//  flags
+	int flags = O_RDWR;
+	if (readonly) {
+		flags = O_RDONLY;
+	}
+
+	// open it (try normal /dev structure first)
+	sprintf(filename, "/dev/dvb/adapter%i/frontend%i", adapter, frontend);
+	if ((fd = open(filename, flags)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.frontend%i", adapter, frontend);
+		if ((fd = open(filename, flags)) < 0) {
+			return NULL;
+		}
+	}
+
+	// determine fe type
+	if (ioctl(fd, FE_GET_INFO, &info)) {
+		close(fd);
+		return NULL;
+	}
+
+	// setup structure
+	fehandle = (struct dvbfe_handle*) malloc(sizeof(struct dvbfe_handle));
+	memset(fehandle, 0, sizeof(struct dvbfe_handle));
+	fehandle->fd = fd;
+	switch(info.type) {
+	case FE_QPSK:
+		fehandle->type = DVBFE_TYPE_DVBS;
+		break;
+
+	case FE_QAM:
+		fehandle->type = DVBFE_TYPE_DVBC;
+		break;
+
+	case FE_OFDM:
+		fehandle->type = DVBFE_TYPE_DVBT;
+		break;
+
+	case FE_ATSC:
+		fehandle->type = DVBFE_TYPE_ATSC;
+		break;
+	}
+	fehandle->name = strndup(info.name, sizeof(info.name));
+
+	// done
+	return fehandle;
+}
+
+void dvbfe_close(struct dvbfe_handle *fehandle)
+{
+	close(fehandle->fd);
+	free(fehandle->name);
+	free(fehandle);
+}
+
+extern int dvbfe_get_info(struct dvbfe_handle *fehandle,
+			  enum dvbfe_info_mask querymask,
+			  struct dvbfe_info *result,
+			  enum dvbfe_info_querytype querytype,
+			  int timeout)
+{
+	int returnval = 0;
+	struct dvb_frontend_event kevent;
+	int ok = 0;
+
+	result->name = fehandle->name;
+	result->type = fehandle->type;
+
+	switch(querytype) {
+	case DVBFE_INFO_QUERYTYPE_IMMEDIATE:
+		if (querymask & DVBFE_INFO_LOCKSTATUS) {
+			if (!ioctl(fehandle->fd, FE_READ_STATUS, &kevent.status)) {
+				returnval |= DVBFE_INFO_LOCKSTATUS;
+			}
+		}
+		if (querymask & DVBFE_INFO_FEPARAMS) {
+			if (!ioctl(fehandle->fd, FE_GET_FRONTEND, &kevent.parameters)) {
+				returnval |= DVBFE_INFO_FEPARAMS;
+			}
+		}
+		break;
+
+	case DVBFE_INFO_QUERYTYPE_LOCKCHANGE:
+		{
+			struct pollfd pollfd;
+			pollfd.fd = fehandle->fd;
+			pollfd.events = POLLIN | POLLERR;
+
+			ok = 1;
+			if (poll(&pollfd, 1, timeout) < 0)
+				ok = 0;
+			if (pollfd.revents & POLLERR)
+				ok = 0;
+			if (!(pollfd.revents & POLLIN))
+				ok = 0;
+		}
+
+		if (ok &&
+		    ((querymask & DVBFE_INFO_LOCKSTATUS) ||
+		     (querymask & DVBFE_INFO_FEPARAMS))) {
+			if (!ioctl(fehandle->fd, FE_GET_EVENT, &kevent)) {
+				if (querymask & DVBFE_INFO_LOCKSTATUS)
+					returnval |= DVBFE_INFO_LOCKSTATUS;
+				if (querymask & DVBFE_INFO_FEPARAMS)
+					returnval |= DVBFE_INFO_FEPARAMS;
+			}
+		}
+		break;
+	}
+
+	if (returnval & DVBFE_INFO_LOCKSTATUS) {
+		result->signal = kevent.status & FE_HAS_SIGNAL ? 1 : 0;
+		result->carrier = kevent.status & FE_HAS_CARRIER ? 1 : 0;
+		result->viterbi = kevent.status & FE_HAS_VITERBI ? 1 : 0;
+		result->sync = kevent.status & FE_HAS_SYNC ? 1 : 0;
+		result->lock = kevent.status & FE_HAS_LOCK ? 1 : 0;
+	}
+
+	if (returnval & DVBFE_INFO_FEPARAMS) {
+		result->feparams.frequency = kevent.parameters.frequency;
+		result->feparams.inversion = lookupval(kevent.parameters.inversion, 1, dvbfe_spectral_inversion_to_kapi);
+		switch(fehandle->type) {
+		case FE_QPSK:
+			result->feparams.u.dvbs.symbol_rate = kevent.parameters.u.qpsk.symbol_rate;
+			result->feparams.u.dvbs.fec_inner =
+				lookupval(kevent.parameters.u.qpsk.fec_inner, 1, dvbfe_code_rate_to_kapi);
+			break;
+
+		case FE_QAM:
+			result->feparams.u.dvbc.symbol_rate = kevent.parameters.u.qam.symbol_rate;
+			result->feparams.u.dvbc.fec_inner =
+				lookupval(kevent.parameters.u.qam.fec_inner, 1, dvbfe_code_rate_to_kapi);
+			result->feparams.u.dvbc.modulation =
+				lookupval(kevent.parameters.u.qam.modulation, 1, dvbfe_dvbc_mod_to_kapi);
+			break;
+
+		case FE_OFDM:
+			result->feparams.u.dvbt.bandwidth =
+				lookupval(kevent.parameters.u.ofdm.bandwidth, 1, dvbfe_dvbt_bandwidth_to_kapi);
+			result->feparams.u.dvbt.code_rate_HP =
+				lookupval(kevent.parameters.u.ofdm.code_rate_HP, 1, dvbfe_code_rate_to_kapi);
+			result->feparams.u.dvbt.code_rate_LP =
+				lookupval(kevent.parameters.u.ofdm.code_rate_LP, 1, dvbfe_code_rate_to_kapi);
+			result->feparams.u.dvbt.constellation =
+				lookupval(kevent.parameters.u.ofdm.constellation, 1, dvbfe_dvbt_const_to_kapi);
+			result->feparams.u.dvbt.transmission_mode =
+				lookupval(kevent.parameters.u.ofdm.transmission_mode, 1, dvbfe_dvbt_transmit_mode_to_kapi);
+			result->feparams.u.dvbt.guard_interval =
+				lookupval(kevent.parameters.u.ofdm.guard_interval, 1, dvbfe_dvbt_guard_interval_to_kapi);
+			result->feparams.u.dvbt.hierarchy_information =
+				lookupval(kevent.parameters.u.ofdm.hierarchy_information, 1, dvbfe_dvbt_hierarchy_to_kapi);
+			break;
+
+		case FE_ATSC:
+			result->feparams.u.atsc.modulation =
+				lookupval(kevent.parameters.u.vsb.modulation, 1, dvbfe_atsc_mod_to_kapi);
+			break;
+		}
+	}
+
+	if (querymask & DVBFE_INFO_BER) {
+		if (!ioctl(fehandle->fd, FE_READ_BER, &result->ber))
+			returnval |= DVBFE_INFO_BER;
+	}
+	if (querymask & DVBFE_INFO_SIGNAL_STRENGTH) {
+		if (!ioctl(fehandle->fd, FE_READ_SIGNAL_STRENGTH, &result->signal_strength))
+			returnval |= DVBFE_INFO_SIGNAL_STRENGTH;
+	}
+	if (querymask & DVBFE_INFO_SNR) {
+		if (!ioctl(fehandle->fd, FE_READ_SNR, &result->snr))
+			returnval |= DVBFE_INFO_SNR;
+	}
+	if (querymask & DVBFE_INFO_UNCORRECTED_BLOCKS) {
+		if (!ioctl(fehandle->fd, FE_READ_UNCORRECTED_BLOCKS, &result->ucblocks))
+			returnval |= DVBFE_INFO_UNCORRECTED_BLOCKS;
+	}
+
+	// done
+	return returnval;
+}
+
+int dvbfe_set(struct dvbfe_handle *fehandle,
+	      struct dvbfe_parameters *params,
+	      int timeout)
+{
+	struct dvb_frontend_parameters kparams;
+	int res;
+	struct timeval endtime;
+	fe_status_t status;
+
+	kparams.frequency = params->frequency;
+	kparams.inversion = lookupval(params->inversion, 0, dvbfe_spectral_inversion_to_kapi);
+	switch(fehandle->type) {
+	case FE_QPSK:
+		kparams.u.qpsk.symbol_rate = params->u.dvbs.symbol_rate;
+		kparams.u.qpsk.fec_inner = lookupval(params->u.dvbs.fec_inner, 0, dvbfe_code_rate_to_kapi);
+		break;
+
+	case FE_QAM:
+		kparams.u.qam.symbol_rate = params->u.dvbc.symbol_rate;
+		kparams.u.qam.fec_inner = lookupval(params->u.dvbc.fec_inner, 0, dvbfe_code_rate_to_kapi);
+		kparams.u.qam.modulation = lookupval(params->u.dvbc.modulation, 0, dvbfe_dvbc_mod_to_kapi);
+		break;
+
+	case FE_OFDM:
+		kparams.u.ofdm.bandwidth = lookupval(params->u.dvbt.bandwidth, 0, dvbfe_dvbt_bandwidth_to_kapi);
+		kparams.u.ofdm.code_rate_HP = lookupval(params->u.dvbt.code_rate_HP, 0, dvbfe_code_rate_to_kapi);
+		kparams.u.ofdm.code_rate_LP = lookupval(params->u.dvbt.code_rate_LP, 0, dvbfe_code_rate_to_kapi);
+		kparams.u.ofdm.constellation = lookupval(params->u.dvbt.constellation, 0, dvbfe_dvbt_const_to_kapi);
+		kparams.u.ofdm.transmission_mode =
+			lookupval(params->u.dvbt.transmission_mode, 0, dvbfe_dvbt_transmit_mode_to_kapi);
+		kparams.u.ofdm.guard_interval =
+			lookupval(params->u.dvbt.guard_interval, 0, dvbfe_dvbt_guard_interval_to_kapi);
+		kparams.u.ofdm.hierarchy_information =
+			lookupval(params->u.dvbt.hierarchy_information, 0, dvbfe_dvbt_hierarchy_to_kapi);
+                break;
+
+	case FE_ATSC:
+		kparams.u.vsb.modulation = lookupval(params->u.atsc.modulation, 0, dvbfe_atsc_mod_to_kapi);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	// set it and check for error
+	res = ioctl(fehandle->fd, FE_SET_FRONTEND, &kparams);
+	if (res)
+		return res;
+
+	// 0 => return immediately
+	if (timeout == 0) {
+		return 0;
+	}
+
+	/* calculate timeout */
+	if (timeout > 0) {
+		gettimeofday(&endtime, NULL);
+		timeout *= 1000;
+		endtime.tv_sec += timeout / 1000000;
+		endtime.tv_usec += timeout % 1000000;
+	}
+
+	/* wait for a lock */
+	while(1) {
+		/* has it locked? */
+		if (!ioctl(fehandle->fd, FE_READ_STATUS, &status)) {
+			if (status & FE_HAS_LOCK) {
+				break;
+			}
+		}
+
+		/* check for timeout */
+		if (timeout > 0) {
+			struct timeval curtime;
+			gettimeofday(&curtime, NULL);
+			if ((curtime.tv_sec > endtime.tv_sec) ||
+			    ((curtime.tv_sec == endtime.tv_sec) && (curtime.tv_usec >= endtime.tv_usec))) {
+				break;
+			}
+		}
+
+		/* delay for a bit */
+		usleep(100000);
+	}
+
+	/* exit */
+	if (status & FE_HAS_LOCK)
+		return 0;
+	return -ETIMEDOUT;
+}
+
+int dvbfe_get_pollfd(struct dvbfe_handle *handle)
+{
+	return handle->fd;
+}
+
+int dvbfe_set_22k_tone(struct dvbfe_handle *fehandle, enum dvbfe_sec_tone_mode tone)
+{
+	int ret = 0;
+
+	switch (tone) {
+	case DVBFE_SEC_TONE_OFF:
+		ret = ioctl(fehandle->fd, FE_SET_TONE, SEC_TONE_OFF);
+		break;
+	case DVBFE_SEC_TONE_ON:
+		ret = ioctl(fehandle->fd, FE_SET_TONE, SEC_TONE_ON);
+		break;
+	default:
+		print(verbose, ERROR, 1, "Invalid command !");
+		break;
+	}
+	if (ret == -1)
+		print(verbose, ERROR, 1, "IOCTL failed !");
+
+	return ret;
+}
+
+int dvbfe_set_tone_data_burst(struct dvbfe_handle *fehandle, enum dvbfe_sec_mini_cmd minicmd)
+{
+	int ret = 0;
+
+	switch (minicmd) {
+	case DVBFE_SEC_MINI_A:
+		ret = ioctl(fehandle->fd, FE_DISEQC_SEND_BURST, SEC_MINI_A);
+		break;
+	case DVBFE_SEC_MINI_B:
+		ret = ioctl(fehandle->fd, FE_DISEQC_SEND_BURST, SEC_MINI_B);
+		break;
+	default:
+		print(verbose, ERROR, 1, "Invalid command");
+		break;
+	}
+	if (ret == -1)
+		print(verbose, ERROR, 1, "IOCTL failed");
+
+	return ret;
+}
+
+int dvbfe_set_voltage(struct dvbfe_handle *fehandle, enum dvbfe_sec_voltage voltage)
+{
+	int ret = 0;
+
+	switch (voltage) {
+	case DVBFE_SEC_VOLTAGE_OFF:
+		ret = ioctl(fehandle->fd, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF);
+		break;
+	case DVBFE_SEC_VOLTAGE_13:
+		ret = ioctl(fehandle->fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13);
+		break;
+	case DVBFE_SEC_VOLTAGE_18:
+		ret = ioctl(fehandle->fd, FE_SET_VOLTAGE, SEC_VOLTAGE_18);
+		break;
+	default:
+		print(verbose, ERROR, 1, "Invalid command");
+		break;
+	}
+	if (ret == -1)
+		print(verbose, ERROR, 1, "IOCTL failed");
+
+	return ret;
+}
+
+int dvbfe_set_high_lnb_voltage(struct dvbfe_handle *fehandle, int on)
+{
+	switch (on) {
+	case 0:
+		ioctl(fehandle->fd, FE_ENABLE_HIGH_LNB_VOLTAGE, 0);
+		break;
+	default:
+		ioctl(fehandle->fd, FE_ENABLE_HIGH_LNB_VOLTAGE, 1);
+		break;
+	}
+	return 0;
+}
+
+int dvbfe_do_dishnetworks_legacy_command(struct dvbfe_handle *fehandle, unsigned int cmd)
+{
+	int ret = 0;
+
+	ret = ioctl(fehandle->fd, FE_DISHNETWORK_SEND_LEGACY_CMD, cmd);
+	if (ret == -1)
+		print(verbose, ERROR, 1, "IOCTL failed");
+
+	return ret;
+}
+
+int dvbfe_do_diseqc_command(struct dvbfe_handle *fehandle, uint8_t *data, uint8_t len)
+{
+	int ret = 0;
+	struct dvb_diseqc_master_cmd diseqc_message;
+
+	if (len > 6)
+		return -EINVAL;
+
+	diseqc_message.msg_len = len;
+	memcpy(diseqc_message.msg, data, len);
+
+	ret = ioctl(fehandle->fd, FE_DISEQC_SEND_MASTER_CMD, &diseqc_message);
+	if (ret == -1)
+		print(verbose, ERROR, 1, "IOCTL failed");
+
+	return ret;
+}
+
+int dvbfe_diseqc_read(struct dvbfe_handle *fehandle, int timeout, unsigned char *buf, unsigned int len)
+{
+	struct dvb_diseqc_slave_reply reply;
+	int result;
+
+	if (len > 4)
+		len = 4;
+
+	reply.timeout = timeout;
+	reply.msg_len = len;
+
+	if ((result = ioctl(fehandle->fd, FE_DISEQC_RECV_SLAVE_REPLY, reply)) != 0)
+		return result;
+
+	if (reply.msg_len < len)
+		len = reply.msg_len;
+	memcpy(buf, reply.msg, len);
+
+	return len;
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbfe.d

@@ -0,0 +1 @@
+dvbfe.o: dvbfe.c ../../lib/libdvbmisc/dvbmisc.h dvbfe.h

+ 333 - 0
dvb-tools/lib/libdvbapi/dvbfe.h

@@ -0,0 +1,333 @@
+/*
+ * libdvbfe - a DVB frontend library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ * Copyright (C) 2005 Manu Abraham <abraham.manu@gmail.com>
+ * Copyright (C) 2005 Kenneth Aafloy (kenneth@linuxtv.org)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBFE_H
+#define LIBDVBFE_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * The types of frontend we support.
+ */
+enum dvbfe_type {
+	DVBFE_TYPE_DVBS,
+	DVBFE_TYPE_DVBC,
+	DVBFE_TYPE_DVBT,
+	DVBFE_TYPE_ATSC,
+};
+
+enum dvbfe_spectral_inversion {
+	DVBFE_INVERSION_OFF,
+	DVBFE_INVERSION_ON,
+	DVBFE_INVERSION_AUTO
+};
+
+enum dvbfe_code_rate {
+	DVBFE_FEC_NONE,
+	DVBFE_FEC_1_2,
+	DVBFE_FEC_2_3,
+	DVBFE_FEC_3_4,
+	DVBFE_FEC_4_5,
+	DVBFE_FEC_5_6,
+	DVBFE_FEC_6_7,
+	DVBFE_FEC_7_8,
+	DVBFE_FEC_8_9,
+	DVBFE_FEC_AUTO
+};
+
+enum dvbfe_dvbt_const {
+	DVBFE_DVBT_CONST_QPSK,
+	DVBFE_DVBT_CONST_QAM_16,
+	DVBFE_DVBT_CONST_QAM_32,
+	DVBFE_DVBT_CONST_QAM_64,
+	DVBFE_DVBT_CONST_QAM_128,
+	DVBFE_DVBT_CONST_QAM_256,
+	DVBFE_DVBT_CONST_AUTO
+};
+
+enum dvbfe_dvbc_mod {
+	DVBFE_DVBC_MOD_QAM_16,
+	DVBFE_DVBC_MOD_QAM_32,
+	DVBFE_DVBC_MOD_QAM_64,
+	DVBFE_DVBC_MOD_QAM_128,
+	DVBFE_DVBC_MOD_QAM_256,
+	DVBFE_DVBC_MOD_AUTO,
+};
+
+enum dvbfe_atsc_mod {
+	DVBFE_ATSC_MOD_QAM_64,
+	DVBFE_ATSC_MOD_QAM_256,
+	DVBFE_ATSC_MOD_VSB_8,
+	DVBFE_ATSC_MOD_VSB_16,
+	DVBFE_ATSC_MOD_AUTO
+};
+
+enum dvbfe_dvbt_transmit_mode {
+	DVBFE_DVBT_TRANSMISSION_MODE_2K,
+	DVBFE_DVBT_TRANSMISSION_MODE_8K,
+	DVBFE_DVBT_TRANSMISSION_MODE_AUTO
+};
+
+enum dvbfe_dvbt_bandwidth {
+	DVBFE_DVBT_BANDWIDTH_8_MHZ,
+	DVBFE_DVBT_BANDWIDTH_7_MHZ,
+	DVBFE_DVBT_BANDWIDTH_6_MHZ,
+	DVBFE_DVBT_BANDWIDTH_AUTO
+};
+
+enum dvbfe_dvbt_guard_interval {
+	DVBFE_DVBT_GUARD_INTERVAL_1_32,
+	DVBFE_DVBT_GUARD_INTERVAL_1_16,
+	DVBFE_DVBT_GUARD_INTERVAL_1_8,
+	DVBFE_DVBT_GUARD_INTERVAL_1_4,
+	DVBFE_DVBT_GUARD_INTERVAL_AUTO
+};
+
+enum dvbfe_dvbt_hierarchy {
+	DVBFE_DVBT_HIERARCHY_NONE,
+	DVBFE_DVBT_HIERARCHY_1,
+	DVBFE_DVBT_HIERARCHY_2,
+	DVBFE_DVBT_HIERARCHY_4,
+	DVBFE_DVBT_HIERARCHY_AUTO
+};
+
+/**
+ * Structure used to store and communicate frontend parameters.
+ */
+struct dvbfe_parameters {
+	uint32_t frequency;
+	enum dvbfe_spectral_inversion inversion;
+	union {
+		struct {
+			uint32_t			symbol_rate;
+			enum dvbfe_code_rate		fec_inner;
+		} dvbs;
+
+		struct {
+			uint32_t			symbol_rate;
+			enum dvbfe_code_rate		fec_inner;
+			enum dvbfe_dvbc_mod		modulation;
+		} dvbc;
+
+		struct {
+			enum dvbfe_dvbt_bandwidth	bandwidth;
+			enum dvbfe_code_rate		code_rate_HP;
+			enum dvbfe_code_rate		code_rate_LP;
+			enum dvbfe_dvbt_const		constellation;
+			enum dvbfe_dvbt_transmit_mode	transmission_mode;
+			enum dvbfe_dvbt_guard_interval	guard_interval;
+			enum dvbfe_dvbt_hierarchy	hierarchy_information;
+		} dvbt;
+
+		struct {
+			enum dvbfe_atsc_mod		modulation;
+		} atsc;
+	} u;
+};
+
+enum dvbfe_sec_voltage {
+	DVBFE_SEC_VOLTAGE_13,
+	DVBFE_SEC_VOLTAGE_18,
+	DVBFE_SEC_VOLTAGE_OFF
+};
+
+enum dvbfe_sec_tone_mode {
+	DVBFE_SEC_TONE_ON,
+	DVBFE_SEC_TONE_OFF
+};
+
+enum dvbfe_sec_mini_cmd {
+	DVBFE_SEC_MINI_A,
+	DVBFE_SEC_MINI_B
+};
+
+/**
+ * Mask of values used in the dvbfe_get_info() call.
+ */
+enum dvbfe_info_mask {
+	DVBFE_INFO_LOCKSTATUS			= 0x01,
+	DVBFE_INFO_FEPARAMS			= 0x02,
+	DVBFE_INFO_BER				= 0x04,
+	DVBFE_INFO_SIGNAL_STRENGTH		= 0x08,
+	DVBFE_INFO_SNR				= 0x10,
+	DVBFE_INFO_UNCORRECTED_BLOCKS		= 0x20,
+};
+
+/**
+ * Structure containing values used by the dvbfe_get_info() call.
+ */
+struct dvbfe_info {
+	enum dvbfe_type type;			/* always retrieved */
+	const char *name;			/* always retrieved */
+	unsigned int signal     : 1;		/* } DVBFE_INFO_LOCKSTATUS */
+	unsigned int carrier    : 1;		/* } */
+	unsigned int viterbi    : 1;		/* } */
+	unsigned int sync       : 1;		/* } */
+	unsigned int lock       : 1;		/* } */
+	struct dvbfe_parameters feparams;	/* DVBFE_INFO_FEPARAMS */
+	uint32_t ber;				/* DVBFE_INFO_BER */
+	uint16_t signal_strength;		/* DVBFE_INFO_SIGNAL_STRENGTH */
+	uint16_t snr;				/* DVBFE_INFO_SNR */
+	uint32_t ucblocks;			/* DVBFE_INFO_UNCORRECTED_BLOCKS */
+};
+
+/**
+ * Possible types of query used in dvbfe_get_info.
+ *
+ * DVBFE_INFO_QUERYTYPE_IMMEDIATE  - interrogate frontend for most up to date values.
+ * DVBFE_INFO_QUERYTYPE_LOCKCHANGE - return details from queued lock status
+ * 				     change events, or wait for one to occur
+ * 				     if none are queued.
+ */
+enum dvbfe_info_querytype {
+	DVBFE_INFO_QUERYTYPE_IMMEDIATE,
+	DVBFE_INFO_QUERYTYPE_LOCKCHANGE,
+};
+
+
+/**
+ * Frontend handle datatype.
+ */
+struct dvbfe_handle;
+
+/**
+ * Open a DVB frontend.
+ *
+ * @param adapter DVB adapter ID.
+ * @param frontend Frontend ID of that adapter to open.
+ * @param readonly If 1, frontend will be opened in readonly mode only.
+ * @return A handle on success, or NULL on failure.
+ */
+extern struct dvbfe_handle *dvbfe_open(int adapter, int frontend, int readonly);
+
+/**
+ * Close a DVB frontend.
+ *
+ * @param fehandle Handle opened with dvbfe_open().
+ */
+extern void dvbfe_close(struct dvbfe_handle *handle);
+
+/**
+ * Set the frontend tuning parameters.
+ *
+ * Note: this function provides only the basic tuning operation; you might want to
+ * investigate dvbfe_set_sec() in sec.h for a unified device tuning operation.
+ *
+ * @param fehandle Handle opened with dvbfe_open().
+ * @param params Params to set.
+ * @param timeout <0 => wait forever for lock. 0=>return immediately, >0=>
+ * number of milliseconds to wait for a lock.
+ * @return 0 on locked (or if timeout==0 and everything else worked), or
+ * nonzero on failure (including no lock).
+ */
+extern int dvbfe_set(struct dvbfe_handle *fehandle,
+		     struct dvbfe_parameters *params,
+		     int timeout);
+
+/**
+ * Retrieve information about the frontend.
+ *
+ * @param fehandle Handle opened with dvbfe_open().
+ * @param querymask ORed bitmask of desired DVBFE_INFO_* values.
+ * @param result Where to put the retrieved results.
+ * @param querytype Type of query requested.
+ * @param timeout Timeout in ms to use if querytype==lockchange (0=>no timeout, <0=> wait forever).
+ * @return ORed bitmask of DVBFE_INFO_* indicating which values were read successfully.
+ */
+extern int dvbfe_get_info(struct dvbfe_handle *fehandle,
+			  enum dvbfe_info_mask querymask,
+			  struct dvbfe_info *result,
+			  enum dvbfe_info_querytype querytype,
+			  int timeout);
+
+/**
+ * Get a file descriptor for polling for lock status changes.
+ *
+ * @param fehandle Handle opened with dvbfe_open().
+ * @return FD for polling.
+ */
+extern int dvbfe_get_pollfd(struct dvbfe_handle *handle);
+
+/**
+ *	Tone/Data Burst control
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param tone, SEC_TONE_ON/SEC_TONE_OFF
+ */
+extern int dvbfe_set_22k_tone(struct dvbfe_handle *handle, enum dvbfe_sec_tone_mode tone);
+
+/**
+ *	22khz Tone control
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param adapter, minicmd, SEC_MINI_A/SEC_MINI_B
+ */
+extern int dvbfe_set_tone_data_burst(struct dvbfe_handle *handle, enum dvbfe_sec_mini_cmd minicmd);
+
+/**
+ *	Voltage control
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param polarization, SEC_VOLTAGE_13/SEC_VOLTAGE_18/SEC_VOLTAGE_OFF
+ */
+extern int dvbfe_set_voltage(struct dvbfe_handle *handle, enum dvbfe_sec_voltage voltage);
+
+/**
+ *	High LNB voltage control (increases voltage by 1v to compensate for long cables)
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param on 1 to enable, 0 to disable.
+ */
+extern int dvbfe_set_high_lnb_voltage(struct dvbfe_handle *fehandle, int on);
+
+/**
+ *	Send a legacy Dish Networks command
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param cmd, the command to send
+ */
+extern int dvbfe_do_dishnetworks_legacy_command(struct dvbfe_handle *handle, unsigned int cmd);
+
+/**
+ *	Send a DiSEqC Command
+ * 	@param fehandle Handle opened with dvbfe_open().
+ *	@param data, a pointer to am array containing the data to be sent.
+ *      @param len Length of data in  bytes, max 6 bytes.
+ */
+extern int dvbfe_do_diseqc_command(struct dvbfe_handle *handle, uint8_t *data, uint8_t len);
+
+/**
+ * Read a DISEQC response from the frontend.
+ *
+ * @param fehandle Handle opened with dvbfe_open().
+ * @param timeout Timeout for DISEQC response.
+ * @param buf Buffer to store response in.
+ * @param len Number of bytes in buffer.
+ * @return >= 0 on success (number of received bytes), <0 on failure.
+ */
+extern int dvbfe_diseqc_read(struct dvbfe_handle *fehandle, int timeout, unsigned char *buf, unsigned int len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBFE_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbfe.o


+ 104 - 0
dvb-tools/lib/libdvbapi/dvbnet.c

@@ -0,0 +1,104 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/dvb/net.h>
+#include <errno.h>
+#include "dvbnet.h"
+
+int dvbnet_open(int adapter, int netdeviceid)
+{
+	char filename[PATH_MAX+1];
+	int fd;
+
+	sprintf(filename, "/dev/dvb/adapter%i/net%i", adapter, netdeviceid);
+	if ((fd = open(filename, O_RDWR)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.net%i", adapter, netdeviceid);
+		fd = open(filename, O_RDWR);
+	}
+
+	return fd;
+}
+
+int dvbnet_add_interface(int fd, uint16_t pid, enum dvbnet_encap encapsulation)
+{
+	struct dvb_net_if params;
+	int status;
+
+	memset(&params, 0, sizeof(params));
+	params.pid = pid;
+
+	switch(encapsulation) {
+	case DVBNET_ENCAP_MPE:
+		params.feedtype = DVB_NET_FEEDTYPE_MPE;
+		break;
+
+	case DVBNET_ENCAP_ULE:
+		params.feedtype = DVB_NET_FEEDTYPE_ULE;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	status = ioctl(fd, NET_ADD_IF, &params);
+	if (status < 0)
+		return status;
+	return params.if_num;
+}
+
+int dvbnet_get_interface(int fd, int ifnum, uint16_t *pid, enum dvbnet_encap *encapsulation)
+{
+	struct dvb_net_if info;
+	int res;
+
+	memset(&info, 0, sizeof(struct dvb_net_if));
+	info.if_num = ifnum;
+
+	if ((res = ioctl(fd, NET_GET_IF, &info)) < 0)
+		return res;
+
+	*pid = info.pid;
+	switch(info.feedtype) {
+	case DVB_NET_FEEDTYPE_MPE:
+		*encapsulation = DVBNET_ENCAP_MPE;
+		break;
+
+	case DVB_NET_FEEDTYPE_ULE:
+		*encapsulation = DVBNET_ENCAP_ULE;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+	return 0;
+}
+
+int dvbnet_remove_interface(int fd, int ifnum)
+{
+	return ioctl(fd, NET_REMOVE_IF, ifnum);
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbnet.d

@@ -0,0 +1 @@
+dvbnet.o: dvbnet.c dvbnet.h

+ 87 - 0
dvb-tools/lib/libdvbapi/dvbnet.h

@@ -0,0 +1,87 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBNET_H
+#define LIBDVBNET_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * Possible encapsulations of data.
+ */
+enum dvbnet_encap {
+	DVBNET_ENCAP_MPE,
+	DVBNET_ENCAP_ULE,
+};
+
+/**
+ * The maximum allowed number of dvb network devices per adapter netdevice.
+ */
+#define DVBNET_MAX_INTERFACES 10
+
+/**
+ * Open a DVB net interface.
+ *
+ * @param adapter DVB adapter ID.
+ * @param netdeviceid Network control interface of that adapter to open.
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbnet_open(int adapter, int netdeviceid);
+
+/**
+ * Create a new DVBNET interface.
+ *
+ * @param fd FD opened with libdvbnet_open().
+ * @param pid PID of the stream containing the network data.
+ * @param encapsulation Encapsulation type of the stream (one of DVBNET_ENCAP_*).
+ * @return Index of new interface on success, < 0 on failure.
+ */
+extern int dvbnet_add_interface(int fd, uint16_t pid, enum dvbnet_encap encapsulation);
+
+/**
+ * Get details of a DVBNET interface.
+ *
+ * @param fd FD opened with libdvbnet_open().
+ * @param ifnum Index of interface to retrieve.
+ * @param pid The PID of the interface.
+ * @param encapsulation The encapsulation of the interface (DVBNET_ENCAP_*).
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbnet_get_interface(int fd, int ifnum, uint16_t *pid, enum dvbnet_encap *encapsulation);
+
+/**
+ * Remove a DVBNET interface.
+ *
+ * @param fd FD opened with libdvbnet_open().
+ * @param ifnum Index of interface to remove.
+ * @return 0 on success, nonzero on failure.
+ */
+extern int dvbnet_remove_interface(int fd, int ifnum);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBNET_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbnet.o


+ 46 - 0
dvb-tools/lib/libdvbapi/dvbvideo.c

@@ -0,0 +1,46 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/param.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/types.h>
+#include <linux/dvb/video.h>
+#include <errno.h>
+#include "dvbvideo.h"
+
+int dvbvideo_open(int adapter, int videodeviceid)
+{
+	char filename[PATH_MAX+1];
+	int fd;
+
+	sprintf(filename, "/dev/dvb/adapter%i/video%i", adapter, videodeviceid);
+	if ((fd = open(filename, O_RDWR)) < 0) {
+		// if that failed, try a flat /dev structure
+		sprintf(filename, "/dev/dvb%i.video%i", adapter, videodeviceid);
+		fd = open(filename, O_RDWR);
+	}
+
+	return fd;
+}

+ 1 - 0
dvb-tools/lib/libdvbapi/dvbvideo.d

@@ -0,0 +1 @@
+dvbvideo.o: dvbvideo.c dvbvideo.h

+ 46 - 0
dvb-tools/lib/libdvbapi/dvbvideo.h

@@ -0,0 +1,46 @@
+/*
+ * libdvbnet - a DVB network support library
+ *
+ * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef LIBDVBVIDEO_H
+#define LIBDVBVIDEO_H 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdint.h>
+
+/**
+ * Open a DVB video device.
+ *
+ * @param adapter DVB adapter ID.
+ * @param videodeviceid Id of video device of that adapter to open.
+ * @return A unix file descriptor on success, or -1 on failure.
+ */
+extern int dvbvideo_open(int adapter, int videodeviceid);
+
+// FIXME: this is a stub library
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // LIBDVBVIDEO_H

TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/dvbvideo.o


TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/libdvbapi.a


TEMPAT SAMPAH
dvb-tools/lib/libdvbapi/libdvbapi.so


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini