Merge branch 'x86/urgent' into x86/asm, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Коммит
f594d0b9b3
|
@ -0,0 +1,3 @@
|
|||
[spatch]
|
||||
options = --timeout 200
|
||||
options = --use-gitgrep
|
|
@ -37,6 +37,7 @@ modules.builtin
|
|||
Module.symvers
|
||||
*.dwo
|
||||
*.su
|
||||
*.c.[012]*.*
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
|
@ -66,6 +67,7 @@ Module.symvers
|
|||
#
|
||||
!.gitignore
|
||||
!.mailmap
|
||||
!.cocciconfig
|
||||
|
||||
#
|
||||
# Generated include files
|
||||
|
|
15
.mailmap
15
.mailmap
|
@ -92,9 +92,17 @@ Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
|||
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||
Linas Vepstas <linas@austin.ibm.com>
|
||||
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de>
|
||||
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
|
||||
Mark Brown <broonie@sirena.org.uk>
|
||||
Matthieu CASTET <castet.matthieu@free.fr>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> <mchehab@infradead.org> <mchehab@redhat.com> <m.chehab@samsung.com> <mchehab@osg.samsung.com> <mchehab@s-opensource.com>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@brturbo.com.br>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@infradead.org>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com>
|
||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com>
|
||||
Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.com>
|
||||
Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com>
|
||||
Mayuresh Janorkar <mayur@ti.com>
|
||||
|
@ -130,7 +138,10 @@ Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
|||
Sascha Hauer <s.hauer@pengutronix.de>
|
||||
S.Çağlar Onur <caglar@pardus.org.tr>
|
||||
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> <shuah.khan@hp.com> <shuahkh@osg.samsung.com> <shuah.kh@samsung.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||
Simon Kelley <simon@thekelleys.org.uk>
|
||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||
Stephen Hemminger <shemminger@osdl.org>
|
||||
|
|
|
@ -77,3 +77,12 @@ Description:
|
|||
Enable/disable the PWM signal.
|
||||
0 is disabled
|
||||
1 is enabled
|
||||
|
||||
What: /sys/class/pwm/pwmchipN/pwmX/capture
|
||||
Date: June 2016
|
||||
KernelVersion: 4.8
|
||||
Contact: Lee Jones <lee.jones@linaro.org>
|
||||
Description:
|
||||
Capture information about a PWM signal. The output format is a
|
||||
pair unsigned integers (period and duty cycle), separated by a
|
||||
single space.
|
||||
|
|
|
@ -369,35 +369,32 @@ See also dma_map_single().
|
|||
dma_addr_t
|
||||
dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size,
|
||||
enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs)
|
||||
unsigned long attrs)
|
||||
|
||||
void
|
||||
dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr,
|
||||
size_t size, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs)
|
||||
unsigned long attrs)
|
||||
|
||||
int
|
||||
dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
||||
int nents, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs)
|
||||
unsigned long attrs)
|
||||
|
||||
void
|
||||
dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl,
|
||||
int nents, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs)
|
||||
unsigned long attrs)
|
||||
|
||||
The four functions above are just like the counterpart functions
|
||||
without the _attrs suffixes, except that they pass an optional
|
||||
struct dma_attrs*.
|
||||
|
||||
struct dma_attrs encapsulates a set of "DMA attributes". For the
|
||||
definition of struct dma_attrs see linux/dma-attrs.h.
|
||||
dma_attrs.
|
||||
|
||||
The interpretation of DMA attributes is architecture-specific, and
|
||||
each attribute should be documented in Documentation/DMA-attributes.txt.
|
||||
|
||||
If struct dma_attrs* is NULL, the semantics of each of these
|
||||
functions is identical to those of the corresponding function
|
||||
If dma_attrs are 0, the semantics of each of these functions
|
||||
is identical to those of the corresponding function
|
||||
without the _attrs suffix. As a result dma_map_single_attrs()
|
||||
can generally replace dma_map_single(), etc.
|
||||
|
||||
|
@ -405,15 +402,15 @@ As an example of the use of the *_attrs functions, here's how
|
|||
you could pass an attribute DMA_ATTR_FOO when mapping memory
|
||||
for DMA:
|
||||
|
||||
#include <linux/dma-attrs.h>
|
||||
/* DMA_ATTR_FOO should be defined in linux/dma-attrs.h and
|
||||
#include <linux/dma-mapping.h>
|
||||
/* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and
|
||||
* documented in Documentation/DMA-attributes.txt */
|
||||
...
|
||||
|
||||
DEFINE_DMA_ATTRS(attrs);
|
||||
dma_set_attr(DMA_ATTR_FOO, &attrs);
|
||||
unsigned long attr;
|
||||
attr |= DMA_ATTR_FOO;
|
||||
....
|
||||
n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr);
|
||||
n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr);
|
||||
....
|
||||
|
||||
Architectures that care about DMA_ATTR_FOO would check for its
|
||||
|
@ -422,12 +419,10 @@ routines, e.g.:
|
|||
|
||||
void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr,
|
||||
size_t size, enum dma_data_direction dir,
|
||||
struct dma_attrs *attrs)
|
||||
unsigned long attrs)
|
||||
{
|
||||
....
|
||||
int foo = dma_get_attr(DMA_ATTR_FOO, attrs);
|
||||
....
|
||||
if (foo)
|
||||
if (attrs & DMA_ATTR_FOO)
|
||||
/* twizzle the frobnozzle */
|
||||
....
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
==============
|
||||
|
||||
This document describes the semantics of the DMA attributes that are
|
||||
defined in linux/dma-attrs.h.
|
||||
defined in linux/dma-mapping.h.
|
||||
|
||||
DMA_ATTR_WRITE_BARRIER
|
||||
----------------------
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
# To add a new book the only step required is to add the book to the
|
||||
# list of DOCBOOKS.
|
||||
|
||||
ifeq ($(IGNORE_DOCBOOKS),)
|
||||
|
||||
DOCBOOKS := z8530book.xml device-drivers.xml \
|
||||
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
||||
writing_usb_driver.xml networking.xml \
|
||||
|
@ -16,10 +14,16 @@ DOCBOOKS := z8530book.xml device-drivers.xml \
|
|||
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
|
||||
80211.xml debugobjects.xml sh.xml regulator.xml \
|
||||
alsa-driver-api.xml writing-an-alsa-driver.xml \
|
||||
tracepoint.xml gpu.xml media_api.xml w1.xml \
|
||||
tracepoint.xml w1.xml \
|
||||
writing_musb_glue_layer.xml crypto-API.xml iio.xml
|
||||
|
||||
include Documentation/DocBook/media/Makefile
|
||||
ifeq ($(DOCBOOKS),)
|
||||
|
||||
# Skip DocBook build if the user explicitly requested no DOCBOOKS.
|
||||
.DEFAULT:
|
||||
@echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)."
|
||||
|
||||
else
|
||||
|
||||
###
|
||||
# The build process is as follows (targets):
|
||||
|
@ -49,7 +53,6 @@ pdfdocs: $(PDF)
|
|||
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
||||
htmldocs: $(HTML)
|
||||
$(call cmd,build_main_index)
|
||||
$(call install_media_images)
|
||||
|
||||
MAN := $(patsubst %.xml, %.9, $(BOOKS))
|
||||
mandocs: $(MAN)
|
||||
|
@ -217,19 +220,7 @@ silent_gen_xml = :
|
|||
-e "s/>/\\>/g"; \
|
||||
echo "</programlisting>") > $@
|
||||
|
||||
else
|
||||
|
||||
# Needed, due to cleanmediadocs
|
||||
include Documentation/DocBook/media/Makefile
|
||||
|
||||
htmldocs:
|
||||
pdfdocs:
|
||||
psdocs:
|
||||
xmldocs:
|
||||
installmandocs:
|
||||
|
||||
endif # IGNORE_DOCBOOKS
|
||||
|
||||
endif # DOCBOOKS=""
|
||||
|
||||
###
|
||||
# Help targets as used by the top-level makefile
|
||||
|
@ -246,7 +237,7 @@ dochelp:
|
|||
@echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml'
|
||||
@echo ' valid values for DOCBOOKS are: $(DOCBOOKS)'
|
||||
@echo
|
||||
@echo " make IGNORE_DOCBOOKS=1 [target] Don't generate docs from Docbook"
|
||||
@echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook"
|
||||
@echo ' This is useful to generate only the ReST docs (Sphinx)'
|
||||
|
||||
|
||||
|
@ -269,7 +260,7 @@ clean-files := $(DOCBOOKS) \
|
|||
|
||||
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
||||
|
||||
cleandocs: cleanmediadocs
|
||||
cleandocs:
|
||||
$(Q)rm -f $(call objectify, $(clean-files))
|
||||
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
||||
|
||||
|
|
|
@ -161,6 +161,10 @@ X!Edrivers/base/interface.c
|
|||
!Iinclude/linux/fence.h
|
||||
!Edrivers/dma-buf/seqno-fence.c
|
||||
!Iinclude/linux/seqno-fence.h
|
||||
!Edrivers/dma-buf/fence-array.c
|
||||
!Iinclude/linux/fence-array.h
|
||||
!Edrivers/dma-buf/reservation.c
|
||||
!Iinclude/linux/reservation.h
|
||||
!Edrivers/dma-buf/sync_file.c
|
||||
!Iinclude/linux/sync_file.h
|
||||
</sect2>
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1 +0,0 @@
|
|||
!*.svg
|
|
@ -1,427 +0,0 @@
|
|||
###
|
||||
# Media build rules - Auto-generates media contents/indexes and *.h xml's
|
||||
#
|
||||
|
||||
SHELL=/bin/bash
|
||||
|
||||
MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
|
||||
MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
|
||||
|
||||
MEDIA_TEMP = media-entities.tmpl \
|
||||
media-indices.tmpl \
|
||||
videodev2.h.xml \
|
||||
v4l2.xml \
|
||||
audio.h.xml \
|
||||
ca.h.xml \
|
||||
dmx.h.xml \
|
||||
frontend.h.xml \
|
||||
net.h.xml \
|
||||
video.h.xml \
|
||||
|
||||
IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64)))
|
||||
OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES))
|
||||
GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP))
|
||||
|
||||
PHONY += cleanmediadocs
|
||||
|
||||
cleanmediadocs:
|
||||
-@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null
|
||||
|
||||
$(obj)/media_api.xml: $(GENFILES) FORCE
|
||||
|
||||
#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml
|
||||
#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml
|
||||
#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml
|
||||
|
||||
V4L_SGMLS = \
|
||||
$(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \
|
||||
capture.c.xml \
|
||||
keytable.c.xml \
|
||||
v4l2grab.c.xml
|
||||
|
||||
DVB_SGMLS = \
|
||||
$(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
|
||||
|
||||
MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
|
||||
|
||||
FUNCS = \
|
||||
close \
|
||||
ioctl \
|
||||
mmap \
|
||||
munmap \
|
||||
open \
|
||||
poll \
|
||||
read \
|
||||
select \
|
||||
write \
|
||||
|
||||
IOCTLS = \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/cec.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
|
||||
|
||||
DEFINES = \
|
||||
$(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
||||
|
||||
TYPES = \
|
||||
$(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h)
|
||||
|
||||
ENUMS = \
|
||||
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \
|
||||
$(srctree)/include/uapi/linux/videodev2.h \
|
||||
$(srctree)/include/uapi/linux/dvb/audio.h \
|
||||
$(srctree)/include/uapi/linux/dvb/ca.h \
|
||||
$(srctree)/include/uapi/linux/dvb/dmx.h \
|
||||
$(srctree)/include/uapi/linux/dvb/frontend.h \
|
||||
$(srctree)/include/uapi/linux/dvb/net.h \
|
||||
$(srctree)/include/uapi/linux/dvb/video.h \
|
||||
$(srctree)/include/uapi/linux/media.h \
|
||||
$(srctree)/include/uapi/linux/v4l2-mediabus.h \
|
||||
$(srctree)/include/uapi/linux/v4l2-subdev.h)
|
||||
|
||||
ENUM_DEFS = \
|
||||
$(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while (<IN>) { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \
|
||||
$(srctree)/include/uapi/linux/dvb/dmx.h \
|
||||
$(srctree)/include/uapi/linux/dvb/frontend.h)
|
||||
|
||||
STRUCTS = \
|
||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \
|
||||
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/cec.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
|
||||
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
|
||||
|
||||
ERRORS = \
|
||||
E2BIG \
|
||||
EACCES \
|
||||
EAGAIN \
|
||||
EBADF \
|
||||
EBADFD \
|
||||
EBADR \
|
||||
EBADRQC \
|
||||
EBUSY \
|
||||
ECHILD \
|
||||
ECONNRESET \
|
||||
EDEADLK \
|
||||
EDOM \
|
||||
EEXIST \
|
||||
EFAULT \
|
||||
EFBIG \
|
||||
EILSEQ \
|
||||
EINIT \
|
||||
EINPROGRESS \
|
||||
EINTR \
|
||||
EINVAL \
|
||||
EIO \
|
||||
EMFILE \
|
||||
ENFILE \
|
||||
ENOBUFS \
|
||||
ENODATA \
|
||||
ENODEV \
|
||||
ENOENT \
|
||||
ENOIOCTLCMD \
|
||||
ENOMEM \
|
||||
ENOSPC \
|
||||
ENOSR \
|
||||
ENOSYS \
|
||||
ENOTSUP \
|
||||
ENOTSUPP \
|
||||
ENOTTY \
|
||||
ENXIO \
|
||||
EOPNOTSUPP \
|
||||
EOVERFLOW \
|
||||
EPERM \
|
||||
EPIPE \
|
||||
EPROTO \
|
||||
ERANGE \
|
||||
EREMOTE \
|
||||
EREMOTEIO \
|
||||
ERESTART \
|
||||
ERESTARTSYS \
|
||||
ESHUTDOWN \
|
||||
ESPIPE \
|
||||
ETIME \
|
||||
ETIMEDOUT \
|
||||
EUSERS \
|
||||
EWOULDBLOCK \
|
||||
EXDEV \
|
||||
|
||||
ESCAPE = \
|
||||
-e "s/&/\\&/g" \
|
||||
-e "s/</\\</g" \
|
||||
-e "s/>/\\>/g"
|
||||
|
||||
FILENAME = \
|
||||
-e s,"^[^\/]*/",, \
|
||||
-e s/"\\.xml"// \
|
||||
-e s/"\\.tmpl"// \
|
||||
-e s/\\\./-/g \
|
||||
-e s/"^func-"// \
|
||||
-e s/"^pixfmt-"// \
|
||||
-e s/"^vidioc-"//
|
||||
|
||||
# Generate references to these structs in videodev2.h.xml.
|
||||
DOCUMENTED = \
|
||||
-e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
|
||||
-e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
|
||||
-e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \
|
||||
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
|
||||
-e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
|
||||
|
||||
DVB_DOCUMENTED = \
|
||||
-e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
||||
-e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
|
||||
-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
||||
-e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
|
||||
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
|
||||
-e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \
|
||||
-e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
|
||||
-e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
||||
-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
|
||||
-e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
|
||||
-e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
|
||||
-e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \
|
||||
|
||||
#
|
||||
# Media targets and dependencies
|
||||
#
|
||||
|
||||
install_media_images = \
|
||||
$(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \
|
||||
mkdir -p $(MEDIA_OBJ_DIR)/media_api; \
|
||||
cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \
|
||||
fi
|
||||
|
||||
$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
|
||||
$(Q)base64 -d $< >$@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
|
||||
@$($(quiet)gen_xml)
|
||||
@(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/)
|
||||
@(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/)
|
||||
|
||||
$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/') >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/') >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/') >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
for ident in $(ENUM_DEFS) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
|
||||
done; \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/' | \
|
||||
perl -ne "$$r print $$_;") >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
for ident in $(ENUM_DEFS) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
|
||||
done; \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/' | \
|
||||
perl -ne "$$r print $$_;") >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/') >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<programlisting>") > $@
|
||||
@( \
|
||||
expand --tabs=8 < $< | \
|
||||
sed $(ESCAPE) $(DVB_DOCUMENTED) | \
|
||||
sed 's/i\.e\./&ie;/') >> $@
|
||||
@( \
|
||||
echo "</programlisting>") >> $@
|
||||
|
||||
$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<!-- Generated file! Do not edit. -->") >$@
|
||||
@( \
|
||||
echo -e "\n<!-- Functions -->") >>$@
|
||||
@( \
|
||||
for ident in $(FUNCS) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
echo "<!ENTITY func-$$entity \"<link" \
|
||||
"linkend='func-$$entity'><function>$$ident()</function></link>\">" \
|
||||
>>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Ioctls -->") >>$@
|
||||
@( \
|
||||
for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \
|
||||
if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link" \
|
||||
"linkend='$$id'><constant>$$ident</constant></link>\">" \
|
||||
>>$@ ; else \
|
||||
echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \
|
||||
fi; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Defines -->") >>$@
|
||||
@( \
|
||||
for ident in $(DEFINES) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
echo "<!ENTITY $$entity \"<link" \
|
||||
"linkend='$$entity'><constant>$$ident</constant></link>\">" \
|
||||
>>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Types -->") >>$@
|
||||
@( \
|
||||
for ident in $(TYPES) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
echo "<!ENTITY $$entity \"<link" \
|
||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Enums -->") >>$@
|
||||
@( \
|
||||
for ident in $(ENUMS) ; do \
|
||||
entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
|
||||
echo "<!ENTITY $$entity \"enum <link" \
|
||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Enum definitions -->") >>$@
|
||||
@( \
|
||||
for ident in $(ENUM_DEFS) ; do \
|
||||
entity=`echo $$ident | tr _ -` ; \
|
||||
echo "<!ENTITY $$entity \"<link" \
|
||||
"linkend='$$entity'><constant>$$ident</constant></link>\">" \
|
||||
>>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Structures -->") >>$@
|
||||
@( \
|
||||
for ident in $(STRUCTS) ; do \
|
||||
entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
|
||||
echo "<!ENTITY $$entity \"struct <link" \
|
||||
"linkend='$$entity'>$$ident</link>\">" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Error Codes -->") >>$@
|
||||
@( \
|
||||
for ident in $(ERRORS) ; do \
|
||||
echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
|
||||
"error code\">" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Subsections -->") >>$@
|
||||
@( \
|
||||
for file in $(MEDIA_SGMLS) ; do \
|
||||
entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
|
||||
if ! echo "$$file" | \
|
||||
grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
|
||||
echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
|
||||
fi ; \
|
||||
done)
|
||||
@( \
|
||||
echo -e "\n<!-- Function Reference -->") >>$@
|
||||
@( \
|
||||
for file in $(MEDIA_SGMLS) ; do \
|
||||
if echo "$$file" | \
|
||||
grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
|
||||
entity=`echo "$$file" |sed $(FILENAME)` ; \
|
||||
echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \
|
||||
fi ; \
|
||||
done)
|
||||
|
||||
# Jade can auto-generate a list-of-tables, which includes all structs,
|
||||
# but we only want data types, all types, and sorted please.
|
||||
$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
|
||||
@$($(quiet)gen_xml)
|
||||
@( \
|
||||
echo "<!-- Generated file! Do not edit. -->") >$@
|
||||
@( \
|
||||
echo -e "\n<index><title>List of Types</title>") >>$@
|
||||
@( \
|
||||
for ident in $(TYPES) ; do \
|
||||
id=`echo $$ident | tr _ -` ; \
|
||||
echo "<indexentry><primaryie><link" \
|
||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
for ident in $(ENUMS) ; do \
|
||||
id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
|
||||
echo "<indexentry><primaryie>enum <link" \
|
||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
for ident in $(STRUCTS) ; do \
|
||||
id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
|
||||
echo "<indexentry><primaryie>struct <link" \
|
||||
"linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
|
||||
done)
|
||||
@( \
|
||||
echo "</index>") >>$@
|
||||
|
|
@ -1,171 +0,0 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA
|
||||
CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F
|
||||
ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A
|
||||
PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp
|
||||
WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL
|
||||
4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx
|
||||
bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A
|
||||
AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh
|
||||
IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo
|
||||
oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV
|
||||
bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1
|
||||
tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2
|
||||
y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR
|
||||
+Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36
|
||||
9vv+/vzf+fv4/fvu//z7+v7//P/7/v/8//QpxAAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY8AABWW
|
||||
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
|
|
@ -1,59 +0,0 @@
|
|||
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
|
||||
RU5ErkJggg==
|
|
@ -1,105 +0,0 @@
|
|||
R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA////////////////
|
||||
/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP
|
||||
yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH
|
||||
iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A
|
||||
wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5
|
||||
+s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ
|
||||
MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV
|
||||
dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj
|
||||
S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed
|
||||
YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC
|
||||
+/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk
|
||||
loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B
|
||||
H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO
|
||||
fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY
|
||||
2gSr6H2XJ5AXoHqBp5xyuimpPfCa6we+6uWqCaiqagKsTAxrBbLz/slqTqEUvWgBqLviSqqvnXpq
|
||||
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
|
|
@ -1 +0,0 @@
|
|||
!*.xml
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,582 +0,0 @@
|
|||
<title>DVB CA Device</title>
|
||||
<para>The DVB CA device controls the conditional access hardware. It can be accessed through
|
||||
<constant>/dev/dvb/adapter?/ca?</constant>. Data types and and ioctl definitions can be accessed by
|
||||
including <constant>linux/dvb/ca.h</constant> in your application.
|
||||
</para>
|
||||
|
||||
<section id="ca_data_types">
|
||||
<title>CA Data Types</title>
|
||||
|
||||
|
||||
<section id="ca-slot-info">
|
||||
<title>ca_slot_info_t</title>
|
||||
<programlisting>
|
||||
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;
|
||||
</programlisting>
|
||||
|
||||
</section>
|
||||
<section id="ca-descr-info">
|
||||
<title>ca_descr_info_t</title>
|
||||
<programlisting>
|
||||
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;
|
||||
</programlisting>
|
||||
|
||||
</section>
|
||||
<section id="ca-caps">
|
||||
<title>ca_caps_t</title>
|
||||
<programlisting>
|
||||
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_cap_t;
|
||||
</programlisting>
|
||||
|
||||
</section>
|
||||
<section id="ca-msg">
|
||||
<title>ca_msg_t</title>
|
||||
<programlisting>
|
||||
/⋆ 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;
|
||||
</programlisting>
|
||||
|
||||
</section>
|
||||
<section id="ca-descr">
|
||||
<title>ca_descr_t</title>
|
||||
<programlisting>
|
||||
typedef struct ca_descr {
|
||||
unsigned int index;
|
||||
unsigned int parity;
|
||||
unsigned char cw[8];
|
||||
} ca_descr_t;
|
||||
</programlisting>
|
||||
</section>
|
||||
|
||||
<section id="ca-pid">
|
||||
<title>ca-pid</title>
|
||||
<programlisting>
|
||||
typedef struct ca_pid {
|
||||
unsigned int pid;
|
||||
int index; /⋆ -1 == disable⋆/
|
||||
} ca_pid_t;
|
||||
</programlisting>
|
||||
</section></section>
|
||||
|
||||
<section id="ca_function_calls">
|
||||
<title>CA Function Calls</title>
|
||||
|
||||
|
||||
<section id="ca_fopen">
|
||||
<title>open()</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para>
|
||||
<para>When an open() call has succeeded, the device will be ready for use.
|
||||
The significance of blocking or non-blocking mode is described in the
|
||||
documentation for functions where there is a difference. It does not affect the
|
||||
semantics of the open() call itself. A device opened in blocking mode can later
|
||||
be put into non-blocking mode (and vice versa) using the F_SETFL command
|
||||
of the fcntl system call. This is a standard system call, documented in the Linux
|
||||
manual page for fcntl. Only one user can open the CA Device in O_RDWR
|
||||
mode. All other attempts to open the device in this mode will fail, and an error
|
||||
code will be returned.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int open(const char ⋆deviceName, int flags);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>const char
|
||||
*deviceName</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Name of specific video device.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int flags</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>A bit-wise OR of the following flags:</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>O_RDONLY read-only access</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>O_RDWR read/write access</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>O_NONBLOCK open in non-blocking mode</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>(blocking mode is the default)</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>RETURN VALUE</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>ENODEV</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Device driver not loaded/available.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>EINTERNAL</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Internal error.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>EBUSY</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Device or resource busy.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>EINVAL</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Invalid argument.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
</section>
|
||||
<section id="ca_fclose">
|
||||
<title>close()</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This system call closes a previously opened audio device.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int close(int fd);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>RETURN VALUE</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>EBADF</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>fd is not a valid open file descriptor.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
</section>
|
||||
|
||||
<section id="CA_RESET"
|
||||
role="subsection"><title>CA_RESET</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_RESET);
|
||||
</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_RESET for this command.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_GET_CAP"
|
||||
role="subsection"><title>CA_GET_CAP</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_GET_CAP,
|
||||
ca_caps_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_GET_CAP for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_caps_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_GET_SLOT_INFO"
|
||||
role="subsection"><title>CA_GET_SLOT_INFO</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_GET_SLOT_INFO,
|
||||
ca_slot_info_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_GET_SLOT_INFO for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_slot_info_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_GET_DESCR_INFO"
|
||||
role="subsection"><title>CA_GET_DESCR_INFO</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_GET_DESCR_INFO,
|
||||
ca_descr_info_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_GET_DESCR_INFO for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_descr_info_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_GET_MSG"
|
||||
role="subsection"><title>CA_GET_MSG</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_GET_MSG,
|
||||
ca_msg_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_GET_MSG for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_msg_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_SEND_MSG"
|
||||
role="subsection"><title>CA_SEND_MSG</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_SEND_MSG,
|
||||
ca_msg_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_SEND_MSG for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_msg_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_SET_DESCR"
|
||||
role="subsection"><title>CA_SET_DESCR</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_SET_DESCR,
|
||||
ca_descr_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_SET_DESCR for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_descr_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="CA_SET_PID"
|
||||
role="subsection"><title>CA_SET_PID</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl is undocumented. Documentation is welcome.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(fd, int request = CA_SET_PID,
|
||||
ca_pid_t *);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals CA_SET_PID for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>ca_pid_t *
|
||||
</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Undocumented.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
</section>
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,156 +0,0 @@
|
|||
<partinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Ralph</firstname>
|
||||
<surname>Metzler</surname>
|
||||
<othername role="mi">J. K.</othername>
|
||||
<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Marcus</firstname>
|
||||
<surname>Metzler</surname>
|
||||
<othername role="mi">O. C.</othername>
|
||||
<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Mauro</firstname>
|
||||
<othername role="mi">Carvalho</othername>
|
||||
<surname>Chehab</surname>
|
||||
<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation>
|
||||
<contrib>Ported document to Docbook XML.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<copyright>
|
||||
<year>2002</year>
|
||||
<year>2003</year>
|
||||
<holder>Convergence GmbH</holder>
|
||||
</copyright>
|
||||
<copyright>
|
||||
<year>2009-2015</year>
|
||||
<holder>Mauro Carvalho Chehab</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<!-- Put document revisions here, newest first. -->
|
||||
<revision>
|
||||
<revnumber>2.1.0</revnumber>
|
||||
<date>2015-05-29</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>
|
||||
DocBook improvements and cleanups, in order to document the
|
||||
system calls on a more standard way and provide more description
|
||||
about the current DVB API.
|
||||
</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>2.0.4</revnumber>
|
||||
<date>2011-05-06</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>
|
||||
Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's.
|
||||
</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>2.0.3</revnumber>
|
||||
<date>2010-07-03</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>
|
||||
Add some frontend capabilities flags, present on kernel, but missing at the specs.
|
||||
</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>2.0.2</revnumber>
|
||||
<date>2009-10-25</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>
|
||||
documents FE_SET_FRONTEND_TUNE_MODE and FE_DISHETWORK_SEND_LEGACY_CMD ioctls.
|
||||
</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>2.0.1</revnumber>
|
||||
<date>2009-09-16</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>
|
||||
Added ISDB-T test originally written by Patrick Boettcher
|
||||
</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>2.0.0</revnumber>
|
||||
<date>2009-09-06</date>
|
||||
<authorinitials>mcc</authorinitials>
|
||||
<revremark>Conversion from LaTex to DocBook XML. The
|
||||
contents is the same as the original LaTex version.</revremark>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1.0.0</revnumber>
|
||||
<date>2003-07-24</date>
|
||||
<authorinitials>rjkm</authorinitials>
|
||||
<revremark>Initial revision on LaTEX.</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</partinfo>
|
||||
|
||||
|
||||
<title>LINUX DVB API</title>
|
||||
<subtitle>Version 5.10</subtitle>
|
||||
<!-- ADD THE CHAPTERS HERE -->
|
||||
<chapter id="dvb_introdution">
|
||||
&sub-intro;
|
||||
</chapter>
|
||||
<chapter id="dvb_frontend">
|
||||
&sub-frontend;
|
||||
</chapter>
|
||||
<chapter id="dvb_demux">
|
||||
&sub-demux;
|
||||
</chapter>
|
||||
<chapter id="dvb_ca">
|
||||
&sub-ca;
|
||||
</chapter>
|
||||
<chapter id="net">
|
||||
&sub-net;
|
||||
</chapter>
|
||||
<chapter id="legacy_dvb_apis">
|
||||
<title>DVB Deprecated APIs</title>
|
||||
<para>The APIs described here are kept only for historical reasons. There's
|
||||
just one driver for a very legacy hardware that uses this API. No
|
||||
modern drivers should use it. Instead, audio and video should be using
|
||||
the V4L2 and ALSA APIs, and the pipelines should be set using the
|
||||
Media Controller API</para>
|
||||
<section id="dvb_video">
|
||||
&sub-video;
|
||||
</section>
|
||||
<section id="dvb_audio">
|
||||
&sub-audio;
|
||||
</section>
|
||||
</chapter>
|
||||
<chapter id="dvb_examples">
|
||||
&sub-examples;
|
||||
</chapter>
|
||||
<!-- END OF CHAPTERS -->
|
||||
<appendix id="audio_h">
|
||||
<title>DVB Audio Header File</title>
|
||||
&sub-audio-h;
|
||||
</appendix>
|
||||
<appendix id="ca_h">
|
||||
<title>DVB Conditional Access Header File</title>
|
||||
&sub-ca-h;
|
||||
</appendix>
|
||||
<appendix id="dmx_h">
|
||||
<title>DVB Demux Header File</title>
|
||||
&sub-dmx-h;
|
||||
</appendix>
|
||||
<appendix id="frontend_h">
|
||||
<title>DVB Frontend Header File</title>
|
||||
&sub-frontend-h;
|
||||
</appendix>
|
||||
<appendix id="net_h">
|
||||
<title>DVB Network Header File</title>
|
||||
&sub-net-h;
|
||||
</appendix>
|
||||
<appendix id="video_h">
|
||||
<title>DVB Video Header File</title>
|
||||
&sub-video-h;
|
||||
</appendix>
|
||||
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Двоичные данные
Documentation/DocBook/media/dvb/dvbstb.pdf
Двоичные данные
Documentation/DocBook/media/dvb/dvbstb.pdf
Двоичный файл не отображается.
|
@ -1,367 +0,0 @@
|
|||
<title>Examples</title>
|
||||
<para>In this section we would like to present some examples for using the DVB API.
|
||||
</para>
|
||||
<para>NOTE: This section is out of date, and the code below won't even
|
||||
compile. Please refer to the
|
||||
<ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>
|
||||
for updated/recommended examples.
|
||||
</para>
|
||||
|
||||
<section id="tuning">
|
||||
<title>Tuning</title>
|
||||
<para>We will start with a generic tuning subroutine that uses the frontend and SEC, as well as
|
||||
the demux devices. The example is given for QPSK tuners, but can easily be adjusted for
|
||||
QAM.
|
||||
</para>
|
||||
<programlisting>
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <linux/dvb/dmx.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
#include <linux/dvb/sec.h>
|
||||
#include <sys/poll.h>
|
||||
|
||||
#define DMX "/dev/dvb/adapter0/demux1"
|
||||
#define FRONT "/dev/dvb/adapter0/frontend1"
|
||||
#define SEC "/dev/dvb/adapter0/sec1"
|
||||
|
||||
/⋆ routine for checking if we have a signal and other status information⋆/
|
||||
int FEReadStatus(int fd, fe_status_t ⋆stat)
|
||||
{
|
||||
int ans;
|
||||
|
||||
if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){
|
||||
perror("FE READ STATUS: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (⋆stat & FE_HAS_POWER)
|
||||
printf("FE HAS POWER\n");
|
||||
|
||||
if (⋆stat & FE_HAS_SIGNAL)
|
||||
printf("FE HAS SIGNAL\n");
|
||||
|
||||
if (⋆stat & FE_SPECTRUM_INV)
|
||||
printf("SPEKTRUM INV\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/⋆ tune qpsk ⋆/
|
||||
/⋆ freq: frequency of transponder ⋆/
|
||||
/⋆ vpid, apid, tpid: PIDs of video, audio and teletext TS packets ⋆/
|
||||
/⋆ diseqc: DiSEqC address of the used LNB ⋆/
|
||||
/⋆ pol: Polarisation ⋆/
|
||||
/⋆ srate: Symbol Rate ⋆/
|
||||
/⋆ fec. FEC ⋆/
|
||||
/⋆ lnb_lof1: local frequency of lower LNB band ⋆/
|
||||
/⋆ lnb_lof2: local frequency of upper LNB band ⋆/
|
||||
/⋆ lnb_slof: switch frequency of LNB ⋆/
|
||||
|
||||
int set_qpsk_channel(int freq, int vpid, int apid, int tpid,
|
||||
int diseqc, int pol, int srate, int fec, int lnb_lof1,
|
||||
int lnb_lof2, int lnb_slof)
|
||||
{
|
||||
struct secCommand scmd;
|
||||
struct secCmdSequence scmds;
|
||||
struct dmx_pes_filter_params pesFilterParams;
|
||||
FrontendParameters frp;
|
||||
struct pollfd pfd[1];
|
||||
FrontendEvent event;
|
||||
int demux1, demux2, demux3, front;
|
||||
|
||||
frequency = (uint32_t) freq;
|
||||
symbolrate = (uint32_t) srate;
|
||||
|
||||
if((front = open(FRONT,O_RDWR)) < 0){
|
||||
perror("FRONTEND DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if((sec = open(SEC,O_RDWR)) < 0){
|
||||
perror("SEC DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (demux1 < 0){
|
||||
if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
|
||||
< 0){
|
||||
perror("DEMUX DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (demux2 < 0){
|
||||
if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
|
||||
< 0){
|
||||
perror("DEMUX DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (demux3 < 0){
|
||||
if ((demux3=open(DMX, O_RDWR|O_NONBLOCK))
|
||||
< 0){
|
||||
perror("DEMUX DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (freq < lnb_slof) {
|
||||
frp.Frequency = (freq - lnb_lof1);
|
||||
scmds.continuousTone = SEC_TONE_OFF;
|
||||
} else {
|
||||
frp.Frequency = (freq - lnb_lof2);
|
||||
scmds.continuousTone = SEC_TONE_ON;
|
||||
}
|
||||
frp.Inversion = INVERSION_AUTO;
|
||||
if (pol) scmds.voltage = SEC_VOLTAGE_18;
|
||||
else scmds.voltage = SEC_VOLTAGE_13;
|
||||
|
||||
scmd.type=0;
|
||||
scmd.u.diseqc.addr=0x10;
|
||||
scmd.u.diseqc.cmd=0x38;
|
||||
scmd.u.diseqc.numParams=1;
|
||||
scmd.u.diseqc.params[0] = 0xF0 | ((diseqc ⋆ 4) & 0x0F) |
|
||||
(scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |
|
||||
(scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);
|
||||
|
||||
scmds.miniCommand=SEC_MINI_NONE;
|
||||
scmds.numCommands=1;
|
||||
scmds.commands=&scmd;
|
||||
if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
|
||||
perror("SEC SEND: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
|
||||
perror("SEC SEND: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
frp.u.qpsk.SymbolRate = srate;
|
||||
frp.u.qpsk.FEC_inner = fec;
|
||||
|
||||
if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){
|
||||
perror("QPSK TUNE: ");
|
||||
return -1;
|
||||
}
|
||||
|
||||
pfd[0].fd = front;
|
||||
pfd[0].events = POLLIN;
|
||||
|
||||
if (poll(pfd,1,3000)){
|
||||
if (pfd[0].revents & POLLIN){
|
||||
printf("Getting QPSK event\n");
|
||||
if ( ioctl(front, FE_GET_EVENT, &event)
|
||||
|
||||
== -EOVERFLOW){
|
||||
perror("qpsk get event");
|
||||
return -1;
|
||||
}
|
||||
printf("Received ");
|
||||
switch(event.type){
|
||||
case FE_UNEXPECTED_EV:
|
||||
printf("unexpected event\n");
|
||||
return -1;
|
||||
case FE_FAILURE_EV:
|
||||
printf("failure event\n");
|
||||
return -1;
|
||||
|
||||
case FE_COMPLETION_EV:
|
||||
printf("completion event\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pesFilterParams.pid = vpid;
|
||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||
pesFilterParams.output = DMX_OUT_DECODER;
|
||||
pesFilterParams.pes_type = DMX_PES_VIDEO;
|
||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||
if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
||||
perror("set_vpid");
|
||||
return -1;
|
||||
}
|
||||
|
||||
pesFilterParams.pid = apid;
|
||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||
pesFilterParams.output = DMX_OUT_DECODER;
|
||||
pesFilterParams.pes_type = DMX_PES_AUDIO;
|
||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||
if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
||||
perror("set_apid");
|
||||
return -1;
|
||||
}
|
||||
|
||||
pesFilterParams.pid = tpid;
|
||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||
pesFilterParams.output = DMX_OUT_DECODER;
|
||||
pesFilterParams.pes_type = DMX_PES_TELETEXT;
|
||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||
if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
||||
perror("set_tpid");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return has_signal(fds);
|
||||
}
|
||||
|
||||
</programlisting>
|
||||
<para>The program assumes that you are using a universal LNB and a standard DiSEqC
|
||||
switch with up to 4 addresses. Of course, you could build in some more checking if
|
||||
tuning was successful and maybe try to repeat the tuning process. Depending on the
|
||||
external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be
|
||||
necessary.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="the_dvr_device">
|
||||
<title>The DVR device</title>
|
||||
<para>The following program code shows how to use the DVR device for recording.
|
||||
</para>
|
||||
<programlisting>
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <linux/dvb/dmx.h>
|
||||
#include <linux/dvb/video.h>
|
||||
#include <sys/poll.h>
|
||||
#define DVR "/dev/dvb/adapter0/dvr1"
|
||||
#define AUDIO "/dev/dvb/adapter0/audio1"
|
||||
#define VIDEO "/dev/dvb/adapter0/video1"
|
||||
|
||||
#define BUFFY (188⋆20)
|
||||
#define MAX_LENGTH (1024⋆1024⋆5) /⋆ record 5MB ⋆/
|
||||
|
||||
|
||||
/⋆ switch the demuxes to recording, assuming the transponder is tuned ⋆/
|
||||
|
||||
/⋆ demux1, demux2: file descriptor of video and audio filters ⋆/
|
||||
/⋆ vpid, apid: PIDs of video and audio channels ⋆/
|
||||
|
||||
int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid)
|
||||
{
|
||||
struct dmx_pes_filter_params pesFilterParams;
|
||||
|
||||
if (demux1 < 0){
|
||||
if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
|
||||
< 0){
|
||||
perror("DEMUX DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (demux2 < 0){
|
||||
if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
|
||||
< 0){
|
||||
perror("DEMUX DEVICE: ");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
pesFilterParams.pid = vpid;
|
||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||
pesFilterParams.output = DMX_OUT_TS_TAP;
|
||||
pesFilterParams.pes_type = DMX_PES_VIDEO;
|
||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||
if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
||||
perror("DEMUX DEVICE");
|
||||
return -1;
|
||||
}
|
||||
pesFilterParams.pid = apid;
|
||||
pesFilterParams.input = DMX_IN_FRONTEND;
|
||||
pesFilterParams.output = DMX_OUT_TS_TAP;
|
||||
pesFilterParams.pes_type = DMX_PES_AUDIO;
|
||||
pesFilterParams.flags = DMX_IMMEDIATE_START;
|
||||
if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
|
||||
perror("DEMUX DEVICE");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/⋆ start recording MAX_LENGTH , assuming the transponder is tuned ⋆/
|
||||
|
||||
/⋆ demux1, demux2: file descriptor of video and audio filters ⋆/
|
||||
/⋆ vpid, apid: PIDs of video and audio channels ⋆/
|
||||
int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid)
|
||||
{
|
||||
int i;
|
||||
int len;
|
||||
int written;
|
||||
uint8_t buf[BUFFY];
|
||||
uint64_t length;
|
||||
struct pollfd pfd[1];
|
||||
int dvr, dvr_out;
|
||||
|
||||
/⋆ open dvr device ⋆/
|
||||
if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){
|
||||
perror("DVR DEVICE");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/⋆ switch video and audio demuxes to dvr ⋆/
|
||||
printf ("Switching dvr on\n");
|
||||
i = switch_to_record(demux1, demux2, vpid, apid);
|
||||
printf("finished: ");
|
||||
|
||||
printf("Recording %2.0f MB of test file in TS format\n",
|
||||
MAX_LENGTH/(1024.0⋆1024.0));
|
||||
length = 0;
|
||||
|
||||
/⋆ open output file ⋆/
|
||||
if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT
|
||||
|O_TRUNC, S_IRUSR|S_IWUSR
|
||||
|S_IRGRP|S_IWGRP|S_IROTH|
|
||||
S_IWOTH)) < 0){
|
||||
perror("Can't open file for dvr test");
|
||||
return -1;
|
||||
}
|
||||
|
||||
pfd[0].fd = dvr;
|
||||
pfd[0].events = POLLIN;
|
||||
|
||||
/⋆ poll for dvr data and write to file ⋆/
|
||||
while (length < MAX_LENGTH ) {
|
||||
if (poll(pfd,1,1)){
|
||||
if (pfd[0].revents & POLLIN){
|
||||
len = read(dvr, buf, BUFFY);
|
||||
if (len < 0){
|
||||
perror("recording");
|
||||
return -1;
|
||||
}
|
||||
if (len > 0){
|
||||
written = 0;
|
||||
while (written < len)
|
||||
written +=
|
||||
write (dvr_out,
|
||||
buf, len);
|
||||
length += len;
|
||||
printf("written %2.0f MB\r",
|
||||
length/1024./1024.);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
</programlisting>
|
||||
|
||||
</section>
|
|
@ -1,78 +0,0 @@
|
|||
<refentry id="FE_DISEQC_RECV_SLAVE_REPLY">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_DISEQC_RECV_SLAVE_REPLY</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_DISEQC_RECV_SLAVE_REPLY</refname>
|
||||
<refpurpose>Receives reply from a DiSEqC 2.0 command</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dvb_diseqc_slave_reply *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_DISEQC_RECV_SLAVE_REPLY</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &dvb-diseqc-slave-reply;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Receives reply from a DiSEqC 2.0 command.</para>
|
||||
&return-value-dvb;
|
||||
|
||||
<table pgwide="1" frame="none" id="dvb-diseqc-slave-reply">
|
||||
<title>struct <structname>dvb_diseqc_slave_reply</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>uint8_t</entry>
|
||||
<entry>msg[4]</entry>
|
||||
<entry>DiSEqC message (framing, data[3])</entry>
|
||||
</row><row>
|
||||
<entry>uint8_t</entry>
|
||||
<entry>msg_len</entry>
|
||||
<entry>Length of the DiSEqC message. Valid values are 0 to 4,
|
||||
where 0 means no msg</entry>
|
||||
</row><row>
|
||||
<entry>int</entry>
|
||||
<entry>timeout</entry>
|
||||
<entry>Return from ioctl after timeout ms with errorcode when no
|
||||
message was received</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,51 +0,0 @@
|
|||
<refentry id="FE_DISEQC_RESET_OVERLOAD">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_DISEQC_RESET_OVERLOAD</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_DISEQC_RESET_OVERLOAD</refname>
|
||||
<refpurpose>Restores the power to the antenna subsystem, if it was powered
|
||||
off due to power overload.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>NULL</paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_DISEQC_RESET_OVERLOAD</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>If the bus has been automatically powered off due to power overload, this ioctl
|
||||
call restores the power to the bus. The call requires read/write access to the
|
||||
device. This call has no effect if the device is manually powered off. Not all
|
||||
DVB adapters support this ioctl.</para>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,89 +0,0 @@
|
|||
<refentry id="FE_DISEQC_SEND_BURST">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_DISEQC_SEND_BURST</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_DISEQC_SEND_BURST</refname>
|
||||
<refpurpose>Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>enum fe_sec_mini_cmd *<parameter>tone</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_DISEQC_SEND_BURST</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>tone</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &fe-sec-mini-cmd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This ioctl is used to set the generation of a 22kHz tone burst for mini
|
||||
DiSEqC satellite
|
||||
selection for 2x1 switches.
|
||||
This call requires read/write permissions.</para>
|
||||
<para>It provides support for what's specified at
|
||||
<ulink url="http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf">Digital Satellite Equipment Control
|
||||
(DiSEqC) - Simple "ToneBurst" Detection Circuit specification.</ulink>
|
||||
</para>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 id="fe-sec-mini-cmd-t">
|
||||
<title>enum fe_sec_mini_cmd</title>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-sec-mini-cmd">
|
||||
<title>enum fe_sec_mini_cmd</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry align="char" id="SEC-MINI-A"><constant>SEC_MINI_A</constant></entry>
|
||||
<entry align="char">Sends a mini-DiSEqC 22kHz '0' Tone Burst to
|
||||
select satellite-A</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="SEC-MINI-B"><constant>SEC_MINI_B</constant></entry>
|
||||
<entry align="char">Sends a mini-DiSEqC 22kHz '1' Data Burst to
|
||||
select satellite-B</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
|
@ -1,72 +0,0 @@
|
|||
<refentry id="FE_DISEQC_SEND_MASTER_CMD">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_DISEQC_SEND_MASTER_CMD</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_DISEQC_SEND_MASTER_CMD</refname>
|
||||
<refpurpose>Sends a DiSEqC command</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dvb_diseqc_master_cmd *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_DISEQC_SEND_MASTER_CMD</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &dvb-diseqc-master-cmd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Sends a DiSEqC command to the antenna subsystem.</para>
|
||||
&return-value-dvb;
|
||||
|
||||
<table pgwide="1" frame="none" id="dvb-diseqc-master-cmd">
|
||||
<title>struct <structname>dvb_diseqc_master_cmd</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>uint8_t</entry>
|
||||
<entry>msg[6]</entry>
|
||||
<entry>DiSEqC message (framing, address, command, data[3])</entry>
|
||||
</row><row>
|
||||
<entry>uint8_t</entry>
|
||||
<entry>msg_len</entry>
|
||||
<entry>Length of the DiSEqC message. Valid values are 3 to 6</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,61 +0,0 @@
|
|||
<refentry id="FE_ENABLE_HIGH_LNB_VOLTAGE">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_ENABLE_HIGH_LNB_VOLTAGE</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_ENABLE_HIGH_LNB_VOLTAGE</refname>
|
||||
<refpurpose>Select output DC level between normal LNBf voltages or higher
|
||||
LNBf voltages.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>unsigned int <parameter>high</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_ENABLE_HIGH_LNB_VOLTAGE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>high</parameter></term>
|
||||
<listitem>
|
||||
<para>Valid flags:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>0 - normal 13V and 18V.</para></listitem>
|
||||
<listitem><para>>0 - enables slightly higher voltages instead of
|
||||
13/18V, in order to compensate for long antenna cables.</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Select output DC level between normal LNBf voltages or higher
|
||||
LNBf voltages between 0 (normal) or a value grater than 0 for higher
|
||||
voltages.</para>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,266 +0,0 @@
|
|||
<refentry id="FE_GET_INFO">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_GET_INFO</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_GET_INFO</refname>
|
||||
<refpurpose>Query DVB frontend capabilities and returns information about
|
||||
the front-end. This call only requires read-only access to the device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dvb_frontend_info *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_GET_INFO</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to struct &dvb-frontend-info;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>All DVB frontend devices support the
|
||||
<constant>FE_GET_INFO</constant> ioctl. It is used to identify
|
||||
kernel devices compatible with this specification and to obtain
|
||||
information about driver and hardware capabilities. The ioctl takes a
|
||||
pointer to dvb_frontend_info which is filled by the driver. When the
|
||||
driver is not compatible with this specification the ioctl returns an error.
|
||||
</para>
|
||||
&return-value-dvb;
|
||||
|
||||
<table pgwide="1" frame="none" id="dvb-frontend-info">
|
||||
<title>struct <structname>dvb_frontend_info</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>char</entry>
|
||||
<entry>name[128]</entry>
|
||||
<entry>Name of the frontend</entry>
|
||||
</row><row>
|
||||
<entry>fe_type_t</entry>
|
||||
<entry>type</entry>
|
||||
<entry><emphasis role="bold">DEPRECATED</emphasis>. DVBv3 type. Should not be used on modern programs, as a
|
||||
frontend may have more than one type. So, the DVBv5 API should
|
||||
be used instead to enumerate and select the frontend type.</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>frequency_min</entry>
|
||||
<entry>Minimal frequency supported by the frontend</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>frequency_max</entry>
|
||||
<entry>Maximal frequency supported by the frontend</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>frequency_stepsize</entry>
|
||||
<entry>Frequency step - all frequencies are multiple of this value</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>frequency_tolerance</entry>
|
||||
<entry>Tolerance of the frequency</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>symbol_rate_min</entry>
|
||||
<entry>Minimal symbol rate (for Cable/Satellite systems), in bauds</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>symbol_rate_max</entry>
|
||||
<entry>Maximal symbol rate (for Cable/Satellite systems), in bauds</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>symbol_rate_tolerance</entry>
|
||||
<entry>Maximal symbol rate tolerance, in ppm</entry>
|
||||
</row><row>
|
||||
<entry>uint32_t</entry>
|
||||
<entry>notifier_delay</entry>
|
||||
<entry><emphasis role="bold">DEPRECATED</emphasis>. Not used by any driver.</entry>
|
||||
</row><row>
|
||||
<entry>&fe-caps;</entry>
|
||||
<entry>caps</entry>
|
||||
<entry>Capabilities supported by the frontend</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>NOTE: The frequencies are specified in Hz for Terrestrial and Cable
|
||||
systems. They're specified in kHz for Satellite systems</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1 id="fe-caps-t">
|
||||
<title>frontend capabilities</title>
|
||||
|
||||
<para>Capabilities describe what a frontend can do. Some capabilities are
|
||||
supported only on some specific frontend types.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-caps">
|
||||
<title>enum fe_caps</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry id="FE-IS-STUPID"><constant>FE_IS_STUPID</constant></entry>
|
||||
<entry>There's something wrong at the frontend, and it can't
|
||||
report its capabilities</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-INVERSION-AUTO"><constant>FE_CAN_INVERSION_AUTO</constant></entry>
|
||||
<entry>The frontend is capable of auto-detecting inversion</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-1-2"><constant>FE_CAN_FEC_1_2</constant></entry>
|
||||
<entry>The frontend supports FEC 1/2</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-2-3"><constant>FE_CAN_FEC_2_3</constant></entry>
|
||||
<entry>The frontend supports FEC 2/3</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-3-4"><constant>FE_CAN_FEC_3_4</constant></entry>
|
||||
<entry>The frontend supports FEC 3/4</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-4-5"><constant>FE_CAN_FEC_4_5</constant></entry>
|
||||
<entry>The frontend supports FEC 4/5</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-5-6"><constant>FE_CAN_FEC_5_6</constant></entry>
|
||||
<entry>The frontend supports FEC 5/6</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-6-7"><constant>FE_CAN_FEC_6_7</constant></entry>
|
||||
<entry>The frontend supports FEC 6/7</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-7-8"><constant>FE_CAN_FEC_7_8</constant></entry>
|
||||
<entry>The frontend supports FEC 7/8</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-8-9"><constant>FE_CAN_FEC_8_9</constant></entry>
|
||||
<entry>The frontend supports FEC 8/9</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-FEC-AUTO"><constant>FE_CAN_FEC_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect FEC.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QPSK"><constant>FE_CAN_QPSK</constant></entry>
|
||||
<entry>The frontend supports QPSK modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-16"><constant>FE_CAN_QAM_16</constant></entry>
|
||||
<entry>The frontend supports 16-QAM modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-32"><constant>FE_CAN_QAM_32</constant></entry>
|
||||
<entry>The frontend supports 32-QAM modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-64"><constant>FE_CAN_QAM_64</constant></entry>
|
||||
<entry>The frontend supports 64-QAM modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-128"><constant>FE_CAN_QAM_128</constant></entry>
|
||||
<entry>The frontend supports 128-QAM modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-256"><constant>FE_CAN_QAM_256</constant></entry>
|
||||
<entry>The frontend supports 256-QAM modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-QAM-AUTO"><constant>FE_CAN_QAM_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-TRANSMISSION-MODE-AUTO"><constant>FE_CAN_TRANSMISSION_MODE_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect the transmission mode</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-BANDWIDTH-AUTO"><constant>FE_CAN_BANDWIDTH_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect the bandwidth</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-GUARD-INTERVAL-AUTO"><constant>FE_CAN_GUARD_INTERVAL_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect the guard interval</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-HIERARCHY-AUTO"><constant>FE_CAN_HIERARCHY_AUTO</constant></entry>
|
||||
<entry>The frontend can autodetect hierarch</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-8VSB"><constant>FE_CAN_8VSB</constant></entry>
|
||||
<entry>The frontend supports 8-VSB modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-16VSB"><constant>FE_CAN_16VSB</constant></entry>
|
||||
<entry>The frontend supports 16-VSB modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-HAS-EXTENDED-CAPS"><constant>FE_HAS_EXTENDED_CAPS</constant></entry>
|
||||
<entry>Currently, unused</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-MULTISTREAM"><constant>FE_CAN_MULTISTREAM</constant></entry>
|
||||
<entry>The frontend supports multistream filtering</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-TURBO-FEC"><constant>FE_CAN_TURBO_FEC</constant></entry>
|
||||
<entry>The frontend supports turbo FEC modulation</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-2G-MODULATION"><constant>FE_CAN_2G_MODULATION</constant></entry>
|
||||
<entry>The frontend supports "2nd generation modulation" (DVB-S2/T2)></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-NEEDS-BENDING"><constant>FE_NEEDS_BENDING</constant></entry>
|
||||
<entry>Not supported anymore, don't use it</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-RECOVER"><constant>FE_CAN_RECOVER</constant></entry>
|
||||
<entry>The frontend can recover from a cable unplug automatically</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-CAN-MUTE-TS"><constant>FE_CAN_MUTE_TS</constant></entry>
|
||||
<entry>The frontend can stop spurious TS data output</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,81 +0,0 @@
|
|||
<refentry id="FE_GET_PROPERTY">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_SET_PROPERTY, FE_GET_PROPERTY</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_SET_PROPERTY</refname>
|
||||
<refname>FE_GET_PROPERTY</refname>
|
||||
<refpurpose>FE_SET_PROPERTY sets one or more frontend properties.
|
||||
FE_GET_PROPERTY returns one or more frontend properties.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dtv_properties *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_PROPERTY, FE_GET_PROPERTY</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &dtv-properties;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>All DVB frontend devices support the
|
||||
<constant>FE_SET_PROPERTY</constant> and <constant>FE_GET_PROPERTY</constant>
|
||||
ioctls. The supported properties and statistics depends on the delivery system
|
||||
and on the device:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><constant>FE_SET_PROPERTY:</constant></para>
|
||||
<itemizedlist>
|
||||
<listitem><para>This ioctl is used to set one or more
|
||||
frontend properties.</para></listitem>
|
||||
<listitem><para>This is the basic command to request the frontend to tune into some
|
||||
frequency and to start decoding the digital TV signal.</para></listitem>
|
||||
<listitem><para>This call requires read/write access to the device.</para></listitem>
|
||||
<listitem><para>At return, the values are updated to reflect the
|
||||
actual parameters used.</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>FE_GET_PROPERTY:</constant></para>
|
||||
<itemizedlist>
|
||||
<listitem><para>This ioctl is used to get properties and
|
||||
statistics from the frontend.</para></listitem>
|
||||
<listitem><para>No properties are changed, and statistics aren't reset.</para></listitem>
|
||||
<listitem><para>This call only requires read-only access to the device.</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,107 +0,0 @@
|
|||
<refentry id="FE_READ_STATUS">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_READ_STATUS</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_READ_STATUS</refname>
|
||||
<refpurpose>Returns status information about the front-end. This call only
|
||||
requires read-only access to the device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>unsigned int *<parameter>status</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_READ_STATUS</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>status</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to a bitmask integer filled with the values defined by
|
||||
&fe-status;.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>All DVB frontend devices support the
|
||||
<constant>FE_READ_STATUS</constant> ioctl. It is used to check about the
|
||||
locking status of the frontend after being tuned. The ioctl takes a
|
||||
pointer to an integer where the status will be written.
|
||||
</para>
|
||||
<para>NOTE: the size of status is actually sizeof(enum fe_status), with varies
|
||||
according with the architecture. This needs to be fixed in the future.</para>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 id="fe-status-t">
|
||||
<title>int fe_status</title>
|
||||
|
||||
<para>The fe_status parameter is used to indicate the current state
|
||||
and/or state changes of the frontend hardware. It is produced using
|
||||
the &fe-status; values on a bitmask</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-status">
|
||||
<title>enum fe_status</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry align="char" id="FE-HAS-SIGNAL"><constant>FE_HAS_SIGNAL</constant></entry>
|
||||
<entry align="char">The frontend has found something above the noise level</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-HAS-CARRIER"><constant>FE_HAS_CARRIER</constant></entry>
|
||||
<entry align="char">The frontend has found a DVB signal</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-HAS-VITERBI"><constant>FE_HAS_VITERBI</constant></entry>
|
||||
<entry align="char">The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-HAS-SYNC"><constant>FE_HAS_SYNC</constant></entry>
|
||||
<entry align="char">Synchronization bytes was found</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-HAS-LOCK"><constant>FE_HAS_LOCK</constant></entry>
|
||||
<entry align="char">The DVB were locked and everything is working</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-TIMEDOUT"><constant>FE_TIMEDOUT</constant></entry>
|
||||
<entry align="char">no lock within the last about 2 seconds</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="FE-REINIT"><constant>FE_REINIT</constant></entry>
|
||||
<entry align="char">The frontend was reinitialized, application is
|
||||
recommended to reset DiSEqC, tone and parameters</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,64 +0,0 @@
|
|||
<refentry id="FE_SET_FRONTEND_TUNE_MODE">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_SET_FRONTEND_TUNE_MODE</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_SET_FRONTEND_TUNE_MODE</refname>
|
||||
<refpurpose>Allow setting tuner mode flags to the frontend.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>unsigned int <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_FRONTEND_TUNE_MODE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>Valid flags:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>0 - normal tune mode</para></listitem>
|
||||
<listitem><para>FE_TUNE_MODE_ONESHOT - 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.</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Allow setting tuner mode flags to the frontend, between 0 (normal)
|
||||
or FE_TUNE_MODE_ONESHOT mode</para>
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,91 +0,0 @@
|
|||
<refentry id="FE_SET_TONE">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_SET_TONE</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_SET_TONE</refname>
|
||||
<refpurpose>Sets/resets the generation of the continuous 22kHz tone.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>enum fe_sec_tone_mode *<parameter>tone</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_TONE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>tone</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &fe-sec-tone-mode;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This ioctl is used to set the generation of the continuous 22kHz tone.
|
||||
This call requires read/write permissions.</para>
|
||||
<para>Usually, satellite antenna subsystems require that the digital TV
|
||||
device to send a 22kHz tone in order to select between high/low band on
|
||||
some dual-band LNBf. It is also used to send signals to DiSEqC equipment,
|
||||
but this is done using the DiSEqC ioctls.</para>
|
||||
<para>NOTE: if more than one device is connected to the same antenna,
|
||||
setting a tone may interfere on other devices, as they may lose
|
||||
the capability of selecting the band. So, it is recommended that
|
||||
applications would change to SEC_TONE_OFF when the device is not used.</para>
|
||||
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 id="fe-sec-tone-mode-t">
|
||||
<title>enum fe_sec_tone_mode</title>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-sec-tone-mode">
|
||||
<title>enum fe_sec_tone_mode</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry align="char" id="SEC-TONE-ON"><constant>SEC_TONE_ON</constant></entry>
|
||||
<entry align="char">Sends a 22kHz tone burst to the antenna</entry>
|
||||
</row><row>
|
||||
<entry align="char" id="SEC-TONE-OFF"><constant>SEC_TONE_OFF</constant></entry>
|
||||
<entry align="char">Don't send a 22kHz tone to the antenna
|
||||
(except if the FE_DISEQC_* ioctls are called)</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
|
@ -1,69 +0,0 @@
|
|||
<refentry id="FE_SET_VOLTAGE">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl FE_SET_VOLTAGE</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>FE_SET_VOLTAGE</refname>
|
||||
<refpurpose>Allow setting the DC level sent to the antenna subsystem.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>enum fe_sec_voltage *<parameter>voltage</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_VOLTAGE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>voltage</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &fe-sec-voltage;</para>
|
||||
<para>Valid values are described at &fe-sec-voltage;.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>This ioctl allows to set the DC voltage level sent through the antenna
|
||||
cable to 13V, 18V or off.</para>
|
||||
<para>Usually, a satellite antenna subsystems require that the digital TV
|
||||
device to send a DC voltage to feed power to the LNBf. Depending on the
|
||||
LNBf type, the polarization or the intermediate frequency (IF) of the LNBf
|
||||
can controlled by the voltage level. Other devices (for example, the ones
|
||||
that implement DISEqC and multipoint LNBf's don't need to control the
|
||||
voltage level, provided that either 13V or 18V is sent to power up the
|
||||
LNBf.</para>
|
||||
<para>NOTE: if more than one device is connected to the same antenna,
|
||||
setting a voltage level may interfere on other devices, as they may lose
|
||||
the capability of setting polarization or IF. So, on those
|
||||
cases, setting the voltage to SEC_VOLTAGE_OFF while the device is not is
|
||||
used is recommended.</para>
|
||||
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
|
@ -1,269 +0,0 @@
|
|||
<title>DVB Frontend API</title>
|
||||
|
||||
<para>The DVB frontend API was designed to support three types of delivery systems:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H, DTMB, CMMB</para></listitem>
|
||||
<listitem><para>Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C</para></listitem>
|
||||
<listitem><para>Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>The DVB frontend controls several sub-devices including:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Tuner</para></listitem>
|
||||
<listitem><para>Digital TV demodulator</para></listitem>
|
||||
<listitem><para>Low noise amplifier (LNA)</para></listitem>
|
||||
<listitem><para>Satellite Equipment Control (SEC) hardware (only for Satellite).</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>The frontend can be accessed through
|
||||
<constant>/dev/dvb/adapter?/frontend?</constant>. Data types and
|
||||
ioctl definitions can be accessed by including
|
||||
<constant>linux/dvb/frontend.h</constant> in your application.
|
||||
</para>
|
||||
|
||||
<para>NOTE: Transmission via the internet (DVB-IP)
|
||||
is not yet handled by this API but a future extension is possible.</para>
|
||||
<para>On Satellite systems, the API support for the Satellite Equipment Control
|
||||
(SEC) allows to power control and to send/receive signals to control the
|
||||
antenna subsystem, selecting the polarization and choosing the Intermediate
|
||||
Frequency IF) of the Low Noise Block Converter Feed Horn (LNBf). It
|
||||
supports the DiSEqC and V-SEC protocols. The DiSEqC (digital SEC)
|
||||
specification is available at
|
||||
<ulink url="http://www.eutelsat.com/satellites/4_5_5.html">Eutelsat</ulink>.</para>
|
||||
|
||||
<section id="query-dvb-frontend-info">
|
||||
<title>Querying frontend information</title>
|
||||
|
||||
<para>Usually, the first thing to do when the frontend is opened is to
|
||||
check the frontend capabilities. This is done using <link linkend="FE_GET_INFO">FE_GET_INFO</link>. This ioctl will enumerate
|
||||
the DVB API version and other characteristics about the frontend, and
|
||||
can be opened either in read only or read/write mode.</para>
|
||||
</section>
|
||||
|
||||
<section id="dvb-fe-read-status">
|
||||
<title>Querying frontend status and statistics</title>
|
||||
|
||||
<para>Once <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link>
|
||||
is called, the frontend will run a kernel thread that will periodically
|
||||
check for the tuner lock status and provide statistics about the quality
|
||||
of the signal.</para>
|
||||
<para>The information about the frontend tuner locking status can be queried
|
||||
using <link linkend="FE_READ_STATUS">FE_READ_STATUS</link>.</para>
|
||||
<para>Signal statistics are provided via <link linkend="FE_GET_PROPERTY"><constant>FE_GET_PROPERTY</constant></link>.
|
||||
Please note that several statistics require the demodulator to be fully
|
||||
locked (e. g. with FE_HAS_LOCK bit set). See
|
||||
<link linkend="frontend-stat-properties">Frontend statistics indicators</link>
|
||||
for more details.</para>
|
||||
</section>
|
||||
|
||||
&sub-dvbproperty;
|
||||
|
||||
<section id="frontend_fcalls">
|
||||
<title>Frontend Function Calls</title>
|
||||
|
||||
<refentry id="frontend_f_open">
|
||||
<refmeta>
|
||||
<refentrytitle>DVB frontend open()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>fe-open</refname>
|
||||
<refpurpose>Open a frontend device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>open</function></funcdef>
|
||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>device_name</parameter></term>
|
||||
<listitem>
|
||||
<para>Device to be opened.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>Open flags. Access can either be
|
||||
<constant>O_RDWR</constant> or <constant>O_RDONLY</constant>.</para>
|
||||
<para>Multiple opens are allowed with <constant>O_RDONLY</constant>. In this mode, only query and read ioctls are allowed.</para>
|
||||
<para>Only one open is allowed in <constant>O_RDWR</constant>. In this mode, all ioctls are allowed.</para>
|
||||
<para>When the <constant>O_NONBLOCK</constant> flag is given, the system calls may return &EAGAIN; when no data is available or when the device driver is temporarily busy.</para>
|
||||
<para>Other flags have no effect.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>This system call opens a named frontend device (<constant>/dev/dvb/adapter?/frontend?</constant>)
|
||||
for subsequent use. Usually the first thing to do after a successful open is to
|
||||
find out the frontend type with <link linkend="FE_GET_INFO">FE_GET_INFO</link>.</para>
|
||||
<para>The device can be opened in read-only mode, which only allows monitoring of
|
||||
device status and statistics, or read/write mode, which allows any kind of use
|
||||
(e.g. performing tuning operations.)
|
||||
</para>
|
||||
<para>In a system with multiple front-ends, it is usually the case that multiple devices
|
||||
cannot be open in read/write mode simultaneously. As long as a front-end
|
||||
device is opened in read/write mode, other open() calls in read/write mode will
|
||||
either fail or block, depending on whether non-blocking or blocking mode was
|
||||
specified. A front-end device opened in blocking mode can later be put into
|
||||
non-blocking mode (and vice versa) using the F_SETFL command of the fcntl
|
||||
system call. This is a standard system call, documented in the Linux manual
|
||||
page for fcntl. When an open() call has succeeded, the device will be ready
|
||||
for use in the specified mode. This implies that the corresponding hardware is
|
||||
powered up, and that other front-ends may have been powered down to make
|
||||
that possible.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success <function>open</function> returns the new file
|
||||
descriptor. On error -1 is returned, and the <varname>errno</varname>
|
||||
variable is set appropriately. Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EACCES</errorcode></term>
|
||||
<listitem>
|
||||
<para>The caller has no permission to access the
|
||||
device.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The the device driver is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENXIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>No device corresponding to this device special file
|
||||
exists.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENOMEM</errorcode></term>
|
||||
<listitem>
|
||||
<para>Not enough kernel memory was available to complete the
|
||||
request.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EMFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The process already has the maximum number of
|
||||
files open.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The limit on the total number of files open on the
|
||||
system has been reached.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENODEV</errorcode></term>
|
||||
<listitem>
|
||||
<para>The device got removed.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="frontend_f_close">
|
||||
<refmeta>
|
||||
<refentrytitle>DVB frontend close()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>fe-close</refname>
|
||||
<refpurpose>Close a frontend device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>close</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>This system call closes a previously opened front-end device. After closing
|
||||
a front-end device, its corresponding hardware might be powered down
|
||||
automatically.</para>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>The function returns <returnvalue>0</returnvalue> on
|
||||
success, <returnvalue>-1</returnvalue> on failure and the
|
||||
<varname>errno</varname> is set appropriately. Possible error
|
||||
codes:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid open file
|
||||
descriptor.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
&sub-fe-get-info;
|
||||
&sub-fe-read-status;
|
||||
&sub-fe-get-property;
|
||||
&sub-fe-diseqc-reset-overload;
|
||||
&sub-fe-diseqc-send-master-cmd;
|
||||
&sub-fe-diseqc-recv-slave-reply;
|
||||
&sub-fe-diseqc-send-burst;
|
||||
&sub-fe-set-tone;
|
||||
&sub-fe-set-voltage;
|
||||
&sub-fe-enable-high-lnb-voltage;
|
||||
&sub-fe-set-frontend-tune-mode;
|
||||
|
||||
</section>
|
||||
|
||||
<section id="frontend_legacy_dvbv3_api">
|
||||
<title>DVB Frontend legacy API (a. k. a. DVBv3)</title>
|
||||
<para>The usage of this API is deprecated, as it doesn't support all digital
|
||||
TV standards, doesn't provide good statistics measurements and provides
|
||||
incomplete information. This is kept only to support legacy applications.</para>
|
||||
|
||||
&sub-frontend_legacy_api;
|
||||
</section>
|
|
@ -1,654 +0,0 @@
|
|||
<section id="frontend_legacy_types">
|
||||
<title>Frontend Legacy Data Types</title>
|
||||
|
||||
<section id="fe-type-t">
|
||||
<title>Frontend type</title>
|
||||
|
||||
<para>For historical reasons, frontend types are named by the type of modulation
|
||||
used in transmission. The fontend types are given by fe_type_t type, defined as:</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-type">
|
||||
<title>Frontend types</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>fe_type</entry>
|
||||
<entry>Description</entry>
|
||||
<entry><link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> equivalent type</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry id="FE-QPSK"><constant>FE_QPSK</constant></entry>
|
||||
<entry>For DVB-S standard</entry>
|
||||
<entry><constant>SYS_DVBS</constant></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-QAM"><constant>FE_QAM</constant></entry>
|
||||
<entry>For DVB-C annex A standard</entry>
|
||||
<entry><constant>SYS_DVBC_ANNEX_A</constant></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-OFDM"><constant>FE_OFDM</constant></entry>
|
||||
<entry>For DVB-T standard</entry>
|
||||
<entry><constant>SYS_DVBT</constant></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry id="FE-ATSC"><constant>FE_ATSC</constant></entry>
|
||||
<entry>For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US.</entry>
|
||||
<entry><constant>SYS_ATSC</constant> (terrestrial) or <constant>SYS_DVBC_ANNEX_B</constant> (cable)</entry>
|
||||
</row>
|
||||
</tbody></tgroup></table>
|
||||
|
||||
<para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're
|
||||
supported via the new <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter.
|
||||
</para>
|
||||
|
||||
<para>In the old days, &dvb-frontend-info; used to contain
|
||||
<constant>fe_type_t</constant> field to indicate the delivery systems,
|
||||
filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is
|
||||
still filled to keep backward compatibility, the usage of this
|
||||
field is deprecated, as it can report just one delivery system, but some
|
||||
devices support multiple delivery systems. Please use
|
||||
<link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link> instead.
|
||||
</para>
|
||||
<para>On devices that support multiple delivery systems,
|
||||
&dvb-frontend-info;::<constant>fe_type_t</constant> is filled with the
|
||||
currently standard, as selected by the last call to
|
||||
<link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link>
|
||||
using the &DTV-DELIVERY-SYSTEM; property.</para>
|
||||
</section>
|
||||
|
||||
<section id="fe-bandwidth-t">
|
||||
<title>Frontend bandwidth</title>
|
||||
|
||||
<table pgwide="1" frame="none" id="fe-bandwidth">
|
||||
<title>enum fe_bandwidth</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry id="BANDWIDTH-AUTO"><constant>BANDWIDTH_AUTO</constant></entry>
|
||||
<entry>Autodetect bandwidth (if supported)</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-1-712-MHZ"><constant>BANDWIDTH_1_712_MHZ</constant></entry>
|
||||
<entry>1.712 MHz</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-5-MHZ"><constant>BANDWIDTH_5_MHZ</constant></entry>
|
||||
<entry>5 MHz</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-6-MHZ"><constant>BANDWIDTH_6_MHZ</constant></entry>
|
||||
<entry>6 MHz</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-7-MHZ"><constant>BANDWIDTH_7_MHZ</constant></entry>
|
||||
<entry>7 MHz</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-8-MHZ"><constant>BANDWIDTH_8_MHZ</constant></entry>
|
||||
<entry>8 MHz</entry>
|
||||
</row><row>
|
||||
<entry id="BANDWIDTH-10-MHZ"><constant>BANDWIDTH_10_MHZ</constant></entry>
|
||||
<entry>10 MHz</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="dvb-frontend-parameters">
|
||||
<title>frontend parameters</title>
|
||||
<para>The kind of parameters passed to the frontend device for tuning depend on
|
||||
the kind of hardware you are using.</para>
|
||||
<para>The struct <constant>dvb_frontend_parameters</constant> uses an
|
||||
union with specific per-system parameters. However, as newer delivery systems
|
||||
required more data, the structure size weren't enough to fit, and just
|
||||
extending its size would break the existing applications. So, those parameters
|
||||
were replaced by the usage of <link linkend="FE_GET_PROPERTY">
|
||||
<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> ioctl's. The
|
||||
new API is flexible enough to add new parameters to existing delivery systems,
|
||||
and to add newer delivery systems.</para>
|
||||
<para>So, newer applications should use <link linkend="FE_GET_PROPERTY">
|
||||
<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> instead, in
|
||||
order to be able to support the newer System Delivery like DVB-S2, DVB-T2,
|
||||
DVB-C2, ISDB, etc.</para>
|
||||
<para>All kinds of parameters are combined as an union in the FrontendParameters structure:
|
||||
<programlisting>
|
||||
struct dvb_frontend_parameters {
|
||||
uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/
|
||||
/⋆ 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;
|
||||
};
|
||||
</programlisting></para>
|
||||
<para>In the case of QPSK frontends the <constant>frequency</constant> field specifies the intermediate
|
||||
frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of
|
||||
the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and
|
||||
OFDM frontends the <constant>frequency</constant> specifies the absolute frequency and is given in Hz.
|
||||
</para>
|
||||
|
||||
<section id="dvb-qpsk-parameters">
|
||||
<title>QPSK parameters</title>
|
||||
<para>For satellite QPSK frontends you have to use the <constant>dvb_qpsk_parameters</constant> structure:</para>
|
||||
<programlisting>
|
||||
struct dvb_qpsk_parameters {
|
||||
uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/
|
||||
&fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
|
||||
<section id="dvb-qam-parameters">
|
||||
<title>QAM parameters</title>
|
||||
<para>for cable QAM frontend you use the <constant>dvb_qam_parameters</constant> structure:</para>
|
||||
<programlisting>
|
||||
struct dvb_qam_parameters {
|
||||
uint32_t 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) ⋆/
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
|
||||
<section id="dvb-vsb-parameters">
|
||||
<title>VSB parameters</title>
|
||||
<para>ATSC frontends are supported by the <constant>dvb_vsb_parameters</constant> structure:</para>
|
||||
<programlisting>
|
||||
struct dvb_vsb_parameters {
|
||||
&fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
|
||||
<section id="dvb-ofdm-parameters">
|
||||
<title>OFDM parameters</title>
|
||||
<para>DVB-T frontends are supported by the <constant>dvb_ofdm_parameters</constant> structure:</para>
|
||||
<programlisting>
|
||||
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;
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section id="dvb-frontend-event">
|
||||
<title>frontend events</title>
|
||||
<programlisting>
|
||||
struct dvb_frontend_event {
|
||||
fe_status_t status;
|
||||
struct dvb_frontend_parameters parameters;
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section id="frontend_legacy_fcalls">
|
||||
<title>Frontend Legacy Function Calls</title>
|
||||
|
||||
<para>Those functions are defined at DVB version 3. The support is kept in
|
||||
the kernel due to compatibility issues only. Their usage is strongly
|
||||
not recommended</para>
|
||||
|
||||
<section id="FE_READ_BER">
|
||||
<title>FE_READ_BER</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call returns the bit error rate for the signal currently
|
||||
received/demodulated by the front-end. For this command, read-only access to
|
||||
the device is sufficient.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_BER">FE_READ_BER</link>,
|
||||
uint32_t ⋆ber);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_READ_BER">FE_READ_BER</link> for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>uint32_t *ber</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The bit error rate is stored into *ber.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="FE_READ_SNR">
|
||||
<title>FE_READ_SNR</title>
|
||||
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call returns the signal-to-noise ratio for the signal currently received
|
||||
by the front-end. For this command, read-only access to the device is sufficient.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t
|
||||
⋆snr);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_READ_SNR">FE_READ_SNR</link> for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>uint16_t *snr</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The signal-to-noise ratio is stored into *snr.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="FE_READ_SIGNAL_STRENGTH">
|
||||
<title>FE_READ_SIGNAL_STRENGTH</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call returns the signal strength value for the signal currently received
|
||||
by the front-end. For this command, read-only access to the device is sufficient.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl( int fd, int request =
|
||||
<link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t ⋆strength);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> for this
|
||||
command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>uint16_t *strength</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The signal strength value is stored into *strength.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="FE_READ_UNCORRECTED_BLOCKS">
|
||||
<title>FE_READ_UNCORRECTED_BLOCKS</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call returns the number of uncorrected blocks detected by the device
|
||||
driver during its lifetime. For meaningful measurements, the increment in block
|
||||
count during a specific time interval should be calculated. For this command,
|
||||
read-only access to the device is sufficient.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>Note that the counter will wrap to zero after its maximum count has been
|
||||
reached.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl( int fd, int request =
|
||||
<link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link>, uint32_t ⋆ublocks);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> for this
|
||||
command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>uint32_t *ublocks</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>The total number of uncorrected blocks seen by the driver
|
||||
so far.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
<section id="FE_SET_FRONTEND">
|
||||
<title>FE_SET_FRONTEND</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call starts a tuning operation using specified parameters. The result
|
||||
of this call will be successful if the parameters were valid and the tuning could
|
||||
be initiated. The result of the tuning operation in itself, however, will arrive
|
||||
asynchronously as an event (see documentation for <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> and
|
||||
FrontendEvent.) If a new <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> operation is initiated before
|
||||
the previous one was completed, the previous operation will be aborted in favor
|
||||
of the new one. This command requires read/write access to the device.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>,
|
||||
struct dvb_frontend_parameters ⋆p);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>struct
|
||||
dvb_frontend_parameters
|
||||
*p</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Points to parameters for tuning operation.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>EINVAL</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Maximum supported symbol rate reached.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
</section>
|
||||
|
||||
<section id="FE_GET_FRONTEND">
|
||||
<title>FE_GET_FRONTEND</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call queries the currently effective frontend parameters. For this
|
||||
command, read-only access to the device is sufficient.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>,
|
||||
struct dvb_frontend_parameters ⋆p);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>struct
|
||||
dvb_frontend_parameters
|
||||
*p</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Points to parameters for tuning operation.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>EINVAL</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Maximum supported symbol rate reached.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="FE_GET_EVENT">
|
||||
<title>FE_GET_EVENT</title>
|
||||
<para>DESCRIPTION
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>This ioctl call returns a frontend event if available. If an event is not
|
||||
available, the behavior depends on whether the device is in blocking or
|
||||
non-blocking mode. In the latter case, the call fails immediately with errno
|
||||
set to EWOULDBLOCK. In the former case, the call blocks until an event
|
||||
becomes available.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>The standard Linux poll() and/or select() system calls can be used with the
|
||||
device file descriptor to watch for new events. For select(), the file descriptor
|
||||
should be included in the exceptfds argument, and for poll(), POLLPRI should
|
||||
be specified as the wake-up condition. Since the event queue allocated is
|
||||
rather small (room for 8 events), the queue must be serviced regularly to avoid
|
||||
overflow. If an overflow happens, the oldest event is discarded from the queue,
|
||||
and an error (EOVERFLOW) occurs the next time the queue is read. After
|
||||
reporting the error condition in this fashion, subsequent
|
||||
<link linkend="FE_GET_EVENT">FE_GET_EVENT</link>
|
||||
calls will return events from the queue as usual.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>For the sake of implementation simplicity, this command requires read/write
|
||||
access to the device.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>SYNOPSIS
|
||||
</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int ioctl(int fd, int request = QPSK_GET_EVENT,
|
||||
struct dvb_frontend_event ⋆ev);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>PARAMETERS
|
||||
</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>int fd</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>File descriptor returned by a previous call to open().</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>int request</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Equals <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> for this command.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>struct
|
||||
dvb_frontend_event
|
||||
*ev</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Points to the location where the event,</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>if any, is to be stored.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
<informaltable><tgroup cols="2"><tbody><row><entry
|
||||
align="char">
|
||||
<para>EWOULDBLOCK</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>There is no event pending, and the device is in
|
||||
non-blocking mode.</para>
|
||||
</entry>
|
||||
</row><row><entry
|
||||
align="char">
|
||||
<para>EOVERFLOW</para>
|
||||
</entry><entry
|
||||
align="char">
|
||||
<para>Overflow in event queue - one or more events were lost.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
</section>
|
||||
|
||||
<section id="FE_DISHNETWORK_SEND_LEGACY_CMD">
|
||||
<title>FE_DISHNETWORK_SEND_LEGACY_CMD</title>
|
||||
<para>DESCRIPTION</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row>
|
||||
<entry align="char">
|
||||
<para>WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers.</para>
|
||||
<para>It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches.</para>
|
||||
<para>As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004.</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>SYNOPSIS</para>
|
||||
<informaltable><tgroup cols="1"><tbody><row>
|
||||
<entry align="char">
|
||||
<para>int ioctl(int fd, int request =
|
||||
<link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link>, unsigned long cmd);</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
<para>PARAMETERS</para>
|
||||
<informaltable><tgroup cols="2"><tbody><row>
|
||||
<entry align="char">
|
||||
<para>unsigned long cmd</para>
|
||||
</entry>
|
||||
<entry align="char">
|
||||
<para>
|
||||
sends the specified raw cmd to the dish via DISEqC.
|
||||
</para>
|
||||
</entry>
|
||||
</row></tbody></tgroup></informaltable>
|
||||
|
||||
&return-value-dvb;
|
||||
</section>
|
||||
|
||||
</section>
|
|
@ -1,211 +0,0 @@
|
|||
<title>Introduction</title>
|
||||
|
||||
<section id="requisites">
|
||||
<title>What you need to know</title>
|
||||
|
||||
<para>The reader of this document is required to have some knowledge in
|
||||
the area of digital video broadcasting (DVB) and should be familiar with
|
||||
part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e
|
||||
you should know what a program/transport stream (PS/TS) is and what is
|
||||
meant by a packetized elementary stream (PES) or an I-frame.</para>
|
||||
|
||||
<para>Various DVB standards documents are available from
|
||||
<ulink url="http://www.dvb.org" /> and/or
|
||||
<ulink url="http://www.etsi.org" />.</para>
|
||||
|
||||
<para>It is also necessary to know how to access unix/linux devices and
|
||||
how to use ioctl calls. This also includes the knowledge of C or C++.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="history">
|
||||
<title>History</title>
|
||||
|
||||
<para>The first API for DVB cards we used at Convergence in late 1999
|
||||
was an extension of the Video4Linux API which was primarily developed
|
||||
for frame grabber cards. As such it was not really well suited to be
|
||||
used for DVB cards and their new features like recording MPEG streams
|
||||
and filtering several section and PES data streams at the same time.
|
||||
</para>
|
||||
|
||||
<para>In early 2000, we were approached by Nokia with a proposal for a
|
||||
new standard Linux DVB API. As a commitment to the development of
|
||||
terminals based on open standards, Nokia and Convergence made it
|
||||
available to all Linux developers and published it on
|
||||
<ulink url="https://linuxtv.org" /> in September 2000.
|
||||
Convergence is the maintainer of the Linux DVB API. Together with the
|
||||
LinuxTV community (i.e. you, the reader of this document), the Linux DVB
|
||||
API will be constantly reviewed and improved. With the Linux driver for
|
||||
the Siemens/Hauppauge DVB PCI card Convergence provides a first
|
||||
implementation of the Linux DVB API.</para>
|
||||
</section>
|
||||
|
||||
<section id="overview">
|
||||
<title>Overview</title>
|
||||
|
||||
<figure id="stb_components">
|
||||
<title>Components of a DVB card/STB</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="dvbstb.pdf" format="PS" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="dvbstb.png" format="PNG" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>A DVB PCI card or DVB set-top-box (STB) usually consists of the
|
||||
following main hardware components: </para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
|
||||
<para>Frontend consisting of tuner and DVB demodulator</para>
|
||||
|
||||
<para>Here the raw signal reaches the DVB hardware from a satellite dish
|
||||
or antenna or directly from cable. The frontend down-converts and
|
||||
demodulates this signal into an MPEG transport stream (TS). In case of a
|
||||
satellite frontend, this includes a facility for satellite equipment
|
||||
control (SEC), which allows control of LNB polarization, multi feed
|
||||
switches or dish rotors.</para>
|
||||
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para>Conditional Access (CA) hardware like CI adapters and smartcard slots
|
||||
</para>
|
||||
|
||||
<para>The complete TS is passed through the CA hardware. Programs to
|
||||
which the user has access (controlled by the smart card) are decoded in
|
||||
real time and re-inserted into the TS.</para>
|
||||
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Demultiplexer which filters the incoming DVB stream</para>
|
||||
|
||||
<para>The demultiplexer splits the TS into its components like audio and
|
||||
video streams. Besides usually several of such audio and video streams
|
||||
it also contains data streams with information about the programs
|
||||
offered in this or other streams of the same provider.</para>
|
||||
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para>MPEG2 audio and video decoder</para>
|
||||
|
||||
<para>The main targets of the demultiplexer are the MPEG2 audio and
|
||||
video decoders. After decoding they pass on the uncompressed audio and
|
||||
video to the computer screen or (through a PAL/NTSC encoder) to a TV
|
||||
set.</para>
|
||||
|
||||
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow
|
||||
between those components.</para>
|
||||
|
||||
<para>On a DVB PCI card not all of these have to be present since some
|
||||
functionality can be provided by the main CPU of the PC (e.g. MPEG
|
||||
picture and sound decoding) or is not needed (e.g. for data-only uses
|
||||
like “internet over satellite”). Also not every card or STB
|
||||
provides conditional access hardware.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="dvb_devices">
|
||||
<title>Linux DVB Devices</title>
|
||||
|
||||
<para>The Linux DVB API lets you control these hardware components
|
||||
through currently six Unix-style character devices for video, audio,
|
||||
frontend, demux, CA and IP-over-DVB networking. The video and audio
|
||||
devices control the MPEG2 decoder hardware, the frontend device the
|
||||
tuner and the DVB demodulator. The demux device gives you control over
|
||||
the PES and section filters of the hardware. If the hardware does not
|
||||
support filtering these filters can be implemented in software. Finally,
|
||||
the CA device controls all the conditional access capabilities of the
|
||||
hardware. It can depend on the individual security requirements of the
|
||||
platform, if and how many of the CA functions are made available to the
|
||||
application through this device.</para>
|
||||
|
||||
<para>All devices can be found in the <constant>/dev</constant>
|
||||
tree under <constant>/dev/dvb</constant>. The individual devices
|
||||
are called:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
|
||||
<para><constant>/dev/dvb/adapterN/audioM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>/dev/dvb/adapterN/videoM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><constant>/dev/dvb/adapterN/frontendM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para><constant>/dev/dvb/adapterN/netM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para><constant>/dev/dvb/adapterN/demuxM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para><constant>/dev/dvb/adapterN/dvrM</constant>,</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
||||
<para><constant>/dev/dvb/adapterN/caM</constant>,</para></listitem></itemizedlist>
|
||||
|
||||
<para>where N enumerates the DVB PCI cards in a system starting
|
||||
from 0, and M enumerates the devices of each type within each
|
||||
adapter, starting from 0, too. We will omit the “
|
||||
<constant>/dev/dvb/adapterN/</constant>” in the further discussion
|
||||
of these devices.</para>
|
||||
|
||||
<para>More details about the data structures and function calls of all
|
||||
the devices are described in the following chapters.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="include_files">
|
||||
<title>API include files</title>
|
||||
|
||||
<para>For each of the DVB devices a corresponding include file exists.
|
||||
The DVB API include files should be included in application sources with
|
||||
a partial path like:</para>
|
||||
|
||||
<programlisting>
|
||||
#include <linux/dvb/audio.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/ca.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/dmx.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/frontend.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/net.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/osd.h>
|
||||
</programlisting>
|
||||
<programlisting>
|
||||
#include <linux/dvb/video.h>
|
||||
</programlisting>
|
||||
|
||||
<para>To enable applications to support different API version, an
|
||||
additional include file
|
||||
<constant>linux/dvb/version.h</constant> exists, which defines the
|
||||
constant <constant>DVB_API_VERSION</constant>. This document
|
||||
describes <constant>DVB_API_VERSION 5.10</constant>.
|
||||
</para>
|
||||
|
||||
</section>
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
<title>DVB Network API</title>
|
||||
<para>The DVB net device controls the mapping of data packages that are
|
||||
part of a transport stream to be mapped into a virtual network interface,
|
||||
visible through the standard Linux network protocol stack.</para>
|
||||
<para>Currently, two encapsulations are supported:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para><ulink url="http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation">
|
||||
Multi Protocol Encapsulation (MPE)</ulink></para></listitem>
|
||||
<listitem><para><ulink url="http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation">
|
||||
Ultra Lightweight Encapsulation (ULE)</ulink></para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>In order to create the Linux virtual network interfaces, an application
|
||||
needs to tell to the Kernel what are the PIDs and the encapsulation types
|
||||
that are present on the transport stream. This is done through
|
||||
<constant>/dev/dvb/adapter?/net?</constant> device node.
|
||||
The data will be available via virtual <constant>dvb?_?</constant>
|
||||
network interfaces, and will be controlled/routed via the standard
|
||||
ip tools (like ip, route, netstat, ifconfig, etc).</para>
|
||||
<para> Data types and and ioctl definitions are defined via
|
||||
<constant>linux/dvb/net.h</constant> header.</para>
|
||||
|
||||
<section id="net_fcalls">
|
||||
<title>DVB net Function Calls</title>
|
||||
|
||||
|
||||
<refentry id="NET_ADD_IF">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl NET_ADD_IF</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>NET_ADD_IF</refname>
|
||||
<refpurpose>Creates a new network interface for a given Packet ID.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_TONE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>net_if</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &dvb-net-if;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The NET_ADD_IF ioctl system call selects the Packet ID (PID) that
|
||||
contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE)
|
||||
and the interface number for the new interface to be created. When the
|
||||
system call successfully returns, a new virtual network interface is created.</para>
|
||||
<para>The &dvb-net-if;::ifnum field will be filled with the number of the
|
||||
created interface.</para>
|
||||
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
|
||||
<refsect1 id="dvb-net-if-t">
|
||||
<title>struct <structname>dvb_net_if</structname> description</title>
|
||||
|
||||
<table pgwide="1" frame="none" id="dvb-net-if">
|
||||
<title>struct <structname>dvb_net_if</structname></title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry>ID</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry align="char">pid</entry>
|
||||
<entry align="char">Packet ID (PID) of the MPEG-TS that contains
|
||||
data</entry>
|
||||
</row><row>
|
||||
<entry align="char">ifnum</entry>
|
||||
<entry align="char">number of the DVB interface.</entry>
|
||||
</row><row>
|
||||
<entry align="char">feedtype</entry>
|
||||
<entry align="char">Encapsulation type of the feed. It can be:
|
||||
<constant>DVB_NET_FEEDTYPE_MPE</constant> for MPE encoding
|
||||
or
|
||||
<constant>DVB_NET_FEEDTYPE_ULE</constant> for ULE encoding.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="NET_REMOVE_IF">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl NET_REMOVE_IF</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>NET_REMOVE_IF</refname>
|
||||
<refpurpose>Removes a network interface.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>int <parameter>ifnum</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_TONE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>net_if</parameter></term>
|
||||
<listitem>
|
||||
<para>number of the interface to be removed</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The NET_REMOVE_IF ioctl deletes an interface previously created
|
||||
via &NET-ADD-IF;.</para>
|
||||
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
||||
<refentry id="NET_GET_IF">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl NET_GET_IF</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>NET_GET_IF</refname>
|
||||
<refpurpose>Read the configuration data of an interface created via
|
||||
&NET-ADD-IF;.</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fe_fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>FE_SET_TONE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>net_if</parameter></term>
|
||||
<listitem>
|
||||
<para>pointer to &dvb-net-if;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The NET_GET_IF ioctl uses the interface number given by the
|
||||
&dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with
|
||||
the packet ID and encapsulation type used on such interface. If the
|
||||
interface was not created yet with &NET-ADD-IF;, it will return -1 and
|
||||
fill the <constant>errno</constant> with <constant>EINVAL</constant>
|
||||
error code.</para>
|
||||
|
||||
&return-value-dvb;
|
||||
</refsect1>
|
||||
</refentry>
|
||||
</section>
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,398 +0,0 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
|
||||
WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ
|
||||
bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll
|
||||
zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG
|
||||
ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI
|
||||
GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm
|
||||
iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI
|
||||
iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33
|
||||
3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e
|
||||
oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn
|
||||
PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD
|
||||
KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE
|
||||
xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw
|
||||
Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE
|
||||
RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE
|
||||
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
|
||||
JBobG2POnDnx7W9/+4xzLS31xBNPxM033xwnTpyIlr6pJkmSePvtty/6qaNBzAAAXGTLli2Lo0eP
|
||||
vq/bNDY2xsqVK+Omm26Kd9555wN930ceeSRuu+229xVEeXl50alTp4iIeO2118JUAe2VmRkAgHOo
|
||||
qamJgoKCiHj3rGV1dXXv6/a5ubnxiU98IjZs2BC9e/du8e1Wr14dU6dObdF8TCqVirq6uhgwYEBM
|
||||
mDAhxo4dG6NGjYrOnTvbgYgZAICObN++fbF169bYunVrPPfcc1FWVhZ1dXWRl5fXooH8nJycKC4u
|
||||
jmeffTYGDRp0zu/34IMPxne+850zHlXJy8uLurq6yM3NjS9+8Ytx0003xdixY6N///52FmIGAIAz
|
||||
q6+vj5dffjmef/75+Nvf/habNm2K/fv3RyqViuzs7KitrT3lNllZWZGXlxe///3vY+zYsWfc9s9+
|
||||
9rOYN29es0By9AXEDABAm/nPf/4TL7zwQmzZsiU2bdoUr776atTX10fnzp2jtra22VGWX/3qV3HX
|
||||
XXedso377rsvFi5cGBHvnua5sbHR0RcQMwAAF1ZdXV288sorsXXr1ti8eXOUlpbGgQMHmr7+pS99
|
||||
KdavXx9ZWe+ek2natGnx61//OiIi+vfvH1/5ylccfQExAwBcKPv27Ys//vGPFuIMDh8+HP/617/i
|
||||
6aefjoaGhujbt2/ccccdsX79+vj3v/8dH/rQh2L06NHRrVs3i3UWI0eOjE996lMWQsyIGQCg9ZSW
|
||||
lsZ1110XvXr1ii5duliQczj5N2mysrKaTqfM2e3evTuWL18e06ZNsxgdXMoSAABt4fXXX4+ioiIL
|
||||
QasbPHiwRSAi/NFMAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBmAAAAxAwAAICY
|
||||
AQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAAQMwAAACIGQAA
|
||||
ADEDAACIGQAAADEDAAAgZgAAADEDAAAgZgAAAMQMAACAmAEAANqBlCUAADh/VVVVsXfv3vP7wSyV
|
||||
ik9+8pOxf//+OHjw4BmvV1xcHB/5yEdO+XySJPHaa6+d9jYDBgyILl262FGIGQAAmvvLX/4St9xy
|
||||
y3lto2fPnrF///7YvXt3rFy5Mh5++OFIkqTp6yUlJTFx4sQYNWrUGWPmz3/+c2zZsiWefPLJiIgo
|
||||
KiqK6dOnx4wZM8QMYgYAgFPV1NRERETv3r1jwYIF8dnPfjYuu+yySKVSUVpaGpMmTYqIiI997GPx
|
||||
3HPPRZIkcfz48XjrrbfiySefjGXLljVtY8SIETFixIi44oorYt68eU3f44c//GFMnDjxjPchKysr
|
||||
7rnnnrjnnnti4MCBsWPHjnj88cdjzJgxdhBiBgCA06uuro6cnJz461//GiUlJc2+1qNHj6aPc3Jy
|
||||
ok+fPk2XL7/88hg9enRceumlsXjx4ma3mz17djz00EOxc+fOiIgoLS09a8yclCRJVFRUxMiRI4UM
|
||||
7ZoTAAAAtIKampoYP378KSHTUjNmzIjGxsZoaGho+lwqlYqFCxc2XX7kkUfi2LFj59zWCy+8EAcO
|
||||
HIgZM2bYMYgZAADOHTPjxo37wLe/7LLLYtiwYXH8+PFmn7/llluiX79+ERFx5MiR+O1vf3vOba1e
|
||||
vTq6d+8eEyZMsGMQMwAAnN28efNiypQp57WNLVu2REFBQbPPpVKpmDVrVtPln//8582O3vyvo0eP
|
||||
xqOPPhpTpkyJvLw8OwYxAwDAOX6oysqKTp06ndc2srOzT7uNb37zm1FUVBQREW+88UbTmcpO59FH
|
||||
H41jx47Ft771LTsFMQMAwMVVWFgYU6dObbp8//33n/Z6SZLEihUrYtSoUR94dgfEDAAArWrmzJmR
|
||||
Sr17ItotW7bE888/f8p1XnrppXjllVeahQ+IGQAALqo+ffrEbbfd1nT5dEdnVqxYEcXFxfHVr37V
|
||||
giFmAABIH3PmzGn6+Iknnog9e/Y0Xa6qqorHHnssJk+eHJ07d7ZYiBkAANLH0KFD4/rrr4+IiMbG
|
||||
xnjggQeavmbwHzEDAEBamzt3btPHK1eujKqqqqbB/xEjRsSnP/1pi4SYAQAg/dxwww1NZyo7evRo
|
||||
rFq1KrZt2xZlZWUG/xEzAACk8Q9vWVnNZmeWLVsWDz74YFxyySVx6623WiDEDAAA6Wvy5MnRvXv3
|
||||
iIjYu3dvrFmzJu64447o0qWLxUHMAADQehobG1t1e/n5+TF9+vRmnzP4j5gBAKDVvfPOO00f19TU
|
||||
tMo2p0+fHnl5eRERMWzYsPjMZz5joREzAAC0rmeeeabp471798aOHTvOe5u9evWKyZMnR0QY/EfM
|
||||
AADQeg4dOhRTpkyJIUOGxIoVK5p97eqrr44bb7wxfvKTn5zX95gzZ04UFhbGxIkTLTgdUsoSAAC0
|
||||
vm7dusWaNWva9HtcccUVsWnTpigsLLTgdEiOzAAAZLChQ4daBMQMAACAmAEAABAzAAAAYgYAABAz
|
||||
AAAAYgYAAEDMAAAAYgYAAEDMAAAAiBkAAEDMAAAAiBkAAAAxAwAAIGYAAAAxAwAAIGYAAADEDAAA
|
||||
IGYAAADEDAAAgJgBAADEjCUAAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAAAGIGAAAQMwAAAGIGAABA
|
||||
zAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAACA9JCyBABAW+jVq1cUFBRYCFpdZWWlRSAiIjolSZJY
|
||||
BgCgtVRUVMTGjRstBG1q6NCh8fGPf9xCiBkxAwAAZB4zMwAAQEZKvb79xaYLJYOutiIAAEBGcGQG
|
||||
AADISP8FpxZnWS0U37cAAAAASUVORK5CYII=
|
|
@ -1,447 +0,0 @@
|
|||
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
|
||||
l3O5NwEBADs=
|
|
@ -1,445 +0,0 @@
|
|||
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
|
||||
kh6JXympkivJkm4TEAA7
|
|
@ -1,37 +0,0 @@
|
|||
R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX
|
||||
F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ
|
||||
TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn
|
||||
Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c
|
||||
SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX
|
||||
1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3///////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////yH+
|
||||
FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW
|
||||
l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P
|
||||
0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D
|
||||
txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl
|
||||
DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp
|
||||
jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD
|
||||
u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv
|
||||
RenrdgnwM8uFQzpSOfrrTcihW5KyogiYM89VF9cUWq7i3+sRTVlB5Lyj6ngNd/58pn0mMUmY4ER6
|
||||
+R2nGWCEMbUIGQE2QUYj3Fnm3VibIPgeJ178kEFz4Imn4F8aEJbcWY18EcQLViziVoITOvLSFgXA
|
||||
5R4iVvxg44045oijByAU0QMIQAYppJAwPHhIFILx/qUeieDFCIB1igjBg45U4nhBlVSaAEIQYiTi
|
||||
2IzXLbTKF1mUaeaZaJr5RAc5aKeIFStw0RErVehARZp4mrlAnmlCscILU8yp3y5iILECBI7AKaeg
|
||||
q3DxQ5cuMgLgCg5uZBwuTpiAhBgQKZqRK45CKqYiftZ30aW1WEFDEF58xIinn4L6aCMIabHDDhye
|
||||
OqgtYgSRonOLwBqrrKImglAQUjyEalg0xjlRLKEuotayFIoliLC6whKtsVVFai222Wo7KyLT7kpU
|
||||
VeCGK26xhJTLmblZGZKuuutW1C2tUc1Lb7233TuqU9c6m9At2wJrLb68JEEGP/rG4u4iBaPnr7S8
|
||||
/ohhgsRnNOxwLgU/LJVh9YR8Qwsl3HCOCyHIIDI986yMjgwkzKBMyy63g1LN8JzAgskoq4wzOzT/
|
||||
3E0MIIiQggM2CG0ztbW88MUZDAgc7y5aFlHBCDsk4ebA8NryxQsZd7DoV7oIQcQKBpyhRRM/jOCE
|
||||
VV3X8kQRcKYtCBnsNsQLFHSLPQjecL+bi9lxApCFEjuM0ASzuXwNtdSMf5yLlkQEAcIOSmzN9S5O
|
||||
A6Dxs3HPogUIOSBhRQATy1LEE/d8vq+3t5BhhH0YA6zLFELo47qlocNChhC/unowLRYzDLnevbvy
|
||||
e/DC265LEqgPsntITCsPvCEef4fV9CVVz8ry/vYOjzwh3KvkvSrgh+985AGPDbrgvl9PbuoRNev+
|
||||
6wjHzzz29L8v7/G8g18r0sct8SkrEeXTyfkigaS9sIgRBCwge/bSlzBNAjAV/BACAXgIGAmmOxo8
|
||||
lybK8AC5TGdJh4igBAuhOUaUYQOWqQEIMVGb2jVGAh6iRA0N9iYOFmJE8RFhJ/CzIPn9qxDZoYR/
|
||||
NLEcBNClAUzIISWWw6FO+XAQQOzKAocjxUKoUBEImY+pIAEY+GhCCh0wT2OAkEVJkMc8EtGYB/cC
|
||||
pRBKjjVmTKER85fCBhlpEQ2c4SYGEKC3XWILCQhDGyUBIBNE4BG7O0IGtZg8SkRIEV+k2CJM/oSi
|
||||
R0gShWs5Q4aYY4kaiKiLlvDCBUjZCNcRMYh3zMSXFuEDHGAJS1e65Y20xKVGvPJNurTSjUbQox8N
|
||||
6ZhAosEf3ZIkADxQXsHU0QWI6SNkIrNIKlJAHSkpwEvIUEKK6AKfxrmncZbJT4BSxBZUIIgTlsic
|
||||
ZyrnE1bQJkws8gxkgieaIEDPFkaiBlCapR21dxwn7UWQTErEpCqlCMBQEJRrKdQKnkAaVFKiUB2g
|
||||
aEEPCk5YEpRshygV7VwRAU3lbRaZQsIA+qc+kBLCVriKhaos0CpcqIpVNpxaNwNXCGTJoldWyJ5C
|
||||
fcVDl35Up0blKVJjyT6lNvUgW/TfUp+6jzkhJhWqBqxfJQ+4Pqd6FXZXrepUv8rHsWK1q2e1qlnF
|
||||
SlVbsKWt4wurW6O6saxKFa5gZCn+5mrXiijNZn8FWmDTEbTBuqMSHDDsODCgWHEwtrHeeCxkucGB
|
||||
Y1j2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM3tLQIBADs=
|
|
@ -1,121 +0,0 @@
|
|||
R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm
|
||||
JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ
|
||||
SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc
|
||||
XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L
|
||||
SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi
|
||||
YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52
|
||||
dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f
|
||||
n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4
|
||||
uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd
|
||||
3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3///////////////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
|
||||
SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ
|
||||
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
|
||||
XnvvxTdfffflt19//+03IAA7
|
|
@ -1,213 +0,0 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA
|
||||
EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG
|
||||
DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu
|
||||
Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA
|
||||
PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O
|
||||
PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5
|
||||
FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws
|
||||
SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj
|
||||
AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m
|
||||
AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur
|
||||
hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1
|
||||
rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc
|
||||
8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr
|
||||
/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW
|
||||
5f/+//ro+fv49/7///37//71//3//v/8sZeTnQAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY4AABWO
|
||||
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
|
|
@ -1,206 +0,0 @@
|
|||
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
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
До Ширина: | Высота: | Размер: 35 KiB |
|
@ -1 +0,0 @@
|
|||
!*.xml
|
|
@ -1,381 +0,0 @@
|
|||
<bibliography>
|
||||
<title>References</title>
|
||||
|
||||
<biblioentry id="cea608">
|
||||
<abbrev>CEA 608-E</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Consumer Electronics Association (<ulink
|
||||
url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>CEA-608-E R-2014 "Line 21 Data Services"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="en300294">
|
||||
<abbrev>EN 300 294</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>European Telecommunication Standards Institute
|
||||
(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>EN 300 294 "625-line television Wide Screen Signalling
|
||||
(WSS)"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="ets300231">
|
||||
<abbrev>ETS 300 231</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>European Telecommunication Standards Institute
|
||||
(<ulink
|
||||
url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ETS 300 231 "Specification of the domestic video
|
||||
Programme Delivery Control system (PDC)"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="ets300706">
|
||||
<abbrev>ETS 300 706</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>European Telecommunication Standards Institute
|
||||
(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ETS 300 706 "Enhanced Teletext specification"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="mpeg2part1">
|
||||
<abbrev>ISO 13818-1</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>), International
|
||||
Organisation for Standardisation (<ulink
|
||||
url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information
|
||||
technology — Generic coding of moving pictures and associated
|
||||
audio information: Systems"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="mpeg2part2">
|
||||
<abbrev>ISO 13818-2</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>), International
|
||||
Organisation for Standardisation (<ulink
|
||||
url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information
|
||||
technology — Generic coding of moving pictures and associated
|
||||
audio information: Video"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu470">
|
||||
<abbrev>ITU BT.470</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.470-6 "Conventional Television
|
||||
Systems"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu601">
|
||||
<abbrev>ITU BT.601</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.601-5 "Studio Encoding Parameters
|
||||
of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect
|
||||
Ratios"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu653">
|
||||
<abbrev>ITU BT.653</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.653-3 "Teletext systems"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu709">
|
||||
<abbrev>ITU BT.709</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.709-5 "Parameter values for the
|
||||
HDTV standards for production and international programme
|
||||
exchange"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu1119">
|
||||
<abbrev>ITU BT.1119</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.1119 "625-line
|
||||
television Wide Screen Signalling (WSS)"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="jfif">
|
||||
<abbrev>JFIF</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Independent JPEG Group (<ulink
|
||||
url="http://www.ijg.org">http://www.ijg.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>JPEG File Interchange Format</title>
|
||||
<subtitle>Version 1.02</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu-t81">
|
||||
<abbrev>ITU-T.81</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union
|
||||
(<ulink url="http://www.itu.int">http://www.itu.int</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-T Recommendation T.81
|
||||
"Information Technology — Digital Compression and Coding of Continous-Tone
|
||||
Still Images — Requirements and Guidelines"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="w3c-jpeg-jfif">
|
||||
<abbrev>W3C JPEG JFIF</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>The World Wide Web Consortium (<ulink
|
||||
url="http://www.w3.org/Graphics/JPEG">http://www.w3.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>JPEG JFIF</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="smpte12m">
|
||||
<abbrev>SMPTE 12M</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Society of Motion Picture and Television Engineers
|
||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>SMPTE 12M-1999 "Television, Audio and Film - Time and
|
||||
Control Code"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="smpte170m">
|
||||
<abbrev>SMPTE 170M</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Society of Motion Picture and Television Engineers
|
||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>SMPTE 170M-1999 "Television - Composite Analog Video
|
||||
Signal - NTSC for Studio Applications"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="smpte240m">
|
||||
<abbrev>SMPTE 240M</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Society of Motion Picture and Television Engineers
|
||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>SMPTE 240M-1999 "Television - Signal Parameters -
|
||||
1125-Line High-Definition Production"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="smpte431">
|
||||
<abbrev>SMPTE RP 431-2</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Society of Motion Picture and Television Engineers
|
||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>SMPTE RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="smpte2084">
|
||||
<abbrev>SMPTE ST 2084</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Society of Motion Picture and Television Engineers
|
||||
(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>SMPTE ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="srgb">
|
||||
<abbrev>sRGB</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Electrotechnical Commission
|
||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement
|
||||
and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="sycc">
|
||||
<abbrev>sYCC</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Electrotechnical Commission
|
||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement
|
||||
and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="xvycc">
|
||||
<abbrev>xvYCC</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Electrotechnical Commission
|
||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement
|
||||
and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video
|
||||
applications - xvYCC"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="adobergb">
|
||||
<abbrev>AdobeRGB</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Adobe Systems Incorporated (<ulink url="http://www.adobe.com">http://www.adobe.com</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>Adobe© RGB (1998) Color Image Encoding Version 2005-05</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="oprgb">
|
||||
<abbrev>opRGB</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Electrotechnical Commission
|
||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement
|
||||
and management - Part 2-5: Colour management - Optional RGB colour space - opRGB"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="itu2020">
|
||||
<abbrev>ITU BT.2020</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Telecommunication Union (<ulink
|
||||
url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high
|
||||
definition television systems for production and international programme exchange"
|
||||
</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="tech3213">
|
||||
<abbrev>EBU Tech 3213</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>European Broadcast Union (<ulink
|
||||
url="http://www.ebu.ch">http://www.ebu.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>E.B.U. Standard for Chromaticity Tolerances for Studio Monitors"</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="iec62106">
|
||||
<abbrev>IEC 62106</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Electrotechnical Commission
|
||||
(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>Specification of the radio data system (RDS) for VHF/FM sound broadcasting
|
||||
in the frequency range from 87,5 to 108,0 MHz</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="nrsc4">
|
||||
<abbrev>NRSC-4-B</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>National Radio Systems Committee
|
||||
(<ulink url="http://www.nrscstandards.org">http://www.nrscstandards.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>NRSC-4-B: United States RBDS Standard</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="iso12232">
|
||||
<abbrev>ISO 12232:2006</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>International Organization for Standardization
|
||||
(<ulink url="http://www.iso.org">http://www.iso.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>Photography — Digital still cameras — Determination
|
||||
of exposure index, ISO speed ratings, standard output sensitivity, and
|
||||
recommended exposure index</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="cea861">
|
||||
<abbrev>CEA-861-E</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Consumer Electronics Association
|
||||
(<ulink url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>A DTV Profile for Uncompressed High Speed Digital Interfaces</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="vesadmt">
|
||||
<abbrev>VESA DMT</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Video Electronics Standards Association
|
||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="vesaedid">
|
||||
<abbrev>EDID</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Video Electronics Standards Association
|
||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>VESA Enhanced Extended Display Identification Data Standard</title>
|
||||
<subtitle>Release A, Revision 2</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="hdcp">
|
||||
<abbrev>HDCP</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Digital Content Protection LLC
|
||||
(<ulink url="http://www.digital-cp.com">http://www.digital-cp.com</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>High-bandwidth Digital Content Protection System</title>
|
||||
<subtitle>Revision 1.3</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="hdmi">
|
||||
<abbrev>HDMI</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>HDMI Licensing LLC
|
||||
(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>High-Definition Multimedia Interface</title>
|
||||
<subtitle>Specification Version 1.4a</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="hdmi2">
|
||||
<abbrev>HDMI2</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>HDMI Licensing LLC
|
||||
(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>High-Definition Multimedia Interface</title>
|
||||
<subtitle>Specification Version 2.0</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="dp">
|
||||
<abbrev>DP</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Video Electronics Standards Association
|
||||
(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor>
|
||||
</authorgroup>
|
||||
<title>VESA DisplayPort Standard</title>
|
||||
<subtitle>Version 1, Revision 2</subtitle>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="poynton">
|
||||
<abbrev>poynton</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Charles Poynton</corpauthor>
|
||||
</authorgroup>
|
||||
<title>Digital Video and HDTV, Algorithms and Interfaces</title>
|
||||
</biblioentry>
|
||||
|
||||
<biblioentry id="colimg">
|
||||
<abbrev>colimg</abbrev>
|
||||
<authorgroup>
|
||||
<corpauthor>Erik Reinhard et al.</corpauthor>
|
||||
</authorgroup>
|
||||
<title>Color Imaging: Fundamentals and Applications</title>
|
||||
</biblioentry>
|
||||
|
||||
</bibliography>
|
|
@ -1,659 +0,0 @@
|
|||
<programlisting>
|
||||
/*
|
||||
* V4L2 video capture example
|
||||
*
|
||||
* This program can be used and distributed without restrictions.
|
||||
*
|
||||
* This program is provided with the V4L2 API
|
||||
* see https://linuxtv.org/docs.php for more information
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <getopt.h> /* getopt_long() */
|
||||
|
||||
#include <fcntl.h> /* low-level i/o */
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
#define CLEAR(x) memset(&(x), 0, sizeof(x))
|
||||
|
||||
enum io_method {
|
||||
IO_METHOD_READ,
|
||||
IO_METHOD_MMAP,
|
||||
IO_METHOD_USERPTR,
|
||||
};
|
||||
|
||||
struct buffer {
|
||||
void *start;
|
||||
size_t length;
|
||||
};
|
||||
|
||||
static char *dev_name;
|
||||
static enum io_method io = IO_METHOD_MMAP;
|
||||
static int fd = -1;
|
||||
struct buffer *buffers;
|
||||
static unsigned int n_buffers;
|
||||
static int out_buf;
|
||||
static int force_format;
|
||||
static int frame_count = 70;
|
||||
|
||||
static void errno_exit(const char *s)
|
||||
{
|
||||
fprintf(stderr, "%s error %d, %s\n", s, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static int xioctl(int fh, int request, void *arg)
|
||||
{
|
||||
int r;
|
||||
|
||||
do {
|
||||
r = ioctl(fh, request, arg);
|
||||
} while (-1 == r && EINTR == errno);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static void process_image(const void *p, int size)
|
||||
{
|
||||
if (out_buf)
|
||||
fwrite(p, size, 1, stdout);
|
||||
|
||||
fflush(stderr);
|
||||
fprintf(stderr, ".");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
static int read_frame(void)
|
||||
{
|
||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
||||
unsigned int i;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
if (-1 == read(fd, buffers[0].start, buffers[0].length)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("read");
|
||||
}
|
||||
}
|
||||
|
||||
process_image(buffers[0].start, buffers[0].length);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("VIDIOC_DQBUF");
|
||||
}
|
||||
}
|
||||
|
||||
assert(buf.index < n_buffers);
|
||||
|
||||
process_image(buffers[buf.index].start, buf.bytesused);
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_USERPTR;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("VIDIOC_DQBUF");
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
if (buf.m.userptr == (unsigned long)buffers[i].start
|
||||
&& buf.length == buffers[i].length)
|
||||
break;
|
||||
|
||||
assert(i < n_buffers);
|
||||
|
||||
process_image((void *)buf.m.userptr, buf.bytesused);
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void mainloop(void)
|
||||
{
|
||||
unsigned int count;
|
||||
|
||||
count = frame_count;
|
||||
|
||||
while (count-- > 0) {
|
||||
for (;;) {
|
||||
fd_set fds;
|
||||
struct timeval tv;
|
||||
int r;
|
||||
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fd, &fds);
|
||||
|
||||
/* Timeout. */
|
||||
tv.tv_sec = 2;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
||||
|
||||
if (-1 == r) {
|
||||
if (EINTR == errno)
|
||||
continue;
|
||||
errno_exit("select");
|
||||
}
|
||||
|
||||
if (0 == r) {
|
||||
fprintf(stderr, "select timeout\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (read_frame())
|
||||
break;
|
||||
/* EAGAIN - continue select loop. */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void stop_capturing(void)
|
||||
{
|
||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
/* Nothing to do. */
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
case IO_METHOD_USERPTR:
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type))
|
||||
errno_exit("VIDIOC_STREAMOFF");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void start_capturing(void)
|
||||
{
|
||||
unsigned int i;
|
||||
enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
/* Nothing to do. */
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
for (i = 0; i < n_buffers; ++i) {
|
||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
||||
|
||||
CLEAR(buf);
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = i;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
}
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
||||
errno_exit("VIDIOC_STREAMON");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
for (i = 0; i < n_buffers; ++i) {
|
||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
||||
|
||||
CLEAR(buf);
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_USERPTR;
|
||||
buf.index = i;
|
||||
buf.m.userptr = (unsigned long)buffers[i].start;
|
||||
buf.length = buffers[i].length;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
}
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
||||
errno_exit("VIDIOC_STREAMON");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void uninit_device(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
free(buffers[0].start);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
if (-1 == munmap(buffers[i].start, buffers[i].length))
|
||||
errno_exit("munmap");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
free(buffers[i].start);
|
||||
break;
|
||||
}
|
||||
|
||||
free(buffers);
|
||||
}
|
||||
|
||||
static void init_read(unsigned int buffer_size)
|
||||
{
|
||||
buffers = calloc(1, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
buffers[0].length = buffer_size;
|
||||
buffers[0].start = malloc(buffer_size);
|
||||
|
||||
if (!buffers[0].start) {
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
static void init_mmap(void)
|
||||
{
|
||||
struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req;
|
||||
|
||||
CLEAR(req);
|
||||
|
||||
req.count = 4;
|
||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
req.memory = V4L2_MEMORY_MMAP;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s does not support "
|
||||
"memory mapping\n", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_REQBUFS");
|
||||
}
|
||||
}
|
||||
|
||||
if (req.count < 2) {
|
||||
fprintf(stderr, "Insufficient buffer memory on %s\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
buffers = calloc(req.count, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {
|
||||
struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf;
|
||||
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = n_buffers;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf))
|
||||
errno_exit("VIDIOC_QUERYBUF");
|
||||
|
||||
buffers[n_buffers].length = buf.length;
|
||||
buffers[n_buffers].start =
|
||||
mmap(NULL /* start anywhere */,
|
||||
buf.length,
|
||||
PROT_READ | PROT_WRITE /* required */,
|
||||
MAP_SHARED /* recommended */,
|
||||
fd, buf.m.offset);
|
||||
|
||||
if (MAP_FAILED == buffers[n_buffers].start)
|
||||
errno_exit("mmap");
|
||||
}
|
||||
}
|
||||
|
||||
static void init_userp(unsigned int buffer_size)
|
||||
{
|
||||
struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req;
|
||||
|
||||
CLEAR(req);
|
||||
|
||||
req.count = 4;
|
||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
req.memory = V4L2_MEMORY_USERPTR;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s does not support "
|
||||
"user pointer i/o\n", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_REQBUFS");
|
||||
}
|
||||
}
|
||||
|
||||
buffers = calloc(4, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (n_buffers = 0; n_buffers < 4; ++n_buffers) {
|
||||
buffers[n_buffers].length = buffer_size;
|
||||
buffers[n_buffers].start = malloc(buffer_size);
|
||||
|
||||
if (!buffers[n_buffers].start) {
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void init_device(void)
|
||||
{
|
||||
struct <link linkend="v4l2-capability">v4l2_capability</link> cap;
|
||||
struct <link linkend="v4l2-cropcap">v4l2_cropcap</link> cropcap;
|
||||
struct <link linkend="v4l2-crop">v4l2_crop</link> crop;
|
||||
struct <link linkend="v4l2-format">v4l2_format</link> fmt;
|
||||
unsigned int min;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s is no V4L2 device\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_QUERYCAP");
|
||||
}
|
||||
}
|
||||
|
||||
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
|
||||
fprintf(stderr, "%s is no video capture device\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
if (!(cap.capabilities & V4L2_CAP_READWRITE)) {
|
||||
fprintf(stderr, "%s does not support read i/o\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
case IO_METHOD_USERPTR:
|
||||
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
|
||||
fprintf(stderr, "%s does not support streaming i/o\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* Select video input, video standard and tune here. */
|
||||
|
||||
|
||||
CLEAR(cropcap);
|
||||
|
||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) {
|
||||
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
crop.c = cropcap.defrect; /* reset to default */
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) {
|
||||
switch (errno) {
|
||||
case EINVAL:
|
||||
/* Cropping not supported. */
|
||||
break;
|
||||
default:
|
||||
/* Errors ignored. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Errors ignored. */
|
||||
}
|
||||
|
||||
|
||||
CLEAR(fmt);
|
||||
|
||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (force_format) {
|
||||
fmt.fmt.pix.width = 640;
|
||||
fmt.fmt.pix.height = 480;
|
||||
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
|
||||
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt))
|
||||
errno_exit("VIDIOC_S_FMT");
|
||||
|
||||
/* Note VIDIOC_S_FMT may change width and height. */
|
||||
} else {
|
||||
/* Preserve original settings as set by v4l2-ctl for example */
|
||||
if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt))
|
||||
errno_exit("VIDIOC_G_FMT");
|
||||
}
|
||||
|
||||
/* Buggy driver paranoia. */
|
||||
min = fmt.fmt.pix.width * 2;
|
||||
if (fmt.fmt.pix.bytesperline < min)
|
||||
fmt.fmt.pix.bytesperline = min;
|
||||
min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;
|
||||
if (fmt.fmt.pix.sizeimage < min)
|
||||
fmt.fmt.pix.sizeimage = min;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
init_read(fmt.fmt.pix.sizeimage);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
init_mmap();
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
init_userp(fmt.fmt.pix.sizeimage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void close_device(void)
|
||||
{
|
||||
if (-1 == close(fd))
|
||||
errno_exit("close");
|
||||
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
static void open_device(void)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (-1 == stat(dev_name, &st)) {
|
||||
fprintf(stderr, "Cannot identify '%s': %d, %s\n",
|
||||
dev_name, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!S_ISCHR(st.st_mode)) {
|
||||
fprintf(stderr, "%s is no device\n", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0);
|
||||
|
||||
if (-1 == fd) {
|
||||
fprintf(stderr, "Cannot open '%s': %d, %s\n",
|
||||
dev_name, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
static void usage(FILE *fp, int argc, char **argv)
|
||||
{
|
||||
fprintf(fp,
|
||||
"Usage: %s [options]\n\n"
|
||||
"Version 1.3\n"
|
||||
"Options:\n"
|
||||
"-d | --device name Video device name [%s]\n"
|
||||
"-h | --help Print this message\n"
|
||||
"-m | --mmap Use memory mapped buffers [default]\n"
|
||||
"-r | --read Use read() calls\n"
|
||||
"-u | --userp Use application allocated buffers\n"
|
||||
"-o | --output Outputs stream to stdout\n"
|
||||
"-f | --format Force format to 640x480 YUYV\n"
|
||||
"-c | --count Number of frames to grab [%i]\n"
|
||||
"",
|
||||
argv[0], dev_name, frame_count);
|
||||
}
|
||||
|
||||
static const char short_options[] = "d:hmruofc:";
|
||||
|
||||
static const struct option
|
||||
long_options[] = {
|
||||
{ "device", required_argument, NULL, 'd' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "mmap", no_argument, NULL, 'm' },
|
||||
{ "read", no_argument, NULL, 'r' },
|
||||
{ "userp", no_argument, NULL, 'u' },
|
||||
{ "output", no_argument, NULL, 'o' },
|
||||
{ "format", no_argument, NULL, 'f' },
|
||||
{ "count", required_argument, NULL, 'c' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
dev_name = "/dev/video0";
|
||||
|
||||
for (;;) {
|
||||
int idx;
|
||||
int c;
|
||||
|
||||
c = getopt_long(argc, argv,
|
||||
short_options, long_options, &idx);
|
||||
|
||||
if (-1 == c)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 0: /* getopt_long() flag */
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
dev_name = optarg;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
usage(stdout, argc, argv);
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
case 'm':
|
||||
io = IO_METHOD_MMAP;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
io = IO_METHOD_READ;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
io = IO_METHOD_USERPTR;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
out_buf++;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
force_format++;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
errno = 0;
|
||||
frame_count = strtol(optarg, NULL, 0);
|
||||
if (errno)
|
||||
errno_exit(optarg);
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(stderr, argc, argv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
open_device();
|
||||
init_device();
|
||||
start_capturing();
|
||||
mainloop();
|
||||
stop_capturing();
|
||||
uninit_device();
|
||||
close_device();
|
||||
fprintf(stderr, "\n");
|
||||
return 0;
|
||||
}
|
||||
</programlisting>
|
|
@ -1,75 +0,0 @@
|
|||
<partinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Hans</firstname>
|
||||
<surname>Verkuil</surname>
|
||||
<affiliation><address><email>hans.verkuil@cisco.com</email></address></affiliation>
|
||||
<contrib>Initial version.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<copyright>
|
||||
<year>2016</year>
|
||||
<holder>Hans Verkuil</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<!-- Put document revisions here, newest first. -->
|
||||
<revision>
|
||||
<revnumber>1.0.0</revnumber>
|
||||
<date>2016-03-17</date>
|
||||
<authorinitials>hv</authorinitials>
|
||||
<revremark>Initial revision</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</partinfo>
|
||||
|
||||
<title>CEC API</title>
|
||||
|
||||
<chapter id="cec-api">
|
||||
<title>CEC: Consumer Electronics Control</title>
|
||||
|
||||
<section id="cec-intro">
|
||||
<title>Introduction</title>
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
<para>HDMI connectors provide a single pin for use by the Consumer Electronics
|
||||
Control protocol. This protocol allows different devices connected by an HDMI cable
|
||||
to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC)
|
||||
and 2 (HEAC or HDMI Ethernet and Audio Return Channel) of the HDMI 1.4a
|
||||
(<xref linkend="hdmi" />) specification and the extensions added to CEC version 2.0
|
||||
are defined in chapter 11 of the HDMI 2.0 (<xref linkend="hdmi2" />) specification.
|
||||
</para>
|
||||
|
||||
<para>The bitrate is very slow (effectively no more than 36 bytes per second) and
|
||||
is based on the ancient AV.link protocol used in old SCART connectors. The protocol
|
||||
closely resembles a crazy Rube Goldberg contraption and is an unholy mix of low and
|
||||
high level messages. Some messages, especially those part of the HEAC protocol layered
|
||||
on top of CEC, need to be handled by the kernel, others can be handled either by the
|
||||
kernel or by userspace.</para>
|
||||
|
||||
<para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB
|
||||
devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para>
|
||||
|
||||
<para>Drivers that support CEC will create a CEC device node (/dev/cecX)
|
||||
to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace
|
||||
what it is allowed to do.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
|
||||
<appendix id="cec-user-func">
|
||||
<title>Function Reference</title>
|
||||
<!-- Keep this alphabetically sorted. -->
|
||||
&sub-cec-func-open;
|
||||
&sub-cec-func-close;
|
||||
&sub-cec-func-ioctl;
|
||||
&sub-cec-func-poll;
|
||||
<!-- All ioctls go here. -->
|
||||
&sub-cec-ioc-adap-g-caps;
|
||||
&sub-cec-ioc-adap-g-log-addrs;
|
||||
&sub-cec-ioc-adap-g-phys-addr;
|
||||
&sub-cec-ioc-dqevent;
|
||||
&sub-cec-ioc-g-mode;
|
||||
&sub-cec-ioc-receive;
|
||||
</appendix>
|
|
@ -1,64 +0,0 @@
|
|||
<refentry id="cec-func-close">
|
||||
<refmeta>
|
||||
<refentrytitle>cec close()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>cec-close</refname>
|
||||
<refpurpose>Close a cec device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>close</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>Closes the cec device. Resources associated with the file descriptor
|
||||
are freed. The device configuration remain unchanged.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para><function>close</function> returns 0 on success. On error, -1 is
|
||||
returned, and <varname>errno</varname> is set appropriately. Possible error
|
||||
codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid open file descriptor.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,78 +0,0 @@
|
|||
<refentry id="cec-func-ioctl">
|
||||
<refmeta>
|
||||
<refentrytitle>cec ioctl()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>cec-ioctl</refname>
|
||||
<refpurpose>Control a cec device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>void *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC ioctl request code as defined in the cec.h header file,
|
||||
for example CEC_ADAP_G_CAPS.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>Pointer to a request-specific structure.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>The <function>ioctl()</function> function manipulates cec device
|
||||
parameters. The argument <parameter>fd</parameter> must be an open file
|
||||
descriptor.</para>
|
||||
<para>The ioctl <parameter>request</parameter> code specifies the cec
|
||||
function to be called. It has encoded in it whether the argument is an
|
||||
input, output or read/write parameter, and the size of the argument
|
||||
<parameter>argp</parameter> in bytes.</para>
|
||||
<para>Macros and structures definitions specifying cec ioctl requests and
|
||||
their parameters are located in the cec.h header file. All cec ioctl
|
||||
requests, their respective function and parameters are specified in
|
||||
<xref linkend="cec-user-func" />.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
|
||||
<para>Request-specific error codes are listed in the
|
||||
individual requests descriptions.</para>
|
||||
<para>When an ioctl that takes an output or read/write parameter fails,
|
||||
the parameter remains unmodified.</para>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,104 +0,0 @@
|
|||
<refentry id="cec-func-open">
|
||||
<refmeta>
|
||||
<refentrytitle>cec open()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>cec-open</refname>
|
||||
<refpurpose>Open a cec device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>open</function></funcdef>
|
||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>device_name</parameter></term>
|
||||
<listitem>
|
||||
<para>Device to be opened.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>Open flags. Access mode must be <constant>O_RDWR</constant>.
|
||||
</para>
|
||||
<para>When the <constant>O_NONBLOCK</constant> flag is
|
||||
given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is
|
||||
available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and
|
||||
&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode.</para>
|
||||
<para>Other flags have no effect.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>To open a cec device applications call <function>open()</function>
|
||||
with the desired device name. The function has no side effects; the device
|
||||
configuration remain unchanged.</para>
|
||||
<para>When the device is opened in read-only mode, attempts to modify its
|
||||
configuration will result in an error, and <varname>errno</varname> will be
|
||||
set to <errorcode>EBADF</errorcode>.</para>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para><function>open</function> returns the new file descriptor on success.
|
||||
On error, -1 is returned, and <varname>errno</varname> is set appropriately.
|
||||
Possible error codes include:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EACCES</errorcode></term>
|
||||
<listitem>
|
||||
<para>The requested access to the file is not allowed.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EMFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The process already has the maximum number of files open.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The system limit on the total number of open files has been
|
||||
reached.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENOMEM</errorcode></term>
|
||||
<listitem>
|
||||
<para>Insufficient kernel memory was available.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENXIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>No device corresponding to this device special file exists.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,94 +0,0 @@
|
|||
<refentry id="cec-func-poll">
|
||||
<refmeta>
|
||||
<refentrytitle>cec poll()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>cec-poll</refname>
|
||||
<refpurpose>Wait for some event on a file descriptor</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>poll</function></funcdef>
|
||||
<paramdef>struct pollfd *<parameter>ufds</parameter></paramdef>
|
||||
<paramdef>unsigned int <parameter>nfds</parameter></paramdef>
|
||||
<paramdef>int <parameter>timeout</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>With the <function>poll()</function> function applications
|
||||
can wait for CEC events.</para>
|
||||
|
||||
<para>On success <function>poll()</function> returns the number of
|
||||
file descriptors that have been selected (that is, file descriptors
|
||||
for which the <structfield>revents</structfield> field of the
|
||||
respective <structname>pollfd</structname> structure is non-zero).
|
||||
CEC devices set the <constant>POLLIN</constant> and
|
||||
<constant>POLLRDNORM</constant> flags in the
|
||||
<structfield>revents</structfield> field if there are messages in the
|
||||
receive queue. If the transmit queue has room for new messages, the
|
||||
<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant>
|
||||
flags are set. If there are events in the event queue, then the
|
||||
<constant>POLLPRI</constant> flag is set.
|
||||
When the function timed out it returns a value of zero, on
|
||||
failure it returns <returnvalue>-1</returnvalue> and the
|
||||
<varname>errno</varname> variable is set appropriately.
|
||||
</para>
|
||||
|
||||
<para>For more details see the
|
||||
<function>poll()</function> manual page.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, <function>poll()</function> returns the number
|
||||
structures which have non-zero <structfield>revents</structfield>
|
||||
fields, or zero if the call timed out. On error
|
||||
<returnvalue>-1</returnvalue> is returned, and the
|
||||
<varname>errno</varname> variable is set appropriately:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para>One or more of the <parameter>ufds</parameter> members
|
||||
specify an invalid file descriptor.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EFAULT</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>ufds</parameter> references an inaccessible
|
||||
memory area.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINTR</errorcode></term>
|
||||
<listitem>
|
||||
<para>The call was interrupted by a signal.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>nfds</parameter> argument is greater
|
||||
than <constant>OPEN_MAX</constant>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,151 +0,0 @@
|
|||
<refentry id="cec-ioc-adap-g-caps">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_ADAP_G_CAPS</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_ADAP_G_CAPS</refname>
|
||||
<refpurpose>Query device capabilities</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct cec_caps *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_ADAP_G_CAPS</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>All cec devices must support the <constant>CEC_ADAP_G_CAPS</constant>
|
||||
ioctl. To query device information, applications call the ioctl with a
|
||||
pointer to a &cec-caps;. The driver fills the structure and returns
|
||||
the information to the application.
|
||||
The ioctl never fails.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-caps">
|
||||
<title>struct <structname>cec_caps</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>driver[32]</structfield></entry>
|
||||
<entry>The name of the cec adapter driver.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>name[32]</structfield></entry>
|
||||
<entry>The name of this CEC adapter. The combination <structfield>driver</structfield>
|
||||
and <structfield>name</structfield> must be unique.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>capabilities</structfield></entry>
|
||||
<entry>The capabilities of the CEC adapter, see <xref
|
||||
linkend="cec-capabilities" />.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>version</structfield></entry>
|
||||
<entry>CEC Framework API version, formatted with the
|
||||
<constant>KERNEL_VERSION()</constant> macro.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-capabilities">
|
||||
<title>CEC Capabilities Flags</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_PHYS_ADDR</constant></entry>
|
||||
<entry>0x00000001</entry>
|
||||
<entry>Userspace has to configure the physical address by
|
||||
calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set,
|
||||
then setting the physical address is handled by the kernel
|
||||
whenever the EDID is set (for an HDMI receiver) or read (for
|
||||
an HDMI transmitter).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_LOG_ADDRS</constant></entry>
|
||||
<entry>0x00000002</entry>
|
||||
<entry>Userspace has to configure the logical addresses by
|
||||
calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set,
|
||||
then the kernel will have configured this.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_TRANSMIT</constant></entry>
|
||||
<entry>0x00000004</entry>
|
||||
<entry>Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This
|
||||
implies that userspace can be a follower as well, since being able to
|
||||
transmit messages is a prerequisite of becoming a follower. If this
|
||||
capability isn't set, then the kernel will handle all CEC transmits
|
||||
and process all CEC messages it receives.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_PASSTHROUGH</constant></entry>
|
||||
<entry>0x00000008</entry>
|
||||
<entry>Userspace can use the passthrough mode by
|
||||
calling &CEC-S-MODE;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_RC</constant></entry>
|
||||
<entry>0x00000010</entry>
|
||||
<entry>This adapter supports the remote control protocol.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_CAP_MONITOR_ALL</constant></entry>
|
||||
<entry>0x00000020</entry>
|
||||
<entry>The CEC hardware can monitor all messages, not just directed and
|
||||
broadcast messages.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,329 +0,0 @@
|
|||
<refentry id="cec-ioc-adap-g-log-addrs">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_ADAP_G_LOG_ADDRS</refname>
|
||||
<refname>CEC_ADAP_S_LOG_ADDRS</refname>
|
||||
<refpurpose>Get or set the logical addresses</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct cec_log_addrs *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>To query the current CEC logical addresses, applications call the
|
||||
<constant>CEC_ADAP_G_LOG_ADDRS</constant> ioctl with a pointer to a
|
||||
<structname>cec_log_addrs</structname> structure where the drivers stores the
|
||||
logical addresses.</para>
|
||||
|
||||
<para>To set new logical addresses, applications fill in struct <structname>cec_log_addrs</structname>
|
||||
and call the <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl with a pointer to this struct.
|
||||
The <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl is only available if
|
||||
<constant>CEC_CAP_LOG_ADDRS</constant> is set (&ENOTTY; is returned otherwise). This ioctl will block until all
|
||||
requested logical addresses have been claimed. <constant>CEC_ADAP_S_LOG_ADDRS</constant>
|
||||
can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-log-addrs">
|
||||
<title>struct <structname>cec_log_addrs</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>log_addr</structfield>[CEC_MAX_LOG_ADDRS]</entry>
|
||||
<entry>The actual logical addresses that were claimed. This is set by the
|
||||
driver. If no logical address could be claimed, then it is set to
|
||||
<constant>CEC_LOG_ADDR_INVALID</constant>. If this adapter is Unregistered,
|
||||
then <structfield>log_addr[0]</structfield> is set to 0xf and all others to
|
||||
<constant>CEC_LOG_ADDR_INVALID</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u16</entry>
|
||||
<entry><structfield>log_addr_mask</structfield></entry>
|
||||
<entry>The bitmask of all logical addresses this adapter has claimed.
|
||||
If this adapter is Unregistered then <structfield>log_addr_mask</structfield>
|
||||
sets bit 15 and clears all other bits. If this adapter is not configured at all, then
|
||||
<structfield>log_addr_mask</structfield> is set to 0. Set by the driver.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>cec_version</structfield></entry>
|
||||
<entry>The CEC version that this adapter shall use. See
|
||||
<xref linkend="cec-versions" />.
|
||||
Used to implement the <constant>CEC_MSG_CEC_VERSION</constant> and
|
||||
<constant>CEC_MSG_REPORT_FEATURES</constant> messages. Note that
|
||||
<constant>CEC_OP_CEC_VERSION_1_3A</constant> is not allowed
|
||||
by the CEC framework.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>num_log_addrs</structfield></entry>
|
||||
<entry>Number of logical addresses to set up. Must be ≤
|
||||
<structfield>available_log_addrs</structfield> as returned by
|
||||
&CEC-ADAP-G-CAPS;. All arrays in this structure are only filled up to
|
||||
index <structfield>available_log_addrs</structfield>-1. The remaining
|
||||
array elements will be ignored. Note that the CEC 2.0 standard allows
|
||||
for a maximum of 2 logical addresses, although some hardware has support
|
||||
for more. <constant>CEC_MAX_LOG_ADDRS</constant> is 4. The driver will
|
||||
return the actual number of logical addresses it could claim, which may
|
||||
be less than what was requested. If this field is set to 0, then the
|
||||
CEC adapter shall clear all claimed logical addresses and all other
|
||||
fields will be ignored.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>vendor_id</structfield></entry>
|
||||
<entry>The vendor ID is a 24-bit number that identifies the specific
|
||||
vendor or entity. Based on this ID vendor specific commands may be
|
||||
defined. If you do not want a vendor ID then set it to
|
||||
<constant>CEC_VENDOR_ID_NONE</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>flags</structfield></entry>
|
||||
<entry>Flags. No flags are defined yet, so set this to 0.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>char</entry>
|
||||
<entry><structfield>osd_name</structfield>[15]</entry>
|
||||
<entry>The On-Screen Display name as is returned by the
|
||||
<constant>CEC_MSG_SET_OSD_NAME</constant> message.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>primary_device_type</structfield>[CEC_MAX_LOG_ADDRS]</entry>
|
||||
<entry>Primary device type for each logical address. See
|
||||
<xref linkend="cec-prim-dev-types" /> for possible types.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>log_addr_type</structfield>[CEC_MAX_LOG_ADDRS]</entry>
|
||||
<entry>Logical address types. See <xref linkend="cec-log-addr-types" /> for
|
||||
possible types. The driver will update this with the actual logical address
|
||||
type that it claimed (e.g. it may have to fallback to
|
||||
<constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant>).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>all_device_types</structfield>[CEC_MAX_LOG_ADDRS]</entry>
|
||||
<entry>CEC 2.0 specific: all device types. See <xref linkend="cec-all-dev-types-flags" />.
|
||||
Used to implement the <constant>CEC_MSG_REPORT_FEATURES</constant> message.
|
||||
This field is ignored if <structfield>cec_version</structfield> <
|
||||
<constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>features</structfield>[CEC_MAX_LOG_ADDRS][12]</entry>
|
||||
<entry>Features for each logical address. Used to implement the
|
||||
<constant>CEC_MSG_REPORT_FEATURES</constant> message. The 12 bytes include
|
||||
both the RC Profile and the Device Features.
|
||||
This field is ignored if <structfield>cec_version</structfield> <
|
||||
<constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-versions">
|
||||
<title>CEC Versions</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_OP_CEC_VERSION_1_3A</constant></entry>
|
||||
<entry>4</entry>
|
||||
<entry>CEC version according to the HDMI 1.3a standard.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_CEC_VERSION_1_4B</constant></entry>
|
||||
<entry>5</entry>
|
||||
<entry>CEC version according to the HDMI 1.4b standard.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_CEC_VERSION_2_0</constant></entry>
|
||||
<entry>6</entry>
|
||||
<entry>CEC version according to the HDMI 2.0 standard.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-prim-dev-types">
|
||||
<title>CEC Primary Device Types</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_TV</constant></entry>
|
||||
<entry>0</entry>
|
||||
<entry>Use for a TV.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_RECORD</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Use for a recording device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_TUNER</constant></entry>
|
||||
<entry>3</entry>
|
||||
<entry>Use for a device with a tuner.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_PLAYBACK</constant></entry>
|
||||
<entry>4</entry>
|
||||
<entry>Use for a playback device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM</constant></entry>
|
||||
<entry>5</entry>
|
||||
<entry>Use for an audio system (e.g. an audio/video receiver).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_SWITCH</constant></entry>
|
||||
<entry>6</entry>
|
||||
<entry>Use for a CEC switch.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_PRIM_DEVTYPE_VIDEOPROC</constant></entry>
|
||||
<entry>7</entry>
|
||||
<entry>Use for a video processor device.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-log-addr-types">
|
||||
<title>CEC Logical Address Types</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_TV</constant></entry>
|
||||
<entry>0</entry>
|
||||
<entry>Use for a TV.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_RECORD</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Use for a recording device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_TUNER</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>Use for a tuner device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_PLAYBACK</constant></entry>
|
||||
<entry>3</entry>
|
||||
<entry>Use for a playback device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_AUDIOSYSTEM</constant></entry>
|
||||
<entry>4</entry>
|
||||
<entry>Use for an audio system device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_SPECIFIC</constant></entry>
|
||||
<entry>5</entry>
|
||||
<entry>Use for a second TV or for a video processor device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant></entry>
|
||||
<entry>6</entry>
|
||||
<entry>Use this if you just want to remain unregistered.
|
||||
Used for pure CEC switches or CDC-only devices (CDC:
|
||||
Capability Discovery and Control).</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-all-dev-types-flags">
|
||||
<title>CEC All Device Types Flags</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_TV</constant></entry>
|
||||
<entry>0x80</entry>
|
||||
<entry>This supports the TV type.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_RECORD</constant></entry>
|
||||
<entry>0x40</entry>
|
||||
<entry>This supports the Recording type.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_TUNER</constant></entry>
|
||||
<entry>0x20</entry>
|
||||
<entry>This supports the Tuner type.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_PLAYBACK</constant></entry>
|
||||
<entry>0x10</entry>
|
||||
<entry>This supports the Playback type.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM</constant></entry>
|
||||
<entry>0x08</entry>
|
||||
<entry>This supports the Audio System type.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_OP_ALL_DEVTYPE_SWITCH</constant></entry>
|
||||
<entry>0x04</entry>
|
||||
<entry>This supports the CEC Switch or Video Processing type.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,86 +0,0 @@
|
|||
<refentry id="cec-ioc-adap-g-phys-addr">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_ADAP_G_PHYS_ADDR</refname>
|
||||
<refname>CEC_ADAP_S_PHYS_ADDR</refname>
|
||||
<refpurpose>Get or set the physical address</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>__u16 *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>To query the current physical address applications call the
|
||||
<constant>CEC_ADAP_G_PHYS_ADDR</constant> ioctl with a pointer to an __u16
|
||||
where the driver stores the physical address.</para>
|
||||
|
||||
<para>To set a new physical address applications store the physical address in
|
||||
an __u16 and call the <constant>CEC_ADAP_S_PHYS_ADDR</constant> ioctl with a
|
||||
pointer to this integer. <constant>CEC_ADAP_S_PHYS_ADDR</constant> is only
|
||||
available if <constant>CEC_CAP_PHYS_ADDR</constant> is set (&ENOTTY; will be returned
|
||||
otherwise). <constant>CEC_ADAP_S_PHYS_ADDR</constant>
|
||||
can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not
|
||||
&EBUSY; will be returned.</para>
|
||||
|
||||
<para>The physical address is a 16-bit number where each group of 4 bits
|
||||
represent a digit of the physical address a.b.c.d where the most significant
|
||||
4 bits represent 'a'. The CEC root device (usually the TV) has address 0.0.0.0.
|
||||
Every device that is hooked up to an input of the TV has address a.0.0.0 (where
|
||||
'a' is ≥ 1), devices hooked up to those in turn have addresses a.b.0.0, etc.
|
||||
So a topology of up to 5 devices deep is supported. The physical address a
|
||||
device shall use is stored in the EDID of the sink.</para>
|
||||
|
||||
<para>For example, the EDID for each HDMI input of the TV will have a different
|
||||
physical address of the form a.0.0.0 that the sources will read out and use as
|
||||
their physical address.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,202 +0,0 @@
|
|||
<refentry id="cec-ioc-g-event">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_DQEVENT</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_DQEVENT</refname>
|
||||
<refpurpose>Dequeue a CEC event</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct cec_event *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_DQEVENT</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>CEC devices can send asynchronous events. These can be retrieved by calling
|
||||
the <constant>CEC_DQEVENT</constant> ioctl. If the file descriptor is in non-blocking
|
||||
mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;.</para>
|
||||
|
||||
<para>The internal event queues are per-filehandle and per-event type. If there is
|
||||
no more room in a queue then the last event is overwritten with the new one. This
|
||||
means that intermediate results can be thrown away but that the latest event is always
|
||||
available. This also means that is it possible to read two successive events that have
|
||||
the same value (e.g. two CEC_EVENT_STATE_CHANGE events with the same state). In that
|
||||
case the intermediate state changes were lost but it is guaranteed that the state
|
||||
did change in between the two events.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-event-state-change">
|
||||
<title>struct <structname>cec_event_state_change</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u16</entry>
|
||||
<entry><structfield>phys_addr</structfield></entry>
|
||||
<entry>The current physical address.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u16</entry>
|
||||
<entry><structfield>log_addr_mask</structfield></entry>
|
||||
<entry>The current set of claimed logical addresses.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-event-lost-msgs">
|
||||
<title>struct <structname>cec_event_lost_msgs</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>lost_msgs</structfield></entry>
|
||||
<entry>Set to the number of lost messages since the filehandle
|
||||
was opened or since the last time this event was dequeued for
|
||||
this filehandle. The messages lost are the oldest messages. So
|
||||
when a new message arrives and there is no more room, then the
|
||||
oldest message is discarded to make room for the new one. The
|
||||
internal size of the message queue guarantees that all messages
|
||||
received in the last two seconds will be stored. Since messages
|
||||
should be replied to within a second according to the CEC
|
||||
specification, this is more than enough.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-event">
|
||||
<title>struct <structname>cec_event</structname></title>
|
||||
<tgroup cols="4">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u64</entry>
|
||||
<entry><structfield>ts</structfield></entry>
|
||||
<entry>Timestamp of the event in ns.</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>event</structfield></entry>
|
||||
<entry>The CEC event type, see <xref linkend="cec-events" />.</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>flags</structfield></entry>
|
||||
<entry>Event flags, see <xref linkend="cec-event-flags" />.</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>union</entry>
|
||||
<entry>(anonymous)</entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>struct cec_event_state_change</entry>
|
||||
<entry><structfield>state_change</structfield></entry>
|
||||
<entry>The new adapter state as sent by the <constant>CEC_EVENT_STATE_CHANGE</constant>
|
||||
event.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>struct cec_event_lost_msgs</entry>
|
||||
<entry><structfield>lost_msgs</structfield></entry>
|
||||
<entry>The number of lost messages as sent by the <constant>CEC_EVENT_LOST_MSGS</constant>
|
||||
event.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-events">
|
||||
<title>CEC Events Types</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_EVENT_STATE_CHANGE</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Generated when the CEC Adapter's state changes. When open() is
|
||||
called an initial event will be generated for that filehandle with the
|
||||
CEC Adapter's state at that time.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_EVENT_LOST_MSGS</constant></entry>
|
||||
<entry>2</entry>
|
||||
<entry>Generated if one or more CEC messages were lost because the
|
||||
application didn't dequeue CEC messages fast enough.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-event-flags">
|
||||
<title>CEC Event Flags</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_EVENT_FL_INITIAL_VALUE</constant></entry>
|
||||
<entry>1</entry>
|
||||
<entry>Set for the initial events that are generated when the device is
|
||||
opened. See the table above for which events do this. This allows
|
||||
applications to learn the initial state of the CEC adapter at open()
|
||||
time.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,255 +0,0 @@
|
|||
<refentry id="cec-ioc-g-mode">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_G_MODE, CEC_S_MODE</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_G_MODE</refname>
|
||||
<refname>CEC_S_MODE</refname>
|
||||
<refpurpose>Get or set exclusive use of the CEC adapter</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>__u32 *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_G_MODE, CEC_S_MODE</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but
|
||||
in order to prevent applications from stepping on each others toes it must be possible
|
||||
to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle
|
||||
to initiator and/or follower mode which can be exclusive depending on the chosen
|
||||
mode. The initiator is the filehandle that is used
|
||||
to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle
|
||||
that receives messages sent to the CEC adapter and processes them. The same filehandle
|
||||
can be both initiator and follower, or this role can be taken by two different
|
||||
filehandles.</para>
|
||||
|
||||
<para>When a CEC message is received, then the CEC framework will decide how
|
||||
it will be processed. If the message is a reply to an earlier transmitted message,
|
||||
then the reply is sent back to the filehandle that is waiting for it. In addition
|
||||
the CEC framework will process it.</para>
|
||||
|
||||
<para>If the message is not a reply, then the CEC framework will process it
|
||||
first. If there is no follower, then the message is just discarded and a feature
|
||||
abort is sent back to the initiator if the framework couldn't process it. If there
|
||||
is a follower, then the message is passed on to the follower who will use
|
||||
&CEC-RECEIVE; to dequeue the new message. The framework expects the follower to
|
||||
make the right decisions.</para>
|
||||
|
||||
<para>The CEC framework will process core messages unless requested otherwise
|
||||
by the follower. The follower can enable the passthrough mode. In that case, the
|
||||
CEC framework will pass on most core messages without processing them and
|
||||
the follower will have to implement those messages. There are some messages
|
||||
that the core will always process, regardless of the passthrough mode. See
|
||||
<xref linkend="cec-core-processing" /> for details.</para>
|
||||
|
||||
<para>If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;.
|
||||
If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;.
|
||||
The follower can of course always call &CEC-TRANSMIT;.</para>
|
||||
|
||||
<para>Available initiator modes are:</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-mode-initiator">
|
||||
<title>Initiator Modes</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_NO_INITIATOR</constant></entry>
|
||||
<entry>0x0</entry>
|
||||
<entry>This is not an initiator, i.e. it cannot transmit CEC messages
|
||||
or make any other changes to the CEC adapter.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_INITIATOR</constant></entry>
|
||||
<entry>0x1</entry>
|
||||
<entry>This is an initiator (the default when the device is opened) and it
|
||||
can transmit CEC messages and make changes to the CEC adapter, unless there
|
||||
is an exclusive initiator.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_EXCL_INITIATOR</constant></entry>
|
||||
<entry>0x2</entry>
|
||||
<entry>This is an exclusive initiator and this file descriptor is the only one
|
||||
that can transmit CEC messages and make changes to the CEC adapter. If someone
|
||||
else is already the exclusive initiator then an attempt to become one will return
|
||||
the &EBUSY; error.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Available follower modes are:</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-mode-follower">
|
||||
<title>Follower Modes</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_NO_FOLLOWER</constant></entry>
|
||||
<entry>0x00</entry>
|
||||
<entry>This is not a follower (the default when the device is opened).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_FOLLOWER</constant></entry>
|
||||
<entry>0x10</entry>
|
||||
<entry>This is a follower and it will receive CEC messages unless there is
|
||||
an exclusive follower. You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant>
|
||||
is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified,
|
||||
&EINVAL; is returned in that case.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_EXCL_FOLLOWER</constant></entry>
|
||||
<entry>0x20</entry>
|
||||
<entry>This is an exclusive follower and only this file descriptor will receive
|
||||
CEC messages for processing. If someone else is already the exclusive follower
|
||||
then an attempt to become one will return the &EBUSY; error. You cannot become
|
||||
a follower if <constant>CEC_CAP_TRANSMIT</constant> is not set or if
|
||||
<constant>CEC_MODE_NO_INITIATOR</constant> was specified, &EINVAL; is returned
|
||||
in that case.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_EXCL_FOLLOWER_PASSTHRU</constant></entry>
|
||||
<entry>0x30</entry>
|
||||
<entry>This is an exclusive follower and only this file descriptor will receive
|
||||
CEC messages for processing. In addition it will put the CEC device into
|
||||
passthrough mode, allowing the exclusive follower to handle most core messages
|
||||
instead of relying on the CEC framework for that. If someone else is already the
|
||||
exclusive follower then an attempt to become one will return the &EBUSY; error.
|
||||
You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant>
|
||||
is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified,
|
||||
&EINVAL; is returned in that case.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_MONITOR</constant></entry>
|
||||
<entry>0xe0</entry>
|
||||
<entry>Put the file descriptor into monitor mode. Can only be used in combination
|
||||
with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be
|
||||
returned. In monitor mode all messages this CEC device transmits and all messages
|
||||
it receives (both broadcast messages and directed messages for one its logical
|
||||
addresses) will be reported. This is very useful for debugging. This is only
|
||||
allowed if the process has the <constant>CAP_NET_ADMIN</constant>
|
||||
capability. If that is not set, then &EPERM; is returned.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MODE_MONITOR_ALL</constant></entry>
|
||||
<entry>0xf0</entry>
|
||||
<entry>Put the file descriptor into 'monitor all' mode. Can only be used in combination
|
||||
with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be
|
||||
returned. In 'monitor all' mode all messages this CEC device transmits and all messages
|
||||
it receives, including directed messages for other CEC devices will be reported. This
|
||||
is very useful for debugging, but not all devices support this. This mode requires that
|
||||
the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, otherwise &EINVAL; is
|
||||
returned. This is only allowed if the process has the <constant>CAP_NET_ADMIN</constant>
|
||||
capability. If that is not set, then &EPERM; is returned.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Core message processing details:</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-core-processing">
|
||||
<title>Core Message Processing</title>
|
||||
<tgroup cols="2">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_GET_CEC_VERSION</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will return the CEC version that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_GIVE_DEVICE_VENDOR_ID</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will return the vendor ID that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_ABORT</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will return a feature refused message as per the specification.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_GIVE_PHYSICAL_ADDR</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will report the current physical address.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_GIVE_OSD_NAME</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will report the current OSD name as was set with
|
||||
&CEC-ADAP-S-LOG-ADDRS;.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_GIVE_FEATURES</constant></entry>
|
||||
<entry>When in passthrough mode this message has to be handled by userspace,
|
||||
otherwise the core will report the current features as was set with
|
||||
&CEC-ADAP-S-LOG-ADDRS; or the message is ignore if the CEC version was
|
||||
older than 2.0.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_USER_CONTROL_PRESSED</constant></entry>
|
||||
<entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control
|
||||
key press. This message is always passed on to userspace.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_USER_CONTROL_RELEASED</constant></entry>
|
||||
<entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control
|
||||
key release. This message is always passed on to userspace.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_MSG_REPORT_PHYSICAL_ADDR</constant></entry>
|
||||
<entry>The CEC framework will make note of the reported physical address
|
||||
and then just pass the message on to userspace.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,274 +0,0 @@
|
|||
<refentry id="cec-ioc-receive">
|
||||
<refmeta>
|
||||
<refentrytitle>ioctl CEC_RECEIVE, CEC_TRANSMIT</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>CEC_RECEIVE</refname>
|
||||
<refname>CEC_TRANSMIT</refname>
|
||||
<refpurpose>Receive or transmit a CEC message</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>struct cec_msg *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>File descriptor returned by
|
||||
<link linkend='cec-func-open'><function>open()</function></link>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>CEC_RECEIVE, CEC_TRANSMIT</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>
|
||||
Note: this documents the proposed CEC API. This API is not yet finalized and
|
||||
is currently only available as a staging kernel module.
|
||||
</para>
|
||||
|
||||
<para>To receive a CEC message the application has to fill in the
|
||||
<structname>cec_msg</structname> structure and pass it to the
|
||||
<constant>CEC_RECEIVE</constant> ioctl. <constant>CEC_RECEIVE</constant> is
|
||||
only available if <constant>CEC_CAP_RECEIVE</constant> is set. If the
|
||||
file descriptor is in non-blocking mode and there are no received
|
||||
messages pending, then it will return -1 and set errno to the &EAGAIN;.
|
||||
If the file descriptor is in blocking mode and <structfield>timeout</structfield>
|
||||
is non-zero and no message arrived within <structfield>timeout</structfield>
|
||||
milliseconds, then it will return -1 and set errno to the &ETIMEDOUT;.</para>
|
||||
|
||||
<para>To send a CEC message the application has to fill in the
|
||||
<structname>cec_msg</structname> structure and pass it to the
|
||||
<constant>CEC_TRANSMIT</constant> ioctl. <constant>CEC_TRANSMIT</constant> is
|
||||
only available if <constant>CEC_CAP_TRANSMIT</constant> is set.
|
||||
If there is no more room in the transmit queue, then it will return
|
||||
-1 and set errno to the &EBUSY;.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-msg">
|
||||
<title>struct <structname>cec_msg</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u64</entry>
|
||||
<entry><structfield>ts</structfield></entry>
|
||||
<entry>Timestamp of when the message was transmitted in ns in the case
|
||||
of <constant>CEC_TRANSMIT</constant> with <structfield>reply</structfield>
|
||||
set to 0, or the timestamp of the received message in all other cases.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>len</structfield></entry>
|
||||
<entry>The length of the message. For <constant>CEC_TRANSMIT</constant> this
|
||||
is filled in by the application. The driver will fill this in for
|
||||
<constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant>
|
||||
it will be filled in with the length of the reply message if
|
||||
<structfield>reply</structfield> was set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>timeout</structfield></entry>
|
||||
<entry>The timeout in milliseconds. This is the time the device will wait for a message to
|
||||
be received before timing out. If it is set to 0, then it will wait indefinitely when it
|
||||
is called by <constant>CEC_RECEIVE</constant>. If it is 0 and it is called by
|
||||
<constant>CEC_TRANSMIT</constant>, then it will be replaced by 1000 if the
|
||||
<structfield>reply</structfield> is non-zero or ignored if <structfield>reply</structfield>
|
||||
is 0.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>sequence</structfield></entry>
|
||||
<entry>The sequence number is automatically assigned by the CEC
|
||||
framework for all transmitted messages. It can be later used by the
|
||||
framework to generate an event if a reply for a message was
|
||||
requested and the message was transmitted in a non-blocking mode.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>flags</structfield></entry>
|
||||
<entry>Flags. No flags are defined yet, so set this to 0.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>rx_status</structfield></entry>
|
||||
<entry>The status bits of the received message. See <xref linkend="cec-rx-status" />
|
||||
for the possible status values. It is 0 if this message was transmitted, not
|
||||
received, unless this is the reply to a transmitted message. In that case both
|
||||
<structfield>rx_status</structfield> and <structfield>tx_status</structfield>
|
||||
are set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>tx_status</structfield></entry>
|
||||
<entry>The status bits of the transmitted message. See <xref linkend="cec-tx-status" />
|
||||
for the possible status values. It is 0 if this messages was received, not
|
||||
transmitted.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>msg</structfield>[16]</entry>
|
||||
<entry>The message payload. For <constant>CEC_TRANSMIT</constant> this
|
||||
is filled in by the application. The driver will fill this in for
|
||||
<constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant>
|
||||
it will be filled in with the payload of the reply message if
|
||||
<structfield>reply</structfield> was set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>reply</structfield></entry>
|
||||
<entry>Wait until this message is replied. If <structfield>reply</structfield>
|
||||
is 0 and the <structfield>timeout</structfield> is 0, then don't wait for a reply but
|
||||
return after transmitting the message. If there was an error as indicated by a non-zero
|
||||
<structfield>tx_status</structfield> field, then <structfield>reply</structfield> and
|
||||
<structfield>timeout</structfield> are both set to 0 by the driver. Ignored by
|
||||
<constant>CEC_RECEIVE</constant>. The case where <structfield>reply</structfield> is 0
|
||||
(this is the opcode for the Feature Abort message) and <structfield>timeout</structfield>
|
||||
is non-zero is specifically allowed to send a message and wait up to <structfield>timeout</structfield>
|
||||
milliseconds for a Feature Abort reply. In this case <structfield>rx_status</structfield>
|
||||
will either be set to <constant>CEC_RX_STATUS_TIMEOUT</constant> or
|
||||
<constant>CEC_RX_STATUS_FEATURE_ABORT</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>tx_arb_lost_cnt</structfield></entry>
|
||||
<entry>A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports this, otherwise
|
||||
it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ARB_LOST</constant>
|
||||
status bit is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>tx_nack_cnt</structfield></entry>
|
||||
<entry>A counter of the number of transmit attempts that resulted in the
|
||||
Not Acknowledged error. This is only set if the hardware supports this, otherwise
|
||||
it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_NACK</constant>
|
||||
status bit is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>tx_low_drive_cnt</structfield></entry>
|
||||
<entry>A counter of the number of transmit attempts that resulted in the
|
||||
Arbitration Lost error. This is only set if the hardware supports this, otherwise
|
||||
it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_LOW_DRIVE</constant>
|
||||
status bit is set.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>tx_error_cnt</structfield></entry>
|
||||
<entry>A counter of the number of transmit errors other than Arbitration Lost
|
||||
or Not Acknowledged. This is only set if the hardware supports this, otherwise
|
||||
it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ERROR</constant>
|
||||
status bit is set.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-tx-status">
|
||||
<title>CEC Transmit Status</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_OK</constant></entry>
|
||||
<entry>0x01</entry>
|
||||
<entry>The message was transmitted successfully. This is mutually exclusive with
|
||||
<constant>CEC_TX_STATUS_MAX_RETRIES</constant>. Other bits can still be set if
|
||||
earlier attempts met with failure before the transmit was eventually successful.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_ARB_LOST</constant></entry>
|
||||
<entry>0x02</entry>
|
||||
<entry>CEC line arbitration was lost.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_NACK</constant></entry>
|
||||
<entry>0x04</entry>
|
||||
<entry>Message was not acknowledged.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_LOW_DRIVE</constant></entry>
|
||||
<entry>0x08</entry>
|
||||
<entry>Low drive was detected on the CEC bus. This indicates that a follower
|
||||
detected an error on the bus and requests a retransmission.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_ERROR</constant></entry>
|
||||
<entry>0x10</entry>
|
||||
<entry>Some error occurred. This is used for any errors that do not
|
||||
fit the previous two, either because the hardware could not tell
|
||||
which error occurred, or because the hardware tested for other conditions
|
||||
besides those two.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_TX_STATUS_MAX_RETRIES</constant></entry>
|
||||
<entry>0x20</entry>
|
||||
<entry>The transmit failed after one or more retries. This status bit is mutually
|
||||
exclusive with <constant>CEC_TX_STATUS_OK</constant>. Other bits can still be set
|
||||
to explain which failures were seen.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="cec-rx-status">
|
||||
<title>CEC Receive Status</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>CEC_RX_STATUS_OK</constant></entry>
|
||||
<entry>0x01</entry>
|
||||
<entry>The message was received successfully.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_RX_STATUS_TIMEOUT</constant></entry>
|
||||
<entry>0x02</entry>
|
||||
<entry>The reply to an earlier transmitted message timed out.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>CEC_RX_STATUS_FEATURE_ABORT</constant></entry>
|
||||
<entry>0x04</entry>
|
||||
<entry>The message was received successfully but the reply was
|
||||
<constant>CEC_MSG_FEATURE_ABORT</constant>. This status is only
|
||||
set if this message was the reply to an earlier transmitted
|
||||
message.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
</refsect1>
|
||||
</refentry>
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Двоичные данные
Documentation/DocBook/media/v4l/crop.pdf
Двоичные данные
Documentation/DocBook/media/v4l/crop.pdf
Двоичный файл не отображается.
|
@ -1,110 +0,0 @@
|
|||
<title>Video Capture Interface</title>
|
||||
|
||||
<para>Video capture devices sample an analog video signal and store
|
||||
the digitized images in memory. Today nearly all devices can capture
|
||||
at full 25 or 30 frames/second. With this interface applications can
|
||||
control the capture process and move images from the driver into user
|
||||
space.</para>
|
||||
|
||||
<para>Conventionally V4L2 video capture devices are accessed through
|
||||
character device special files named <filename>/dev/video</filename>
|
||||
and <filename>/dev/video0</filename> to
|
||||
<filename>/dev/video63</filename> with major number 81 and minor
|
||||
numbers 0 to 63. <filename>/dev/video</filename> is typically a
|
||||
symbolic link to the preferred video device. Note the same device
|
||||
files are used for video output devices.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the video capture interface set the
|
||||
<constant>V4L2_CAP_VIDEO_CAPTURE</constant> or
|
||||
<constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
||||
they may also support the <link linkend="overlay">video overlay</link>
|
||||
(<constant>V4L2_CAP_VIDEO_OVERLAY</constant>) and the <link
|
||||
linkend="raw-vbi">raw VBI capture</link>
|
||||
(<constant>V4L2_CAP_VBI_CAPTURE</constant>) interface. At least one of
|
||||
the read/write or streaming I/O methods must be supported. Tuners and
|
||||
audio inputs are optional.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>Video capture devices shall support <link
|
||||
linkend="audio">audio input</link>, <link
|
||||
linkend="tuner">tuner</link>, <link linkend="control">controls</link>,
|
||||
<link linkend="crop">cropping and scaling</link> and <link
|
||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
||||
The <link linkend="video">video input</link> and <link
|
||||
linkend="standard">video standard</link> ioctls must be supported by
|
||||
all video capture devices.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Image Format Negotiation</title>
|
||||
|
||||
<para>The result of a capture operation is determined by
|
||||
cropping and image format parameters. The former select an area of the
|
||||
video picture to capture, the latter how images are stored in memory,
|
||||
&ie; in RGB or YUV format, the number of bits per pixel or width and
|
||||
height. Together they also define how images are scaled in the
|
||||
process.</para>
|
||||
|
||||
<para>As usual these parameters are <emphasis>not</emphasis> reset
|
||||
at &func-open; time to permit Unix tool chains, programming a device
|
||||
and then reading from it as if it was a plain file. Well written V4L2
|
||||
applications ensure they really get what they want, including cropping
|
||||
and scaling.</para>
|
||||
|
||||
<para>Cropping initialization at minimum requires to reset the
|
||||
parameters to defaults. An example is given in <xref
|
||||
linkend="crop" />.</para>
|
||||
|
||||
<para>To query the current image format applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the
|
||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
||||
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
||||
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
||||
<structfield>fmt</structfield> union.</para>
|
||||
|
||||
<para>To request different parameters applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
||||
initialize all fields of the &v4l2-pix-format;
|
||||
<structfield>vbi</structfield> member of the
|
||||
<structfield>fmt</structfield> union, or better just modify the
|
||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may
|
||||
adjust the parameters and finally return the actual parameters as
|
||||
<constant>VIDIOC_G_FMT</constant> does.</para>
|
||||
|
||||
<para>Like <constant>VIDIOC_S_FMT</constant> the
|
||||
&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations
|
||||
without disabling I/O or possibly time consuming hardware
|
||||
preparations.</para>
|
||||
|
||||
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
||||
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
||||
capture devices must implement both the
|
||||
<constant>VIDIOC_G_FMT</constant> and
|
||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Reading Images</title>
|
||||
|
||||
<para>A video capture device may support the <link
|
||||
linkend="rw">read() function</link> and/or streaming (<link
|
||||
linkend="mmap">memory mapping</link> or <link
|
||||
linkend="userp">user pointer</link>) I/O. See <xref
|
||||
linkend="io" /> for details.</para>
|
||||
</section>
|
|
@ -1,27 +0,0 @@
|
|||
<title>Codec Interface</title>
|
||||
|
||||
<para>A V4L2 codec can compress, decompress, transform, or otherwise
|
||||
convert video data from one format into another format, in memory. Typically
|
||||
such devices are memory-to-memory devices (i.e. devices with the
|
||||
<constant>V4L2_CAP_VIDEO_M2M</constant> or <constant>V4L2_CAP_VIDEO_M2M_MPLANE</constant>
|
||||
capability set).
|
||||
</para>
|
||||
|
||||
<para>A memory-to-memory video node acts just like a normal video node, but it
|
||||
supports both output (sending frames from memory to the codec hardware) and
|
||||
capture (receiving the processed frames from the codec hardware into memory)
|
||||
stream I/O. An application will have to setup the stream
|
||||
I/O for both sides and finally call &VIDIOC-STREAMON; for both capture and output
|
||||
to start the codec.</para>
|
||||
|
||||
<para>Video compression codecs use the MPEG controls to setup their codec parameters
|
||||
(note that the MPEG controls actually support many more codecs than just MPEG).
|
||||
See <xref linkend="mpeg-controls"></xref>.</para>
|
||||
|
||||
<para>Memory-to-memory devices can often be used as a shared resource: you can
|
||||
open the video node multiple times, each application setting up their own codec properties
|
||||
that are local to the file handle, and each can use it independently from the others.
|
||||
The driver will arbitrate access to the codec and reprogram it whenever another file
|
||||
handler gets access. This is different from the usual video node behavior where the video properties
|
||||
are global to the device (i.e. changing something through one file handle is visible
|
||||
through another file handle).</para>
|
|
@ -1,17 +0,0 @@
|
|||
<title>Effect Devices Interface</title>
|
||||
|
||||
<note>
|
||||
<title>Suspended</title>
|
||||
|
||||
<para>This interface has been be suspended from the V4L2 API
|
||||
implemented in Linux 2.6 until we have more experience with effect
|
||||
device interfaces.</para>
|
||||
</note>
|
||||
|
||||
<para>A V4L2 video effect device can do image effects, filtering, or
|
||||
combine two or more images or image streams. For example video
|
||||
transitions or wipes. Applications send data to be processed and
|
||||
receive the result data either with &func-read; and &func-write;
|
||||
functions, or through the streaming I/O mechanism.</para>
|
||||
|
||||
<para>[to do]</para>
|
|
@ -1,43 +0,0 @@
|
|||
<title>Event Interface</title>
|
||||
|
||||
<para>The V4L2 event interface provides a means for a user to get
|
||||
immediately notified on certain conditions taking place on a device.
|
||||
This might include start of frame or loss of signal events, for
|
||||
example. Changes in the value or state of a V4L2 control can also be
|
||||
reported through events.
|
||||
</para>
|
||||
|
||||
<para>To receive events, the events the user is interested in first must
|
||||
be subscribed using the &VIDIOC-SUBSCRIBE-EVENT; ioctl. Once an event is
|
||||
subscribed, the events of subscribed types are dequeueable using the
|
||||
&VIDIOC-DQEVENT; ioctl. Events may be unsubscribed using
|
||||
VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event type V4L2_EVENT_ALL may
|
||||
be used to unsubscribe all the events the driver supports.</para>
|
||||
|
||||
<para>The event subscriptions and event queues are specific to file
|
||||
handles. Subscribing an event on one file handle does not affect
|
||||
other file handles.</para>
|
||||
|
||||
<para>The information on dequeueable events is obtained by using select or
|
||||
poll system calls on video devices. The V4L2 events use POLLPRI events on
|
||||
poll system call and exceptions on select system call.</para>
|
||||
|
||||
<para>Starting with kernel 3.1 certain guarantees can be given with
|
||||
regards to events:<orderedlist>
|
||||
<listitem>
|
||||
<para>Each subscribed event has its own internal dedicated event queue.
|
||||
This means that flooding of one event type will not interfere with other
|
||||
event types.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>If the internal event queue for a particular subscribed event
|
||||
becomes full, then the oldest event in that queue will be dropped.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Where applicable, certain event types can ensure that the payload
|
||||
of the oldest event that is about to be dropped will be merged with the payload
|
||||
of the next oldest event. Thus ensuring that no information is lost, but only an
|
||||
intermediate step leading up to that information. See the documentation for the
|
||||
event you want to subscribe to whether this is applicable for that event or not.</para>
|
||||
</listitem>
|
||||
</orderedlist></para>
|
|
@ -1,149 +0,0 @@
|
|||
<title>Video Output Overlay Interface</title>
|
||||
<subtitle>Also known as On-Screen Display (OSD)</subtitle>
|
||||
|
||||
<para>Some video output devices can overlay a framebuffer image onto
|
||||
the outgoing video signal. Applications can set up such an overlay
|
||||
using this interface, which borrows structures and ioctls of the <link
|
||||
linkend="overlay">Video Overlay</link> interface.</para>
|
||||
|
||||
<para>The OSD function is accessible through the same character
|
||||
special file as the <link linkend="capture">Video Output</link> function.
|
||||
Note the default function of such a <filename>/dev/video</filename> device
|
||||
is video capturing or output. The OSD function is only available after
|
||||
calling the &VIDIOC-S-FMT; ioctl.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the <wordasword>Video Output
|
||||
Overlay</wordasword> interface set the
|
||||
<constant>V4L2_CAP_VIDEO_OUTPUT_OVERLAY</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Framebuffer</title>
|
||||
|
||||
<para>Contrary to the <wordasword>Video Overlay</wordasword>
|
||||
interface the framebuffer is normally implemented on the TV card and
|
||||
not the graphics card. On Linux it is accessible as a framebuffer
|
||||
device (<filename>/dev/fbN</filename>). Given a V4L2 device,
|
||||
applications can find the corresponding framebuffer device by calling
|
||||
the &VIDIOC-G-FBUF; ioctl. It returns, amongst other information, the
|
||||
physical address of the framebuffer in the
|
||||
<structfield>base</structfield> field of &v4l2-framebuffer;. The
|
||||
framebuffer device ioctl <constant>FBIOGET_FSCREENINFO</constant>
|
||||
returns the same address in the <structfield>smem_start</structfield>
|
||||
field of struct <structname>fb_fix_screeninfo</structname>. The
|
||||
<constant>FBIOGET_FSCREENINFO</constant> ioctl and struct
|
||||
<structname>fb_fix_screeninfo</structname> are defined in the
|
||||
<filename>linux/fb.h</filename> header file.</para>
|
||||
|
||||
<para>The width and height of the framebuffer depends on the
|
||||
current video standard. A V4L2 driver may reject attempts to change
|
||||
the video standard (or any other ioctl which would imply a framebuffer
|
||||
size change) with an &EBUSY; until all applications closed the
|
||||
framebuffer device.</para>
|
||||
|
||||
<example>
|
||||
<title>Finding a framebuffer device for OSD</title>
|
||||
|
||||
<programlisting>
|
||||
#include <linux/fb.h>
|
||||
|
||||
&v4l2-framebuffer; fbuf;
|
||||
unsigned int i;
|
||||
int fb_fd;
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) {
|
||||
perror("VIDIOC_G_FBUF");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
char dev_name[16];
|
||||
struct fb_fix_screeninfo si;
|
||||
|
||||
snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i);
|
||||
|
||||
fb_fd = open(dev_name, O_RDWR);
|
||||
if (-1 == fb_fd) {
|
||||
switch (errno) {
|
||||
case ENOENT: /* no such file */
|
||||
case ENXIO: /* no driver */
|
||||
continue;
|
||||
|
||||
default:
|
||||
perror("open");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) {
|
||||
if (si.smem_start == (unsigned long)fbuf.base)
|
||||
break;
|
||||
} else {
|
||||
/* Apparently not a framebuffer device. */
|
||||
}
|
||||
|
||||
close(fb_fd);
|
||||
fb_fd = -1;
|
||||
}
|
||||
|
||||
/* fb_fd is the file descriptor of the framebuffer device
|
||||
for the video output overlay, or -1 if no device was found. */
|
||||
</programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Overlay Window and Scaling</title>
|
||||
|
||||
<para>The overlay is controlled by source and target rectangles.
|
||||
The source rectangle selects a subsection of the framebuffer image to
|
||||
be overlaid, the target rectangle an area in the outgoing video signal
|
||||
where the image will appear. Drivers may or may not support scaling,
|
||||
and arbitrary sizes and positions of these rectangles. Further drivers
|
||||
may support any (or none) of the clipping/blending methods defined for
|
||||
the <link linkend="overlay">Video Overlay</link> interface.</para>
|
||||
|
||||
<para>A &v4l2-window; defines the size of the source rectangle,
|
||||
its position in the framebuffer and the clipping/blending method to be
|
||||
used for the overlay. To get the current parameters applications set
|
||||
the <structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant> and call the
|
||||
&VIDIOC-G-FMT; ioctl. The driver fills the
|
||||
<structname>v4l2_window</structname> substructure named
|
||||
<structfield>win</structfield>. It is not possible to retrieve a
|
||||
previously programmed clipping list or bitmap.</para>
|
||||
|
||||
<para>To program the source rectangle applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant>, initialize
|
||||
the <structfield>win</structfield> substructure and call the
|
||||
&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against
|
||||
hardware limits and returns the actual parameters as
|
||||
<constant>VIDIOC_G_FMT</constant> does. Like
|
||||
<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be
|
||||
used to learn about driver capabilities without actually changing
|
||||
driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works
|
||||
after the overlay has been enabled.</para>
|
||||
|
||||
<para>A &v4l2-crop; defines the size and position of the target
|
||||
rectangle. The scaling factor of the overlay is implied by the width
|
||||
and height given in &v4l2-window; and &v4l2-crop;. The cropping API
|
||||
applies to <wordasword>Video Output</wordasword> and <wordasword>Video
|
||||
Output Overlay</wordasword> devices in the same way as to
|
||||
<wordasword>Video Capture</wordasword> and <wordasword>Video
|
||||
Overlay</wordasword> devices, merely reversing the direction of the
|
||||
data flow. For more information see <xref linkend="crop" />.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Enabling Overlay</title>
|
||||
|
||||
<para>There is no V4L2 ioctl to enable or disable the overlay,
|
||||
however the framebuffer interface of the driver may support the
|
||||
<constant>FBIOBLANK</constant> ioctl.</para>
|
||||
</section>
|
|
@ -1,106 +0,0 @@
|
|||
<title>Video Output Interface</title>
|
||||
|
||||
<para>Video output devices encode stills or image sequences as
|
||||
analog video signal. With this interface applications can
|
||||
control the encoding process and move images from user space to
|
||||
the driver.</para>
|
||||
|
||||
<para>Conventionally V4L2 video output devices are accessed through
|
||||
character device special files named <filename>/dev/video</filename>
|
||||
and <filename>/dev/video0</filename> to
|
||||
<filename>/dev/video63</filename> with major number 81 and minor
|
||||
numbers 0 to 63. <filename>/dev/video</filename> is typically a
|
||||
symbolic link to the preferred video device. Note the same device
|
||||
files are used for video capture devices.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the video output interface set the
|
||||
<constant>V4L2_CAP_VIDEO_OUTPUT</constant> or
|
||||
<constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
|
||||
they may also support the <link linkend="raw-vbi">raw VBI
|
||||
output</link> (<constant>V4L2_CAP_VBI_OUTPUT</constant>) interface. At
|
||||
least one of the read/write or streaming I/O methods must be
|
||||
supported. Modulators and audio outputs are optional.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>Video output devices shall support <link
|
||||
linkend="audio">audio output</link>, <link
|
||||
linkend="tuner">modulator</link>, <link linkend="control">controls</link>,
|
||||
<link linkend="crop">cropping and scaling</link> and <link
|
||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
||||
The <link linkend="video">video output</link> and <link
|
||||
linkend="standard">video standard</link> ioctls must be supported by
|
||||
all video output devices.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Image Format Negotiation</title>
|
||||
|
||||
<para>The output is determined by cropping and image format
|
||||
parameters. The former select an area of the video picture where the
|
||||
image will appear, the latter how images are stored in memory, &ie; in
|
||||
RGB or YUV format, the number of bits per pixel or width and height.
|
||||
Together they also define how images are scaled in the process.</para>
|
||||
|
||||
<para>As usual these parameters are <emphasis>not</emphasis> reset
|
||||
at &func-open; time to permit Unix tool chains, programming a device
|
||||
and then writing to it as if it was a plain file. Well written V4L2
|
||||
applications ensure they really get what they want, including cropping
|
||||
and scaling.</para>
|
||||
|
||||
<para>Cropping initialization at minimum requires to reset the
|
||||
parameters to defaults. An example is given in <xref
|
||||
linkend="crop" />.</para>
|
||||
|
||||
<para>To query the current image format applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and call the
|
||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
||||
the &v4l2-pix-format; <structfield>pix</structfield> or the
|
||||
&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
|
||||
<structfield>fmt</structfield> union.</para>
|
||||
|
||||
<para>To request different parameters applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
||||
initialize all fields of the &v4l2-pix-format;
|
||||
<structfield>vbi</structfield> member of the
|
||||
<structfield>fmt</structfield> union, or better just modify the
|
||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may
|
||||
adjust the parameters and finally return the actual parameters as
|
||||
<constant>VIDIOC_G_FMT</constant> does.</para>
|
||||
|
||||
<para>Like <constant>VIDIOC_S_FMT</constant> the
|
||||
&VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations
|
||||
without disabling I/O or possibly time consuming hardware
|
||||
preparations.</para>
|
||||
|
||||
<para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
|
||||
are discussed in <xref linkend="pixfmt" />. See also the specification of the
|
||||
<constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
|
||||
and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
|
||||
output devices must implement both the
|
||||
<constant>VIDIOC_G_FMT</constant> and
|
||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Writing Images</title>
|
||||
|
||||
<para>A video output device may support the <link
|
||||
linkend="rw">write() function</link> and/or streaming (<link
|
||||
linkend="mmap">memory mapping</link> or <link
|
||||
linkend="userp">user pointer</link>) I/O. See <xref
|
||||
linkend="io" /> for details.</para>
|
||||
</section>
|
|
@ -1,368 +0,0 @@
|
|||
<title>Video Overlay Interface</title>
|
||||
<subtitle>Also known as Framebuffer Overlay or Previewing</subtitle>
|
||||
|
||||
<para>Video overlay devices have the ability to genlock (TV-)video
|
||||
into the (VGA-)video signal of a graphics card, or to store captured
|
||||
images directly in video memory of a graphics card, typically with
|
||||
clipping. This can be considerable more efficient than capturing
|
||||
images and displaying them by other means. In the old days when only
|
||||
nuclear power plants needed cooling towers this used to be the only
|
||||
way to put live video into a window.</para>
|
||||
|
||||
<para>Video overlay devices are accessed through the same character
|
||||
special files as <link linkend="capture">video capture</link> devices.
|
||||
Note the default function of a <filename>/dev/video</filename> device
|
||||
is video capturing. The overlay function is only available after
|
||||
calling the &VIDIOC-S-FMT; ioctl.</para>
|
||||
|
||||
<para>The driver may support simultaneous overlay and capturing
|
||||
using the read/write and streaming I/O methods. If so, operation at
|
||||
the nominal frame rate of the video standard is not guaranteed. Frames
|
||||
may be directed away from overlay to capture, or one field may be used
|
||||
for overlay and the other for capture if the capture parameters permit
|
||||
this.</para>
|
||||
|
||||
<para>Applications should use different file descriptors for
|
||||
capturing and overlay. This must be supported by all drivers capable
|
||||
of simultaneous capturing and overlay. Optionally these drivers may
|
||||
also permit capturing and overlay with a single file descriptor for
|
||||
compatibility with V4L and earlier versions of V4L2.<footnote>
|
||||
<para>A common application of two file descriptors is the
|
||||
XFree86 <link linkend="xvideo">Xv/V4L</link> interface driver and
|
||||
a V4L2 application. While the X server controls video overlay, the
|
||||
application can take advantage of memory mapping and DMA.</para>
|
||||
<para>In the opinion of the designers of this API, no driver
|
||||
writer taking the efforts to support simultaneous capturing and
|
||||
overlay will restrict this ability by requiring a single file
|
||||
descriptor, as in V4L and earlier versions of V4L2. Making this
|
||||
optional means applications depending on two file descriptors need
|
||||
backup routines to be compatible with all drivers, which is
|
||||
considerable more work than using two fds in applications which do
|
||||
not. Also two fd's fit the general concept of one file descriptor for
|
||||
each logical stream. Hence as a complexity trade-off drivers
|
||||
<emphasis>must</emphasis> support two file descriptors and
|
||||
<emphasis>may</emphasis> support single fd operation.</para>
|
||||
</footnote></para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the video overlay interface set the
|
||||
<constant>V4L2_CAP_VIDEO_OVERLAY</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. The overlay I/O method specified
|
||||
below must be supported. Tuners and audio inputs are optional.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>Video overlay devices shall support <link
|
||||
linkend="audio">audio input</link>, <link
|
||||
linkend="tuner">tuner</link>, <link linkend="control">controls</link>,
|
||||
<link linkend="crop">cropping and scaling</link> and <link
|
||||
linkend="streaming-par">streaming parameter</link> ioctls as needed.
|
||||
The <link linkend="video">video input</link> and <link
|
||||
linkend="standard">video standard</link> ioctls must be supported by
|
||||
all video overlay devices.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Setup</title>
|
||||
|
||||
<para>Before overlay can commence applications must program the
|
||||
driver with frame buffer parameters, namely the address and size of
|
||||
the frame buffer and the image format, for example RGB 5:6:5. The
|
||||
&VIDIOC-G-FBUF; and &VIDIOC-S-FBUF; ioctls are available to get
|
||||
and set these parameters, respectively. The
|
||||
<constant>VIDIOC_S_FBUF</constant> ioctl is privileged because it
|
||||
allows to set up DMA into physical memory, bypassing the memory
|
||||
protection mechanisms of the kernel. Only the superuser can change the
|
||||
frame buffer address and size. Users are not supposed to run TV
|
||||
applications as root or with SUID bit set. A small helper application
|
||||
with suitable privileges should query the graphics system and program
|
||||
the V4L2 driver at the appropriate time.</para>
|
||||
|
||||
<para>Some devices add the video overlay to the output signal
|
||||
of the graphics card. In this case the frame buffer is not modified by
|
||||
the video device, and the frame buffer address and pixel format are
|
||||
not needed by the driver. The <constant>VIDIOC_S_FBUF</constant> ioctl
|
||||
is not privileged. An application can check for this type of device by
|
||||
calling the <constant>VIDIOC_G_FBUF</constant> ioctl.</para>
|
||||
|
||||
<para>A driver may support any (or none) of five clipping/blending
|
||||
methods:<orderedlist>
|
||||
<listitem>
|
||||
<para>Chroma-keying displays the overlaid image only where
|
||||
pixels in the primary graphics surface assume a certain color.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>A bitmap can be specified where each bit corresponds
|
||||
to a pixel in the overlaid image. When the bit is set, the
|
||||
corresponding video pixel is displayed, otherwise a pixel of the
|
||||
graphics surface.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>A list of clipping rectangles can be specified. In
|
||||
these regions <emphasis>no</emphasis> video is displayed, so the
|
||||
graphics surface can be seen here.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>The framebuffer has an alpha channel that can be used
|
||||
to clip or blend the framebuffer with the video.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>A global alpha value can be specified to blend the
|
||||
framebuffer contents with video images.</para>
|
||||
</listitem>
|
||||
</orderedlist></para>
|
||||
|
||||
<para>When simultaneous capturing and overlay is supported and
|
||||
the hardware prohibits different image and frame buffer formats, the
|
||||
format requested first takes precedence. The attempt to capture
|
||||
(&VIDIOC-S-FMT;) or overlay (&VIDIOC-S-FBUF;) may fail with an
|
||||
&EBUSY; or return accordingly modified parameters..</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Overlay Window</title>
|
||||
|
||||
<para>The overlaid image is determined by cropping and overlay
|
||||
window parameters. The former select an area of the video picture to
|
||||
capture, the latter how images are overlaid and clipped. Cropping
|
||||
initialization at minimum requires to reset the parameters to
|
||||
defaults. An example is given in <xref linkend="crop" />.</para>
|
||||
|
||||
<para>The overlay window is described by a &v4l2-window;. It
|
||||
defines the size of the image, its position over the graphics surface
|
||||
and the clipping to be applied. To get the current parameters
|
||||
applications set the <structfield>type</structfield> field of a
|
||||
&v4l2-format; to <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant> and
|
||||
call the &VIDIOC-G-FMT; ioctl. The driver fills the
|
||||
<structname>v4l2_window</structname> substructure named
|
||||
<structfield>win</structfield>. It is not possible to retrieve a
|
||||
previously programmed clipping list or bitmap.</para>
|
||||
|
||||
<para>To program the overlay window applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, initialize the
|
||||
<structfield>win</structfield> substructure and call the
|
||||
&VIDIOC-S-FMT; ioctl. The driver adjusts the parameters against
|
||||
hardware limits and returns the actual parameters as
|
||||
<constant>VIDIOC_G_FMT</constant> does. Like
|
||||
<constant>VIDIOC_S_FMT</constant>, the &VIDIOC-TRY-FMT; ioctl can be
|
||||
used to learn about driver capabilities without actually changing
|
||||
driver state. Unlike <constant>VIDIOC_S_FMT</constant> this also works
|
||||
after the overlay has been enabled.</para>
|
||||
|
||||
<para>The scaling factor of the overlaid image is implied by the
|
||||
width and height given in &v4l2-window; and the size of the cropping
|
||||
rectangle. For more information see <xref linkend="crop" />.</para>
|
||||
|
||||
<para>When simultaneous capturing and overlay is supported and
|
||||
the hardware prohibits different image and window sizes, the size
|
||||
requested first takes precedence. The attempt to capture or overlay as
|
||||
well (&VIDIOC-S-FMT;) may fail with an &EBUSY; or return accordingly
|
||||
modified parameters.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-window">
|
||||
<title>struct <structname>v4l2_window</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>&v4l2-rect;</entry>
|
||||
<entry><structfield>w</structfield></entry>
|
||||
<entry>Size and position of the window relative to the
|
||||
top, left corner of the frame buffer defined with &VIDIOC-S-FBUF;. The
|
||||
window can extend the frame buffer width and height, the
|
||||
<structfield>x</structfield> and <structfield>y</structfield>
|
||||
coordinates can be negative, and it can lie completely outside the
|
||||
frame buffer. The driver clips the window accordingly, or if that is
|
||||
not possible, modifies its size and/or position.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-field;</entry>
|
||||
<entry><structfield>field</structfield></entry>
|
||||
<entry>Applications set this field to determine which
|
||||
video field shall be overlaid, typically one of
|
||||
<constant>V4L2_FIELD_ANY</constant> (0),
|
||||
<constant>V4L2_FIELD_TOP</constant>,
|
||||
<constant>V4L2_FIELD_BOTTOM</constant> or
|
||||
<constant>V4L2_FIELD_INTERLACED</constant>. Drivers may have to choose
|
||||
a different field order and return the actual setting here.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>chromakey</structfield></entry>
|
||||
<entry>When chroma-keying has been negotiated with
|
||||
&VIDIOC-S-FBUF; applications set this field to the desired pixel value
|
||||
for the chroma key. The format is the same as the pixel format of the
|
||||
framebuffer (&v4l2-framebuffer;
|
||||
<structfield>fmt.pixelformat</structfield> field), with bytes in host
|
||||
order. E. g. for <link
|
||||
linkend="V4L2-PIX-FMT-BGR32"><constant>V4L2_PIX_FMT_BGR24</constant></link>
|
||||
the value should be 0xRRGGBB on a little endian, 0xBBGGRR on a big
|
||||
endian host.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-clip; *</entry>
|
||||
<entry><structfield>clips</structfield></entry>
|
||||
<entry>When chroma-keying has <emphasis>not</emphasis>
|
||||
been negotiated and &VIDIOC-G-FBUF; indicated this capability,
|
||||
applications can set this field to point to an array of
|
||||
clipping rectangles.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry>Like the window coordinates
|
||||
<structfield>w</structfield>, clipping rectangles are defined relative
|
||||
to the top, left corner of the frame buffer. However clipping
|
||||
rectangles must not extend the frame buffer width and height, and they
|
||||
must not overlap. If possible applications should merge adjacent
|
||||
rectangles. Whether this must create x-y or y-x bands, or the order of
|
||||
rectangles, is not defined. When clip lists are not supported the
|
||||
driver ignores this field. Its contents after calling &VIDIOC-S-FMT;
|
||||
are undefined.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>clipcount</structfield></entry>
|
||||
<entry>When the application set the
|
||||
<structfield>clips</structfield> field, this field must contain the
|
||||
number of clipping rectangles in the list. When clip lists are not
|
||||
supported the driver ignores this field, its contents after calling
|
||||
<constant>VIDIOC_S_FMT</constant> are undefined. When clip lists are
|
||||
supported but no clipping is desired this field must be set to
|
||||
zero.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>void *</entry>
|
||||
<entry><structfield>bitmap</structfield></entry>
|
||||
<entry>When chroma-keying has
|
||||
<emphasis>not</emphasis> been negotiated and &VIDIOC-G-FBUF; indicated
|
||||
this capability, applications can set this field to point to a
|
||||
clipping bit mask.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="hspan"><para>It must be of the same size
|
||||
as the window, <structfield>w.width</structfield> and
|
||||
<structfield>w.height</structfield>. Each bit corresponds to a pixel
|
||||
in the overlaid image, which is displayed only when the bit is
|
||||
<emphasis>set</emphasis>. Pixel coordinates translate to bits like:
|
||||
<programlisting>
|
||||
((__u8 *) <structfield>bitmap</structfield>)[<structfield>w.width</structfield> * y + x / 8] & (1 << (x & 7))</programlisting></para><para>where <structfield>0</structfield> ≤ x <
|
||||
<structfield>w.width</structfield> and <structfield>0</structfield> ≤
|
||||
y <<structfield>w.height</structfield>.<footnote>
|
||||
<para>Should we require
|
||||
<structfield>w.width</structfield> to be a multiple of
|
||||
eight?</para>
|
||||
</footnote></para><para>When a clipping
|
||||
bit mask is not supported the driver ignores this field, its contents
|
||||
after calling &VIDIOC-S-FMT; are undefined. When a bit mask is supported
|
||||
but no clipping is desired this field must be set to
|
||||
<constant>NULL</constant>.</para><para>Applications need not create a
|
||||
clip list or bit mask. When they pass both, or despite negotiating
|
||||
chroma-keying, the results are undefined. Regardless of the chosen
|
||||
method, the clipping abilities of the hardware may be limited in
|
||||
quantity or quality. The results when these limits are exceeded are
|
||||
undefined.<footnote>
|
||||
<para>When the image is written into frame buffer
|
||||
memory it will be undesirable if the driver clips out less pixels
|
||||
than expected, because the application and graphics system are not
|
||||
aware these regions need to be refreshed. The driver should clip out
|
||||
more pixels or not write the image at all.</para>
|
||||
</footnote></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>global_alpha</structfield></entry>
|
||||
<entry>The global alpha value used to blend the
|
||||
framebuffer with video images, if global alpha blending has been
|
||||
negotiated (<constant>V4L2_FBUF_FLAG_GLOBAL_ALPHA</constant>, see
|
||||
&VIDIOC-S-FBUF;, <xref linkend="framebuffer-flags" />).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry>Note this field was added in Linux 2.6.23, extending the structure. However
|
||||
the <link linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls,
|
||||
which take a pointer to a <link
|
||||
linkend="v4l2-format">v4l2_format</link> parent structure with padding
|
||||
bytes at the end, are not affected.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-clip">
|
||||
<title>struct <structname>v4l2_clip</structname><footnote>
|
||||
<para>The X Window system defines "regions" which are
|
||||
vectors of struct BoxRec { short x1, y1, x2, y2; } with width = x2 -
|
||||
x1 and height = y2 - y1, so one cannot pass X11 clip lists
|
||||
directly.</para>
|
||||
</footnote></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>&v4l2-rect;</entry>
|
||||
<entry><structfield>c</structfield></entry>
|
||||
<entry>Coordinates of the clipping rectangle, relative to
|
||||
the top, left corner of the frame buffer. Only window pixels
|
||||
<emphasis>outside</emphasis> all clipping rectangles are
|
||||
displayed.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>&v4l2-clip; *</entry>
|
||||
<entry><structfield>next</structfield></entry>
|
||||
<entry>Pointer to the next clipping rectangle, NULL when
|
||||
this is the last rectangle. Drivers ignore this field, it cannot be
|
||||
used to pass a linked list of clipping rectangles.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<!-- NB for easier reading this table is duplicated
|
||||
in the vidioc-cropcap chapter.-->
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-rect">
|
||||
<title>struct <structname>v4l2_rect</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__s32</entry>
|
||||
<entry><structfield>left</structfield></entry>
|
||||
<entry>Horizontal offset of the top, left corner of the
|
||||
rectangle, in pixels.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__s32</entry>
|
||||
<entry><structfield>top</structfield></entry>
|
||||
<entry>Vertical offset of the top, left corner of the
|
||||
rectangle, in pixels. Offsets increase to the right and down.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>width</structfield></entry>
|
||||
<entry>Width of the rectangle, in pixels.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>height</structfield></entry>
|
||||
<entry>Height of the rectangle, in pixels.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Enabling Overlay</title>
|
||||
|
||||
<para>To start or stop the frame buffer overlay applications call
|
||||
the &VIDIOC-OVERLAY; ioctl.</para>
|
||||
</section>
|
|
@ -1,49 +0,0 @@
|
|||
<title>Radio Interface</title>
|
||||
|
||||
<para>This interface is intended for AM and FM (analog) radio
|
||||
receivers and transmitters.</para>
|
||||
|
||||
<para>Conventionally V4L2 radio devices are accessed through
|
||||
character device special files named <filename>/dev/radio</filename>
|
||||
and <filename>/dev/radio0</filename> to
|
||||
<filename>/dev/radio63</filename> with major number 81 and minor
|
||||
numbers 64 to 127.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the radio interface set the
|
||||
<constant>V4L2_CAP_RADIO</constant> and
|
||||
<constant>V4L2_CAP_TUNER</constant> or
|
||||
<constant>V4L2_CAP_MODULATOR</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. Other combinations of
|
||||
capability flags are reserved for future extensions.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>Radio devices can support <link
|
||||
linkend="control">controls</link>, and must support the <link
|
||||
linkend="tuner">tuner or modulator</link> ioctls.</para>
|
||||
|
||||
<para>They do not support the video input or output, audio input
|
||||
or output, video standard, cropping and scaling, compression and
|
||||
streaming parameter, or overlay ioctls. All other ioctls and I/O
|
||||
methods are reserved for future extensions.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Programming</title>
|
||||
|
||||
<para>Radio devices may have a couple audio controls (as discussed
|
||||
in <xref linkend="control" />) such as a volume control, possibly custom
|
||||
controls. Further all radio devices have one tuner or modulator (these are
|
||||
discussed in <xref linkend="tuner" />) with index number zero to select
|
||||
the radio frequency and to determine if a monaural or FM stereo
|
||||
program is received/emitted. Drivers switch automatically between AM and FM
|
||||
depending on the selected frequency. The &VIDIOC-G-TUNER; or
|
||||
&VIDIOC-G-MODULATOR; ioctl
|
||||
reports the supported frequency range.</para>
|
||||
</section>
|
|
@ -1,345 +0,0 @@
|
|||
<title>Raw VBI Data Interface</title>
|
||||
|
||||
<para>VBI is an abbreviation of Vertical Blanking Interval, a gap
|
||||
in the sequence of lines of an analog video signal. During VBI
|
||||
no picture information is transmitted, allowing some time while the
|
||||
electron beam of a cathode ray tube TV returns to the top of the
|
||||
screen. Using an oscilloscope you will find here the vertical
|
||||
synchronization pulses and short data packages ASK
|
||||
modulated<footnote><para>ASK: Amplitude-Shift Keying. A high signal
|
||||
level represents a '1' bit, a low level a '0' bit.</para></footnote>
|
||||
onto the video signal. These are transmissions of services such as
|
||||
Teletext or Closed Caption.</para>
|
||||
|
||||
<para>Subject of this interface type is raw VBI data, as sampled off
|
||||
a video signal, or to be added to a signal for output.
|
||||
The data format is similar to uncompressed video images, a number of
|
||||
lines times a number of samples per line, we call this a VBI image.</para>
|
||||
|
||||
<para>Conventionally V4L2 VBI devices are accessed through character
|
||||
device special files named <filename>/dev/vbi</filename> and
|
||||
<filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> with
|
||||
major number 81 and minor numbers 224 to 255.
|
||||
<filename>/dev/vbi</filename> is typically a symbolic link to the
|
||||
preferred VBI device. This convention applies to both input and output
|
||||
devices.</para>
|
||||
|
||||
<para>To address the problems of finding related video and VBI
|
||||
devices VBI capturing and output is also available as device function
|
||||
under <filename>/dev/video</filename>. To capture or output raw VBI
|
||||
data with these devices applications must call the &VIDIOC-S-FMT;
|
||||
ioctl. Accessed as <filename>/dev/vbi</filename>, raw VBI capturing
|
||||
or output is the default device function.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the raw VBI capturing or output API set
|
||||
the <constant>V4L2_CAP_VBI_CAPTURE</constant> or
|
||||
<constant>V4L2_CAP_VBI_OUTPUT</constant> flags, respectively, in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the
|
||||
read/write, streaming or asynchronous I/O methods must be
|
||||
supported. VBI devices may or may not have a tuner or modulator.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>VBI devices shall support <link linkend="video">video
|
||||
input or output</link>, <link linkend="tuner">tuner or
|
||||
modulator</link>, and <link linkend="control">controls</link> ioctls
|
||||
as needed. The <link linkend="standard">video standard</link> ioctls provide
|
||||
information vital to program a VBI device, therefore must be
|
||||
supported.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Raw VBI Format Negotiation</title>
|
||||
|
||||
<para>Raw VBI sampling abilities can vary, in particular the
|
||||
sampling frequency. To properly interpret the data V4L2 specifies an
|
||||
ioctl to query the sampling parameters. Moreover, to allow for some
|
||||
flexibility applications can also suggest different parameters.</para>
|
||||
|
||||
<para>As usual these parameters are <emphasis>not</emphasis>
|
||||
reset at &func-open; time to permit Unix tool chains, programming a
|
||||
device and then reading from it as if it was a plain file. Well
|
||||
written V4L2 applications should always ensure they really get what
|
||||
they want, requesting reasonable parameters and then checking if the
|
||||
actual parameters are suitable.</para>
|
||||
|
||||
<para>To query the current raw VBI capture parameters
|
||||
applications set the <structfield>type</structfield> field of a
|
||||
&v4l2-format; to <constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant> or
|
||||
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>, and call the
|
||||
&VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
|
||||
the &v4l2-vbi-format; <structfield>vbi</structfield> member of the
|
||||
<structfield>fmt</structfield> union.</para>
|
||||
|
||||
<para>To request different parameters applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; as above and
|
||||
initialize all fields of the &v4l2-vbi-format;
|
||||
<structfield>vbi</structfield> member of the
|
||||
<structfield>fmt</structfield> union, or better just modify the
|
||||
results of <constant>VIDIOC_G_FMT</constant>, and call the
|
||||
&VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers return
|
||||
an &EINVAL; only when the given parameters are ambiguous, otherwise
|
||||
they modify the parameters according to the hardware capabilities and
|
||||
return the actual parameters. When the driver allocates resources at
|
||||
this point, it may return an &EBUSY; to indicate the returned
|
||||
parameters are valid but the required resources are currently not
|
||||
available. That may happen for instance when the video and VBI areas
|
||||
to capture would overlap, or when the driver supports multiple opens
|
||||
and another process already requested VBI capturing or output. Anyway,
|
||||
applications must expect other resource allocation points which may
|
||||
return <errorcode>EBUSY</errorcode>, at the &VIDIOC-STREAMON; ioctl
|
||||
and the first read(), write() and select() call.</para>
|
||||
|
||||
<para>VBI devices must implement both the
|
||||
<constant>VIDIOC_G_FMT</constant> and
|
||||
<constant>VIDIOC_S_FMT</constant> ioctl, even if
|
||||
<constant>VIDIOC_S_FMT</constant> ignores all requests and always
|
||||
returns default parameters as <constant>VIDIOC_G_FMT</constant> does.
|
||||
<constant>VIDIOC_TRY_FMT</constant> is optional.</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-vbi-format">
|
||||
<title>struct <structname>v4l2_vbi_format</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>sampling_rate</structfield></entry>
|
||||
<entry>Samples per second, i. e. unit 1 Hz.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>offset</structfield></entry>
|
||||
<entry><para>Horizontal offset of the VBI image,
|
||||
relative to the leading edge of the line synchronization pulse and
|
||||
counted in samples: The first sample in the VBI image will be located
|
||||
<structfield>offset</structfield> /
|
||||
<structfield>sampling_rate</structfield> seconds following the leading
|
||||
edge. See also <xref linkend="vbi-hsync" />.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>samples_per_line</structfield></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>sample_format</structfield></entry>
|
||||
<entry><para>Defines the sample format as in <xref
|
||||
linkend="pixfmt" />, a four-character-code.<footnote>
|
||||
<para>A few devices may be unable to
|
||||
sample VBI data at all but can extend the video capture window to the
|
||||
VBI region.</para>
|
||||
</footnote> Usually this is
|
||||
<constant>V4L2_PIX_FMT_GREY</constant>, i. e. each sample
|
||||
consists of 8 bits with lower values oriented towards the black level.
|
||||
Do not assume any other correlation of values with the signal level.
|
||||
For example, the MSB does not necessarily indicate if the signal is
|
||||
'high' or 'low' because 128 may not be the mean value of the
|
||||
signal. Drivers shall not convert the sample format by software.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>start</structfield>[2]</entry>
|
||||
<entry>This is the scanning system line number
|
||||
associated with the first line of the VBI image, of the first and the
|
||||
second field respectively. See <xref linkend="vbi-525" /> and
|
||||
<xref linkend="vbi-625" /> for valid values.
|
||||
The <constant>V4L2_VBI_ITU_525_F1_START</constant>,
|
||||
<constant>V4L2_VBI_ITU_525_F2_START</constant>,
|
||||
<constant>V4L2_VBI_ITU_625_F1_START</constant> and
|
||||
<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start line
|
||||
numbers for each field for each 525 or 625 line format as a convenience.
|
||||
Don't forget that ITU line numbering starts at 1, not 0.
|
||||
VBI input drivers can return start values 0 if the hardware cannot
|
||||
reliable identify scanning lines, VBI acquisition may not require this
|
||||
information.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>count</structfield>[2]</entry>
|
||||
<entry>The number of lines in the first and second
|
||||
field image, respectively.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry spanname="hspan"><para>Drivers should be as
|
||||
flexibility as possible. For example, it may be possible to extend or
|
||||
move the VBI capture window down to the picture area, implementing a
|
||||
'full field mode' to capture data service transmissions embedded in
|
||||
the picture.</para><para>An application can set the first or second
|
||||
<structfield>count</structfield> value to zero if no data is required
|
||||
from the respective field; <structfield>count</structfield>[1] if the
|
||||
scanning system is progressive, &ie; not interlaced. The
|
||||
corresponding start value shall be ignored by the application and
|
||||
driver. Anyway, drivers may not support single field capturing and
|
||||
return both count values non-zero.</para><para>Both
|
||||
<structfield>count</structfield> values set to zero, or line numbers
|
||||
outside the bounds depicted in <xref linkend="vbi-525" /> and <xref
|
||||
linkend="vbi-625" />, or a field image covering
|
||||
lines of two fields, are invalid and shall not be returned by the
|
||||
driver.</para><para>To initialize the <structfield>start</structfield>
|
||||
and <structfield>count</structfield> fields, applications must first
|
||||
determine the current video standard selection. The &v4l2-std-id; or
|
||||
the <structfield>framelines</structfield> field of &v4l2-standard; can
|
||||
be evaluated for this purpose.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>flags</structfield></entry>
|
||||
<entry>See <xref linkend="vbifmt-flags" /> below. Currently
|
||||
only drivers set flags, applications must set this field to
|
||||
zero.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>reserved</structfield>[2]</entry>
|
||||
<entry>This array is reserved for future extensions.
|
||||
Drivers and applications must set it to zero.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table pgwide="1" frame="none" id="vbifmt-flags">
|
||||
<title>Raw VBI Format Flags</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_VBI_UNSYNC</constant></entry>
|
||||
<entry>0x0001</entry>
|
||||
<entry><para>This flag indicates hardware which does not
|
||||
properly distinguish between fields. Normally the VBI image stores the
|
||||
first field (lower scanning line numbers) first in memory. This may be
|
||||
a top or bottom field depending on the video standard. When this flag
|
||||
is set the first or second field may be stored first, however the
|
||||
fields are still in correct temporal order with the older field first
|
||||
in memory.<footnote>
|
||||
<para>Most VBI services transmit on both fields, but
|
||||
some have different semantics depending on the field number. These
|
||||
cannot be reliable decoded or encoded when
|
||||
<constant>V4L2_VBI_UNSYNC</constant> is set.</para>
|
||||
</footnote></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_VBI_INTERLACED</constant></entry>
|
||||
<entry>0x0002</entry>
|
||||
<entry>By default the two field images will be passed
|
||||
sequentially; all lines of the first field followed by all lines of
|
||||
the second field (compare <xref linkend="field-order" />
|
||||
<constant>V4L2_FIELD_SEQ_TB</constant> and
|
||||
<constant>V4L2_FIELD_SEQ_BT</constant>, whether the top or bottom
|
||||
field is first in memory depends on the video standard). When this
|
||||
flag is set, the two fields are interlaced (cf.
|
||||
<constant>V4L2_FIELD_INTERLACED</constant>). The first line of the
|
||||
first field followed by the first line of the second field, then the
|
||||
two second lines, and so on. Such a layout may be necessary when the
|
||||
hardware has been programmed to capture or output interlaced video
|
||||
images and is unable to separate the fields for VBI capturing at
|
||||
the same time. For simplicity setting this flag implies that both
|
||||
<structfield>count</structfield> values are equal and non-zero.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<figure id="vbi-hsync">
|
||||
<title>Line synchronization</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_hsync.pdf" format="PS" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_hsync.gif" format="GIF" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>Line synchronization diagram</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<figure id="vbi-525">
|
||||
<title>ITU-R 525 line numbering (M/NTSC and M/PAL)</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_525.pdf" format="PS" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_525.gif" format="GIF" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>NTSC field synchronization diagram</phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para>(1) For the purpose of this specification field 2
|
||||
starts in line 264 and not 263.5 because half line capturing is not
|
||||
supported.</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<figure id="vbi-625">
|
||||
<title>ITU-R 625 line numbering</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_625.pdf" format="PS" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="vbi_625.gif" format="GIF" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>PAL/SECAM field synchronization diagram</phrase>
|
||||
</textobject>
|
||||
<caption>
|
||||
<para>(1) For the purpose of this specification field 2
|
||||
starts in line 314 and not 313.5 because half line capturing is not
|
||||
supported.</para>
|
||||
</caption>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>Remember the VBI image format depends on the selected
|
||||
video standard, therefore the application must choose a new standard or
|
||||
query the current standard first. Attempts to read or write data ahead
|
||||
of format negotiation, or after switching the video standard which may
|
||||
invalidate the negotiated VBI parameters, should be refused by the
|
||||
driver. A format change during active I/O is not permitted.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Reading and writing VBI images</title>
|
||||
|
||||
<para>To assure synchronization with the field number and easier
|
||||
implementation, the smallest unit of data passed at a time is one
|
||||
frame, consisting of two fields of VBI images immediately following in
|
||||
memory.</para>
|
||||
|
||||
<para>The total size of a frame computes as follows:</para>
|
||||
|
||||
<programlisting>
|
||||
(<structfield>count</structfield>[0] + <structfield>count</structfield>[1]) *
|
||||
<structfield>samples_per_line</structfield> * sample size in bytes</programlisting>
|
||||
|
||||
<para>The sample size is most likely always one byte,
|
||||
applications must check the <structfield>sample_format</structfield>
|
||||
field though, to function properly with other drivers.</para>
|
||||
|
||||
<para>A VBI device may support <link
|
||||
linkend="rw">read/write</link> and/or streaming (<link
|
||||
linkend="mmap">memory mapping</link> or <link
|
||||
linkend="userp">user pointer</link>) I/O. The latter bears the
|
||||
possibility of synchronizing video and
|
||||
VBI data by using buffer timestamps.</para>
|
||||
|
||||
<para>Remember the &VIDIOC-STREAMON; ioctl and the first read(),
|
||||
write() and select() call can be resource allocation points returning
|
||||
an &EBUSY; if the required hardware resources are temporarily
|
||||
unavailable, for example the device is already in use by another
|
||||
process.</para>
|
||||
</section>
|
|
@ -1,196 +0,0 @@
|
|||
<title>RDS Interface</title>
|
||||
|
||||
<para>The Radio Data System transmits supplementary
|
||||
information in binary format, for example the station name or travel
|
||||
information, on an inaudible audio subcarrier of a radio program. This
|
||||
interface is aimed at devices capable of receiving and/or transmitting RDS
|
||||
information.</para>
|
||||
|
||||
<para>For more information see the core RDS standard <xref linkend="iec62106" />
|
||||
and the RBDS standard <xref linkend="nrsc4" />.</para>
|
||||
|
||||
<para>Note that the RBDS standard as is used in the USA is almost identical
|
||||
to the RDS standard. Any RDS decoder/encoder can also handle RBDS. Only some of the
|
||||
fields have slightly different meanings. See the RBDS standard for more
|
||||
information.</para>
|
||||
|
||||
<para>The RBDS standard also specifies support for MMBS (Modified Mobile Search).
|
||||
This is a proprietary format which seems to be discontinued. The RDS interface does not
|
||||
support this format. Should support for MMBS (or the so-called 'E blocks' in general)
|
||||
be needed, then please contact the linux-media mailing list: &v4l-ml;.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the RDS capturing API set
|
||||
the <constant>V4L2_CAP_RDS_CAPTURE</constant> flag in
|
||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. Any tuner that supports RDS
|
||||
will set the <constant>V4L2_TUNER_CAP_RDS</constant> flag in
|
||||
the <structfield>capability</structfield> field of &v4l2-tuner;. If
|
||||
the driver only passes RDS blocks without interpreting the data
|
||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be
|
||||
set, see <link linkend="reading-rds-data">Reading RDS data</link>.
|
||||
For future use the
|
||||
flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> has also been
|
||||
defined. However, a driver for a radio tuner with this capability does
|
||||
not yet exist, so if you are planning to write such a driver you
|
||||
should discuss this on the linux-media mailing list: &v4l-ml;.</para>
|
||||
|
||||
<para> Whether an RDS signal is present can be detected by looking
|
||||
at the <structfield>rxsubchans</structfield> field of &v4l2-tuner;:
|
||||
the <constant>V4L2_TUNER_SUB_RDS</constant> will be set if RDS data
|
||||
was detected.</para>
|
||||
|
||||
<para>Devices supporting the RDS output API
|
||||
set the <constant>V4L2_CAP_RDS_OUTPUT</constant> flag in
|
||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl.
|
||||
Any modulator that supports RDS will set the
|
||||
<constant>V4L2_TUNER_CAP_RDS</constant> flag in the <structfield>capability</structfield>
|
||||
field of &v4l2-modulator;.
|
||||
In order to enable the RDS transmission one must set the <constant>V4L2_TUNER_SUB_RDS</constant>
|
||||
bit in the <structfield>txsubchans</structfield> field of &v4l2-modulator;.
|
||||
If the driver only passes RDS blocks without interpreting the data
|
||||
the <constant>V4L2_TUNER_CAP_RDS_BLOCK_IO</constant> flag has to be set. If the
|
||||
tuner is capable of handling RDS entities like program identification codes and radio
|
||||
text, the flag <constant>V4L2_TUNER_CAP_RDS_CONTROLS</constant> should be set,
|
||||
see <link linkend="writing-rds-data">Writing RDS data</link> and
|
||||
<link linkend="fm-tx-controls">FM Transmitter Control Reference</link>.</para>
|
||||
</section>
|
||||
|
||||
<section id="reading-rds-data">
|
||||
<title>Reading RDS data</title>
|
||||
|
||||
<para>RDS data can be read from the radio device
|
||||
with the &func-read; function. The data is packed in groups of three bytes.</para>
|
||||
</section>
|
||||
|
||||
<section id="writing-rds-data">
|
||||
<title>Writing RDS data</title>
|
||||
|
||||
<para>RDS data can be written to the radio device
|
||||
with the &func-write; function. The data is packed in groups of three bytes,
|
||||
as follows:</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>RDS datastructures</title>
|
||||
<table frame="none" pgwide="1" id="v4l2-rds-data">
|
||||
<title>struct
|
||||
<structname>v4l2_rds_data</structname></title>
|
||||
<tgroup cols="3">
|
||||
<colspec colname="c1" colwidth="1*" />
|
||||
<colspec colname="c2" colwidth="1*" />
|
||||
<colspec colname="c3" colwidth="5*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>lsb</structfield></entry>
|
||||
<entry>Least Significant Byte of RDS Block</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>msb</structfield></entry>
|
||||
<entry>Most Significant Byte of RDS Block</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>block</structfield></entry>
|
||||
<entry>Block description</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<table frame="none" pgwide="1" id="v4l2-rds-block">
|
||||
<title>Block description</title>
|
||||
<tgroup cols="2">
|
||||
<colspec colname="c1" colwidth="1*" />
|
||||
<colspec colname="c2" colwidth="5*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>Bits 0-2</entry>
|
||||
<entry>Block (aka offset) of the received data.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Bits 3-5</entry>
|
||||
<entry>Deprecated. Currently identical to bits 0-2. Do not use these bits.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Bit 6</entry>
|
||||
<entry>Corrected bit. Indicates that an error was corrected for this data block.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Bit 7</entry>
|
||||
<entry>Error bit. Indicates that an uncorrectable error occurred during reception of this block.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-rds-block-codes">
|
||||
<title>Block defines</title>
|
||||
<tgroup cols="4">
|
||||
<colspec colname="c1" colwidth="1*" />
|
||||
<colspec colname="c2" colwidth="1*" />
|
||||
<colspec colname="c3" colwidth="1*" />
|
||||
<colspec colname="c4" colwidth="5*" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_MSK</entry>
|
||||
<entry> </entry>
|
||||
<entry>7</entry>
|
||||
<entry>Mask for bits 0-2 to get the block ID.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_A</entry>
|
||||
<entry> </entry>
|
||||
<entry>0</entry>
|
||||
<entry>Block A.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_B</entry>
|
||||
<entry> </entry>
|
||||
<entry>1</entry>
|
||||
<entry>Block B.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_C</entry>
|
||||
<entry> </entry>
|
||||
<entry>2</entry>
|
||||
<entry>Block C.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_D</entry>
|
||||
<entry> </entry>
|
||||
<entry>3</entry>
|
||||
<entry>Block D.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_C_ALT</entry>
|
||||
<entry> </entry>
|
||||
<entry>4</entry>
|
||||
<entry>Block C'.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_INVALID</entry>
|
||||
<entry>read-only</entry>
|
||||
<entry>7</entry>
|
||||
<entry>An invalid block.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_CORRECTED</entry>
|
||||
<entry>read-only</entry>
|
||||
<entry>0x40</entry>
|
||||
<entry>A bit error was detected but corrected.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>V4L2_RDS_BLOCK_ERROR</entry>
|
||||
<entry>read-only</entry>
|
||||
<entry>0x80</entry>
|
||||
<entry>An uncorrectable error occurred.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</section>
|
|
@ -1,126 +0,0 @@
|
|||
<title>Software Defined Radio Interface (SDR)</title>
|
||||
|
||||
<para>
|
||||
SDR is an abbreviation of Software Defined Radio, the radio device
|
||||
which uses application software for modulation or demodulation. This interface
|
||||
is intended for controlling and data streaming of such devices.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
SDR devices are accessed through character device special files named
|
||||
<filename>/dev/swradio0</filename> to <filename>/dev/swradio255</filename>
|
||||
with major number 81 and dynamically allocated minor numbers 0 to 255.
|
||||
</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>
|
||||
Devices supporting the SDR receiver interface set the
|
||||
<constant>V4L2_CAP_SDR_CAPTURE</constant> and
|
||||
<constant>V4L2_CAP_TUNER</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an
|
||||
Analog to Digital Converter (ADC), which is a mandatory element for the SDR receiver.
|
||||
</para>
|
||||
<para>
|
||||
Devices supporting the SDR transmitter interface set the
|
||||
<constant>V4L2_CAP_SDR_OUTPUT</constant> and
|
||||
<constant>V4L2_CAP_MODULATOR</constant> flag in the
|
||||
<structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. That flag means the device has an
|
||||
Digital to Analog Converter (DAC), which is a mandatory element for the SDR transmitter.
|
||||
</para>
|
||||
<para>
|
||||
At least one of the read/write, streaming or asynchronous I/O methods must
|
||||
be supported.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>
|
||||
SDR devices can support <link linkend="control">controls</link>, and must
|
||||
support the <link linkend="tuner">tuner</link> ioctls. Tuner ioctls are used
|
||||
for setting the ADC/DAC sampling rate (sampling frequency) and the possible
|
||||
radio frequency (RF).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <constant>V4L2_TUNER_SDR</constant> tuner type is used for setting SDR
|
||||
device ADC/DAC frequency, and the <constant>V4L2_TUNER_RF</constant>
|
||||
tuner type is used for setting radio frequency.
|
||||
The tuner index of the RF tuner (if any) must always follow the SDR tuner index.
|
||||
Normally the SDR tuner is #0 and the RF tuner is #1.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The &VIDIOC-S-HW-FREQ-SEEK; ioctl is not supported.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Data Format Negotiation</title>
|
||||
|
||||
<para>
|
||||
The SDR device uses the <link linkend="format">format</link> ioctls to
|
||||
select the capture and output format. Both the sampling resolution and the data
|
||||
streaming format are bound to that selectable format. In addition to the basic
|
||||
<link linkend="format">format</link> ioctls, the &VIDIOC-ENUM-FMT; ioctl
|
||||
must be supported as well.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To use the <link linkend="format">format</link> ioctls applications set the
|
||||
<structfield>type</structfield> field of a &v4l2-format; to
|
||||
<constant>V4L2_BUF_TYPE_SDR_CAPTURE</constant> or
|
||||
<constant>V4L2_BUF_TYPE_SDR_OUTPUT</constant> and use the &v4l2-sdr-format;
|
||||
<structfield>sdr</structfield> member of the <structfield>fmt</structfield>
|
||||
union as needed per the desired operation.
|
||||
Currently there is two fields, <structfield>pixelformat</structfield> and
|
||||
<structfield>buffersize</structfield>, of struct &v4l2-sdr-format; which are
|
||||
used. Content of the <structfield>pixelformat</structfield> is V4L2 FourCC
|
||||
code of the data format. The <structfield>buffersize</structfield> field is
|
||||
maximum buffer size in bytes required for data transfer, set by the driver in
|
||||
order to inform application.
|
||||
</para>
|
||||
|
||||
<table pgwide="1" frame="none" id="v4l2-sdr-format">
|
||||
<title>struct <structname>v4l2_sdr_format</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>pixelformat</structfield></entry>
|
||||
<entry>
|
||||
The data format or type of compression, set by the application. This is a
|
||||
little endian <link linkend="v4l2-fourcc">four character code</link>.
|
||||
V4L2 defines SDR formats in <xref linkend="sdr-formats" />.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>buffersize</structfield></entry>
|
||||
<entry>
|
||||
Maximum size in bytes required for data. Value is set by the driver.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>reserved[24]</structfield></entry>
|
||||
<entry>This array is reserved for future extensions.
|
||||
Drivers and applications must set it to zero.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
An SDR device may support <link linkend="rw">read/write</link>
|
||||
and/or streaming (<link linkend="mmap">memory mapping</link>
|
||||
or <link linkend="userp">user pointer</link>) I/O.
|
||||
</para>
|
||||
|
||||
</section>
|
|
@ -1,706 +0,0 @@
|
|||
<title>Sliced VBI Data Interface</title>
|
||||
|
||||
<para>VBI stands for Vertical Blanking Interval, a gap in the
|
||||
sequence of lines of an analog video signal. During VBI no picture
|
||||
information is transmitted, allowing some time while the electron beam
|
||||
of a cathode ray tube TV returns to the top of the screen.</para>
|
||||
|
||||
<para>Sliced VBI devices use hardware to demodulate data transmitted
|
||||
in the VBI. V4L2 drivers shall <emphasis>not</emphasis> do this by
|
||||
software, see also the <link linkend="raw-vbi">raw VBI
|
||||
interface</link>. The data is passed as short packets of fixed size,
|
||||
covering one scan line each. The number of packets per video frame is
|
||||
variable.</para>
|
||||
|
||||
<para>Sliced VBI capture and output devices are accessed through the
|
||||
same character special files as raw VBI devices. When a driver
|
||||
supports both interfaces, the default function of a
|
||||
<filename>/dev/vbi</filename> device is <emphasis>raw</emphasis> VBI
|
||||
capturing or output, and the sliced VBI function is only available
|
||||
after calling the &VIDIOC-S-FMT; ioctl as defined below. Likewise a
|
||||
<filename>/dev/video</filename> device may support the sliced VBI API,
|
||||
however the default function here is video capturing or output.
|
||||
Different file descriptors must be used to pass raw and sliced VBI
|
||||
data simultaneously, if this is supported by the driver.</para>
|
||||
|
||||
<section>
|
||||
<title>Querying Capabilities</title>
|
||||
|
||||
<para>Devices supporting the sliced VBI capturing or output API
|
||||
set the <constant>V4L2_CAP_SLICED_VBI_CAPTURE</constant> or
|
||||
<constant>V4L2_CAP_SLICED_VBI_OUTPUT</constant> flag respectively, in
|
||||
the <structfield>capabilities</structfield> field of &v4l2-capability;
|
||||
returned by the &VIDIOC-QUERYCAP; ioctl. At least one of the
|
||||
read/write, streaming or asynchronous <link linkend="io">I/O
|
||||
methods</link> must be supported. Sliced VBI devices may have a tuner
|
||||
or modulator.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Supplemental Functions</title>
|
||||
|
||||
<para>Sliced VBI devices shall support <link linkend="video">video
|
||||
input or output</link> and <link linkend="tuner">tuner or
|
||||
modulator</link> ioctls if they have these capabilities, and they may
|
||||
support <link linkend="control">control</link> ioctls. The <link
|
||||
linkend="standard">video standard</link> ioctls provide information
|
||||
vital to program a sliced VBI device, therefore must be
|
||||
supported.</para>
|
||||
</section>
|
||||
|
||||
<section id="sliced-vbi-format-negotitation">
|
||||
<title>Sliced VBI Format Negotiation</title>
|
||||
|
||||
<para>To find out which data services are supported by the
|
||||
hardware applications can call the &VIDIOC-G-SLICED-VBI-CAP; ioctl.
|
||||
All drivers implementing the sliced VBI interface must support this
|
||||
ioctl. The results may differ from those of the &VIDIOC-S-FMT; ioctl
|
||||
when the number of VBI lines the hardware can capture or output per
|
||||
frame, or the number of services it can identify on a given line are
|
||||
limited. For example on PAL line 16 the hardware may be able to look
|
||||
for a VPS or Teletext signal, but not both at the same time.</para>
|
||||
|
||||
<para>To determine the currently selected services applications
|
||||
set the <structfield>type </structfield> field of &v4l2-format; to
|
||||
<constant> V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> or <constant>
|
||||
V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant>, and the &VIDIOC-G-FMT;
|
||||
ioctl fills the <structfield>fmt.sliced</structfield> member, a
|
||||
&v4l2-sliced-vbi-format;.</para>
|
||||
|
||||
<para>Applications can request different parameters by
|
||||
initializing or modifying the <structfield>fmt.sliced</structfield>
|
||||
member and calling the &VIDIOC-S-FMT; ioctl with a pointer to the
|
||||
<structname>v4l2_format</structname> structure.</para>
|
||||
|
||||
<para>The sliced VBI API is more complicated than the raw VBI API
|
||||
because the hardware must be told which VBI service to expect on each
|
||||
scan line. Not all services may be supported by the hardware on all
|
||||
lines (this is especially true for VBI output where Teletext is often
|
||||
unsupported and other services can only be inserted in one specific
|
||||
line). In many cases, however, it is sufficient to just set the
|
||||
<structfield>service_set</structfield> field to the required services
|
||||
and let the driver fill the <structfield>service_lines</structfield>
|
||||
array according to hardware capabilities. Only if more precise control
|
||||
is needed should the programmer set the
|
||||
<structfield>service_lines</structfield> array explicitly.</para>
|
||||
|
||||
<para>The &VIDIOC-S-FMT; ioctl modifies the parameters
|
||||
according to hardware capabilities. When the driver allocates
|
||||
resources at this point, it may return an &EBUSY; if the required
|
||||
resources are temporarily unavailable. Other resource allocation
|
||||
points which may return <errorcode>EBUSY</errorcode> can be the
|
||||
&VIDIOC-STREAMON; ioctl and the first &func-read;, &func-write; and
|
||||
&func-select; call.</para>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-sliced-vbi-format">
|
||||
<title>struct
|
||||
<structname>v4l2_sliced_vbi_format</structname></title>
|
||||
<tgroup cols="5">
|
||||
<colspec colname="c1" colwidth="3*" />
|
||||
<colspec colname="c2" colwidth="3*" />
|
||||
<colspec colname="c3" colwidth="2*" />
|
||||
<colspec colname="c4" colwidth="2*" />
|
||||
<colspec colname="c5" colwidth="2*" />
|
||||
<spanspec namest="c3" nameend="c5" spanname="hspan" />
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>service_set</structfield></entry>
|
||||
<entry spanname="hspan"><para>If
|
||||
<structfield>service_set</structfield> is non-zero when passed with
|
||||
&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT;, the
|
||||
<structfield>service_lines</structfield> array will be filled by the
|
||||
driver according to the services specified in this field. For example,
|
||||
if <structfield>service_set</structfield> is initialized with
|
||||
<constant>V4L2_SLICED_TELETEXT_B | V4L2_SLICED_WSS_625</constant>, a
|
||||
driver for the cx25840 video decoder sets lines 7-22 of both
|
||||
fields<footnote><para>According to <link
|
||||
linkend="ets300706">ETS 300 706</link> lines 6-22 of the
|
||||
first field and lines 5-22 of the second field may carry Teletext
|
||||
data.</para></footnote> to <constant>V4L2_SLICED_TELETEXT_B</constant>
|
||||
and line 23 of the first field to
|
||||
<constant>V4L2_SLICED_WSS_625</constant>. If
|
||||
<structfield>service_set</structfield> is set to zero, then the values
|
||||
of <structfield>service_lines</structfield> will be used instead.
|
||||
</para><para>On return the driver sets this field to the union of all
|
||||
elements of the returned <structfield>service_lines</structfield>
|
||||
array. It may contain less services than requested, perhaps just one,
|
||||
if the hardware cannot handle more services simultaneously. It may be
|
||||
empty (zero) if none of the requested services are supported by the
|
||||
hardware.</para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u16</entry>
|
||||
<entry><structfield>service_lines</structfield>[2][24]</entry>
|
||||
<entry spanname="hspan"><para>Applications initialize this
|
||||
array with sets of data services the driver shall look for or insert
|
||||
on the respective scan line. Subject to hardware capabilities drivers
|
||||
return the requested set, a subset, which may be just a single
|
||||
service, or an empty set. When the hardware cannot handle multiple
|
||||
services on the same line the driver shall choose one. No assumptions
|
||||
can be made on which service the driver chooses.</para><para>Data
|
||||
services are defined in <xref linkend="vbi-services2" />. Array indices
|
||||
map to ITU-R line numbers (see also <xref linkend="vbi-525" /> and <xref
|
||||
linkend="vbi-625" />) as follows: <!-- No nested
|
||||
tables, sigh. --></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry>Element</entry>
|
||||
<entry>525 line systems</entry>
|
||||
<entry>625 line systems</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry><structfield>service_lines</structfield>[0][1]</entry>
|
||||
<entry align="center">1</entry>
|
||||
<entry align="center">1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry><structfield>service_lines</structfield>[0][23]</entry>
|
||||
<entry align="center">23</entry>
|
||||
<entry align="center">23</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry><structfield>service_lines</structfield>[1][1]</entry>
|
||||
<entry align="center">264</entry>
|
||||
<entry align="center">314</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry><structfield>service_lines</structfield>[1][23]</entry>
|
||||
<entry align="center">286</entry>
|
||||
<entry align="center">336</entry>
|
||||
</row>
|
||||
<!-- End of line numbers table. -->
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry spanname="hspan">Drivers must set
|
||||
<structfield>service_lines</structfield>[0][0] and
|
||||
<structfield>service_lines</structfield>[1][0] to zero.
|
||||
The <constant>V4L2_VBI_ITU_525_F1_START</constant>,
|
||||
<constant>V4L2_VBI_ITU_525_F2_START</constant>,
|
||||
<constant>V4L2_VBI_ITU_625_F1_START</constant> and
|
||||
<constant>V4L2_VBI_ITU_625_F2_START</constant> defines give the start
|
||||
line numbers for each field for each 525 or 625 line format as a
|
||||
convenience. Don't forget that ITU line numbering starts at 1, not 0.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>io_size</structfield></entry>
|
||||
<entry spanname="hspan">Maximum number of bytes passed by
|
||||
one &func-read; or &func-write; call, and the buffer size in bytes for
|
||||
the &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. Drivers set this field to
|
||||
the size of &v4l2-sliced-vbi-data; times the number of non-zero
|
||||
elements in the returned <structfield>service_lines</structfield>
|
||||
array (that is the number of lines potentially carrying data).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>reserved</structfield>[2]</entry>
|
||||
<entry spanname="hspan">This array is reserved for future
|
||||
extensions. Applications and drivers must set it to zero.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<!-- See also vidioc-g-sliced-vbi-cap.sgml -->
|
||||
<table frame="none" pgwide="1" id="vbi-services2">
|
||||
<title>Sliced VBI services</title>
|
||||
<tgroup cols="5">
|
||||
<colspec colname="c1" colwidth="2*" />
|
||||
<colspec colname="c2" colwidth="1*" />
|
||||
<colspec colname="c3" colwidth="1*" />
|
||||
<colspec colname="c4" colwidth="2*" />
|
||||
<colspec colname="c5" colwidth="2*" />
|
||||
<spanspec namest="c3" nameend="c5" spanname="rlp" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Symbol</entry>
|
||||
<entry>Value</entry>
|
||||
<entry>Reference</entry>
|
||||
<entry>Lines, usually</entry>
|
||||
<entry>Payload</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_TELETEXT_B</constant>
|
||||
(Teletext System B)</entry>
|
||||
<entry>0x0001</entry>
|
||||
<entry><xref linkend="ets300706" />, <xref linkend="itu653" /></entry>
|
||||
<entry>PAL/SECAM line 7-22, 320-335 (second field 7-22)</entry>
|
||||
<entry>Last 42 of the 45 byte Teletext packet, that is
|
||||
without clock run-in and framing code, lsb first transmitted.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_VPS</constant></entry>
|
||||
<entry>0x0400</entry>
|
||||
<entry><xref linkend="ets300231" /></entry>
|
||||
<entry>PAL line 16</entry>
|
||||
<entry>Byte number 3 to 15 according to Figure 9 of
|
||||
ETS 300 231, lsb first transmitted.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_CAPTION_525</constant></entry>
|
||||
<entry>0x1000</entry>
|
||||
<entry><xref linkend="cea608" /></entry>
|
||||
<entry>NTSC line 21, 284 (second field 21)</entry>
|
||||
<entry>Two bytes in transmission order, including parity
|
||||
bit, lsb first transmitted.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_WSS_625</constant></entry>
|
||||
<entry>0x4000</entry>
|
||||
<entry><xref linkend="itu1119" />, <xref linkend="en300294" /></entry>
|
||||
<entry>PAL/SECAM line 23</entry>
|
||||
<entry><screen>
|
||||
Byte 0 1
|
||||
msb lsb msb lsb
|
||||
Bit 7 6 5 4 3 2 1 0 x x 13 12 11 10 9
|
||||
</screen></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_VBI_525</constant></entry>
|
||||
<entry>0x1000</entry>
|
||||
<entry spanname="rlp">Set of services applicable to 525
|
||||
line systems.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_SLICED_VBI_625</constant></entry>
|
||||
<entry>0x4401</entry>
|
||||
<entry spanname="rlp">Set of services applicable to 625
|
||||
line systems.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Drivers may return an &EINVAL; when applications attempt to
|
||||
read or write data without prior format negotiation, after switching
|
||||
the video standard (which may invalidate the negotiated VBI
|
||||
parameters) and after switching the video input (which may change the
|
||||
video standard as a side effect). The &VIDIOC-S-FMT; ioctl may return
|
||||
an &EBUSY; when applications attempt to change the format while i/o is
|
||||
in progress (between a &VIDIOC-STREAMON; and &VIDIOC-STREAMOFF; call,
|
||||
and after the first &func-read; or &func-write; call).</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Reading and writing sliced VBI data</title>
|
||||
|
||||
<para>A single &func-read; or &func-write; call must pass all data
|
||||
belonging to one video frame. That is an array of
|
||||
<structname>v4l2_sliced_vbi_data</structname> structures with one or
|
||||
more elements and a total size not exceeding
|
||||
<structfield>io_size</structfield> bytes. Likewise in streaming I/O
|
||||
mode one buffer of <structfield>io_size</structfield> bytes must
|
||||
contain data of one video frame. The <structfield>id</structfield> of
|
||||
unused <structname>v4l2_sliced_vbi_data</structname> elements must be
|
||||
zero.</para>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-sliced-vbi-data">
|
||||
<title>struct
|
||||
<structname>v4l2_sliced_vbi_data</structname></title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>id</structfield></entry>
|
||||
<entry>A flag from <xref linkend="vbi-services" />
|
||||
identifying the type of data in this packet. Only a single bit must be
|
||||
set. When the <structfield>id</structfield> of a captured packet is
|
||||
zero, the packet is empty and the contents of other fields are
|
||||
undefined. Applications shall ignore empty packets. When the
|
||||
<structfield>id</structfield> of a packet for output is zero the
|
||||
contents of the <structfield>data</structfield> field are undefined
|
||||
and the driver must no longer insert data on the requested
|
||||
<structfield>field</structfield> and
|
||||
<structfield>line</structfield>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>field</structfield></entry>
|
||||
<entry>The video field number this data has been captured
|
||||
from, or shall be inserted at. <constant>0</constant> for the first
|
||||
field, <constant>1</constant> for the second field.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>line</structfield></entry>
|
||||
<entry>The field (as opposed to frame) line number this
|
||||
data has been captured from, or shall be inserted at. See <xref
|
||||
linkend="vbi-525" /> and <xref linkend="vbi-625" /> for valid
|
||||
values. Sliced VBI capture devices can set the line number of all
|
||||
packets to <constant>0</constant> if the hardware cannot reliably
|
||||
identify scan lines. The field number must always be valid.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry><structfield>reserved</structfield></entry>
|
||||
<entry>This field is reserved for future extensions.
|
||||
Applications and drivers must set it to zero.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>data</structfield>[48]</entry>
|
||||
<entry>The packet payload. See <xref
|
||||
linkend="vbi-services" /> for the contents and number of
|
||||
bytes passed for each data type. The contents of padding bytes at the
|
||||
end of this array are undefined, drivers and applications shall ignore
|
||||
them.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Packets are always passed in ascending line number order,
|
||||
without duplicate line numbers. The &func-write; function and the
|
||||
&VIDIOC-QBUF; ioctl must return an &EINVAL; when applications violate
|
||||
this rule. They must also return an &EINVAL; when applications pass an
|
||||
incorrect field or line number, or a combination of
|
||||
<structfield>field</structfield>, <structfield>line</structfield> and
|
||||
<structfield>id</structfield> which has not been negotiated with the
|
||||
&VIDIOC-G-FMT; or &VIDIOC-S-FMT; ioctl. When the line numbers are
|
||||
unknown the driver must pass the packets in transmitted order. The
|
||||
driver can insert empty packets with <structfield>id</structfield> set
|
||||
to zero anywhere in the packet array.</para>
|
||||
|
||||
<para>To assure synchronization and to distinguish from frame
|
||||
dropping, when a captured frame does not carry any of the requested
|
||||
data services drivers must pass one or more empty packets. When an
|
||||
application fails to pass VBI data in time for output, the driver
|
||||
must output the last VPS and WSS packet again, and disable the output
|
||||
of Closed Caption and Teletext data, or output data which is ignored
|
||||
by Closed Caption and Teletext decoders.</para>
|
||||
|
||||
<para>A sliced VBI device may support <link
|
||||
linkend="rw">read/write</link> and/or streaming (<link
|
||||
linkend="mmap">memory mapping</link> and/or <link linkend="userp">user
|
||||
pointer</link>) I/O. The latter bears the possibility of synchronizing
|
||||
video and VBI data by using buffer timestamps.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Sliced VBI Data in MPEG Streams</title>
|
||||
|
||||
<para>If a device can produce an MPEG output stream, it may be
|
||||
capable of providing <link
|
||||
linkend="sliced-vbi-format-negotitation">negotiated sliced VBI
|
||||
services</link> as data embedded in the MPEG stream. Users or
|
||||
applications control this sliced VBI data insertion with the <link
|
||||
linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link>
|
||||
control.</para>
|
||||
|
||||
<para>If the driver does not provide the <link
|
||||
linkend="v4l2-mpeg-stream-vbi-fmt">V4L2_CID_MPEG_STREAM_VBI_FMT</link>
|
||||
control, or only allows that control to be set to <link
|
||||
linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
||||
V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link>, then the device
|
||||
cannot embed sliced VBI data in the MPEG stream.</para>
|
||||
|
||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt">
|
||||
V4L2_CID_MPEG_STREAM_VBI_FMT</link> control does not implicitly set
|
||||
the device driver to capture nor cease capturing sliced VBI data. The
|
||||
control only indicates to embed sliced VBI data in the MPEG stream, if
|
||||
an application has negotiated sliced VBI service be captured.</para>
|
||||
|
||||
<para>It may also be the case that a device can embed sliced VBI
|
||||
data in only certain types of MPEG streams: for example in an MPEG-2
|
||||
PS but not an MPEG-2 TS. In this situation, if sliced VBI data
|
||||
insertion is requested, the sliced VBI data will be embedded in MPEG
|
||||
stream types when supported, and silently omitted from MPEG stream
|
||||
types where sliced VBI data insertion is not supported by the device.
|
||||
</para>
|
||||
|
||||
<para>The following subsections specify the format of the
|
||||
embedded sliced VBI data.</para>
|
||||
|
||||
<section>
|
||||
<title>MPEG Stream Embedded, Sliced VBI Data Format: NONE</title>
|
||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
||||
V4L2_MPEG_STREAM_VBI_FMT_NONE</constant></link> embedded sliced VBI
|
||||
format shall be interpreted by drivers as a control to cease
|
||||
embedding sliced VBI data in MPEG streams. Neither the device nor
|
||||
driver shall insert "empty" embedded sliced VBI data packets in the
|
||||
MPEG stream when this format is set. No MPEG stream data structures
|
||||
are specified for this format.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>MPEG Stream Embedded, Sliced VBI Data Format: IVTV</title>
|
||||
<para>The <link linkend="v4l2-mpeg-stream-vbi-fmt"><constant>
|
||||
V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> embedded sliced VBI
|
||||
format, when supported, indicates to the driver to embed up to 36
|
||||
lines of sliced VBI data per frame in an MPEG-2 <emphasis>Private
|
||||
Stream 1 PES</emphasis> packet encapsulated in an MPEG-2 <emphasis>
|
||||
Program Pack</emphasis> in the MPEG stream.</para>
|
||||
|
||||
<para><emphasis>Historical context</emphasis>: This format
|
||||
specification originates from a custom, embedded, sliced VBI data
|
||||
format used by the <filename>ivtv</filename> driver. This format
|
||||
has already been informally specified in the kernel sources in the
|
||||
file <filename>Documentation/video4linux/cx2341x/README.vbi</filename>
|
||||
. The maximum size of the payload and other aspects of this format
|
||||
are driven by the CX23415 MPEG decoder's capabilities and limitations
|
||||
with respect to extracting, decoding, and displaying sliced VBI data
|
||||
embedded within an MPEG stream.</para>
|
||||
|
||||
<para>This format's use is <emphasis>not</emphasis> exclusive to
|
||||
the <filename>ivtv</filename> driver <emphasis>nor</emphasis>
|
||||
exclusive to CX2341x devices, as the sliced VBI data packet insertion
|
||||
into the MPEG stream is implemented in driver software. At least the
|
||||
<filename>cx18</filename> driver provides sliced VBI data insertion
|
||||
into an MPEG-2 PS in this format as well.</para>
|
||||
|
||||
<para>The following definitions specify the payload of the
|
||||
MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packets that contain
|
||||
sliced VBI data when <link linkend="v4l2-mpeg-stream-vbi-fmt">
|
||||
<constant>V4L2_MPEG_STREAM_VBI_FMT_IVTV</constant></link> is set.
|
||||
(The MPEG-2 <emphasis>Private Stream 1 PES</emphasis> packet header
|
||||
and encapsulating MPEG-2 <emphasis>Program Pack</emphasis> header are
|
||||
not detailed here. Please refer to the MPEG-2 specifications for
|
||||
details on those packet headers.)</para>
|
||||
|
||||
<para>The payload of the MPEG-2 <emphasis>Private Stream 1 PES
|
||||
</emphasis> packets that contain sliced VBI data is specified by
|
||||
&v4l2-mpeg-vbi-fmt-ivtv;. The payload is variable
|
||||
length, depending on the actual number of lines of sliced VBI data
|
||||
present in a video frame. The payload may be padded at the end with
|
||||
unspecified fill bytes to align the end of the payload to a 4-byte
|
||||
boundary. The payload shall never exceed 1552 bytes (2 fields with
|
||||
18 lines/field with 43 bytes of data/line and a 4 byte magic number).
|
||||
</para>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv">
|
||||
<title>struct <structname>v4l2_mpeg_vbi_fmt_ivtv</structname>
|
||||
</title>
|
||||
<tgroup cols="4">
|
||||
&cs-ustr;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>magic</structfield>[4]</entry>
|
||||
<entry></entry>
|
||||
<entry>A "magic" constant from <xref
|
||||
linkend="v4l2-mpeg-vbi-fmt-ivtv-magic" /> that indicates
|
||||
this is a valid sliced VBI data payload and also indicates which
|
||||
member of the anonymous union, <structfield>itv0</structfield> or
|
||||
<structfield>ITV0</structfield>, to use for the payload data.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>union</entry>
|
||||
<entry>(anonymous)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0">
|
||||
<structname>v4l2_mpeg_vbi_itv0</structname></link>
|
||||
</entry>
|
||||
<entry><structfield>itv0</structfield></entry>
|
||||
<entry>The primary form of the sliced VBI data payload
|
||||
that contains anywhere from 1 to 35 lines of sliced VBI data.
|
||||
Line masks are provided in this form of the payload indicating
|
||||
which VBI lines are provided.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-1">
|
||||
<structname>v4l2_mpeg_vbi_ITV0</structname></link>
|
||||
</entry>
|
||||
<entry><structfield>ITV0</structfield></entry>
|
||||
<entry>An alternate form of the sliced VBI data payload
|
||||
used when 36 lines of sliced VBI data are present. No line masks are
|
||||
provided in this form of the payload; all valid line mask bits are
|
||||
implcitly set.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-fmt-ivtv-magic">
|
||||
<title>Magic Constants for &v4l2-mpeg-vbi-fmt-ivtv;
|
||||
<structfield>magic</structfield> field</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry align="left">Defined Symbol</entry>
|
||||
<entry align="left">Value</entry>
|
||||
<entry align="left">Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC0</constant>
|
||||
</entry>
|
||||
<entry>"itv0"</entry>
|
||||
<entry>Indicates the <structfield>itv0</structfield>
|
||||
member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_MAGIC1</constant>
|
||||
</entry>
|
||||
<entry>"ITV0"</entry>
|
||||
<entry>Indicates the <structfield>ITV0</structfield>
|
||||
member of the union in &v4l2-mpeg-vbi-fmt-ivtv; is valid and
|
||||
that 36 lines of sliced VBI data are present.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0">
|
||||
<title>struct <structname>v4l2_mpeg_vbi_itv0</structname>
|
||||
</title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__le32</entry>
|
||||
<entry><structfield>linemask</structfield>[2]</entry>
|
||||
<entry><para>Bitmasks indicating the VBI service lines
|
||||
present. These <structfield>linemask</structfield> values are stored
|
||||
in little endian byte order in the MPEG stream. Some reference
|
||||
<structfield>linemask</structfield> bit positions with their
|
||||
corresponding VBI line number and video field are given below.
|
||||
b<subscript>0</subscript> indicates the least significant bit of a
|
||||
<structfield>linemask</structfield> value:<screen>
|
||||
<structfield>linemask</structfield>[0] b<subscript>0</subscript>: line 6 first field
|
||||
<structfield>linemask</structfield>[0] b<subscript>17</subscript>: line 23 first field
|
||||
<structfield>linemask</structfield>[0] b<subscript>18</subscript>: line 6 second field
|
||||
<structfield>linemask</structfield>[0] b<subscript>31</subscript>: line 19 second field
|
||||
<structfield>linemask</structfield>[1] b<subscript>0</subscript>: line 20 second field
|
||||
<structfield>linemask</structfield>[1] b<subscript>3</subscript>: line 23 second field
|
||||
<structfield>linemask</structfield>[1] b<subscript>4</subscript>-b<subscript>31</subscript>: unused and set to 0</screen></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line">
|
||||
<structname>v4l2_mpeg_vbi_itv0_line</structname></link>
|
||||
</entry>
|
||||
<entry><structfield>line</structfield>[35]</entry>
|
||||
<entry>This is a variable length array that holds from 1
|
||||
to 35 lines of sliced VBI data. The sliced VBI data lines present
|
||||
correspond to the bits set in the <structfield>linemask</structfield>
|
||||
array, starting from b<subscript>0</subscript> of <structfield>
|
||||
linemask</structfield>[0] up through b<subscript>31</subscript> of
|
||||
<structfield>linemask</structfield>[0], and from b<subscript>0
|
||||
</subscript> of <structfield>linemask</structfield>[1] up through b
|
||||
<subscript>3</subscript> of <structfield>linemask</structfield>[1].
|
||||
<structfield>line</structfield>[0] corresponds to the first bit
|
||||
found set in the <structfield>linemask</structfield> array,
|
||||
<structfield>line</structfield>[1] corresponds to the second bit
|
||||
found set in the <structfield>linemask</structfield> array, etc.
|
||||
If no <structfield>linemask</structfield> array bits are set, then
|
||||
<structfield>line</structfield>[0] may contain one line of
|
||||
unspecified data that should be ignored by applications.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-1">
|
||||
<title>struct <structname>v4l2_mpeg_vbi_ITV0</structname>
|
||||
</title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>struct <link linkend="v4l2-mpeg-vbi-itv0-line">
|
||||
<structname>v4l2_mpeg_vbi_itv0_line</structname></link>
|
||||
</entry>
|
||||
<entry><structfield>line</structfield>[36]</entry>
|
||||
<entry>A fixed length array of 36 lines of sliced VBI
|
||||
data. <structfield>line</structfield>[0] through <structfield>line
|
||||
</structfield>[17] correspond to lines 6 through 23 of the
|
||||
first field. <structfield>line</structfield>[18] through
|
||||
<structfield>line</structfield>[35] corresponds to lines 6
|
||||
through 23 of the second field.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="v4l2-mpeg-vbi-itv0-line">
|
||||
<title>struct <structname>v4l2_mpeg_vbi_itv0_line</structname>
|
||||
</title>
|
||||
<tgroup cols="3">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>id</structfield></entry>
|
||||
<entry>A line identifier value from
|
||||
<xref linkend="ITV0-Line-Identifier-Constants" /> that indicates
|
||||
the type of sliced VBI data stored on this line.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u8</entry>
|
||||
<entry><structfield>data</structfield>[42]</entry>
|
||||
<entry>The sliced VBI data for the line.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table frame="none" pgwide="1" id="ITV0-Line-Identifier-Constants">
|
||||
<title>Line Identifiers for struct <link
|
||||
linkend="v4l2-mpeg-vbi-itv0-line"><structname>
|
||||
v4l2_mpeg_vbi_itv0_line</structname></link> <structfield>id
|
||||
</structfield> field</title>
|
||||
<tgroup cols="3">
|
||||
&cs-def;
|
||||
<thead>
|
||||
<row>
|
||||
<entry align="left">Defined Symbol</entry>
|
||||
<entry align="left">Value</entry>
|
||||
<entry align="left">Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_TELETEXT_B</constant>
|
||||
</entry>
|
||||
<entry>1</entry>
|
||||
<entry>Refer to <link linkend="vbi-services2">
|
||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_CAPTION_525</constant>
|
||||
</entry>
|
||||
<entry>4</entry>
|
||||
<entry>Refer to <link linkend="vbi-services2">
|
||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_WSS_625</constant>
|
||||
</entry>
|
||||
<entry>5</entry>
|
||||
<entry>Refer to <link linkend="vbi-services2">
|
||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><constant>V4L2_MPEG_VBI_IVTV_VPS</constant>
|
||||
</entry>
|
||||
<entry>7</entry>
|
||||
<entry>Refer to <link linkend="vbi-services2">
|
||||
Sliced VBI services</link> for a description of the line payload.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</section>
|
||||
</section>
|
|
@ -1,478 +0,0 @@
|
|||
<title>Sub-device Interface</title>
|
||||
|
||||
<para>The complex nature of V4L2 devices, where hardware is often made of
|
||||
several integrated circuits that need to interact with each other in a
|
||||
controlled way, leads to complex V4L2 drivers. The drivers usually reflect
|
||||
the hardware model in software, and model the different hardware components
|
||||
as software blocks called sub-devices.</para>
|
||||
|
||||
<para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver
|
||||
implements the media device API, they will automatically inherit from media
|
||||
entities. Applications will be able to enumerate the sub-devices and discover
|
||||
the hardware topology using the media entities, pads and links enumeration
|
||||
API.</para>
|
||||
|
||||
<para>In addition to make sub-devices discoverable, drivers can also choose
|
||||
to make them directly configurable by applications. When both the sub-device
|
||||
driver and the V4L2 device driver support this, sub-devices will feature a
|
||||
character device node on which ioctls can be called to
|
||||
<itemizedlist>
|
||||
<listitem><para>query, read and write sub-devices controls</para></listitem>
|
||||
<listitem><para>subscribe and unsubscribe to events and retrieve them</para></listitem>
|
||||
<listitem><para>negotiate image formats on individual pads</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>Sub-device character device nodes, conventionally named
|
||||
<filename>/dev/v4l-subdev*</filename>, use major number 81.</para>
|
||||
|
||||
<section>
|
||||
<title>Controls</title>
|
||||
<para>Most V4L2 controls are implemented by sub-device hardware. Drivers
|
||||
usually merge all controls and expose them through video device nodes.
|
||||
Applications can control all sub-devices through a single interface.</para>
|
||||
|
||||
<para>Complex devices sometimes implement the same control in different
|
||||
pieces of hardware. This situation is common in embedded platforms, where
|
||||
both sensors and image processing hardware implement identical functions,
|
||||
such as contrast adjustment, white balance or faulty pixels correction. As
|
||||
the V4L2 controls API doesn't support several identical controls in a single
|
||||
device, all but one of the identical controls are hidden.</para>
|
||||
|
||||
<para>Applications can access those hidden controls through the sub-device
|
||||
node with the V4L2 control API described in <xref linkend="control" />. The
|
||||
ioctls behave identically as when issued on V4L2 device nodes, with the
|
||||
exception that they deal only with controls implemented in the sub-device.
|
||||
</para>
|
||||
|
||||
<para>Depending on the driver, those controls might also be exposed through
|
||||
one (or several) V4L2 device nodes.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Events</title>
|
||||
<para>V4L2 sub-devices can notify applications of events as described in
|
||||
<xref linkend="event" />. The API behaves identically as when used on V4L2
|
||||
device nodes, with the exception that it only deals with events generated by
|
||||
the sub-device. Depending on the driver, those events might also be reported
|
||||
on one (or several) V4L2 device nodes.</para>
|
||||
</section>
|
||||
|
||||
<section id="pad-level-formats">
|
||||
<title>Pad-level Formats</title>
|
||||
|
||||
<warning><para>Pad-level formats are only applicable to very complex device that
|
||||
need to expose low-level format configuration to user space. Generic V4L2
|
||||
applications do <emphasis>not</emphasis> need to use the API described in
|
||||
this section.</para></warning>
|
||||
|
||||
<note><para>For the purpose of this section, the term
|
||||
<wordasword>format</wordasword> means the combination of media bus data
|
||||
format, frame width and frame height.</para></note>
|
||||
|
||||
<para>Image formats are typically negotiated on video capture and
|
||||
output devices using the format and <link
|
||||
linkend="vidioc-subdev-g-selection">selection</link> ioctls. The
|
||||
driver is responsible for configuring every block in the video
|
||||
pipeline according to the requested format at the pipeline input
|
||||
and/or output.</para>
|
||||
|
||||
<para>For complex devices, such as often found in embedded systems,
|
||||
identical image sizes at the output of a pipeline can be achieved using
|
||||
different hardware configurations. One such example is shown on
|
||||
<xref linkend="pipeline-scaling" />, where
|
||||
image scaling can be performed on both the video sensor and the host image
|
||||
processing hardware.</para>
|
||||
|
||||
<figure id="pipeline-scaling">
|
||||
<title>Image Format Negotiation on Pipelines</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="pipeline.pdf" format="PS" />
|
||||
</imageobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="pipeline.png" format="PNG" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>High quality and high speed pipeline configuration</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>The sensor scaler is usually of less quality than the host scaler, but
|
||||
scaling on the sensor is required to achieve higher frame rates. Depending
|
||||
on the use case (quality vs. speed), the pipeline must be configured
|
||||
differently. Applications need to configure the formats at every point in
|
||||
the pipeline explicitly.</para>
|
||||
|
||||
<para>Drivers that implement the <link linkend="media-controller-intro">media
|
||||
API</link> can expose pad-level image format configuration to applications.
|
||||
When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and
|
||||
&VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para>
|
||||
|
||||
<para>Applications are responsible for configuring coherent parameters on
|
||||
the whole pipeline and making sure that connected pads have compatible
|
||||
formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON;
|
||||
time, and an &EPIPE; is then returned if the configuration is
|
||||
invalid.</para>
|
||||
|
||||
<para>Pad-level image format configuration support can be tested by calling
|
||||
the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL;
|
||||
pad-level format configuration is not supported by the sub-device.</para>
|
||||
|
||||
<section>
|
||||
<title>Format Negotiation</title>
|
||||
|
||||
<para>Acceptable formats on pads can (and usually do) depend on a number
|
||||
of external parameters, such as formats on other pads, active links, or
|
||||
even controls. Finding a combination of formats on all pads in a video
|
||||
pipeline, acceptable to both application and driver, can't rely on formats
|
||||
enumeration only. A format negotiation mechanism is required.</para>
|
||||
|
||||
<para>Central to the format negotiation mechanism are the get/set format
|
||||
operations. When called with the <structfield>which</structfield> argument
|
||||
set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the
|
||||
&VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of
|
||||
formats parameters that are not connected to the hardware configuration.
|
||||
Modifying those 'try' formats leaves the device state untouched (this
|
||||
applies to both the software state stored in the driver and the hardware
|
||||
state stored in the device itself).</para>
|
||||
|
||||
<para>While not kept as part of the device state, try formats are stored
|
||||
in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return
|
||||
the last try format set <emphasis>on the same sub-device file
|
||||
handle</emphasis>. Several applications querying the same sub-device at
|
||||
the same time will thus not interact with each other.</para>
|
||||
|
||||
<para>To find out whether a particular format is supported by the device,
|
||||
applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if
|
||||
needed, change the requested <structfield>format</structfield> based on
|
||||
device requirements and return the possibly modified value. Applications
|
||||
can then choose to try a different format or accept the returned value and
|
||||
continue.</para>
|
||||
|
||||
<para>Formats returned by the driver during a negotiation iteration are
|
||||
guaranteed to be supported by the device. In particular, drivers guarantee
|
||||
that a returned format will not be further changed if passed to an
|
||||
&VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as
|
||||
formats on other pads or links' configuration are not changed).</para>
|
||||
|
||||
<para>Drivers automatically propagate formats inside sub-devices. When a
|
||||
try or active format is set on a pad, corresponding formats on other pads
|
||||
of the same sub-device can be modified by the driver. Drivers are free to
|
||||
modify formats as required by the device. However, they should comply with
|
||||
the following rules when possible:
|
||||
<itemizedlist>
|
||||
<listitem><para>Formats should be propagated from sink pads to source pads.
|
||||
Modifying a format on a source pad should not modify the format on any
|
||||
sink pad.</para></listitem>
|
||||
<listitem><para>Sub-devices that scale frames using variable scaling factors
|
||||
should reset the scale factors to default values when sink pads formats
|
||||
are modified. If the 1:1 scaling ratio is supported, this means that
|
||||
source pads formats should be reset to the sink pads formats.</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>Formats are not propagated across links, as that would involve
|
||||
propagating them from one sub-device file handle to another. Applications
|
||||
must then take care to configure both ends of every link explicitly with
|
||||
compatible formats. Identical formats on the two ends of a link are
|
||||
guaranteed to be compatible. Drivers are free to accept different formats
|
||||
matching device requirements as being compatible.</para>
|
||||
|
||||
<para><xref linkend="sample-pipeline-config" />
|
||||
shows a sample configuration sequence for the pipeline described in
|
||||
<xref linkend="pipeline-scaling" /> (table
|
||||
columns list entity names and pad numbers).</para>
|
||||
|
||||
<table pgwide="0" frame="none" id="sample-pipeline-config">
|
||||
<title>Sample Pipeline Configuration</title>
|
||||
<tgroup cols="3">
|
||||
<colspec colname="what"/>
|
||||
<colspec colname="sensor-0 format" />
|
||||
<colspec colname="frontend-0 format" />
|
||||
<colspec colname="frontend-1 format" />
|
||||
<colspec colname="scaler-0 format" />
|
||||
<colspec colname="scaler-0 compose" />
|
||||
<colspec colname="scaler-1 format" />
|
||||
<thead>
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>Sensor/0 format</entry>
|
||||
<entry>Frontend/0 format</entry>
|
||||
<entry>Frontend/1 format</entry>
|
||||
<entry>Scaler/0 format</entry>
|
||||
<entry>Scaler/0 compose selection rectangle</entry>
|
||||
<entry>Scaler/1 format</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<row>
|
||||
<entry>Initial state</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Configure frontend sink format</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry><emphasis>2048x1536/SGRBG8_1X8</emphasis></entry>
|
||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
<entry>(default)</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Configure scaler sink format</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
||||
<entry><emphasis>0,0/2046x1534</emphasis></entry>
|
||||
<entry><emphasis>2046x1534/SGRBG8_1X8</emphasis></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Configure scaler sink compose selection</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry>2048x1536/SGRBG8_1X8</entry>
|
||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
||||
<entry>2046x1534/SGRBG8_1X8</entry>
|
||||
<entry><emphasis>0,0/1280x960</emphasis></entry>
|
||||
<entry><emphasis>1280x960/SGRBG8_1X8</emphasis></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
<orderedlist>
|
||||
<listitem><para>Initial state. The sensor source pad format is
|
||||
set to its native 3MP size and V4L2_MBUS_FMT_SGRBG8_1X8
|
||||
media bus code. Formats on the host frontend and scaler sink
|
||||
and source pads have the default values, as well as the
|
||||
compose rectangle on the scaler's sink pad.</para></listitem>
|
||||
|
||||
<listitem><para>The application configures the frontend sink
|
||||
pad format's size to 2048x1536 and its media bus code to
|
||||
V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the format to
|
||||
the frontend source pad.</para></listitem>
|
||||
|
||||
<listitem><para>The application configures the scaler sink pad
|
||||
format's size to 2046x1534 and the media bus code to
|
||||
V4L2_MBUS_FMT_SGRBG_1X8 to match the frontend source size and
|
||||
media bus code. The media bus code on the sink pad is set to
|
||||
V4L2_MBUS_FMT_SGRBG_1X8. The driver propagates the size to the
|
||||
compose selection rectangle on the scaler's sink pad, and the
|
||||
format to the scaler source pad.</para></listitem>
|
||||
|
||||
<listitem><para>The application configures the size of the compose
|
||||
selection rectangle of the scaler's sink pad 1280x960. The driver
|
||||
propagates the size to the scaler's source pad
|
||||
format.</para></listitem>
|
||||
|
||||
</orderedlist>
|
||||
</para>
|
||||
|
||||
<para>When satisfied with the try results, applications can set the active
|
||||
formats by setting the <structfield>which</structfield> argument to
|
||||
<constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. Active formats are changed
|
||||
exactly as try formats by drivers. To avoid modifying the hardware state
|
||||
during format negotiation, applications should negotiate try formats first
|
||||
and then modify the active settings using the try formats returned during
|
||||
the last negotiation iteration. This guarantees that the active format
|
||||
will be applied as-is by the driver without being modified.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="v4l2-subdev-selections">
|
||||
<title>Selections: cropping, scaling and composition</title>
|
||||
|
||||
<para>Many sub-devices support cropping frames on their input or output
|
||||
pads (or possible even on both). Cropping is used to select the area of
|
||||
interest in an image, typically on an image sensor or a video decoder. It can
|
||||
also be used as part of digital zoom implementations to select the area of
|
||||
the image that will be scaled up.</para>
|
||||
|
||||
<para>Crop settings are defined by a crop rectangle and represented in a
|
||||
&v4l2-rect; by the coordinates of the top left corner and the rectangle
|
||||
size. Both the coordinates and sizes are expressed in pixels.</para>
|
||||
|
||||
<para>As for pad formats, drivers store try and active
|
||||
rectangles for the selection targets <xref
|
||||
linkend="v4l2-selections-common" />.</para>
|
||||
|
||||
<para>On sink pads, cropping is applied relative to the
|
||||
current pad format. The pad format represents the image size as
|
||||
received by the sub-device from the previous block in the
|
||||
pipeline, and the crop rectangle represents the sub-image that
|
||||
will be transmitted further inside the sub-device for
|
||||
processing.</para>
|
||||
|
||||
<para>The scaling operation changes the size of the image by
|
||||
scaling it to new dimensions. The scaling ratio isn't specified
|
||||
explicitly, but is implied from the original and scaled image
|
||||
sizes. Both sizes are represented by &v4l2-rect;.</para>
|
||||
|
||||
<para>Scaling support is optional. When supported by a subdev,
|
||||
the crop rectangle on the subdev's sink pad is scaled to the
|
||||
size configured using the &VIDIOC-SUBDEV-S-SELECTION; IOCTL
|
||||
using <constant>V4L2_SEL_TGT_COMPOSE</constant>
|
||||
selection target on the same pad. If the subdev supports scaling
|
||||
but not composing, the top and left values are not used and must
|
||||
always be set to zero.</para>
|
||||
|
||||
<para>On source pads, cropping is similar to sink pads, with the
|
||||
exception that the source size from which the cropping is
|
||||
performed, is the COMPOSE rectangle on the sink pad. In both
|
||||
sink and source pads, the crop rectangle must be entirely
|
||||
contained inside the source image size for the crop
|
||||
operation.</para>
|
||||
|
||||
<para>The drivers should always use the closest possible
|
||||
rectangle the user requests on all selection targets, unless
|
||||
specifically told otherwise.
|
||||
<constant>V4L2_SEL_FLAG_GE</constant> and
|
||||
<constant>V4L2_SEL_FLAG_LE</constant> flags may be
|
||||
used to round the image size either up or down. <xref
|
||||
linkend="v4l2-selection-flags" /></para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Types of selection targets</title>
|
||||
|
||||
<section>
|
||||
<title>Actual targets</title>
|
||||
|
||||
<para>Actual targets (without a postfix) reflect the actual
|
||||
hardware configuration at any point of time. There is a BOUNDS
|
||||
target corresponding to every actual target.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>BOUNDS targets</title>
|
||||
|
||||
<para>BOUNDS targets is the smallest rectangle that contains all
|
||||
valid actual rectangles. It may not be possible to set the actual
|
||||
rectangle as large as the BOUNDS rectangle, however. This may be
|
||||
because e.g. a sensor's pixel array is not rectangular but
|
||||
cross-shaped or round. The maximum size may also be smaller than the
|
||||
BOUNDS rectangle.</para>
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Order of configuration and format propagation</title>
|
||||
|
||||
<para>Inside subdevs, the order of image processing steps will
|
||||
always be from the sink pad towards the source pad. This is also
|
||||
reflected in the order in which the configuration must be
|
||||
performed by the user: the changes made will be propagated to
|
||||
any subsequent stages. If this behaviour is not desired, the
|
||||
user must set
|
||||
<constant>V4L2_SEL_FLAG_KEEP_CONFIG</constant> flag. This
|
||||
flag causes no propagation of the changes are allowed in any
|
||||
circumstances. This may also cause the accessed rectangle to be
|
||||
adjusted by the driver, depending on the properties of the
|
||||
underlying hardware.</para>
|
||||
|
||||
<para>The coordinates to a step always refer to the actual size
|
||||
of the previous step. The exception to this rule is the source
|
||||
compose rectangle, which refers to the sink compose bounds
|
||||
rectangle --- if it is supported by the hardware.</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem><para>Sink pad format. The user configures the sink pad
|
||||
format. This format defines the parameters of the image the
|
||||
entity receives through the pad for further processing.</para></listitem>
|
||||
|
||||
<listitem><para>Sink pad actual crop selection. The sink pad crop
|
||||
defines the crop performed to the sink pad format.</para></listitem>
|
||||
|
||||
<listitem><para>Sink pad actual compose selection. The size of the
|
||||
sink pad compose rectangle defines the scaling ratio compared
|
||||
to the size of the sink pad crop rectangle. The location of
|
||||
the compose rectangle specifies the location of the actual
|
||||
sink compose rectangle in the sink compose bounds
|
||||
rectangle.</para></listitem>
|
||||
|
||||
<listitem><para>Source pad actual crop selection. Crop on the source
|
||||
pad defines crop performed to the image in the sink compose
|
||||
bounds rectangle.</para></listitem>
|
||||
|
||||
<listitem><para>Source pad format. The source pad format defines the
|
||||
output pixel format of the subdev, as well as the other
|
||||
parameters with the exception of the image width and height.
|
||||
Width and height are defined by the size of the source pad
|
||||
actual crop selection.</para></listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>Accessing any of the above rectangles not supported by the
|
||||
subdev will return <constant>EINVAL</constant>. Any rectangle
|
||||
referring to a previous unsupported rectangle coordinates will
|
||||
instead refer to the previous supported rectangle. For example,
|
||||
if sink crop is not supported, the compose selection will refer
|
||||
to the sink pad format dimensions instead.</para>
|
||||
|
||||
<figure id="subdev-image-processing-crop">
|
||||
<title>Image processing in subdevs: simple crop example</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="subdev-image-processing-crop.svg"
|
||||
format="SVG" scale="200" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>In the above example, the subdev supports cropping on its
|
||||
sink pad. To configure it, the user sets the media bus format on
|
||||
the subdev's sink pad. Now the actual crop rectangle can be set
|
||||
on the sink pad --- the location and size of this rectangle
|
||||
reflect the location and size of a rectangle to be cropped from
|
||||
the sink format. The size of the sink crop rectangle will also
|
||||
be the size of the format of the subdev's source pad.</para>
|
||||
|
||||
<figure id="subdev-image-processing-scaling-multi-source">
|
||||
<title>Image processing in subdevs: scaling with multiple sources</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="subdev-image-processing-scaling-multi-source.svg"
|
||||
format="SVG" scale="200" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>In this example, the subdev is capable of first cropping,
|
||||
then scaling and finally cropping for two source pads
|
||||
individually from the resulting scaled image. The location of
|
||||
the scaled image in the cropped image is ignored in sink compose
|
||||
target. Both of the locations of the source crop rectangles
|
||||
refer to the sink scaling rectangle, independently cropping an
|
||||
area at location specified by the source crop rectangle from
|
||||
it.</para>
|
||||
|
||||
<figure id="subdev-image-processing-full">
|
||||
<title>Image processing in subdevs: scaling and composition
|
||||
with multiple sinks and sources</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="subdev-image-processing-full.svg"
|
||||
format="SVG" scale="200" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
|
||||
<para>The subdev driver supports two sink pads and two source
|
||||
pads. The images from both of the sink pads are individually
|
||||
cropped, then scaled and further composed on the composition
|
||||
bounds rectangle. From that, two independent streams are cropped
|
||||
and sent out of the subdev from the source pads.</para>
|
||||
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
&sub-subdev-formats;
|
|
@ -1,29 +0,0 @@
|
|||
<title>Teletext Interface</title>
|
||||
|
||||
<para>This interface was aimed at devices receiving and demodulating
|
||||
Teletext data [<xref linkend="ets300706" />, <xref linkend="itu653" />], evaluating the
|
||||
Teletext packages and storing formatted pages in cache memory. Such
|
||||
devices are usually implemented as microcontrollers with serial
|
||||
interface (I<superscript>2</superscript>C) and could be found on old
|
||||
TV cards, dedicated Teletext decoding cards and home-brew devices
|
||||
connected to the PC parallel port.</para>
|
||||
|
||||
<para>The Teletext API was designed by Martin Buck. It was defined in
|
||||
the kernel header file <filename>linux/videotext.h</filename>, the
|
||||
specification is available from <ulink url="ftp://ftp.gwdg.de/pub/linux/misc/videotext/">
|
||||
ftp://ftp.gwdg.de/pub/linux/misc/videotext/</ulink>. (Videotext is the name of
|
||||
the German public television Teletext service.)</para>
|
||||
|
||||
<para>Eventually the Teletext API was integrated into the V4L API
|
||||
with character device file names <filename>/dev/vtx0</filename> to
|
||||
<filename>/dev/vtx31</filename>, device major number 81, minor numbers
|
||||
192 to 223.</para>
|
||||
|
||||
<para>However, teletext decoders were quickly replaced by more
|
||||
generic VBI demodulators and those dedicated teletext decoders no longer exist.
|
||||
For many years the vtx devices were still around, even though nobody used
|
||||
them. So the decision was made to finally remove support for the Teletext API in
|
||||
kernel 2.6.37.</para>
|
||||
|
||||
<para>Modern devices all use the <link linkend="raw-vbi">raw</link> or
|
||||
<link linkend="sliced">sliced</link> VBI API.</para>
|
|
@ -1,200 +0,0 @@
|
|||
<title>V4L2 Driver Programming</title>
|
||||
|
||||
<!-- This part defines the interface between the "videodev"
|
||||
module and individual drivers. -->
|
||||
|
||||
<para>to do</para>
|
||||
<!--
|
||||
<para>V4L2 is a two-layer driver system. The top layer is the "videodev"
|
||||
kernel module. When videodev initializes it registers as character device
|
||||
with major number 81, and it registers a set of file operations. All V4L2
|
||||
drivers are really clients of videodev, which calls V4L2 drivers through
|
||||
driver method functions. V4L2 drivers are also written as kernel modules.
|
||||
After probing the hardware they register one or more devices with
|
||||
videodev.</para>
|
||||
|
||||
<section id="driver-modules">
|
||||
<title>Driver Modules</title>
|
||||
|
||||
<para>V4L2 driver modules must have an initialization function which is
|
||||
called after the module was loaded into kernel, an exit function whis is
|
||||
called before the module is removed. When the driver is compiled into the
|
||||
kernel these functions called at system boot and shutdown time.</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
#include <linux/module.h>
|
||||
|
||||
/* Export information about this module. For details and other useful
|
||||
macros see <filename>linux/module.h</filename>. */
|
||||
MODULE_DESCRIPTION("my - driver for my hardware");
|
||||
MODULE_AUTHOR("Your name here");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static void
|
||||
my_module_exit (void)
|
||||
{
|
||||
/* Free all resources allocated by my_module_init(). */
|
||||
}
|
||||
|
||||
static int
|
||||
my_module_init (void)
|
||||
{
|
||||
/* Bind the driver to the supported hardware, see
|
||||
<link linkend="driver-pci"> and
|
||||
<link linkend="driver-usb"> for examples. */
|
||||
|
||||
return 0; /* a negative value on error, 0 on success. */
|
||||
}
|
||||
|
||||
/* Export module functions. */
|
||||
module_init (my_module_init);
|
||||
module_exit (my_module_exit);
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
<para>Users can add parameters when kernel modules are inserted:</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
include <linux/moduleparam.h>
|
||||
|
||||
static int my_option = 123;
|
||||
static int my_option_array[47];
|
||||
|
||||
/* Export the symbol, an int, with access permissions 0664.
|
||||
See <filename>linux/moduleparam.h</filename> for other types. */
|
||||
module_param (my_option, int, 0644);
|
||||
module_param_array (my_option_array, int, NULL, 0644);
|
||||
|
||||
MODULE_PARM_DESC (my_option, "Does magic things, default 123");
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
<para>One parameter should be supported by all V4L2 drivers, the minor
|
||||
number of the device it will register. Purpose is to predictably link V4L2
|
||||
drivers to device nodes if more than one video device is installed. Use the
|
||||
name of the device node followed by a "_nr" suffix, for example "video_nr"
|
||||
for <filename>/dev/video</filename>.</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
/* Minor number of the device, -1 to allocate the first unused. */
|
||||
static int video_nr = -1;
|
||||
|
||||
module_param (video_nr, int, 0444);
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</section>
|
||||
|
||||
<section id="driver-pci">
|
||||
<title>PCI Devices</title>
|
||||
|
||||
<para>PCI devices are initialized like this:</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
typedef struct {
|
||||
/* State of one physical device. */
|
||||
} my_device;
|
||||
|
||||
static int
|
||||
my_resume (struct pci_dev * pci_dev)
|
||||
{
|
||||
/* Restore the suspended device to working state. */
|
||||
}
|
||||
|
||||
static int
|
||||
my_suspend (struct pci_dev * pci_dev,
|
||||
pm_message_t state)
|
||||
{
|
||||
/* This function is called before the system goes to sleep.
|
||||
Stop all DMAs and disable interrupts, then put the device
|
||||
into a low power state. For details see the kernel
|
||||
sources under <filename>Documentation/power</filename>. */
|
||||
|
||||
return 0; /* a negative value on error, 0 on success. */
|
||||
}
|
||||
|
||||
static void
|
||||
my_remove (struct pci_dev * pci_dev)
|
||||
{
|
||||
my_device *my = pci_get_drvdata (pci_dev);
|
||||
|
||||
/* Describe me. */
|
||||
}
|
||||
|
||||
static int
|
||||
my_probe (struct pci_dev * pci_dev,
|
||||
const struct pci_device_id * pci_id)
|
||||
{
|
||||
my_device *my;
|
||||
|
||||
/* Describe me. */
|
||||
|
||||
/* You can allocate per-device data here and store a pointer
|
||||
to it in the pci_dev structure. */
|
||||
my = ...;
|
||||
pci_set_drvdata (pci_dev, my);
|
||||
|
||||
return 0; /* a negative value on error, 0 on success. */
|
||||
}
|
||||
|
||||
/* A list of supported PCI devices. */
|
||||
static struct pci_device_id
|
||||
my_pci_device_ids [] = {
|
||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ 0 } /* end of list */
|
||||
};
|
||||
|
||||
/* Load our module if supported PCI devices are installed. */
|
||||
MODULE_DEVICE_TABLE (pci, my_pci_device_ids);
|
||||
|
||||
static struct pci_driver
|
||||
my_pci_driver = {
|
||||
.name = "my",
|
||||
.id_table = my_pci_device_ids,
|
||||
|
||||
.probe = my_probe,
|
||||
.remove = my_remove,
|
||||
|
||||
/* Power management functions. */
|
||||
.suspend = my_suspend,
|
||||
.resume = my_resume,
|
||||
};
|
||||
|
||||
static void
|
||||
my_module_exit (void)
|
||||
{
|
||||
pci_unregister_driver (&my_pci_driver);
|
||||
}
|
||||
|
||||
static int
|
||||
my_module_init (void)
|
||||
{
|
||||
return pci_register_driver (&my_pci_driver);
|
||||
}
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</section>
|
||||
|
||||
<section id="driver-usb">
|
||||
<title>USB Devices</title>
|
||||
<para>to do</para>
|
||||
</section>
|
||||
<section id="driver-registering">
|
||||
<title>Registering V4L2 Drivers</title>
|
||||
|
||||
<para>After a V4L2 driver probed the hardware it registers one or more
|
||||
devices with the videodev module.</para>
|
||||
</section>
|
||||
<section id="driver-file-ops">
|
||||
<title>File Operations</title>
|
||||
<para>to do</para>
|
||||
</section>
|
||||
<section id="driver-internal-api">
|
||||
<title>Internal API</title>
|
||||
<para>to do</para>
|
||||
</section>
|
||||
-->
|
|
@ -1,671 +0,0 @@
|
|||
<!--
|
||||
The GNU Free Documentation License 1.1 in DocBook
|
||||
Markup by Eric Baudais <baudais@okstate.edu>
|
||||
Maintained by the GNOME Documentation Project
|
||||
http://live.gnome.org/DocumentationProject
|
||||
Version: 1.0.1
|
||||
Last Modified: Nov 16, 2000
|
||||
-->
|
||||
|
||||
<appendix id="fdl">
|
||||
<appendixinfo>
|
||||
<releaseinfo>
|
||||
Version 1.1, March 2000
|
||||
</releaseinfo>
|
||||
<copyright>
|
||||
<year>2000</year><holder>Free Software Foundation, Inc.</holder>
|
||||
</copyright>
|
||||
<legalnotice id="fdl-legalnotice">
|
||||
<para>
|
||||
<address>Free Software Foundation, Inc. <street>59 Temple Place,
|
||||
Suite 330</street>, <city>Boston</city>, <state>MA</state>
|
||||
<postcode>02111-1307</postcode> <country>USA</country></address>
|
||||
Everyone is permitted to copy and distribute verbatim copies of this
|
||||
license document, but changing it is not allowed.
|
||||
</para>
|
||||
</legalnotice>
|
||||
</appendixinfo>
|
||||
<title>GNU Free Documentation License</title>
|
||||
|
||||
<sect1 id="fdl-preamble">
|
||||
<title>0. PREAMBLE</title>
|
||||
<para>
|
||||
The purpose of this License is to make a manual, textbook, or
|
||||
other written document <quote>free</quote> in the sense of
|
||||
freedom: to assure everyone the effective freedom to copy and
|
||||
redistribute it, with or without modifying it, either
|
||||
commercially or noncommercially. Secondarily, this License
|
||||
preserves for the author and publisher a way to get credit for
|
||||
their work, while not being considered responsible for
|
||||
modifications made by others.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This License is a kind of <quote>copyleft</quote>, which means
|
||||
that derivative works of the document must themselves be free in
|
||||
the same sense. It complements the GNU General Public License,
|
||||
which is a copyleft license designed for free software.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We have designed this License in order to use it for manuals for
|
||||
free software, because free software needs free documentation: a
|
||||
free program should come with manuals providing the same
|
||||
freedoms that the software does. But this License is not limited
|
||||
to software manuals; it can be used for any textual work,
|
||||
regardless of subject matter or whether it is published as a
|
||||
printed book. We recommend this License principally for works
|
||||
whose purpose is instruction or reference.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="fdl-section1">
|
||||
<title>1. APPLICABILITY AND DEFINITIONS</title>
|
||||
<para id="fdl-document">
|
||||
This License applies to any manual or other work that contains a
|
||||
notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. The
|
||||
<quote>Document</quote>, below, refers to any such manual or
|
||||
work. Any member of the public is a licensee, and is addressed
|
||||
as <quote>you</quote>.
|
||||
</para>
|
||||
|
||||
<para id="fdl-modified">
|
||||
A <quote>Modified Version</quote> of the Document means any work
|
||||
containing the Document or a portion of it, either copied
|
||||
verbatim, or with modifications and/or translated into another
|
||||
language.
|
||||
</para>
|
||||
|
||||
<para id="fdl-secondary">
|
||||
A <quote>Secondary Section</quote> is a named appendix or a
|
||||
front-matter section of the <link
|
||||
linkend="fdl-document">Document</link> that deals exclusively
|
||||
with the relationship of the publishers or authors of the
|
||||
Document to the Document's overall subject (or to related
|
||||
matters) and contains nothing that could fall directly within
|
||||
that overall subject. (For example, if the Document is in part a
|
||||
textbook of mathematics, a Secondary Section may not explain any
|
||||
mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of
|
||||
legal, commercial, philosophical, ethical or political position
|
||||
regarding them.
|
||||
</para>
|
||||
|
||||
<para id="fdl-invariant">
|
||||
The <quote>Invariant Sections</quote> are certain <link
|
||||
linkend="fdl-secondary"> Secondary Sections</link> whose titles
|
||||
are designated, as being those of Invariant Sections, in the
|
||||
notice that says that the <link
|
||||
linkend="fdl-document">Document</link> is released under this
|
||||
License.
|
||||
</para>
|
||||
|
||||
<para id="fdl-cover-texts">
|
||||
The <quote>Cover Texts</quote> are certain short passages of
|
||||
text that are listed, as Front-Cover Texts or Back-Cover Texts,
|
||||
in the notice that says that the <link
|
||||
linkend="fdl-document">Document</link> is released under this
|
||||
License.
|
||||
</para>
|
||||
|
||||
<para id="fdl-transparent">
|
||||
A <quote>Transparent</quote> copy of the <link
|
||||
linkend="fdl-document"> Document</link> means a machine-readable
|
||||
copy, represented in a format whose specification is available
|
||||
to the general public, whose contents can be viewed and edited
|
||||
directly and straightforwardly with generic text editors or (for
|
||||
images composed of pixels) generic paint programs or (for
|
||||
drawings) some widely available drawing editor, and that is
|
||||
suitable for input to text formatters or for automatic
|
||||
translation to a variety of formats suitable for input to text
|
||||
formatters. A copy made in an otherwise Transparent file format
|
||||
whose markup has been designed to thwart or discourage
|
||||
subsequent modification by readers is not Transparent. A copy
|
||||
that is not <quote>Transparent</quote> is called
|
||||
<quote>Opaque</quote>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Examples of suitable formats for Transparent copies include
|
||||
plain ASCII without markup, Texinfo input format, LaTeX input
|
||||
format, SGML or XML using a publicly available DTD, and
|
||||
standard-conforming simple HTML designed for human
|
||||
modification. Opaque formats include PostScript, PDF,
|
||||
proprietary formats that can be read and edited only by
|
||||
proprietary word processors, SGML or XML for which the DTD
|
||||
and/or processing tools are not generally available, and the
|
||||
machine-generated HTML produced by some word processors for
|
||||
output purposes only.
|
||||
</para>
|
||||
|
||||
<para id="fdl-title-page">
|
||||
The <quote>Title Page</quote> means, for a printed book, the
|
||||
title page itself, plus such following pages as are needed to
|
||||
hold, legibly, the material this License requires to appear in
|
||||
the title page. For works in formats which do not have any title
|
||||
page as such, <quote>Title Page</quote> means the text near the
|
||||
most prominent appearance of the work's title, preceding the
|
||||
beginning of the body of the text.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section2">
|
||||
<title>2. VERBATIM COPYING</title>
|
||||
<para>
|
||||
You may copy and distribute the <link
|
||||
linkend="fdl-document">Document</link> in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License
|
||||
applies to the Document are reproduced in all copies, and that
|
||||
you add no other conditions whatsoever to those of this
|
||||
License. You may not use technical measures to obstruct or
|
||||
control the reading or further copying of the copies you make or
|
||||
distribute. However, you may accept compensation in exchange for
|
||||
copies. If you distribute a large enough number of copies you
|
||||
must also follow the conditions in <link
|
||||
linkend="fdl-section3">section 3</link>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may also lend copies, under the same conditions stated
|
||||
above, and you may publicly display copies.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section3">
|
||||
<title>3. COPYING IN QUANTITY</title>
|
||||
<para>
|
||||
If you publish printed copies of the <link
|
||||
linkend="fdl-document">Document</link> numbering more than 100,
|
||||
and the Document's license notice requires <link
|
||||
linkend="fdl-cover-texts">Cover Texts</link>, you must enclose
|
||||
the copies in covers that carry, clearly and legibly, all these
|
||||
Cover Texts: Front-Cover Texts on the front cover, and
|
||||
Back-Cover Texts on the back cover. Both covers must also
|
||||
clearly and legibly identify you as the publisher of these
|
||||
copies. The front cover must present the full title with all
|
||||
words of the title equally prominent and visible. You may add
|
||||
other material on the covers in addition. Copying with changes
|
||||
limited to the covers, as long as they preserve the title of the
|
||||
<link linkend="fdl-document">Document</link> and satisfy these
|
||||
conditions, can be treated as verbatim copying in other
|
||||
respects.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto
|
||||
adjacent pages.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If you publish or distribute <link
|
||||
linkend="fdl-transparent">Opaque</link> copies of the <link
|
||||
linkend="fdl-document">Document</link> numbering more than 100,
|
||||
you must either include a machine-readable <link
|
||||
linkend="fdl-transparent">Transparent</link> copy along with
|
||||
each Opaque copy, or state in or with each Opaque copy a
|
||||
publicly-accessible computer-network location containing a
|
||||
complete Transparent copy of the Document, free of added
|
||||
material, which the general network-using public has access to
|
||||
download anonymously at no charge using public-standard network
|
||||
protocols. If you use the latter option, you must take
|
||||
reasonably prudent steps, when you begin distribution of Opaque
|
||||
copies in quantity, to ensure that this Transparent copy will
|
||||
remain thus accessible at the stated location until at least one
|
||||
year after the last time you distribute an Opaque copy (directly
|
||||
or through your agents or retailers) of that edition to the
|
||||
public.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
It is requested, but not required, that you contact the authors
|
||||
of the <link linkend="fdl-document">Document</link> well before
|
||||
redistributing any large number of copies, to give them a chance
|
||||
to provide you with an updated version of the Document.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section4">
|
||||
<title>4. MODIFICATIONS</title>
|
||||
<para>
|
||||
You may copy and distribute a <link
|
||||
linkend="fdl-modified">Modified Version</link> of the <link
|
||||
linkend="fdl-document">Document</link> under the conditions of
|
||||
sections <link linkend="fdl-section2">2</link> and <link
|
||||
linkend="fdl-section3">3</link> above, provided that you release
|
||||
the Modified Version under precisely this License, with the
|
||||
Modified Version filling the role of the Document, thus
|
||||
licensing distribution and modification of the Modified Version
|
||||
to whoever possesses a copy of it. In addition, you must do
|
||||
these things in the Modified Version:
|
||||
</para>
|
||||
|
||||
<itemizedlist mark="opencircle">
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>A</title>
|
||||
<para>
|
||||
Use in the <link linkend="fdl-title-page">Title
|
||||
Page</link> (and on the covers, if any) a title distinct
|
||||
from that of the <link
|
||||
linkend="fdl-document">Document</link>, and from those of
|
||||
previous versions (which should, if there were any, be
|
||||
listed in the History section of the Document). You may
|
||||
use the same title as a previous version if the original
|
||||
publisher of that version gives permission.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>B</title>
|
||||
<para>
|
||||
List on the <link linkend="fdl-title-page">Title
|
||||
Page</link>, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the
|
||||
<link linkend="fdl-modified">Modified Version</link>,
|
||||
together with at least five of the principal authors of
|
||||
the <link linkend="fdl-document">Document</link> (all of
|
||||
its principal authors, if it has less than five).
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>C</title>
|
||||
<para>
|
||||
State on the <link linkend="fdl-title-page">Title
|
||||
Page</link> the name of the publisher of the <link
|
||||
linkend="fdl-modified">Modified Version</link>, as the
|
||||
publisher.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>D</title>
|
||||
<para>
|
||||
Preserve all the copyright notices of the <link
|
||||
linkend="fdl-document">Document</link>.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>E</title>
|
||||
<para>
|
||||
Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>F</title>
|
||||
<para>
|
||||
Include, immediately after the copyright notices, a
|
||||
license notice giving the public permission to use the
|
||||
<link linkend="fdl-modified">Modified Version</link> under
|
||||
the terms of this License, in the form shown in the
|
||||
Addendum below.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>G</title>
|
||||
<para>
|
||||
Preserve in that license notice the full lists of <link
|
||||
linkend="fdl-invariant"> Invariant Sections</link> and
|
||||
required <link linkend="fdl-cover-texts">Cover
|
||||
Texts</link> given in the <link
|
||||
linkend="fdl-document">Document's</link> license notice.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>H</title>
|
||||
<para>
|
||||
Include an unaltered copy of this License.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>I</title>
|
||||
<para>
|
||||
Preserve the section entitled <quote>History</quote>, and
|
||||
its title, and add to it an item stating at least the
|
||||
title, year, new authors, and publisher of the <link
|
||||
linkend="fdl-modified">Modified Version </link>as given on
|
||||
the <link linkend="fdl-title-page">Title Page</link>. If
|
||||
there is no section entitled <quote>History</quote> in the
|
||||
<link linkend="fdl-document">Document</link>, create one
|
||||
stating the title, year, authors, and publisher of the
|
||||
Document as given on its Title Page, then add an item
|
||||
describing the Modified Version as stated in the previous
|
||||
sentence.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>J</title>
|
||||
<para>
|
||||
Preserve the network location, if any, given in the <link
|
||||
linkend="fdl-document">Document</link> for public access
|
||||
to a <link linkend="fdl-transparent">Transparent</link>
|
||||
copy of the Document, and likewise the network locations
|
||||
given in the Document for previous versions it was based
|
||||
on. These may be placed in the <quote>History</quote>
|
||||
section. You may omit a network location for a work that
|
||||
was published at least four years before the Document
|
||||
itself, or if the original publisher of the version it
|
||||
refers to gives permission.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>K</title>
|
||||
<para>
|
||||
In any section entitled <quote>Acknowledgements</quote> or
|
||||
<quote>Dedications</quote>, preserve the section's title,
|
||||
and preserve in the section all the substance and tone of
|
||||
each of the contributor acknowledgements and/or
|
||||
dedications given therein.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>L</title>
|
||||
<para>
|
||||
Preserve all the <link linkend="fdl-invariant">Invariant
|
||||
Sections</link> of the <link
|
||||
linkend="fdl-document">Document</link>, unaltered in their
|
||||
text and in their titles. Section numbers or the
|
||||
equivalent are not considered part of the section titles.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>M</title>
|
||||
<para>
|
||||
Delete any section entitled
|
||||
<quote>Endorsements</quote>. Such a section may not be
|
||||
included in the <link linkend="fdl-modified">Modified
|
||||
Version</link>.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<formalpara>
|
||||
<title>N</title>
|
||||
<para>
|
||||
Do not retitle any existing section as
|
||||
<quote>Endorsements</quote> or to conflict in title with
|
||||
any <link linkend="fdl-invariant">Invariant
|
||||
Section</link>.
|
||||
</para>
|
||||
</formalpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
If the <link linkend="fdl-modified">Modified Version</link>
|
||||
includes new front-matter sections or appendices that qualify as
|
||||
<link linkend="fdl-secondary">Secondary Sections</link> and
|
||||
contain no material copied from the Document, you may at your
|
||||
option designate some or all of these sections as invariant. To
|
||||
do this, add their titles to the list of <link
|
||||
linkend="fdl-invariant">Invariant Sections</link> in the
|
||||
Modified Version's license notice. These titles must be
|
||||
distinct from any other section titles.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may add a section entitled <quote>Endorsements</quote>,
|
||||
provided it contains nothing but endorsements of your <link
|
||||
linkend="fdl-modified">Modified Version</link> by various
|
||||
parties--for example, statements of peer review or that the text
|
||||
has been approved by an organization as the authoritative
|
||||
definition of a standard.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may add a passage of up to five words as a <link
|
||||
linkend="fdl-cover-texts">Front-Cover Text</link>, and a passage
|
||||
of up to 25 words as a <link
|
||||
linkend="fdl-cover-texts">Back-Cover Text</link>, to the end of
|
||||
the list of <link linkend="fdl-cover-texts">Cover Texts</link>
|
||||
in the <link linkend="fdl-modified">Modified Version</link>.
|
||||
Only one passage of Front-Cover Text and one of Back-Cover Text
|
||||
may be added by (or through arrangements made by) any one
|
||||
entity. If the <link linkend="fdl-document">Document</link>
|
||||
already includes a cover text for the same cover, previously
|
||||
added by you or by arrangement made by the same entity you are
|
||||
acting on behalf of, you may not add another; but you may
|
||||
replace the old one, on explicit permission from the previous
|
||||
publisher that added the old one.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The author(s) and publisher(s) of the <link
|
||||
linkend="fdl-document">Document</link> do not by this License
|
||||
give permission to use their names for publicity for or to
|
||||
assert or imply endorsement of any <link
|
||||
linkend="fdl-modified">Modified Version </link>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section5">
|
||||
<title>5. COMBINING DOCUMENTS</title>
|
||||
<para>
|
||||
You may combine the <link linkend="fdl-document">Document</link>
|
||||
with other documents released under this License, under the
|
||||
terms defined in <link linkend="fdl-section4">section 4</link>
|
||||
above for modified versions, provided that you include in the
|
||||
combination all of the <link linkend="fdl-invariant">Invariant
|
||||
Sections</link> of all of the original documents, unmodified,
|
||||
and list them all as Invariant Sections of your combined work in
|
||||
its license notice.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The combined work need only contain one copy of this License,
|
||||
and multiple identical <link linkend="fdl-invariant">Invariant
|
||||
Sections</link> may be replaced with a single copy. If there are
|
||||
multiple Invariant Sections with the same name but different
|
||||
contents, make the title of each such section unique by adding
|
||||
at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique
|
||||
number. Make the same adjustment to the section titles in the
|
||||
list of Invariant Sections in the license notice of the combined
|
||||
work.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In the combination, you must combine any sections entitled
|
||||
<quote>History</quote> in the various original documents,
|
||||
forming one section entitled <quote>History</quote>; likewise
|
||||
combine any sections entitled <quote>Acknowledgements</quote>,
|
||||
and any sections entitled <quote>Dedications</quote>. You must
|
||||
delete all sections entitled <quote>Endorsements.</quote>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section6">
|
||||
<title>6. COLLECTIONS OF DOCUMENTS</title>
|
||||
<para>
|
||||
You may make a collection consisting of the <link
|
||||
linkend="fdl-document">Document</link> and other documents
|
||||
released under this License, and replace the individual copies
|
||||
of this License in the various documents with a single copy that
|
||||
is included in the collection, provided that you follow the
|
||||
rules of this License for verbatim copying of each of the
|
||||
documents in all other respects.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may extract a single document from such a collection, and
|
||||
distribute it individually under this License, provided you
|
||||
insert a copy of this License into the extracted document, and
|
||||
follow this License in all other respects regarding verbatim
|
||||
copying of that document.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section7">
|
||||
<title>7. AGGREGATION WITH INDEPENDENT WORKS</title>
|
||||
<para>
|
||||
A compilation of the <link
|
||||
linkend="fdl-document">Document</link> or its derivatives with
|
||||
other separate and independent documents or works, in or on a
|
||||
volume of a storage or distribution medium, does not as a whole
|
||||
count as a <link linkend="fdl-modified">Modified Version</link>
|
||||
of the Document, provided no compilation copyright is claimed
|
||||
for the compilation. Such a compilation is called an
|
||||
<quote>aggregate</quote>, and this License does not apply to the
|
||||
other self-contained works thus compiled with the Document , on
|
||||
account of their being thus compiled, if they are not themselves
|
||||
derivative works of the Document. If the <link
|
||||
linkend="fdl-cover-texts">Cover Text</link> requirement of <link
|
||||
linkend="fdl-section3">section 3</link> is applicable to these
|
||||
copies of the Document, then if the Document is less than one
|
||||
quarter of the entire aggregate, the Document's Cover Texts may
|
||||
be placed on covers that surround only the Document within the
|
||||
aggregate. Otherwise they must appear on covers around the whole
|
||||
aggregate.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section8">
|
||||
<title>8. TRANSLATION</title>
|
||||
<para>
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the <link
|
||||
linkend="fdl-document">Document</link> under the terms of <link
|
||||
linkend="fdl-section4">section 4</link>. Replacing <link
|
||||
linkend="fdl-invariant"> Invariant Sections</link> with
|
||||
translations requires special permission from their copyright
|
||||
holders, but you may include translations of some or all
|
||||
Invariant Sections in addition to the original versions of these
|
||||
Invariant Sections. You may include a translation of this
|
||||
License provided that you also include the original English
|
||||
version of this License. In case of a disagreement between the
|
||||
translation and the original English version of this License,
|
||||
the original English version will prevail.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section9">
|
||||
<title>9. TERMINATION</title>
|
||||
<para>
|
||||
You may not copy, modify, sublicense, or distribute the <link
|
||||
linkend="fdl-document">Document</link> except as expressly
|
||||
provided for under this License. Any other attempt to copy,
|
||||
modify, sublicense or distribute the Document is void, and will
|
||||
automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this
|
||||
License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-section10">
|
||||
<title>10. FUTURE REVISIONS OF THIS LICENSE</title>
|
||||
<para>
|
||||
The <ulink type="http"
|
||||
url="http://www.gnu.org/fsf/fsf.html">Free Software
|
||||
Foundation</ulink> may publish new, revised versions of the GNU
|
||||
Free Documentation License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ
|
||||
in detail to address new problems or concerns. See <ulink
|
||||
type="http"
|
||||
url="http://www.gnu.org/copyleft">http://www.gnu.org/copyleft/</ulink>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Each version of the License is given a distinguishing version
|
||||
number. If the <link linkend="fdl-document">Document</link>
|
||||
specifies that a particular numbered version of this License
|
||||
<quote>or any later version</quote> applies to it, you have the
|
||||
option of following the terms and conditions either of that
|
||||
specified version or of any later version that has been
|
||||
published (not as a draft) by the Free Software Foundation. If
|
||||
the Document does not specify a version number of this License,
|
||||
you may choose any version ever published (not as a draft) by
|
||||
the Free Software Foundation.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="fdl-using">
|
||||
<title>Addendum</title>
|
||||
<para>
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
</para>
|
||||
|
||||
<blockquote>
|
||||
<para>
|
||||
Copyright © YEAR YOUR NAME.
|
||||
</para>
|
||||
<para>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License, Version 1.1 or any later version published by the
|
||||
Free Software Foundation; with the <link
|
||||
linkend="fdl-invariant">Invariant Sections</link> being LIST
|
||||
THEIR TITLES, with the <link
|
||||
linkend="fdl-cover-texts">Front-Cover Texts</link> being LIST,
|
||||
and with the <link linkend="fdl-cover-texts">Back-Cover
|
||||
Texts</link> being LIST. A copy of the license is included in
|
||||
the section entitled <quote>GNU Free Documentation
|
||||
License</quote>.
|
||||
</para>
|
||||
</blockquote>
|
||||
|
||||
<para>
|
||||
If you have no <link linkend="fdl-invariant">Invariant
|
||||
Sections</link>, write <quote>with no Invariant Sections</quote>
|
||||
instead of saying which ones are invariant. If you have no
|
||||
<link linkend="fdl-cover-texts">Front-Cover Texts</link>, write
|
||||
<quote>no Front-Cover Texts</quote> instead of
|
||||
<quote>Front-Cover Texts being LIST</quote>; likewise for <link
|
||||
linkend="fdl-cover-texts">Back-Cover Texts</link>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If your document contains nontrivial examples of program code,
|
||||
we recommend releasing these examples in parallel under your
|
||||
choice of free software license, such as the <ulink type="http"
|
||||
url="http://www.gnu.org/copyleft/gpl.html"> GNU General Public
|
||||
License</ulink>, to permit their use in free software.
|
||||
</para>
|
||||
</sect1>
|
||||
</appendix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Двоичные данные
Documentation/DocBook/media/v4l/fieldseq_bt.pdf
Двоичные данные
Documentation/DocBook/media/v4l/fieldseq_bt.pdf
Двоичный файл не отображается.
Двоичные данные
Documentation/DocBook/media/v4l/fieldseq_tb.pdf
Двоичные данные
Documentation/DocBook/media/v4l/fieldseq_tb.pdf
Двоичный файл не отображается.
|
@ -1,62 +0,0 @@
|
|||
<refentry id="func-close">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 close()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-close</refname>
|
||||
<refpurpose>Close a V4L2 device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>close</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Closes the device. Any I/O in progress is terminated and
|
||||
resources associated with the file descriptor are freed. However data
|
||||
format parameters, current input or output, control values or other
|
||||
properties remain unchanged.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>The function returns <returnvalue>0</returnvalue> on
|
||||
success, <returnvalue>-1</returnvalue> on failure and the
|
||||
<varname>errno</varname> is set appropriately. Possible error
|
||||
codes:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid open file
|
||||
descriptor.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,71 +0,0 @@
|
|||
<refentry id="func-ioctl">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 ioctl()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-ioctl</refname>
|
||||
<refpurpose>Program a V4L2 device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>void *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>V4L2 ioctl request code as defined in the <filename>videodev2.h</filename> header file, for example
|
||||
VIDIOC_QUERYCAP.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>Pointer to a function parameter, usually a structure.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The <function>ioctl()</function> function is used to program
|
||||
V4L2 devices. The argument <parameter>fd</parameter> must be an open
|
||||
file descriptor. An ioctl <parameter>request</parameter> has encoded
|
||||
in it whether the argument is an input, output or read/write
|
||||
parameter, and the size of the argument <parameter>argp</parameter> in
|
||||
bytes. Macros and defines specifying V4L2 ioctl requests are located
|
||||
in the <filename>videodev2.h</filename> header file.
|
||||
Applications should use their own copy, not include the version in the
|
||||
kernel sources on the system they compile on. All V4L2 ioctl requests,
|
||||
their respective function and parameters are specified in <xref
|
||||
linkend="user-func" />.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
<para>When an ioctl that takes an output or read/write parameter fails,
|
||||
the parameter remains unmodified.</para>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,183 +0,0 @@
|
|||
<refentry id="func-mmap">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 mmap()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-mmap</refname>
|
||||
<refpurpose>Map device memory into application address space</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>void *<function>mmap</function></funcdef>
|
||||
<paramdef>void *<parameter>start</parameter></paramdef>
|
||||
<paramdef>size_t <parameter>length</parameter></paramdef>
|
||||
<paramdef>int <parameter>prot</parameter></paramdef>
|
||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>off_t <parameter>offset</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>start</parameter></term>
|
||||
<listitem>
|
||||
<para>Map the buffer to this address in the
|
||||
application's address space. When the <constant>MAP_FIXED</constant>
|
||||
flag is specified, <parameter>start</parameter> must be a multiple of the
|
||||
pagesize and mmap will fail when the specified address
|
||||
cannot be used. Use of this option is discouraged; applications should
|
||||
just specify a <constant>NULL</constant> pointer here.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>length</parameter></term>
|
||||
<listitem>
|
||||
<para>Length of the memory area to map. This must be the
|
||||
same value as returned by the driver in the &v4l2-buffer;
|
||||
<structfield>length</structfield> field for the
|
||||
single-planar API, and the same value as returned by the driver
|
||||
in the &v4l2-plane; <structfield>length</structfield> field for the
|
||||
multi-planar API.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>prot</parameter></term>
|
||||
<listitem>
|
||||
<para>The <parameter>prot</parameter> argument describes the
|
||||
desired memory protection. Regardless of the device type and the
|
||||
direction of data exchange it should be set to
|
||||
<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>,
|
||||
permitting read and write access to image buffers. Drivers should
|
||||
support at least this combination of flags. Note the Linux
|
||||
<filename>video-buf</filename> kernel module, which is used by the
|
||||
bttv, saa7134, saa7146, cx88 and vivi driver supports only
|
||||
<constant>PROT_READ</constant> | <constant>PROT_WRITE</constant>. When
|
||||
the driver does not support the desired protection the
|
||||
<function>mmap()</function> function fails.</para>
|
||||
<para>Note device memory accesses (⪚ the memory on a
|
||||
graphics card with video capturing hardware) may incur a performance
|
||||
penalty compared to main memory accesses, or reads may be
|
||||
significantly slower than writes or vice versa. Other I/O methods may
|
||||
be more efficient in this case.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>The <parameter>flags</parameter> parameter
|
||||
specifies the type of the mapped object, mapping options and whether
|
||||
modifications made to the mapped copy of the page are private to the
|
||||
process or are to be shared with other references.</para>
|
||||
<para><constant>MAP_FIXED</constant> requests that the
|
||||
driver selects no other address than the one specified. If the
|
||||
specified address cannot be used, <function>mmap()</function> will fail. If
|
||||
<constant>MAP_FIXED</constant> is specified,
|
||||
<parameter>start</parameter> must be a multiple of the pagesize. Use
|
||||
of this option is discouraged.</para>
|
||||
<para>One of the <constant>MAP_SHARED</constant> or
|
||||
<constant>MAP_PRIVATE</constant> flags must be set.
|
||||
<constant>MAP_SHARED</constant> allows applications to share the
|
||||
mapped memory with other (⪚ child-) processes. Note the Linux
|
||||
<filename>video-buf</filename> module which is used by the bttv,
|
||||
saa7134, saa7146, cx88 and vivi driver supports only
|
||||
<constant>MAP_SHARED</constant>. <constant>MAP_PRIVATE</constant>
|
||||
requests copy-on-write semantics. V4L2 applications should not set the
|
||||
<constant>MAP_PRIVATE</constant>, <constant>MAP_DENYWRITE</constant>,
|
||||
<constant>MAP_EXECUTABLE</constant> or <constant>MAP_ANON</constant>
|
||||
flag.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>offset</parameter></term>
|
||||
<listitem>
|
||||
<para>Offset of the buffer in device memory. This must be the
|
||||
same value as returned by the driver in the &v4l2-buffer;
|
||||
<structfield>m</structfield> union <structfield>offset</structfield> field for
|
||||
the single-planar API, and the same value as returned by the driver
|
||||
in the &v4l2-plane; <structfield>m</structfield> union
|
||||
<structfield>mem_offset</structfield> field for the multi-planar API.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The <function>mmap()</function> function asks to map
|
||||
<parameter>length</parameter> bytes starting at
|
||||
<parameter>offset</parameter> in the memory of the device specified by
|
||||
<parameter>fd</parameter> into the application address space,
|
||||
preferably at address <parameter>start</parameter>. This latter
|
||||
address is a hint only, and is usually specified as 0.</para>
|
||||
|
||||
<para>Suitable length and offset parameters are queried with the
|
||||
&VIDIOC-QUERYBUF; ioctl. Buffers must be allocated with the
|
||||
&VIDIOC-REQBUFS; ioctl before they can be queried.</para>
|
||||
|
||||
<para>To unmap buffers the &func-munmap; function is used.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success <function>mmap()</function> returns a pointer to
|
||||
the mapped buffer. On error <constant>MAP_FAILED</constant> (-1) is
|
||||
returned, and the <varname>errno</varname> variable is set
|
||||
appropriately. Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid file
|
||||
descriptor.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EACCES</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is
|
||||
not open for reading and writing.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>start</parameter> or
|
||||
<parameter>length</parameter> or <parameter>offset</parameter> are not
|
||||
suitable. (E. g. they are too large, or not aligned on a
|
||||
<constant>PAGESIZE</constant> boundary.)</para>
|
||||
<para>The <parameter>flags</parameter> or
|
||||
<parameter>prot</parameter> value is not supported.</para>
|
||||
<para>No buffers have been allocated with the
|
||||
&VIDIOC-REQBUFS; ioctl.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENOMEM</errorcode></term>
|
||||
<listitem>
|
||||
<para>Not enough physical or virtual memory was available to
|
||||
complete the request.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,76 +0,0 @@
|
|||
<refentry id="func-munmap">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 munmap()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-munmap</refname>
|
||||
<refpurpose>Unmap device memory</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>munmap</function></funcdef>
|
||||
<paramdef>void *<parameter>start</parameter></paramdef>
|
||||
<paramdef>size_t <parameter>length</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>start</parameter></term>
|
||||
<listitem>
|
||||
<para>Address of the mapped buffer as returned by the
|
||||
&func-mmap; function.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>length</parameter></term>
|
||||
<listitem>
|
||||
<para>Length of the mapped buffer. This must be the same
|
||||
value as given to <function>mmap()</function> and returned by the
|
||||
driver in the &v4l2-buffer; <structfield>length</structfield>
|
||||
field for the single-planar API and in the &v4l2-plane;
|
||||
<structfield>length</structfield> field for the multi-planar API.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Unmaps a previously with the &func-mmap; function mapped
|
||||
buffer and frees it, if possible. <!-- ? This function (not freeing)
|
||||
has no impact on I/O in progress, specifically it does not imply
|
||||
&VIDIOC-STREAMOFF; to terminate I/O. Unmapped buffers can still be
|
||||
enqueued, dequeued or queried, they are just not accessible by the
|
||||
application.--></para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success <function>munmap()</function> returns 0, on
|
||||
failure -1 and the <varname>errno</varname> variable is set
|
||||
appropriately:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>start</parameter> or
|
||||
<parameter>length</parameter> is incorrect, or no buffers have been
|
||||
mapped yet.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,113 +0,0 @@
|
|||
<refentry id="func-open">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 open()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-open</refname>
|
||||
<refpurpose>Open a V4L2 device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>open</function></funcdef>
|
||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>device_name</parameter></term>
|
||||
<listitem>
|
||||
<para>Device to be opened.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>Open flags. Access mode must be
|
||||
<constant>O_RDWR</constant>. This is just a technicality, input devices
|
||||
still support only reading and output devices only writing.</para>
|
||||
<para>When the <constant>O_NONBLOCK</constant> flag is
|
||||
given, the read() function and the &VIDIOC-DQBUF; ioctl will return
|
||||
the &EAGAIN; when no data is available or no buffer is in the driver
|
||||
outgoing queue, otherwise these functions block until data becomes
|
||||
available. All V4L2 drivers exchanging data with applications must
|
||||
support the <constant>O_NONBLOCK</constant> flag.</para>
|
||||
<para>Other flags have no effect.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>To open a V4L2 device applications call
|
||||
<function>open()</function> with the desired device name. This
|
||||
function has no side effects; all data format parameters, current
|
||||
input or output, control values or other properties remain unchanged.
|
||||
At the first <function>open()</function> call after loading the driver
|
||||
they will be reset to default values, drivers are never in an
|
||||
undefined state.</para>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success <function>open</function> returns the new file
|
||||
descriptor. On error -1 is returned, and the <varname>errno</varname>
|
||||
variable is set appropriately. Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EACCES</errorcode></term>
|
||||
<listitem>
|
||||
<para>The caller has no permission to access the
|
||||
device.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The driver does not support multiple opens and the
|
||||
device is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENXIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>No device corresponding to this device special file
|
||||
exists.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENOMEM</errorcode></term>
|
||||
<listitem>
|
||||
<para>Not enough kernel memory was available to complete the
|
||||
request.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EMFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The process already has the maximum number of
|
||||
files open.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The limit on the total number of files open on the
|
||||
system has been reached.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,142 +0,0 @@
|
|||
<refentry id="func-poll">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 poll()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-poll</refname>
|
||||
<refpurpose>Wait for some event on a file descriptor</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>poll</function></funcdef>
|
||||
<paramdef>struct pollfd *<parameter>ufds</parameter></paramdef>
|
||||
<paramdef>unsigned int <parameter>nfds</parameter></paramdef>
|
||||
<paramdef>int <parameter>timeout</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>With the <function>poll()</function> function applications
|
||||
can suspend execution until the driver has captured data or is ready
|
||||
to accept data for output.</para>
|
||||
|
||||
<para>When streaming I/O has been negotiated this function waits
|
||||
until a buffer has been filled by the capture device and can be dequeued
|
||||
with the &VIDIOC-DQBUF; ioctl. For output devices this function waits
|
||||
until the device is ready to accept a new buffer to be queued up with
|
||||
the &VIDIOC-QBUF; ioctl for display. When buffers are already in the outgoing
|
||||
queue of the driver (capture) or the incoming queue isn't full (display)
|
||||
the function returns immediately.</para>
|
||||
|
||||
<para>On success <function>poll()</function> returns the number of
|
||||
file descriptors that have been selected (that is, file descriptors
|
||||
for which the <structfield>revents</structfield> field of the
|
||||
respective <structname>pollfd</structname> structure is non-zero).
|
||||
Capture devices set the <constant>POLLIN</constant> and
|
||||
<constant>POLLRDNORM</constant> flags in the
|
||||
<structfield>revents</structfield> field, output devices the
|
||||
<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant>
|
||||
flags. When the function timed out it returns a value of zero, on
|
||||
failure it returns <returnvalue>-1</returnvalue> and the
|
||||
<varname>errno</varname> variable is set appropriately. When the
|
||||
application did not call &VIDIOC-STREAMON; the
|
||||
<function>poll()</function> function succeeds, but sets the
|
||||
<constant>POLLERR</constant> flag in the
|
||||
<structfield>revents</structfield> field. When the
|
||||
application has called &VIDIOC-STREAMON; for a capture device but hasn't
|
||||
yet called &VIDIOC-QBUF;, the <function>poll()</function> function
|
||||
succeeds and sets the <constant>POLLERR</constant> flag in the
|
||||
<structfield>revents</structfield> field. For output devices this
|
||||
same situation will cause <function>poll()</function> to succeed
|
||||
as well, but it sets the <constant>POLLOUT</constant> and
|
||||
<constant>POLLWRNORM</constant> flags in the <structfield>revents</structfield>
|
||||
field.</para>
|
||||
|
||||
<para>If an event occurred (see &VIDIOC-DQEVENT;) then
|
||||
<constant>POLLPRI</constant> will be set in the <structfield>revents</structfield>
|
||||
field and <function>poll()</function> will return.</para>
|
||||
|
||||
<para>When use of the <function>read()</function> function has
|
||||
been negotiated and the driver does not capture yet, the
|
||||
<function>poll</function> function starts capturing. When that fails
|
||||
it returns a <constant>POLLERR</constant> as above. Otherwise it waits
|
||||
until data has been captured and can be read. When the driver captures
|
||||
continuously (as opposed to, for example, still images) the function
|
||||
may return immediately.</para>
|
||||
|
||||
<para>When use of the <function>write()</function> function has
|
||||
been negotiated and the driver does not stream yet, the
|
||||
<function>poll</function> function starts streaming. When that fails
|
||||
it returns a <constant>POLLERR</constant> as above. Otherwise it waits
|
||||
until the driver is ready for a non-blocking
|
||||
<function>write()</function> call.</para>
|
||||
|
||||
<para>If the caller is only interested in events (just
|
||||
<constant>POLLPRI</constant> is set in the <structfield>events</structfield>
|
||||
field), then <function>poll()</function> will <emphasis>not</emphasis>
|
||||
start streaming if the driver does not stream yet. This makes it
|
||||
possible to just poll for events and not for buffers.</para>
|
||||
|
||||
<para>All drivers implementing the <function>read()</function> or
|
||||
<function>write()</function> function or streaming I/O must also
|
||||
support the <function>poll()</function> function.</para>
|
||||
|
||||
<para>For more details see the
|
||||
<function>poll()</function> manual page.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, <function>poll()</function> returns the number
|
||||
structures which have non-zero <structfield>revents</structfield>
|
||||
fields, or zero if the call timed out. On error
|
||||
<returnvalue>-1</returnvalue> is returned, and the
|
||||
<varname>errno</varname> variable is set appropriately:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para>One or more of the <parameter>ufds</parameter> members
|
||||
specify an invalid file descriptor.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The driver does not support multiple read or write
|
||||
streams and the device is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EFAULT</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>ufds</parameter> references an inaccessible
|
||||
memory area.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINTR</errorcode></term>
|
||||
<listitem>
|
||||
<para>The call was interrupted by a signal.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>nfds</parameter> argument is greater
|
||||
than <constant>OPEN_MAX</constant>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,181 +0,0 @@
|
|||
<refentry id="func-read">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 read()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-read</refname>
|
||||
<refpurpose>Read from a V4L2 device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>ssize_t <function>read</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>void *<parameter>buf</parameter></paramdef>
|
||||
<paramdef>size_t <parameter>count</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>buf</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>count</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><function>read()</function> attempts to read up to
|
||||
<parameter>count</parameter> bytes from file descriptor
|
||||
<parameter>fd</parameter> into the buffer starting at
|
||||
<parameter>buf</parameter>. The layout of the data in the buffer is
|
||||
discussed in the respective device interface section, see ##. If <parameter>count</parameter> is zero,
|
||||
<function>read()</function> returns zero and has no other results. If
|
||||
<parameter>count</parameter> is greater than
|
||||
<constant>SSIZE_MAX</constant>, the result is unspecified. Regardless
|
||||
of the <parameter>count</parameter> value each
|
||||
<function>read()</function> call will provide at most one frame (two
|
||||
fields) worth of data.</para>
|
||||
|
||||
<para>By default <function>read()</function> blocks until data
|
||||
becomes available. When the <constant>O_NONBLOCK</constant> flag was
|
||||
given to the &func-open; function it
|
||||
returns immediately with an &EAGAIN; when no data is available. The
|
||||
&func-select; or &func-poll; functions
|
||||
can always be used to suspend execution until data becomes available. All
|
||||
drivers supporting the <function>read()</function> function must also
|
||||
support <function>select()</function> and
|
||||
<function>poll()</function>.</para>
|
||||
|
||||
<para>Drivers can implement read functionality in different
|
||||
ways, using a single or multiple buffers and discarding the oldest or
|
||||
newest frames once the internal buffers are filled.</para>
|
||||
|
||||
<para><function>read()</function> never returns a "snapshot" of a
|
||||
buffer being filled. Using a single buffer the driver will stop
|
||||
capturing when the application starts reading the buffer until the
|
||||
read is finished. Thus only the period of the vertical blanking
|
||||
interval is available for reading, or the capture rate must fall below
|
||||
the nominal frame rate of the video standard.</para>
|
||||
|
||||
<para>The behavior of
|
||||
<function>read()</function> when called during the active picture
|
||||
period or the vertical blanking separating the top and bottom field
|
||||
depends on the discarding policy. A driver discarding the oldest
|
||||
frames keeps capturing into an internal buffer, continuously
|
||||
overwriting the previously, not read frame, and returns the frame
|
||||
being received at the time of the <function>read()</function> call as
|
||||
soon as it is complete.</para>
|
||||
|
||||
<para>A driver discarding the newest frames stops capturing until
|
||||
the next <function>read()</function> call. The frame being received at
|
||||
<function>read()</function> time is discarded, returning the following
|
||||
frame instead. Again this implies a reduction of the capture rate to
|
||||
one half or less of the nominal frame rate. An example of this model
|
||||
is the video read mode of the bttv driver, initiating a DMA to user
|
||||
memory when <function>read()</function> is called and returning when
|
||||
the DMA finished.</para>
|
||||
|
||||
<para>In the multiple buffer model drivers maintain a ring of
|
||||
internal buffers, automatically advancing to the next free buffer.
|
||||
This allows continuous capturing when the application can empty the
|
||||
buffers fast enough. Again, the behavior when the driver runs out of
|
||||
free buffers depends on the discarding policy.</para>
|
||||
|
||||
<para>Applications can get and set the number of buffers used
|
||||
internally by the driver with the &VIDIOC-G-PARM; and &VIDIOC-S-PARM;
|
||||
ioctls. They are optional, however. The discarding policy is not
|
||||
reported and cannot be changed. For minimum requirements see <xref
|
||||
linkend="devices" />.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, the number of bytes read is returned. It is not
|
||||
an error if this number is smaller than the number of bytes requested,
|
||||
or the amount of data required for one frame. This may happen for
|
||||
example because <function>read()</function> was interrupted by a
|
||||
signal. On error, -1 is returned, and the <varname>errno</varname>
|
||||
variable is set appropriately. In this case the next read will start
|
||||
at the beginning of a new frame. Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EAGAIN</errorcode></term>
|
||||
<listitem>
|
||||
<para>Non-blocking I/O has been selected using
|
||||
O_NONBLOCK and no data was immediately available for reading.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid file
|
||||
descriptor or is not open for reading, or the process already has the
|
||||
maximum number of files open.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The driver does not support multiple read streams and the
|
||||
device is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EFAULT</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>buf</parameter> references an inaccessible
|
||||
memory area.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINTR</errorcode></term>
|
||||
<listitem>
|
||||
<para>The call was interrupted by a signal before any
|
||||
data was read.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>I/O error. This indicates some hardware problem or a
|
||||
failure to communicate with a remote device (USB camera etc.).</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <function>read()</function> function is not
|
||||
supported by this driver, not on this device, or generally not on this
|
||||
type of device.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,130 +0,0 @@
|
|||
<refentry id="func-select">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 select()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-select</refname>
|
||||
<refpurpose>Synchronous I/O multiplexing</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>select</function></funcdef>
|
||||
<paramdef>int <parameter>nfds</parameter></paramdef>
|
||||
<paramdef>fd_set *<parameter>readfds</parameter></paramdef>
|
||||
<paramdef>fd_set *<parameter>writefds</parameter></paramdef>
|
||||
<paramdef>fd_set *<parameter>exceptfds</parameter></paramdef>
|
||||
<paramdef>struct timeval *<parameter>timeout</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>With the <function>select()</function> function applications
|
||||
can suspend execution until the driver has captured data or is ready
|
||||
to accept data for output.</para>
|
||||
|
||||
<para>When streaming I/O has been negotiated this function waits
|
||||
until a buffer has been filled or displayed and can be dequeued with
|
||||
the &VIDIOC-DQBUF; ioctl. When buffers are already in the outgoing
|
||||
queue of the driver the function returns immediately.</para>
|
||||
|
||||
<para>On success <function>select()</function> returns the total
|
||||
number of bits set in the <structname>fd_set</structname>s. When the
|
||||
function timed out it returns a value of zero. On failure it returns
|
||||
<returnvalue>-1</returnvalue> and the <varname>errno</varname>
|
||||
variable is set appropriately. When the application did not call
|
||||
&VIDIOC-QBUF; or &VIDIOC-STREAMON; yet the
|
||||
<function>select()</function> function succeeds, setting the bit of
|
||||
the file descriptor in <parameter>readfds</parameter> or
|
||||
<parameter>writefds</parameter>, but subsequent &VIDIOC-DQBUF; calls
|
||||
will fail.<footnote><para>The Linux kernel implements
|
||||
<function>select()</function> like the &func-poll; function, but
|
||||
<function>select()</function> cannot return a
|
||||
<constant>POLLERR</constant>.</para>
|
||||
</footnote></para>
|
||||
|
||||
<para>When use of the <function>read()</function> function has
|
||||
been negotiated and the driver does not capture yet, the
|
||||
<function>select()</function> function starts capturing. When that
|
||||
fails, <function>select()</function> returns successful and a
|
||||
subsequent <function>read()</function> call, which also attempts to
|
||||
start capturing, will return an appropriate error code. When the
|
||||
driver captures continuously (as opposed to, for example, still
|
||||
images) and data is already available the
|
||||
<function>select()</function> function returns immediately.</para>
|
||||
|
||||
<para>When use of the <function>write()</function> function has
|
||||
been negotiated the <function>select()</function> function just waits
|
||||
until the driver is ready for a non-blocking
|
||||
<function>write()</function> call.</para>
|
||||
|
||||
<para>All drivers implementing the <function>read()</function> or
|
||||
<function>write()</function> function or streaming I/O must also
|
||||
support the <function>select()</function> function.</para>
|
||||
|
||||
<para>For more details see the <function>select()</function>
|
||||
manual page.</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, <function>select()</function> returns the number
|
||||
of descriptors contained in the three returned descriptor sets, which
|
||||
will be zero if the timeout expired. On error
|
||||
<returnvalue>-1</returnvalue> is returned, and the
|
||||
<varname>errno</varname> variable is set appropriately; the sets and
|
||||
<parameter>timeout</parameter> are undefined. Possible error codes
|
||||
are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para>One or more of the file descriptor sets specified a
|
||||
file descriptor that is not open.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The driver does not support multiple read or write
|
||||
streams and the device is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EFAULT</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>readfds</parameter>,
|
||||
<parameter>writefds</parameter>, <parameter>exceptfds</parameter> or
|
||||
<parameter>timeout</parameter> pointer references an inaccessible memory
|
||||
area.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINTR</errorcode></term>
|
||||
<listitem>
|
||||
<para>The call was interrupted by a signal.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <parameter>nfds</parameter> argument is less than
|
||||
zero or greater than <constant>FD_SETSIZE</constant>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,128 +0,0 @@
|
|||
<refentry id="func-write">
|
||||
<refmeta>
|
||||
<refentrytitle>V4L2 write()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>v4l2-write</refname>
|
||||
<refpurpose>Write to a V4L2 device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>ssize_t <function>write</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>void *<parameter>buf</parameter></paramdef>
|
||||
<paramdef>size_t <parameter>count</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>buf</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>count</parameter></term>
|
||||
<listitem>
|
||||
<para></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><function>write()</function> writes up to
|
||||
<parameter>count</parameter> bytes to the device referenced by the
|
||||
file descriptor <parameter>fd</parameter> from the buffer starting at
|
||||
<parameter>buf</parameter>. When the hardware outputs are not active
|
||||
yet, this function enables them. When <parameter>count</parameter> is
|
||||
zero, <function>write()</function> returns
|
||||
<returnvalue>0</returnvalue> without any other effect.</para>
|
||||
|
||||
<para>When the application does not provide more data in time, the
|
||||
previous video frame, raw VBI image, sliced VPS or WSS data is
|
||||
displayed again. Sliced Teletext or Closed Caption data is not
|
||||
repeated, the driver inserts a blank line instead.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, the number of bytes written are returned. Zero
|
||||
indicates nothing was written. On error, <returnvalue>-1</returnvalue>
|
||||
is returned, and the <varname>errno</varname> variable is set
|
||||
appropriately. In this case the next write will start at the beginning
|
||||
of a new frame. Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EAGAIN</errorcode></term>
|
||||
<listitem>
|
||||
<para>Non-blocking I/O has been selected using the <link
|
||||
linkend="func-open"><constant>O_NONBLOCK</constant></link> flag and no
|
||||
buffer space was available to write the data immediately.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid file
|
||||
descriptor or is not open for writing.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBUSY</errorcode></term>
|
||||
<listitem>
|
||||
<para>The driver does not support multiple write streams and the
|
||||
device is already in use.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EFAULT</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>buf</parameter> references an inaccessible
|
||||
memory area.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINTR</errorcode></term>
|
||||
<listitem>
|
||||
<para>The call was interrupted by a signal before any
|
||||
data was written.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>I/O error. This indicates some hardware problem.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EINVAL</errorcode></term>
|
||||
<listitem>
|
||||
<para>The <function>write()</function> function is not
|
||||
supported by this driver, not on this device, or generally not on this
|
||||
type of device.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,77 +0,0 @@
|
|||
<title>Generic Error Codes</title>
|
||||
|
||||
<table frame="none" pgwide="1" id="gen-errors">
|
||||
<title>Generic error codes</title>
|
||||
<tgroup cols="2">
|
||||
&cs-str;
|
||||
<tbody valign="top">
|
||||
<!-- Keep it ordered alphabetically -->
|
||||
<row>
|
||||
<entry>EAGAIN (aka EWOULDBLOCK)</entry>
|
||||
<entry>The ioctl can't be handled because the device is in state where
|
||||
it can't perform it. This could happen for example in case where
|
||||
device is sleeping and ioctl is performed to query statistics.
|
||||
It is also returned when the ioctl would need to wait
|
||||
for an event, but the device was opened in non-blocking mode.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EBADF</entry>
|
||||
<entry>The file descriptor is not a valid.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EBUSY</entry>
|
||||
<entry>The ioctl can't be handled because the device is busy. This is
|
||||
typically return while device is streaming, and an ioctl tried to
|
||||
change something that would affect the stream, or would require the
|
||||
usage of a hardware resource that was already allocated. The ioctl
|
||||
must not be retried without performing another action to fix the
|
||||
problem first (typically: stop the stream before retrying).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EFAULT</entry>
|
||||
<entry>There was a failure while copying data from/to userspace,
|
||||
probably caused by an invalid pointer reference.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EINVAL</entry>
|
||||
<entry>One or more of the ioctl parameters are invalid or out of the
|
||||
allowed range. This is a widely used error code. See the individual
|
||||
ioctl requests for specific causes.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>ENODEV</entry>
|
||||
<entry>Device not found or was removed.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>ENOMEM</entry>
|
||||
<entry>There's not enough memory to handle the desired operation.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>ENOTTY</entry>
|
||||
<entry>The ioctl is not supported by the driver, actually meaning that
|
||||
the required functionality is not available, or the file
|
||||
descriptor is not for a media device.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>ENOSPC</entry>
|
||||
<entry>On USB devices, the stream ioctl's can return this error, meaning
|
||||
that this request would overcommit the usb bandwidth reserved
|
||||
for periodic transfers (up to 80% of the USB bandwidth).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EPERM</entry>
|
||||
<entry>Permission denied. Can be returned if the device needs write
|
||||
permission, or some special capabilities is needed
|
||||
(e. g. root)</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Note 1: ioctls may return other error codes. Since errors may have side
|
||||
effects such as a driver reset, applications should abort on unexpected errors.
|
||||
</para>
|
||||
|
||||
<para>Note 2: Request-specific error codes are listed in the individual
|
||||
requests descriptions.</para>
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,172 +0,0 @@
|
|||
<programlisting>
|
||||
/* keytable.c - This program allows checking/replacing keys at IR
|
||||
|
||||
Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, version 2 of the License.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <linux/input.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "parse.h"
|
||||
|
||||
void prtcode (int *codes)
|
||||
{
|
||||
struct parse_key *p;
|
||||
|
||||
for (p=keynames;p->name!=NULL;p++) {
|
||||
if (p->value == (unsigned)codes[1]) {
|
||||
printf("scancode 0x%04x = %s (0x%02x)\n", codes[0], p->name, codes[1]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (isprint (codes[1]))
|
||||
printf("scancode %d = '%c' (0x%02x)\n", codes[0], codes[1], codes[1]);
|
||||
else
|
||||
printf("scancode %d = 0x%02x\n", codes[0], codes[1]);
|
||||
}
|
||||
|
||||
int parse_code(char *string)
|
||||
{
|
||||
struct parse_key *p;
|
||||
|
||||
for (p=keynames;p->name!=NULL;p++) {
|
||||
if (!strcasecmp(p->name, string)) {
|
||||
return p->value;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
int fd;
|
||||
unsigned int i, j;
|
||||
int codes[2];
|
||||
|
||||
if (argc<2 || argc>4) {
|
||||
printf ("usage: %s <device> to get table; or\n"
|
||||
" %s <device> <scancode> <keycode>\n"
|
||||
" %s <device> <keycode_file>\n",*argv,*argv,*argv);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((fd = open(argv[1], O_RDONLY)) < 0) {
|
||||
perror("Couldn't open input device");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
if (argc==4) {
|
||||
int value;
|
||||
|
||||
value=parse_code(argv[3]);
|
||||
|
||||
if (value==-1) {
|
||||
value = strtol(argv[3], NULL, 0);
|
||||
if (errno)
|
||||
perror("value");
|
||||
}
|
||||
|
||||
codes [0] = (unsigned) strtol(argv[2], NULL, 0);
|
||||
codes [1] = (unsigned) value;
|
||||
|
||||
if(ioctl(fd, EVIOCSKEYCODE, codes))
|
||||
perror ("EVIOCSKEYCODE");
|
||||
|
||||
if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
|
||||
prtcode(codes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc==3) {
|
||||
FILE *fin;
|
||||
int value;
|
||||
char *scancode, *keycode, s[2048];
|
||||
|
||||
fin=fopen(argv[2],"r");
|
||||
if (fin==NULL) {
|
||||
perror ("opening keycode file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Clears old table */
|
||||
for (j = 0; j < 256; j++) {
|
||||
for (i = 0; i < 256; i++) {
|
||||
codes[0] = (j << 8) | i;
|
||||
codes[1] = KEY_RESERVED;
|
||||
ioctl(fd, EVIOCSKEYCODE, codes);
|
||||
}
|
||||
}
|
||||
|
||||
while (fgets(s,sizeof(s),fin)) {
|
||||
scancode=strtok(s,"\n\t =:");
|
||||
if (!scancode) {
|
||||
perror ("parsing input file scancode");
|
||||
return -1;
|
||||
}
|
||||
if (!strcasecmp(scancode, "scancode")) {
|
||||
scancode = strtok(NULL,"\n\t =:");
|
||||
if (!scancode) {
|
||||
perror ("parsing input file scancode");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
keycode=strtok(NULL,"\n\t =:(");
|
||||
if (!keycode) {
|
||||
perror ("parsing input file keycode");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// printf ("parsing %s=%s:", scancode, keycode);
|
||||
value=parse_code(keycode);
|
||||
// printf ("\tvalue=%d\n",value);
|
||||
|
||||
if (value==-1) {
|
||||
value = strtol(keycode, NULL, 0);
|
||||
if (errno)
|
||||
perror("value");
|
||||
}
|
||||
|
||||
codes [0] = (unsigned) strtol(scancode, NULL, 0);
|
||||
codes [1] = (unsigned) value;
|
||||
|
||||
// printf("\t%04x=%04x\n",codes[0], codes[1]);
|
||||
if(ioctl(fd, EVIOCSKEYCODE, codes)) {
|
||||
fprintf(stderr, "Setting scancode 0x%04x with 0x%04x via ",codes[0], codes[1]);
|
||||
perror ("EVIOCSKEYCODE");
|
||||
}
|
||||
|
||||
if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
|
||||
prtcode(codes);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get scancode table */
|
||||
for (j = 0; j < 256; j++) {
|
||||
for (i = 0; i < 256; i++) {
|
||||
codes[0] = (j << 8) | i;
|
||||
if (!ioctl(fd, EVIOCGKEYCODE, codes) && codes[1] != KEY_RESERVED)
|
||||
prtcode(codes);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
</programlisting>
|
|
@ -1,160 +0,0 @@
|
|||
<title>Libv4l Userspace Library</title>
|
||||
<section id="libv4l-introduction">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>libv4l is a collection of libraries which adds a thin abstraction
|
||||
layer on top of video4linux2 devices. The purpose of this (thin) layer
|
||||
is to make it easy for application writers to support a wide variety of
|
||||
devices without having to write separate code for different devices in the
|
||||
same class.</para>
|
||||
<para>An example of using libv4l is provided by
|
||||
<link linkend='v4l2grab-example'>v4l2grab</link>.
|
||||
</para>
|
||||
|
||||
<para>libv4l consists of 3 different libraries:</para>
|
||||
<section>
|
||||
<title>libv4lconvert</title>
|
||||
|
||||
<para>libv4lconvert is a library that converts several
|
||||
different pixelformats found in V4L2 drivers into a few common RGB and
|
||||
YUY formats.</para>
|
||||
<para>It currently accepts the following V4L2 driver formats:
|
||||
<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-HM12"><constant>V4L2_PIX_FMT_HM12</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-JPEG"><constant>V4L2_PIX_FMT_JPEG</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-MJPEG"><constant>V4L2_PIX_FMT_MJPEG</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-MR97310A"><constant>V4L2_PIX_FMT_MR97310A</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-OV511"><constant>V4L2_PIX_FMT_OV511</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-OV518"><constant>V4L2_PIX_FMT_OV518</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-PAC207"><constant>V4L2_PIX_FMT_PAC207</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-PJPG"><constant>V4L2_PIX_FMT_PJPG</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SBGGR8"><constant>V4L2_PIX_FMT_SBGGR8</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SGBRG8"><constant>V4L2_PIX_FMT_SGBRG8</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SGRBG8"><constant>V4L2_PIX_FMT_SGRBG8</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SN9C10X"><constant>V4L2_PIX_FMT_SN9C10X</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SN9C20X-I420"><constant>V4L2_PIX_FMT_SN9C20X_I420</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SPCA501"><constant>V4L2_PIX_FMT_SPCA501</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SPCA505"><constant>V4L2_PIX_FMT_SPCA505</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SPCA508"><constant>V4L2_PIX_FMT_SPCA508</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SPCA561"><constant>V4L2_PIX_FMT_SPCA561</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-SQ905C"><constant>V4L2_PIX_FMT_SQ905C</constant></link>,
|
||||
<constant>V4L2_PIX_FMT_SRGGB8</constant>,
|
||||
<link linkend="V4L2-PIX-FMT-UYVY"><constant>V4L2_PIX_FMT_UYVY</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>,
|
||||
and <link linkend="V4L2-PIX-FMT-YVYU"><constant>V4L2_PIX_FMT_YVYU</constant></link>.
|
||||
</para>
|
||||
<para>Later on libv4lconvert was expanded to also be able to do
|
||||
various video processing functions to improve webcam video quality.
|
||||
The video processing is split in to 2 parts: libv4lconvert/control and
|
||||
libv4lconvert/processing.</para>
|
||||
|
||||
<para>The control part is used to offer video controls which can
|
||||
be used to control the video processing functions made available by
|
||||
libv4lconvert/processing. These controls are stored application wide
|
||||
(until reboot) by using a persistent shared memory object.</para>
|
||||
|
||||
<para>libv4lconvert/processing offers the actual video
|
||||
processing functionality.</para>
|
||||
</section>
|
||||
<section>
|
||||
<title>libv4l1</title>
|
||||
<para>This library offers functions that can be used to quickly
|
||||
make v4l1 applications work with v4l2 devices. These functions work exactly
|
||||
like the normal open/close/etc, except that libv4l1 does full emulation of
|
||||
the v4l1 api on top of v4l2 drivers, in case of v4l1 drivers it
|
||||
will just pass calls through.</para>
|
||||
<para>Since those functions are emulations of the old V4L1 API,
|
||||
it shouldn't be used for new applications.</para>
|
||||
</section>
|
||||
<section>
|
||||
<title>libv4l2</title>
|
||||
<para>This library should be used for all modern V4L2
|
||||
applications.</para>
|
||||
<para>It provides handles to call V4L2 open/ioctl/close/poll
|
||||
methods. Instead of just providing the raw output of the device, it enhances
|
||||
the calls in the sense that it will use libv4lconvert to provide more video
|
||||
formats and to enhance the image quality.</para>
|
||||
<para>In most cases, libv4l2 just passes the calls directly
|
||||
through to the v4l2 driver, intercepting the calls to
|
||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>,
|
||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_G_FMT</constant></link>
|
||||
<link linkend='vidioc-g-fmt'><constant>VIDIOC_S_FMT</constant></link>
|
||||
<link linkend='vidioc-enum-framesizes'><constant>VIDIOC_ENUM_FRAMESIZES</constant></link>
|
||||
and <link linkend='vidioc-enum-frameintervals'><constant>VIDIOC_ENUM_FRAMEINTERVALS</constant></link>
|
||||
in order to emulate the formats
|
||||
<link linkend="V4L2-PIX-FMT-BGR24"><constant>V4L2_PIX_FMT_BGR24</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-RGB24"><constant>V4L2_PIX_FMT_RGB24</constant></link>,
|
||||
<link linkend="V4L2-PIX-FMT-YUV420"><constant>V4L2_PIX_FMT_YUV420</constant></link>,
|
||||
and <link linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link>,
|
||||
if they aren't available in the driver.
|
||||
<link linkend='vidioc-enum-fmt'><constant>VIDIOC_ENUM_FMT</constant></link>
|
||||
keeps enumerating the hardware supported formats, plus the emulated formats
|
||||
offered by libv4l at the end.
|
||||
</para>
|
||||
<section id="libv4l-ops">
|
||||
<title>Libv4l device control functions</title>
|
||||
<para>The common file operation methods are provided by
|
||||
libv4l.</para>
|
||||
<para>Those functions operate just like glibc
|
||||
open/close/dup/ioctl/read/mmap/munmap:</para>
|
||||
<itemizedlist><listitem>
|
||||
<para>int v4l2_open(const char *file, int oflag,
|
||||
...) -
|
||||
operates like the standard <link linkend='func-open'>open()</link> function.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_close(int fd) -
|
||||
operates like the standard <link linkend='func-close'>close()</link> function.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_dup(int fd) -
|
||||
operates like the standard dup() function, duplicating a file handler.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_ioctl (int fd, unsigned long int request, ...) -
|
||||
operates like the standard <link linkend='func-ioctl'>ioctl()</link> function.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_read (int fd, void* buffer, size_t n) -
|
||||
operates like the standard <link linkend='func-read'>read()</link> function.
|
||||
</para></listitem><listitem>
|
||||
<para>void v4l2_mmap(void *start, size_t length, int prot, int flags, int fd, int64_t offset); -
|
||||
operates like the standard <link linkend='func-mmap'>mmap()</link> function.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_munmap(void *_start, size_t length); -
|
||||
operates like the standard <link linkend='func-munmap'>munmap()</link> function.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>Those functions provide additional control:</para>
|
||||
<itemizedlist><listitem>
|
||||
<para>int v4l2_fd_open(int fd, int v4l2_flags) -
|
||||
opens an already opened fd for further use through v4l2lib and possibly
|
||||
modify libv4l2's default behavior through the v4l2_flags argument.
|
||||
Currently, v4l2_flags can be <constant>V4L2_DISABLE_CONVERSION</constant>,
|
||||
to disable format conversion.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_set_control(int fd, int cid, int value) -
|
||||
This function takes a value of 0 - 65535, and then scales that range to
|
||||
the actual range of the given v4l control id, and then if the cid exists
|
||||
and is not locked sets the cid to the scaled value.
|
||||
</para></listitem><listitem>
|
||||
<para>int v4l2_get_control(int fd, int cid) -
|
||||
This function returns a value of 0 - 65535, scaled to from the actual range
|
||||
of the given v4l control id. when the cid does not exist, could not be
|
||||
accessed for some reason, or some error occurred 0 is returned.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
||||
<section>
|
||||
|
||||
<title>v4l1compat.so wrapper library</title>
|
||||
|
||||
<para>This library intercepts calls to
|
||||
open/close/ioctl/mmap/mmunmap operations and redirects them to the libv4l
|
||||
counterparts, by using LD_PRELOAD=/usr/lib/v4l1compat.so. It also
|
||||
emulates V4L1 calls via V4L2 API.</para>
|
||||
<para>It allows usage of binary legacy applications that
|
||||
still don't use libv4l.</para>
|
||||
</section>
|
||||
|
||||
</section>
|
|
@ -1,255 +0,0 @@
|
|||
<section id="lirc_dev">
|
||||
<title>LIRC Device Interface</title>
|
||||
|
||||
|
||||
<section id="lirc_dev_intro">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>The LIRC device interface is a bi-directional interface for
|
||||
transporting raw IR data between userspace and kernelspace. Fundamentally,
|
||||
it is just a chardev (/dev/lircX, for X = 0, 1, 2, ...), with a number
|
||||
of standard struct file_operations defined on it. With respect to
|
||||
transporting raw IR data to and fro, the essential fops are read, write
|
||||
and ioctl.</para>
|
||||
|
||||
<para>Example dmesg output upon a driver registering w/LIRC:</para>
|
||||
<blockquote>
|
||||
<para>$ dmesg |grep lirc_dev</para>
|
||||
<para>lirc_dev: IR Remote Control driver registered, major 248</para>
|
||||
<para>rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0</para>
|
||||
</blockquote>
|
||||
|
||||
<para>What you should see for a chardev:</para>
|
||||
<blockquote>
|
||||
<para>$ ls -l /dev/lirc*</para>
|
||||
<para>crw-rw---- 1 root root 248, 0 Jul 2 22:20 /dev/lirc0</para>
|
||||
</blockquote>
|
||||
</section>
|
||||
|
||||
<section id="lirc_read">
|
||||
<title>LIRC read fop</title>
|
||||
|
||||
<para>The lircd userspace daemon reads raw IR data from the LIRC chardev. The
|
||||
exact format of the data depends on what modes a driver supports, and what
|
||||
mode has been selected. lircd obtains supported modes and sets the active mode
|
||||
via the ioctl interface, detailed at <xref linkend="lirc_ioctl"/>. The generally
|
||||
preferred mode is LIRC_MODE_MODE2, in which packets containing an int value
|
||||
describing an IR signal are read from the chardev.</para>
|
||||
|
||||
<para>See also <ulink url="http://www.lirc.org/html/technical.html">http://www.lirc.org/html/technical.html</ulink> for more info.</para>
|
||||
</section>
|
||||
|
||||
<section id="lirc_write">
|
||||
<title>LIRC write fop</title>
|
||||
|
||||
<para>The data written to the chardev is a pulse/space sequence of integer
|
||||
values. Pulses and spaces are only marked implicitly by their position. The
|
||||
data must start and end with a pulse, therefore, the data must always include
|
||||
an uneven number of samples. The write function must block until the data has
|
||||
been transmitted by the hardware. If more data is provided than the hardware
|
||||
can send, the driver returns EINVAL.</para>
|
||||
|
||||
</section>
|
||||
|
||||
<section id="lirc_ioctl">
|
||||
<title>LIRC ioctl fop</title>
|
||||
|
||||
<para>The LIRC device's ioctl definition is bound by the ioctl function
|
||||
definition of struct file_operations, leaving us with an unsigned int
|
||||
for the ioctl command and an unsigned long for the arg. For the purposes
|
||||
of ioctl portability across 32-bit and 64-bit, these values are capped
|
||||
to their 32-bit sizes.</para>
|
||||
|
||||
<para>The following ioctls can be used to change specific hardware settings.
|
||||
In general each driver should have a default set of settings. The driver
|
||||
implementation is expected to re-apply the default settings when the device
|
||||
is closed by user-space, so that every application opening the device can rely
|
||||
on working with the default settings initially.</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_FEATURES</term>
|
||||
<listitem>
|
||||
<para>Obviously, get the underlying hardware device's features. If a driver
|
||||
does not announce support of certain features, calling of the corresponding
|
||||
ioctls is undefined.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_SEND_MODE</term>
|
||||
<listitem>
|
||||
<para>Get supported transmit mode. Only LIRC_MODE_PULSE is supported by lircd.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_REC_MODE</term>
|
||||
<listitem>
|
||||
<para>Get supported receive modes. Only LIRC_MODE_MODE2 and LIRC_MODE_LIRCCODE
|
||||
are supported by lircd.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_SEND_CARRIER</term>
|
||||
<listitem>
|
||||
<para>Get carrier frequency (in Hz) currently used for transmit.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_REC_CARRIER</term>
|
||||
<listitem>
|
||||
<para>Get carrier frequency (in Hz) currently used for IR reception.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_{G,S}ET_{SEND,REC}_DUTY_CYCLE</term>
|
||||
<listitem>
|
||||
<para>Get/set the duty cycle (from 0 to 100) of the carrier signal. Currently,
|
||||
no special meaning is defined for 0 or 100, but this could be used to switch
|
||||
off carrier generation in the future, so these values should be reserved.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_REC_RESOLUTION</term>
|
||||
<listitem>
|
||||
<para>Some receiver have maximum resolution which is defined by internal
|
||||
sample rate or data format limitations. E.g. it's common that signals can
|
||||
only be reported in 50 microsecond steps. This integer value is used by
|
||||
lircd to automatically adjust the steps tolerance value in the lircd
|
||||
config file.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_M{IN,AX}_TIMEOUT</term>
|
||||
<listitem>
|
||||
<para>Some devices have internal timers that can be used to detect when
|
||||
there's no IR activity for a long time. This can help lircd in detecting
|
||||
that a IR signal is finished and can speed up the decoding process.
|
||||
Returns an integer value with the minimum/maximum timeout that can be
|
||||
set. Some devices have a fixed timeout, in that case both ioctls will
|
||||
return the same value even though the timeout cannot be changed.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_M{IN,AX}_FILTER_{PULSE,SPACE}</term>
|
||||
<listitem>
|
||||
<para>Some devices are able to filter out spikes in the incoming signal
|
||||
using given filter rules. These ioctls return the hardware capabilities
|
||||
that describe the bounds of the possible filters. Filter settings depend
|
||||
on the IR protocols that are expected. lircd derives the settings from
|
||||
all protocols definitions found in its config file.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_GET_LENGTH</term>
|
||||
<listitem>
|
||||
<para>Retrieves the code length in bits (only for LIRC_MODE_LIRCCODE).
|
||||
Reads on the device must be done in blocks matching the bit count.
|
||||
The bit could should be rounded up so that it matches full bytes.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_{SEND,REC}_MODE</term>
|
||||
<listitem>
|
||||
<para>Set send/receive mode. Largely obsolete for send, as only
|
||||
LIRC_MODE_PULSE is supported.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_{SEND,REC}_CARRIER</term>
|
||||
<listitem>
|
||||
<para>Set send/receive carrier (in Hz). Return 0 on success.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_TRANSMITTER_MASK</term>
|
||||
<listitem>
|
||||
<para>This enables the given set of transmitters. The first transmitter
|
||||
is encoded by the least significant bit, etc. When an invalid bit mask
|
||||
is given, i.e. a bit is set, even though the device does not have so many
|
||||
transitters, then this ioctl returns the number of available transitters
|
||||
and does nothing otherwise.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_REC_TIMEOUT</term>
|
||||
<listitem>
|
||||
<para>Sets the integer value for IR inactivity timeout (cf.
|
||||
LIRC_GET_MIN_TIMEOUT and LIRC_GET_MAX_TIMEOUT). A value of 0 (if
|
||||
supported by the hardware) disables all hardware timeouts and data should
|
||||
be reported as soon as possible. If the exact value cannot be set, then
|
||||
the next possible value _greater_ than the given value should be set.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_REC_TIMEOUT_REPORTS</term>
|
||||
<listitem>
|
||||
<para>Enable (1) or disable (0) timeout reports in LIRC_MODE_MODE2. By
|
||||
default, timeout reports should be turned off.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_REC_FILTER_{,PULSE,SPACE}</term>
|
||||
<listitem>
|
||||
<para>Pulses/spaces shorter than this are filtered out by hardware. If
|
||||
filters cannot be set independently for pulse/space, the corresponding
|
||||
ioctls must return an error and LIRC_SET_REC_FILTER shall be used instead.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_MEASURE_CARRIER_MODE</term>
|
||||
<listitem>
|
||||
<para>Enable (1)/disable (0) measure mode. If enabled, from the next key
|
||||
press on, the driver will send LIRC_MODE2_FREQUENCY packets. By default
|
||||
this should be turned off.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_REC_{DUTY_CYCLE,CARRIER}_RANGE</term>
|
||||
<listitem>
|
||||
<para>To set a range use LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE
|
||||
with the lower bound first and later LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER
|
||||
with the upper bound.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_NOTIFY_DECODE</term>
|
||||
<listitem>
|
||||
<para>This ioctl is called by lircd whenever a successful decoding of an
|
||||
incoming IR signal could be done. This can be used by supporting hardware
|
||||
to give visual feedback to the user e.g. by flashing a LED.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SETUP_{START,END}</term>
|
||||
<listitem>
|
||||
<para>Setting of several driver parameters can be optimized by encapsulating
|
||||
the according ioctl calls with LIRC_SETUP_START/LIRC_SETUP_END. When a
|
||||
driver receives a LIRC_SETUP_START ioctl it can choose to not commit
|
||||
further setting changes to the hardware until a LIRC_SETUP_END is received.
|
||||
But this is open to the driver implementation and every driver must also
|
||||
handle parameter changes which are not encapsulated by LIRC_SETUP_START
|
||||
and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_WIDEBAND_RECEIVER</term>
|
||||
<listitem>
|
||||
<para>Some receivers are equipped with special wide band receiver which is intended
|
||||
to be used to learn output of existing remote.
|
||||
Calling that ioctl with (1) will enable it, and with (0) disable it.
|
||||
This might be useful of receivers that have otherwise narrow band receiver
|
||||
that prevents them to be used with some remotes.
|
||||
Wide band receiver might also be more precise
|
||||
On the other hand its disadvantage it usually reduced range of reception.
|
||||
Note: wide band receiver might be implictly enabled if you enable
|
||||
carrier reports. In that case it will be disabled as soon as you disable
|
||||
carrier reports. Trying to disable wide band receiver while carrier
|
||||
reports are active will do nothing.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
<section id="lirc_dev_errors">
|
||||
&return-value;
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
|
@ -1,105 +0,0 @@
|
|||
<partinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Laurent</firstname>
|
||||
<surname>Pinchart</surname>
|
||||
<affiliation><address><email>laurent.pinchart@ideasonboard.com</email></address></affiliation>
|
||||
<contrib>Initial version.</contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<copyright>
|
||||
<year>2010</year>
|
||||
<holder>Laurent Pinchart</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<!-- Put document revisions here, newest first. -->
|
||||
<revision>
|
||||
<revnumber>1.0.0</revnumber>
|
||||
<date>2010-11-10</date>
|
||||
<authorinitials>lp</authorinitials>
|
||||
<revremark>Initial revision</revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</partinfo>
|
||||
|
||||
<title>Media Controller API</title>
|
||||
|
||||
<chapter id="media_controller">
|
||||
<title>Media Controller</title>
|
||||
|
||||
<section id="media-controller-intro">
|
||||
<title>Introduction</title>
|
||||
<para>Media devices increasingly handle multiple related functions. Many USB
|
||||
cameras include microphones, video capture hardware can also output video,
|
||||
or SoC camera interfaces also perform memory-to-memory operations similar to
|
||||
video codecs.</para>
|
||||
<para>Independent functions, even when implemented in the same hardware, can
|
||||
be modelled as separate devices. A USB camera with a microphone will be
|
||||
presented to userspace applications as V4L2 and ALSA capture devices. The
|
||||
devices' relationships (when using a webcam, end-users shouldn't have to
|
||||
manually select the associated USB microphone), while not made available
|
||||
directly to applications by the drivers, can usually be retrieved from
|
||||
sysfs.</para>
|
||||
<para>With more and more advanced SoC devices being introduced, the current
|
||||
approach will not scale. Device topologies are getting increasingly complex
|
||||
and can't always be represented by a tree structure. Hardware blocks are
|
||||
shared between different functions, creating dependencies between seemingly
|
||||
unrelated devices.</para>
|
||||
<para>Kernel abstraction APIs such as V4L2 and ALSA provide means for
|
||||
applications to access hardware parameters. As newer hardware expose an
|
||||
increasingly high number of those parameters, drivers need to guess what
|
||||
applications really require based on limited information, thereby
|
||||
implementing policies that belong to userspace.</para>
|
||||
<para>The media controller API aims at solving those problems.</para>
|
||||
</section>
|
||||
|
||||
<section id="media-controller-model">
|
||||
<title>Media device model</title>
|
||||
<para>Discovering a device internal topology, and configuring it at runtime,
|
||||
is one of the goals of the media controller API. To achieve this, hardware
|
||||
devices and Linux Kernel interfaces are modelled as graph objects on
|
||||
an oriented graph. The object types that constitute the graph are:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>An <emphasis role="bold">entity</emphasis>
|
||||
is a basic media hardware or software building block. It can correspond to
|
||||
a large variety of logical blocks such as physical hardware devices
|
||||
(CMOS sensor for instance), logical hardware devices (a building block in
|
||||
a System-on-Chip image processing pipeline), DMA channels or physical
|
||||
connectors.</para></listitem>
|
||||
<listitem><para>An <emphasis role="bold">interface</emphasis>
|
||||
is a graph representation of a Linux Kernel userspace API interface,
|
||||
like a device node or a sysfs file that controls one or more entities
|
||||
in the graph.</para></listitem>
|
||||
<listitem><para>A <emphasis role="bold">pad</emphasis>
|
||||
is a data connection endpoint through which an entity can interact with
|
||||
other entities. Data (not restricted to video) produced by an entity
|
||||
flows from the entity's output to one or more entity inputs. Pads should
|
||||
not be confused with physical pins at chip boundaries.</para></listitem>
|
||||
<listitem><para>A <emphasis role="bold">data link</emphasis>
|
||||
is a point-to-point oriented connection between two pads, either on the
|
||||
same entity or on different entities. Data flows from a source pad to a
|
||||
sink pad.</para></listitem>
|
||||
<listitem><para>An <emphasis role="bold">interface link</emphasis>
|
||||
is a point-to-point bidirectional control connection between a Linux
|
||||
Kernel interface and an entity.m</para></listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
<!-- All non-ioctl specific data types go here. -->
|
||||
&sub-media-types;
|
||||
</chapter>
|
||||
|
||||
<appendix id="media-user-func">
|
||||
<title>Function Reference</title>
|
||||
<!-- Keep this alphabetically sorted. -->
|
||||
&sub-media-func-open;
|
||||
&sub-media-func-close;
|
||||
&sub-media-func-ioctl;
|
||||
<!-- All ioctls go here. -->
|
||||
&sub-media-ioc-device-info;
|
||||
&sub-media-ioc-g-topology;
|
||||
&sub-media-ioc-enum-entities;
|
||||
&sub-media-ioc-enum-links;
|
||||
&sub-media-ioc-setup-link;
|
||||
</appendix>
|
|
@ -1,59 +0,0 @@
|
|||
<refentry id="media-func-close">
|
||||
<refmeta>
|
||||
<refentrytitle>media close()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>media-close</refname>
|
||||
<refpurpose>Close a media device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>close</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>Closes the media device. Resources associated with the file descriptor
|
||||
are freed. The device configuration remain unchanged.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para><function>close</function> returns 0 on success. On error, -1 is
|
||||
returned, and <varname>errno</varname> is set appropriately. Possible error
|
||||
codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EBADF</errorcode></term>
|
||||
<listitem>
|
||||
<para><parameter>fd</parameter> is not a valid open file descriptor.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,73 +0,0 @@
|
|||
<refentry id="media-func-ioctl">
|
||||
<refmeta>
|
||||
<refentrytitle>media ioctl()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>media-ioctl</refname>
|
||||
<refpurpose>Control a media device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>ioctl</function></funcdef>
|
||||
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||
<paramdef>int <parameter>request</parameter></paramdef>
|
||||
<paramdef>void *<parameter>argp</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>fd</parameter></term>
|
||||
<listitem>
|
||||
<para>&fd;</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>request</parameter></term>
|
||||
<listitem>
|
||||
<para>Media ioctl request code as defined in the media.h header file,
|
||||
for example MEDIA_IOC_SETUP_LINK.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>argp</parameter></term>
|
||||
<listitem>
|
||||
<para>Pointer to a request-specific structure.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>The <function>ioctl()</function> function manipulates media device
|
||||
parameters. The argument <parameter>fd</parameter> must be an open file
|
||||
descriptor.</para>
|
||||
<para>The ioctl <parameter>request</parameter> code specifies the media
|
||||
function to be called. It has encoded in it whether the argument is an
|
||||
input, output or read/write parameter, and the size of the argument
|
||||
<parameter>argp</parameter> in bytes.</para>
|
||||
<para>Macros and structures definitions specifying media ioctl requests and
|
||||
their parameters are located in the media.h header file. All media ioctl
|
||||
requests, their respective function and parameters are specified in
|
||||
<xref linkend="media-user-func" />.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
&return-value;
|
||||
|
||||
<para>Request-specific error codes are listed in the
|
||||
individual requests descriptions.</para>
|
||||
<para>When an ioctl that takes an output or read/write parameter fails,
|
||||
the parameter remains unmodified.</para>
|
||||
</refsect1>
|
||||
</refentry>
|
|
@ -1,94 +0,0 @@
|
|||
<refentry id="media-func-open">
|
||||
<refmeta>
|
||||
<refentrytitle>media open()</refentrytitle>
|
||||
&manvol;
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>media-open</refname>
|
||||
<refpurpose>Open a media device</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
|
||||
<funcprototype>
|
||||
<funcdef>int <function>open</function></funcdef>
|
||||
<paramdef>const char *<parameter>device_name</parameter></paramdef>
|
||||
<paramdef>int <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Arguments</title>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><parameter>device_name</parameter></term>
|
||||
<listitem>
|
||||
<para>Device to be opened.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><parameter>flags</parameter></term>
|
||||
<listitem>
|
||||
<para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
|
||||
or <constant>O_RDWR</constant>. Other flags have no effect.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<para>To open a media device applications call <function>open()</function>
|
||||
with the desired device name. The function has no side effects; the device
|
||||
configuration remain unchanged.</para>
|
||||
<para>When the device is opened in read-only mode, attempts to modify its
|
||||
configuration will result in an error, and <varname>errno</varname> will be
|
||||
set to <errorcode>EBADF</errorcode>.</para>
|
||||
</refsect1>
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para><function>open</function> returns the new file descriptor on success.
|
||||
On error, -1 is returned, and <varname>errno</varname> is set appropriately.
|
||||
Possible error codes are:</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><errorcode>EACCES</errorcode></term>
|
||||
<listitem>
|
||||
<para>The requested access to the file is not allowed.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>EMFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The process already has the maximum number of files open.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENFILE</errorcode></term>
|
||||
<listitem>
|
||||
<para>The system limit on the total number of open files has been
|
||||
reached.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENOMEM</errorcode></term>
|
||||
<listitem>
|
||||
<para>Insufficient kernel memory was available.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><errorcode>ENXIO</errorcode></term>
|
||||
<listitem>
|
||||
<para>No device corresponding to this device special file exists.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
</refentry>
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче