mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
media: docs: move uAPI book to userspace-api/media
Since 2017, there is an space reserved for userspace API,
created by changeset 1d596dee38
("docs: Create a user-space API guide").
As the media subsystem was one of the first subsystems to use
Sphinx, until this patch, we were keeping things on a separate
place.
Let's just use the new location, as having all uAPI altogether
will likely make things easier for developers.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
5dfb8db56b
commit
54f38fcae5
@ -37,4 +37,4 @@ when changes are made.
|
||||
|
||||
The following CEC error injection implementations exist:
|
||||
|
||||
- Documentation/media/uapi/cec/cec-pin-error-inj.rst
|
||||
- Documentation/userspace-api/media/cec/cec-pin-error-inj.rst
|
||||
|
@ -55,15 +55,15 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
loop_cmd = $(echo-cmd) $(cmd_$(1)) || exit;
|
||||
|
||||
# $2 sphinx builder e.g. "html"
|
||||
# $3 name of the build subfolder / e.g. "media", used as:
|
||||
# $3 name of the build subfolder / e.g. "userspace-api/media", used as:
|
||||
# * dest folder relative to $(BUILDDIR) and
|
||||
# * cache folder relative to $(BUILDDIR)/.doctrees
|
||||
# $4 dest subfolder e.g. "man" for man pages at media/man
|
||||
# $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
|
||||
# $5 reST source folder relative to $(srctree)/$(src),
|
||||
# e.g. "media" for the linux-tv book-set at ./Documentation/media
|
||||
# e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
|
||||
|
||||
quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
|
||||
cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media $2 && \
|
||||
cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media $2 && \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(srctree)/$(src)/$5/$(SPHINX_CONF)) \
|
||||
$(PYTHON) $(srctree)/scripts/jobserver-exec \
|
||||
@ -120,7 +120,7 @@ refcheckdocs:
|
||||
|
||||
cleandocs:
|
||||
$(Q)rm -rf $(BUILDDIR)
|
||||
$(Q)$(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media clean
|
||||
$(Q)$(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media clean
|
||||
|
||||
dochelp:
|
||||
@echo ' Linux kernel internal documentation in different formats from ReST:'
|
||||
|
@ -10,7 +10,7 @@ if a symbol is not found at the documentation. That helps to keep the
|
||||
uAPI documentation in sync with the Kernel changes.
|
||||
The :ref:`parse_headers.pl <parse_headers>` provide a way to generate such
|
||||
cross-references. It has to be called via Makefile, while building the
|
||||
documentation. Please see ``Documentation/media/Makefile`` for an example
|
||||
documentation. Please see ``Documentation/userspace-api/media/Makefile`` for an example
|
||||
about how to use it inside the Kernel tree.
|
||||
|
||||
.. _parse_headers:
|
||||
|
@ -290,12 +290,12 @@ the FB_CAP_FOURCC bit in the fb_fix_screeninfo capabilities field.
|
||||
FOURCC definitions are located in the linux/videodev2.h header. However, and
|
||||
despite starting with the V4L2_PIX_FMT_prefix, they are not restricted to V4L2
|
||||
and don't require usage of the V4L2 subsystem. FOURCC documentation is
|
||||
available in Documentation/media/uapi/v4l/pixfmt.rst.
|
||||
available in Documentation/userspace-api/media/v4l/pixfmt.rst.
|
||||
|
||||
To select a format, applications set the grayscale field to the desired FOURCC.
|
||||
For YUV formats, they should also select the appropriate colorspace by setting
|
||||
the colorspace field to one of the colorspaces listed in linux/videodev2.h and
|
||||
documented in Documentation/media/uapi/v4l/colorspaces.rst.
|
||||
documented in Documentation/userspace-api/media/v4l/colorspaces.rst.
|
||||
|
||||
The red, green, blue and transp fields are not used with the FOURCC-based API.
|
||||
For forward compatibility reasons applications must zero those fields, and
|
||||
|
@ -1,69 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Rules to convert a .h file to inline RST documentation
|
||||
|
||||
SRC_DIR=$(srctree)/Documentation/media
|
||||
PARSER = $(srctree)/Documentation/sphinx/parse-headers.pl
|
||||
UAPI = $(srctree)/include/uapi/linux
|
||||
KAPI = $(srctree)/include/linux
|
||||
|
||||
FILES = audio.h.rst ca.h.rst dmx.h.rst frontend.h.rst net.h.rst video.h.rst \
|
||||
videodev2.h.rst media.h.rst cec.h.rst lirc.h.rst
|
||||
|
||||
TARGETS := $(addprefix $(BUILDDIR)/, $(FILES))
|
||||
|
||||
gen_rst = \
|
||||
echo ${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions; \
|
||||
${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions
|
||||
|
||||
quiet_gen_rst = echo ' PARSE $(patsubst $(srctree)/%,%,$<)'; \
|
||||
${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions
|
||||
|
||||
silent_gen_rst = ${gen_rst}
|
||||
|
||||
$(BUILDDIR)/audio.h.rst: ${UAPI}/dvb/audio.h ${PARSER} $(SRC_DIR)/audio.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/ca.h.rst: ${UAPI}/dvb/ca.h ${PARSER} $(SRC_DIR)/ca.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/dmx.h.rst: ${UAPI}/dvb/dmx.h ${PARSER} $(SRC_DIR)/dmx.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/frontend.h.rst: ${UAPI}/dvb/frontend.h ${PARSER} $(SRC_DIR)/frontend.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/net.h.rst: ${UAPI}/dvb/net.h ${PARSER} $(SRC_DIR)/net.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/video.h.rst: ${UAPI}/dvb/video.h ${PARSER} $(SRC_DIR)/video.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/videodev2.h.rst: ${UAPI}/videodev2.h ${PARSER} $(SRC_DIR)/videodev2.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/media.h.rst: ${UAPI}/media.h ${PARSER} $(SRC_DIR)/media.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/cec.h.rst: ${UAPI}/cec.h ${PARSER} $(SRC_DIR)/cec.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
$(BUILDDIR)/lirc.h.rst: ${UAPI}/lirc.h ${PARSER} $(SRC_DIR)/lirc.h.rst.exceptions
|
||||
@$($(quiet)gen_rst)
|
||||
|
||||
# Media build rules
|
||||
|
||||
.PHONY: all html epub xml latex
|
||||
|
||||
all: $(IMGDOT) $(BUILDDIR) ${TARGETS}
|
||||
html: all
|
||||
epub: all
|
||||
xml: all
|
||||
latex: $(IMGPDF) all
|
||||
linkcheck:
|
||||
|
||||
clean:
|
||||
-rm -f $(DOTTGT) $(IMGTGT) ${TARGETS} 2>/dev/null
|
||||
|
||||
$(BUILDDIR):
|
||||
$(Q)mkdir -p $@
|
@ -12,7 +12,7 @@ Linux Media Subsystem Documentation
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
media_uapi
|
||||
../userspace-api/media/index
|
||||
media_kapi
|
||||
dvb-drivers/index
|
||||
v4l-drivers/index
|
||||
|
@ -1,33 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
########################################
|
||||
Linux Media Infrastructure userspace API
|
||||
########################################
|
||||
|
||||
**Copyright** |copy| 2009-2016 : LinuxTV Developers
|
||||
|
||||
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 no
|
||||
Invariant Sections. A copy of the license is included in the chapter
|
||||
entitled "GNU Free Documentation License".
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. class:: toc-title
|
||||
|
||||
Table of Contents
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
intro
|
||||
uapi/v4l/v4l2
|
||||
uapi/dvb/dvbapi
|
||||
uapi/rc/remote_controllers
|
||||
uapi/mediactl/media-controller
|
||||
uapi/cec/cec-api
|
||||
uapi/gen-errors
|
||||
uapi/fdl-appendix
|
@ -1,116 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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 no Invariant Sections, no Front-Cover Texts
|
||||
and no Back-Cover Texts. A copy of the license is included at
|
||||
Documentation/media/uapi/fdl-appendix.rst.
|
||||
|
||||
TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
-->
|
||||
<svg id="svg2" width="235mm" height="179mm" clip-path="url(#a)" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" preserveAspectRatio="xMidYMid" version="1.2" viewBox="0 0 22648.239 17899.829" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata id="metadata1533"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><defs id="defs4"><clipPath id="a"><rect id="rect7" width="28000" height="21000"/></clipPath></defs><path id="path11" d="m10146 2636c-518.06 0-1035.1 515-1035.1 1031v4124c0 516 517.06 1032 1035.1 1032h8572.2c518.06 0 1036.1-516 1036.1-1032v-4124c0-516-518.06-1031-1036.1-1031h-8572.2z"
|
||||
fill="#fcf" style=""/><path id="path15" d="m1505.5 13443c-293 0-585 292-585 585v2340c0 293 292 586 585 586h3275c293 0 586-293 586-586v-2340c0-293-293-585-586-585h-3275z" fill="#ffc" style=""/><path id="path19" d="m517.15 22.013c-461 0-922 461-922 922v11169c0 461 461 923 922 923h3692c461 0 922-462 922-923v-11169c0-461-461-922-922-922h-3692z" fill="#e6e6e6" style=""/><path id="path23" d="m2371.5 6438h-2260v-1086h4520v1086h-2260z" fill="#ff8080" style=""/><path id="path25" d="m2371.5 6438h-2260v-1086h4520v1086h-2260z" fill="none" stroke="#3465af" style=""/><text id="text27" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan29" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan31" class="TextPosition" x="489.5459" y="6111.0132" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan33"
|
||||
fill="#000000" font-family="Serif, serif" font-size="493.88px">Audio decoder</tspan></tspan></tspan></text>
|
||||
<path id="path37" d="m2371.5 9608h-2260v-1270h4520v1270h-2260z" fill="#ff8080" style=""/><path id="path39" d="m2371.5 9608h-2260v-1270h4520v1270h-2260z" fill="none" stroke="#3465af" style=""/><text id="text41" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan43" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan45" class="TextPosition" x="527.5459" y="9189.0127" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan47" fill="#000000" font-family="Serif, serif" font-size="493.88px">Video decoder</tspan></tspan></tspan></text>
|
||||
<path id="path51" d="m2363.5 8053h-2269v-1224h4537v1224h-2268z" fill="#ff8080" style=""/><path id="path53" d="m2363.5 8053h-2269v-1224h4537v1224h-2268z" fill="none" stroke="#3465af" style=""/><text id="text55" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan57" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan59" class="TextPosition" x="481.5459" y="7657.0132" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan61" fill="#000000" font-family="Serif, serif" font-size="493.88px">Audio encoder</tspan></tspan></tspan></text>
|
||||
<path id="path65" d="m13622 10386h-3810v-1281h7620v1281h-3810z" fill="#cfc" style=""/><path id="path67" d="m13622 10386h-3810v-1281h7620v1281h-3810z" fill="none" stroke="#3465af" style=""/><text id="text69" class="TextShape" x="-2089.4541" y="-2446.187" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan71" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan73" class="TextPosition" x="10287.546" y="9960.8135" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan75" fill="#000000" font-family="Serif, serif" font-size="493.88px">Button Key/IR input logic</tspan></tspan></tspan></text>
|
||||
<path id="path79" d="m12080 12182h-2268v-1412h4536v1412h-2268z" fill="#cfe7f5" style=""/><path id="path81" d="m12080 12182h-2268v-1412h4536v1412h-2268z" fill="none" stroke="#3465af" style=""/><text id="text83" class="TextShape" x="-2089.4541" y="-2389.7871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan85" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan87" class="TextPosition" x="10792.546" y="11692.213" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan89" fill="#000000" font-family="Serif, serif" font-size="493.88px">EEPROM</tspan></tspan></tspan></text>
|
||||
<path id="path93" d="m3050.5 15498h-1563v-1715h3126v1715h-1563z" fill="#fc9" style=""/><path id="path95" d="m3050.5 15498h-1563v-1715h3126v1715h-1563z" fill="none" stroke="#3465af" style=""/><text id="text97" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan99" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan101" class="TextPosition" x="2186.5459" y="14856.013" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan103" fill="#000000" font-family="Serif, serif" font-size="493.88px">Sensor</tspan></tspan></tspan></text>
|
||||
<path id="path107" d="m4629.5 5866 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="#729fcf" style=""/><path id="path109" d="m4629.5 5866 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path113" d="m4629.5 7448 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="#729fcf" style=""/><path id="path115" d="m4629.5 7448 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path119" d="m4631.5 8936 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="#729fcf" style=""/><path id="path121" d="m4631.5 8936 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path125" d="m7872.5 11464 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"
|
||||
fill="#729fcf" style=""/><path id="path127" d="m7872.5 11464 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path131" d="m7872.5 9716.8 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="#729fcf" style=""/><path id="path133" d="m7872.5 9716.8 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path137" d="m7872.5 14994 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z" fill="#729fcf" style=""/><path id="path139" d="m7872.5 14994 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z" fill="none" stroke="#3465af" style=""/><path id="path143" d="m17534 14105 978.49 840.89-978.49 840.89v-420.86h-2960.5v420.86l-979.49-840.89 979.49-840.89v420.03h2960.5v-420.03z" fill="#729fcf" style=""/><path id="path145" d="m17534 14105 978.49
|
||||
840.89-978.49 840.89v-420.86h-2960.5v420.86l-979.49-840.89 979.49-840.89v420.03h2960.5v-420.03z" fill="none" stroke="#3465af" stroke-width="25.77" style=""/><text id="text149" class="TextShape" x="-9922.1533" y="-644.58704" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan151" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan153" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)" x="14418.847" y="15187.413" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan155" fill="#000000" font-family="Serif, serif" font-size="493.88px">System Bus</tspan></tspan></tspan></text>
|
||||
<path id="path159" d="m11062 7098h-1250v-875h2499v875h-1249z" fill="#cff" style=""/><path id="path161" d="m11062 7098h-1250v-875h2499v875h-1249z" fill="none" stroke="#3465af" style=""/><text id="text163" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan165" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan167" class="TextPosition" x="10125.546" y="6876.0132" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan169" fill="#000000" font-family="Serif, serif" font-size="493.88px">Demux</tspan></tspan></tspan></text>
|
||||
<path id="path173" d="m7906.5 6601 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z" fill="#729fcf" style=""/><path id="path175" d="m7906.5 6601 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z" fill="none" stroke="#3465af" style=""/><path id="path179" d="m7906.5 5214 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z" fill="#729fcf" style=""/><path id="path181" d="m7906.5 5214 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z" fill="none" stroke="#3465af" style=""/><path id="path185" d="m14233 5828h-4421v-1270h8841v1270h-4420z" fill="#cff" style=""/><path id="path187" d="m14233 5828h-4421v-1270h8841v1270h-4420z" fill="none" stroke="#3465af" style=""/><text id="text189" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan191" class="TextParagraph" font-family="Serif, serif"
|
||||
font-size="493.88px"><tspan id="tspan193" class="TextPosition" x="10696.546" y="5409.0132" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan195" fill="#000000" font-family="Serif, serif" font-size="493.88px">Conditional Access Module</tspan></tspan></tspan></text>
|
||||
<path id="path199" d="m2355.5 11123h-2269v-1224h4537v1224h-2268z" fill="#ff8080" style=""/><path id="path201" d="m2355.5 11123h-2269v-1224h4537v1224h-2268z" fill="none" stroke="#3465af" style=""/><text id="text203" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan205" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan207" class="TextPosition" x="511.5459" y="10727.013" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan209" fill="#000000" font-family="Serif, serif" font-size="493.88px">Video encoder</tspan></tspan></tspan></text>
|
||||
<path id="path213" d="m4631.5 10470 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="#729fcf" style=""/><path id="path215" d="m4631.5 10470 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path219" d="m18702 5381 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="#729fcf" style=""/><path id="path221" d="m18702 5381 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><text id="text225" class="TextShape" x="-1976.5541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan227" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan229" class="TextPosition" x="13.4459" y="12314.013" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan231" fill="#000000"
|
||||
font-family="Serif, serif" font-size="493.88px">Radio / Analog TV</tspan></tspan></tspan></text>
|
||||
<text id="text235" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan237" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan239" class="TextPosition" x="12866.546" y="8560.0127" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan241" fill="#000000" font-family="Serif, serif" font-size="493.88px">Digital TV</tspan></tspan></tspan></text>
|
||||
<text id="text245" class="TextShape" x="-8919.0537" y="-1373.787" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan247" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan249" class="TextPosition" x="5804.9458" y="17793.213" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan251" fill="#000000" font-family="Serif, serif" font-size="493.88px">PS.: picture is not complete: other blocks may be present</tspan></tspan></tspan></text>
|
||||
<text id="text255" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan257" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan259" class="TextPosition" x="2109.5459" y="16397.014" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan261" fill="#000000" font-family="Serif, serif" font-size="493.88px">Webcam</tspan></tspan></tspan></text>
|
||||
<path id="path265" d="m12463 13926h-2650v-1412h5299v1412h-2649z" fill="#f90" style=""/><path id="path267" d="m12463 13926h-2650v-1412h5299v1412h-2649z" fill="none" stroke="#3465af" style=""/><text id="text269" class="TextShape" x="-2089.4541" y="-2446.187" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan271" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan273" class="TextPosition" x="10175.546" y="13435.813" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan275" fill="#000000" font-family="Serif, serif" font-size="493.88px">Processing blocks</tspan></tspan></tspan></text>
|
||||
<path id="path279" d="m7872.5 13208 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="#729fcf" style=""/><path id="path281" d="m7872.5 13208 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path285" d="m4612.5 14790 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z" fill="#729fcf" style=""/><path id="path287" d="m4612.5 14790 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z" fill="none" stroke="#3465af" style=""/><text id="text291" class="TextShape" x="-2428.0542" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan293" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan295" class="TextPosition" x="20421.945" y="6628.0132" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan297" fill="#000000"
|
||||
font-family="Serif, serif" font-size="493.88px">Smartcard</tspan></tspan></tspan></text>
|
||||
<path id="path301" d="m623.32 436.01c-334.6 0-669.2 333-669.2 666v2668c0 333 334.6 666 669.2 666h18456c334.6 0 670.2-333 670.2-666v-2668c0-333-335.6-666-670.2-666h-18456z" fill="#fcf" style=""/><path id="path305" d="m3031.5 2991h-1614v-1816h3227v1816h-1613z" fill="#ff8080" style=""/><path id="path307" d="m3031.5 2991h-1614v-1816h3227v1816h-1613z" fill="none" stroke="#3465af" style=""/><text id="text309" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan311" class="TextParagraph"><tspan id="tspan313" class="TextPosition" x="2284.5459" y="1947.0129" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan315" fill="#000000" font-family="Serif, serif" font-size="493.88px">Tuner</tspan></tspan></tspan><tspan id="tspan317" class="TextParagraph"><tspan id="tspan319" class="TextPosition" x="2061.5459" y="2650.0129"
|
||||
font-family="Serif, serif" font-size="493.88px"><tspan id="tspan321" fill="#000000" font-family="Serif, serif" font-size="493.88px">FM/TV</tspan></tspan></tspan></text>
|
||||
<path id="path325" d="m812.55 1538c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z" fill="#ff8080" style=""/><path id="path327" d="m812.55 1538c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z" fill="none" stroke="#3465af" style=""/><path id="path329" d="m812.55 1538c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z" fill="#ffb3b3" style=""/><path id="path331" d="m812.55 1538c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z" fill="none" stroke="#3465af" style=""/><path id="path335" d="m813.55 2103c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z" fill="#ff8080" style=""/><path id="path337" d="m813.55 2103c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z" fill="none" stroke="#3465af" style=""/><path
|
||||
id="path339" d="m813.55 2103c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z" fill="#ffb3b3" style=""/><path id="path341" d="m813.55 2103c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z" fill="none" stroke="#3465af" style=""/><path id="path345" d="m4629.5 2032 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="#729fcf" style=""/><path id="path347" d="m4629.5 2032 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" fill="none" stroke="#3465af" style=""/><path id="path351" d="m7889.5 1986 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" fill="#729fcf" style=""/><path id="path353" d="m7889.5 1986 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" fill="none" stroke="#3465af" style=""/><path id="path357" d="m14411 4025h-4500v-1389h9e3v1389h-4500z" fill="#cff" style=""/><path id="path359" d="m14411
|
||||
4025h-4500v-1389h9e3v1389h-4500z" fill="none" stroke="#3465af" style=""/><text id="text361" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan363" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan365" class="TextPosition" x="9961.5459" y="3546.0129" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan367" fill="#000000" font-family="Serif, serif" font-size="493.88px">Satellite Equipment Control (SEC)</tspan></tspan></tspan></text>
|
||||
<path id="path371" d="m11311 2436h-1400v-1e3h2800v1e3h-1400z" fill="#cff" style=""/><path id="path373" d="m11311 2436h-1400v-1e3h2800v1e3h-1400z" fill="none" stroke="#3465af" style=""/><text id="text375" class="TextShape" x="-2089.4541" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan377" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan379" class="TextPosition" x="10375.546" y="2152.0129" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan381" fill="#000000" font-family="Serif, serif" font-size="493.88px">Demod</tspan></tspan></tspan></text>
|
||||
<path id="path385" d="m7889.5 3287 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" fill="#729fcf" style=""/><path id="path387" d="m7889.5 3287 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" fill="none" stroke="#3465af" style=""/><path id="path389" d="m7906.5 9121v7302h-1270v-14605h1270v7303z" fill="#ff9" style=""/><path id="path391" d="m7906.5 9121v7302h-1270v-14605h1270v7303z" fill="none" stroke="#3465af" style=""/><text id="text393" class="TextShape" transform="rotate(-90)" x="-20792.584" y="-6589.021" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan395" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan397" class="TextPosition" transform="matrix(0,-1,1,0,-4473,23627)" x="-11215.646" y="7460.9849" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan399" fill="#000000" font-family="Serif,
|
||||
serif" font-size="493.88px">I2C Bus (control bus)</tspan></tspan></tspan></text>
|
||||
<text id="text403" class="TextShape" x="-2145.854" y="-2163.9871" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan405" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan407" class="TextPosition" x="7245.146" y="1114.0129" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan409" fill="#000000" font-family="Serif, serif" font-size="493.88px">Digital TV Frontend</tspan></tspan></tspan></text>
|
||||
<path id="path415" d="m863.15 636.14c-18.27 0-35.525 0.99994-53.795 2.9998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path417" d="m776.87 644.14c-17.255 2.9998-35.525 6.9996-52.78 11.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path419" d="m692.63 666.14c-16.24 5.9996-33.495 11.999-49.735 19.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path421" d="m613.46 700.14c-15.225 7.9995-31.465 16.999-46.69 26.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path423" d="m539.36 745.14c-14.21 9.9994-28.42 20.999-42.63 31.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path425" d="m471.36 798.14c-13.195 11.999-26.39 23.999-38.57 36.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path427" d="m410.46 859.13c-11.165 12.999-22.33
|
||||
26.998-33.495 40.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path429" d="m357.68 927.13c-10.15 13.999-19.285 28.998-28.42 44.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path431" d="m314.03 1000.1c-8.12 15.999-15.225 31.998-22.33 48.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path433" d="m280.54 1079.1c-5.075 16.999-10.15 33.998-14.21 50.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path435" d="m260.24 1162.1c-3.045 17.999-5.075 34.998-6.09 52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path437" d="m254.15 1247.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path439" d="m254.15 1333.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path441" d="m254.15 1418.1v52.997"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path443" d="m254.15 1504.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path445" d="m254.15 1589.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path447" d="m254.15 1675.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path449" d="m254.15 1760.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path451" d="m254.15 1845.1v53.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path453" d="m254.15 1931.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path455" d="m254.15 2016.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path457" d="m254.15 2102.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path459" d="m254.15 2187.1v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path461" d="m254.15 2273v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path463" d="m254.15 2358v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path465" d="m254.15 2443v53.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path467" d="m254.15 2529v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path469" d="m254.15 2614v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path471" d="m254.15 2700v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path473" d="m254.15 2785v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path475" d="m254.15 2871v52.997" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path477" d="m254.15 2956v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path479" d="m254.15 3041v53.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path481" d="m254.15 3127v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path483" d="m254.15 3212v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path485" d="m254.15 3298v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path487" d="m254.15 3383v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path489" d="m254.15 3469v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path491" d="m254.15 3554v52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path493"
|
||||
d="m254.15 3639c0 17.999 1.015 35.998 3.045 52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path495" d="m262.27 3724c4.06 17.999 8.12 34.998 13.195 51.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path497" d="m285.61 3807c6.09 15.999 13.195 32.998 20.3 48.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path499" d="m321.14 3885c8.12 14.999 17.255 30.998 27.405 45.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path501" d="m366.81 3957.9c10.15 13.999 21.315 27.998 32.48 41.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path503" d="m420.61 4023.9c12.18 12.999 25.375 25.998 38.57 37.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path505" d="m483.54 4083.9c13.195 10.999 27.405 22.999 41.615 32.998" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path507" d="m552.56 4135.9c14.21 9.9994 29.435 18.999 45.675 26.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path509" d="m627.67 4178.9c15.225 6.9996 32.48 14.999 48.72 20.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path511" d="m707.85 4210.9c17.255 4.9997 34.51 9.9994 51.765 13.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path513" d="m792.1 4230.9c17.255 1.9999 35.525 3.9998 53.795 4.9997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path515" d="m878.37 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path517" d="m964.65 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path519" d="m1051.9 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path521" d="m1138.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path523" d="m1225.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path525" d="m1311.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path527" d="m1398.1 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path529" d="m1485.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path531" d="m1571.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path533" d="m1658.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path535" d="m1745.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path537"
|
||||
d="m1832.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path539" d="m1918.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path541" d="m2005 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path543" d="m2092.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path545" d="m2178.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path547" d="m2265.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path549" d="m2352.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path551" d="m2439.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path553" d="m2525.7 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path555" d="m2612 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path557" d="m2699.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path559" d="m2785.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path561" d="m2872.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path563" d="m2959.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path565" d="m3046.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path567" d="m3132.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path569" d="m3220 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path571"
|
||||
d="m3306.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path573" d="m3392.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path575" d="m3479.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path577" d="m3566.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path579" d="m3653.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path581" d="m3739.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path583" d="m3826.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path585" d="m3913.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path587" d="m3999.5 4235.9h53.795" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path589" d="m4086.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path591" d="m4173.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path593" d="m4260.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path595" d="m4346.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path597" d="m4433.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path599" d="m4520.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path601" d="m4606.5 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path603" d="m4693.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path605" d="m4780 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path607" d="m4867.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path609" d="m4953.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path611" d="m5040.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path613" d="m5127.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path615" d="m5213.4 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path617" d="m5300.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path619" d="m5387 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path621" d="m5474.3 4235.9h53.795"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path623" d="m5560.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path625" d="m5647.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path627" d="m5734.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path629" d="m5820.4 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path631" d="m5907.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path633" d="m5994 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path635" d="m6081.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path637" d="m6167.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path639" d="m6254.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path641" d="m6341.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path643" d="m6427.4 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path645" d="m6514.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path647" d="m6600.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path649" d="m6688.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path651" d="m6774.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path653" d="m6861.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path655" d="m6948.1
|
||||
4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path657" d="m7035.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path659" d="m7121.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path661" d="m7207.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path663" d="m7295.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path665" d="m7381.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path667" d="m7468.8 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path669" d="m7555 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path671" d="m7642.3 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path673" d="m7728.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path675" d="m7814.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path677" d="m7902.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path679" d="m7988.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path681" d="m8075.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path683" d="m8162 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path685" d="m8249.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path687" d="m8335.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path689"
|
||||
d="m8421.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path691" d="m8509.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path693" d="m8595.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path695" d="m8682.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path697" d="m8769 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path699" d="m8856.3 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path701" d="m8942.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path703" d="m9028.8 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path705" d="m9116.1 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path707" d="m9202.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path709" d="m9289.7 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path711" d="m9376 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path713" d="m9463.2 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path715" d="m9549.5 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path717" d="m9635.8 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path719" d="m9723.1 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path721" d="m9809.4 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path723"
|
||||
d="m9896.6 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path725" d="m9982.9 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path727" d="m10070 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path729" d="m10156 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path731" d="m10243 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path733" d="m10330 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path735" d="m10416 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path737" d="m10504 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path739" d="m10590 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path741" d="m10677 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path743" d="m10763 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path745" d="m10850 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path747" d="m10937 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path749" d="m11023 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path751" d="m11111 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path753" d="m11197 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path755" d="m11284 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path757" d="m11370
|
||||
4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path759" d="m11458 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path761" d="m11544 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path763" d="m11630 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path765" d="m11718 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path767" d="m11804 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path769" d="m11891 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path771" d="m11977 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path773" d="m12065 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path775" d="m12151 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path777" d="m12237 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path779" d="m12325 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path781" d="m12411 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path783" d="m12498 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path785" d="m12584 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path787" d="m12672 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path789" d="m12758 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path791"
|
||||
d="m12844 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path793" d="m12931 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path795" d="m13018 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path797" d="m13105 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path799" d="m13191 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path801" d="m13279 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path803" d="m13365 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path805" d="m13451 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path807" d="m13538 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path809" d="m13625 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path811" d="m13712 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path813" d="m13798 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path815" d="m13886 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path817" d="m13972 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path819" d="m14058 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path821" d="m14145 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path823" d="m14232 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path825" d="m14319
|
||||
4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path827" d="m14405 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path829" d="m14493 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path831" d="m14579 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path833" d="m14665 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path835" d="m14752 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path837" d="m14839 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path839" d="m14926 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path841" d="m15012 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path843" d="m15100 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path845" d="m15186 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path847" d="m15272 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path849" d="m15359 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path851" d="m15446 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path853" d="m15533 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path855" d="m15619 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path857" d="m15707 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path859" d="m15793
|
||||
4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path861" d="m15880 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path863" d="m15966 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path865" d="m16053 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path867" d="m16140 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path869" d="m16226 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path871" d="m16313 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path873" d="m16400 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path875" d="m16487 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path877" d="m16573 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path879" d="m16660 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path881" d="m16747 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path883" d="m16833 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path885" d="m16920 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path887" d="m17007 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path889" d="m17094 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path891" d="m17180 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path893"
|
||||
d="m17267 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path895" d="m17354 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path897" d="m17440 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path899" d="m17527 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path901" d="m17614 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path903" d="m17701 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path905" d="m17787 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path907" d="m17874 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path909" d="m17961 4235.9h53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path911" d="m18047 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path913" d="m18134 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path915" d="m18221 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path917" d="m18308 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path919" d="m18394 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path921" d="m18481 4235.9h54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path923" d="m18568 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path925" d="m18654 4235.9h53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path927" d="m18741
|
||||
4235.9c17.255-0.9999 35.525-1.9999 53.795-4.9997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path929" d="m18828 4225.9c17.255-3.9998 34.51-8.9995 51.765-13.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path931" d="m18911 4200.9c16.24-5.9996 32.48-12.999 48.72-20.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path933" d="m18989 4164.9c15.225-7.9996 31.465-16.999 45.675-26.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path935" d="m19062 4118.9c14.21-9.9994 28.42-20.999 42.63-31.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path937" d="m19129 4064.9c13.195-11.999 25.375-24.998 37.555-37.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path939" d="m19189 4002.9c11.165-13.999 22.33-27.998 33.495-41.998" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path941" d="m19241 3933.9c10.15-14.999 19.285-29.998 27.405-44.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path943" d="m19283 3860c7.105-15.999 14.21-32.998 20.3-48.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path945" d="m19315 3780c5.075-16.999 9.135-33.998 13.195-50.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path947" d="m19333 3697c2.03-17.999 4.06-34.998 4.06-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path949" d="m19337 3612v-53.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path951" d="m19337 3526v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path953" d="m19337 3441v-52.997" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path955" d="m19337 3355v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path957" d="m19337 3270v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path959" d="m19337 3184v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path961" d="m19337 3099v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path963" d="m19337 3014v-53.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path965" d="m19337 2928v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path967" d="m19337 2843v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path969" d="m19337 2757v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path971" d="m19337 2672v-52.997" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path973" d="m19337 2586v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path975" d="m19337 2501v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path977" d="m19337 2415v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path979" d="m19337 2330v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path981" d="m19337 2245v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path983" d="m19337 2159.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path985" d="m19337 2074.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path987" d="m19337 1988.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path989" d="m19337 1903.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path991" d="m19337 1817.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path993" d="m19337 1732.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path995" d="m19337 1647.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path997" d="m19337 1561.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path999" d="m19337 1476.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1001" d="m19337 1390.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1003" d="m19337 1305.1v-52.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1005" d="m19337
|
||||
1219.1c-1.015-16.999-3.045-34.998-5.075-51.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1007" d="m19326 1135.1c-4.06-16.999-8.12-34.998-14.21-50.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1009" d="m19301 1053.1c-6.09-15.999-13.195-32.998-21.315-48.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1011" d="m19264 976.12c-9.135-15.999-18.27-30.998-28.42-45.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1013" d="m19216 904.13c-10.15-13.999-21.315-27.998-33.495-41.997" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1015" d="m19161 838.13c-12.18-12.999-24.36-24.998-37.555-36.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1017" d="m19098 780.14c-14.21-11.999-28.42-21.999-42.63-32.998" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path1019" d="m19028 729.14c-15.225-8.9995-30.45-17.999-46.69-26.998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1021" d="m18951 688.14c-16.24-7.9995-32.48-13.999-49.735-19.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1023" d="m18870 657.14c-17.255-4.9997-34.51-8.9995-51.765-11.999" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1025" d="m18786 640.14c-18.27-2.9998-35.525-3.9998-53.795-3.9998" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1027" d="m18700 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1029" d="m18612 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1031" d="m18526 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1033" d="m18439 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1035" d="m18353 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1037" d="m18266 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1039" d="m18179 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1041" d="m18093 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1043" d="m18005 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1045" d="m17919 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1047" d="m17832 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path1049" d="m17746 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1051" d="m17659 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1053" d="m17572 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1055" d="m17486 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1057" d="m17399 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1059" d="m17312 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1061" d="m17225 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1063" d="m17139 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1065" d="m17052 636.14h-54.81"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1067" d="m16965 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1069" d="m16879 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1071" d="m16792 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1073" d="m16705 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1075" d="m16618 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1077" d="m16532 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1079" d="m16445 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1081" d="m16358 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1083" d="m16272 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1085" d="m16185 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1087" d="m16098 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1089" d="m16011 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1091" d="m15925 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1093" d="m15837 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1095" d="m15751 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1097" d="m15665 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path1099" d="m15578 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1101" d="m15491 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1103" d="m15404 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1105" d="m15318 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1107" d="m15230 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1109" d="m15144 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1111" d="m15058 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1113" d="m14971 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1115" d="m14884 636.14h-53.795"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1117" d="m14797 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1119" d="m14711 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1121" d="m14624 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1123" d="m14537 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1125" d="m14451 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1127" d="m14364 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1129" d="m14277 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1131" d="m14190 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1133" d="m14104 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1135" d="m14017 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1137" d="m13930 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1139" d="m13844 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1141" d="m13757 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1143" d="m13670 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1145" d="m13583 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1147" d="m13497 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path1149" d="m13410 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1151" d="m13323 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1153" d="m13237 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1155" d="m13150 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1157" d="m13063 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1159" d="m12976 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1161" d="m12890 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1163" d="m12803 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1165" d="m12716 636.14h-53.795"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1167" d="m12630 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1169" d="m12543 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1171" d="m12456 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1173" d="m12369 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1175" d="m12283 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1177" d="m12196 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1179" d="m12109 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1181" d="m12022 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1183" d="m11936 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1185" d="m11850 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1187" d="m11762 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1189" d="m11676 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1191" d="m11589 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1193" d="m11502 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1195" d="m11415 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1197" d="m11329 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path1199" d="m11243 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1201" d="m11155 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1203" d="m11069 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1205" d="m10982 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1207" d="m10895 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1209" d="m10808 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1211" d="m10722 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1213" d="m10636 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1215" d="m10548 636.14h-53.795"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1217" d="m10462 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1219" d="m10375 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1221" d="m10288 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1223" d="m10201 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1225" d="m10115 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1227" d="m10029 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1229" d="m9941.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1231" d="m9855 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1233" d="m9767.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1235" d="m9681.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1237" d="m9594.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1239" d="m9507.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1241" d="m9421.6 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1243" d="m9334.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1245" d="m9248.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1247" d="m9160.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path1249" d="m9074.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1251" d="m8987.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1253" d="m8900.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1255" d="m8814.7 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1257" d="m8727.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1259" d="m8641.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1261" d="m8553.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1263" d="m8467.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1265"
|
||||
d="m8380.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1267" d="m8294 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1269" d="m8207.7 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1271" d="m8120.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1273" d="m8034.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1275" d="m7946.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1277" d="m7860.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1279" d="m7773.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1281" d="m7687 636.14h-53.795" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path1283" d="m7599.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1285" d="m7513.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1287" d="m7427.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1289" d="m7339.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1291" d="m7253.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1293" d="m7166.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1295" d="m7080 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1297" d="m6992.7 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1299" d="m6906.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1301" d="m6820.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1303" d="m6732.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1305" d="m6646.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1307" d="m6559.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1309" d="m6473.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1311" d="m6385.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1313" d="m6299.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path1315" d="m6213.2 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1317" d="m6125.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1319" d="m6039.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1321" d="m5952.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1323" d="m5866.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1325" d="m5778.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1327" d="m5692.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1329" d="m5606.2 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1331"
|
||||
d="m5519 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1333" d="m5432.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1335" d="m5345.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1337" d="m5259.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1339" d="m5171.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1341" d="m5085.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1343" d="m4999.3 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1345" d="m4912 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1347" d="m4825.7 636.14h-53.795" fill="none"
|
||||
stroke="#3465af" stroke-width="28.432" style=""/><path id="path1349" d="m4738.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1351" d="m4652.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1353" d="m4564.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1355" d="m4478.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1357" d="m4392.3 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1359" d="m4305 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1361" d="m4218.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1363" d="m4131.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432"
|
||||
style=""/><path id="path1365" d="m4045.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1367" d="m3957.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1369" d="m3871.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1371" d="m3785.3 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1373" d="m3698 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1375" d="m3611.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1377" d="m3524.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1379" d="m3438.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1381"
|
||||
d="m3350.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1383" d="m3264.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1385" d="m3177.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1387" d="m3091.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1389" d="m3004.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1391" d="m2917.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1393" d="m2831.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1395" d="m2743.9 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1397" d="m2657.7 636.14h-53.795"
|
||||
fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1399" d="m2570.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1401" d="m2484.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1403" d="m2397.8 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1405" d="m2310.5 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1407" d="m2224.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1409" d="m2137 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1411" d="m2050.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1413" d="m1963.4 636.14h-53.795" fill="none" stroke="#3465af"
|
||||
stroke-width="28.432" style=""/><path id="path1415" d="m1877.1 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1417" d="m1790.9 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1419" d="m1703.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1421" d="m1617.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1423" d="m1530 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1425" d="m1443.7 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1427" d="m1356.4 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1429" d="m1270.2 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path
|
||||
id="path1431" d="m1183.9 636.14h-54.81" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1433" d="m1096.6 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1435" d="m1010.3 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><path id="path1437" d="m923.03 636.14h-53.795" fill="none" stroke="#3465af" stroke-width="28.432" style=""/><g id="g4044" style=""><rect id="rect1441" x="21109" y="4753.1" width="1213.6" height="1100.7" fill="#f3e777" style=""/><path id="path1443" d="m20656 5536.4v-405.46l150.7-169.16c82.886-93.039 170.53-186.62 194.77-207.96l44.069-38.798 783.23-0.086 783.23-0.086v1227h-1956v-405.46zm1027.7 136.98v-78.372l-169.91 4.925-169.91 4.9249-5.09 45.854c-8.249 74.303 46.711 101.04 207.69 101.04h137.21v-78.372zm235.86-262.94 4.495-341.31 207.2-8.6408 207.2-8.6408
|
||||
5.144-46.443c9.596-86.615-41.863-102.05-322.02-96.607l-246.71 4.7956-4.438 419.08-4.439 419.08h149.08l4.494-341.31zm391.3 313.72c26.41-19.286 36.255-41.399 32.697-73.447l-5.09-45.854h-348.1l-5.38 48.984c-9.97 90.771 0.993 97.91 150.36 97.91 99.305 0 148.27-7.6982 175.52-27.594zm-627.16-274.84v-77.768h-348.1v66.246c0 36.436 4.973 71.431 11.051 77.768 6.078 6.3366 84.401 11.521 174.05 11.521h163v-77.768zm659.89-4.9154 5.125-74.042-179.18 4.9155-179.18 4.9155-5.38 48.984c-10.473 95.348-2.259 99.57 183.28 94.197l170.2-4.9284 5.125-74.042zm-659.89-237.63v-78.372l-169.91 4.925-169.91 4.925-5.097 73.447-5.097 73.447h350v-78.372zm659.86 4.925-5.097-73.447h-348.1l-5.38 48.984c-10.289 93.673-2.146 97.91 188.15 97.91h175.52l-5.097-73.447zm-659.86-228.98v-77.768h-137.21c-97.358 0-147.91 7.8138-174.05 26.902-34.952 25.523-49.645 92.242-25.79 117.11 6.078 6.3366 84.401 11.521 174.05
|
||||
11.521h163v-77.768z" fill="#ca4677" style=""/></g><text id="text1489" class="TextShape" transform="scale(1.1036 .90616)" x="171.41566" y="9913.7109" fill-rule="evenodd" font-family="Serif, serif" font-size="493.87px" stroke-linejoin="round" stroke-width="28.222"><tspan id="tspan1491" class="TextParagraph" font-family="Serif, serif" font-size="493.87px"/></text>
|
||||
<g id="g4048" style=""><rect id="rect1447" x="18797" y="13737" width="2320.7" height="2342.4" fill="#6076b3" style=""/><rect id="rect1451" x="18532" y="13817" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1453" x="18532" y="14076" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1455" x="18532" y="14334" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1457" x="18532" y="14593" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1459" x="18532" y="14851" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round"
|
||||
stroke-width="28.222" style=""/><rect id="rect1461" x="18532" y="15110" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1463" x="18532" y="15368" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1465" x="18532" y="15626" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1467" x="18532" y="15884" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1469" x="21080" y="13783" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1471" x="21080" y="14041" width="302.7"
|
||||
height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1473" x="21080" y="14299" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1475" x="21080" y="14558" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1477" x="21080" y="14816" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1479" x="21080" y="15075" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1481" x="21080" y="15333" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round"
|
||||
stroke-width="28.222" style=""/><rect id="rect1483" x="21080" y="15592" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><rect id="rect1485" x="21080" y="15850" width="302.7" height="137.79" fill="#e0ee2c" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><text id="text1493" transform="scale(1.1036 .90616)" x="17205.688" y="16777.641" fill="#000000" fill-rule="evenodd" font-family="Sans" font-size="856.96px" letter-spacing="0px" stroke-linejoin="round" stroke-width="28.222" word-spacing="0px" style="line-height:125%" line-height="125%" xml:space="preserve"><tspan id="tspan1495" x="17205.688" y="16777.641" style="">CPU</tspan></text>
|
||||
</g><text id="text1499" class="TextShape" x="-11700.553" y="565.61298" fill-rule="evenodd" font-family="Serif, serif" font-size="493.88px" stroke-linejoin="round" stroke-width="28.222"><tspan id="tspan1501" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1503" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)" x="12640.447" y="16397.613" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1505" fill="#000000" font-family="Serif, serif" font-size="493.88px">PCI, USB, SPI, I2C, ...</tspan></tspan></tspan></text>
|
||||
<path id="path1511" d="m12408 15562h-1115.1v-1420.3h2230.2v1420.3h-1115.1z" fill="#cfe7f5" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" style=""/><path id="path1513" d="m12408 15562h-1115.1v-1420.3h2230.2v1420.3h-1115.1z" fill="none" stroke="#3465af" stroke-linejoin="round" stroke-width="19.847" style=""/><text id="text1515" class="TextShape" x="-1394.0863" y="590.73016" fill-rule="evenodd" font-family="Serif, serif" font-size="493.88px" stroke-linejoin="round" stroke-width="28.222"><tspan id="tspan1517" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1519" class="TextPosition" x="11487.915" y="14672.743" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1521" fill="#000000" font-family="Serif, serif" font-size="493.88px">Bridge</tspan></tspan></tspan></text>
|
||||
<text id="text1523" class="TextShape" x="-1450.5308" y="1324.5078" fill-rule="evenodd" font-family="Serif, serif" font-size="493.88px" stroke-linejoin="round" stroke-width="28.222"><tspan id="tspan1525" class="TextParagraph" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1527" class="TextPosition" x="11431.471" y="15406.52" font-family="Serif, serif" font-size="493.88px"><tspan id="tspan1529" fill="#000000" font-family="Serif, serif" font-size="493.88px"> DMA</tspan></tspan></tspan></text>
|
||||
</svg>
|
Before Width: | Height: | Size: 81 KiB |
@ -1,54 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
.. _cec:
|
||||
|
||||
#########################################
|
||||
Part V - Consumer Electronics Control API
|
||||
#########################################
|
||||
|
||||
This part describes the CEC: Consumer Electronics Control
|
||||
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. class:: toc-title
|
||||
|
||||
Table of Contents
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:numbered:
|
||||
|
||||
cec-intro
|
||||
cec-funcs
|
||||
cec-pin-error-inj
|
||||
cec-header
|
||||
|
||||
|
||||
**********************
|
||||
Revision and Copyright
|
||||
**********************
|
||||
Authors:
|
||||
|
||||
- Verkuil, Hans <hverkuil-cisco@xs4all.nl>
|
||||
|
||||
- Initial version.
|
||||
|
||||
**Copyright** |copy| 2016 : Hans Verkuil
|
||||
|
||||
****************
|
||||
Revision History
|
||||
****************
|
||||
|
||||
:revision: 1.0.0 / 2016-03-17 (*hv*)
|
||||
|
||||
Initial revision
|
@ -1,54 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-func-close:
|
||||
|
||||
***********
|
||||
cec close()
|
||||
***********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
cec-close - Close a cec device
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
.. c:function:: int close( int fd )
|
||||
:name: cec-close
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Closes the cec device. Resources associated with the file descriptor are
|
||||
freed. The device configuration remain unchanged.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
:c:func:`close() <cec-close>` returns 0 on success. On error, -1 is returned, and
|
||||
``errno`` is set appropriately. Possible error codes are:
|
||||
|
||||
``EBADF``
|
||||
``fd`` is not a valid open file descriptor.
|
@ -1,73 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-func-ioctl:
|
||||
|
||||
***********
|
||||
cec ioctl()
|
||||
***********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
cec-ioctl - Control a cec device
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, void *argp )
|
||||
:name: cec-ioctl
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``request``
|
||||
CEC ioctl request code as defined in the cec.h header file, for
|
||||
example :ref:`CEC_ADAP_G_CAPS <CEC_ADAP_G_CAPS>`.
|
||||
|
||||
``argp``
|
||||
Pointer to a request-specific structure.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :c:func:`ioctl() <cec-ioctl>` function manipulates cec device parameters. The
|
||||
argument ``fd`` must be an open file descriptor.
|
||||
|
||||
The ioctl ``request`` 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 ``argp`` in bytes.
|
||||
|
||||
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
|
||||
:ref:`cec-user-func`.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
Request-specific error codes are listed in the individual requests
|
||||
descriptions.
|
||||
|
||||
When an ioctl that takes an output or read/write parameter fails, the
|
||||
parameter remains unmodified.
|
@ -1,85 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-func-open:
|
||||
|
||||
**********
|
||||
cec open()
|
||||
**********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
cec-open - Open a cec device
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
.. c:function:: int open( const char *device_name, int flags )
|
||||
:name: cec-open
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``device_name``
|
||||
Device to be opened.
|
||||
|
||||
``flags``
|
||||
Open flags. Access mode must be ``O_RDWR``.
|
||||
|
||||
When the ``O_NONBLOCK`` flag is given, the
|
||||
:ref:`CEC_RECEIVE <CEC_RECEIVE>` and :ref:`CEC_DQEVENT <CEC_DQEVENT>` ioctls
|
||||
will return the ``EAGAIN`` error code when no message or event is available, and
|
||||
ioctls :ref:`CEC_TRANSMIT <CEC_TRANSMIT>`,
|
||||
:ref:`CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` and
|
||||
:ref:`CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
all return 0.
|
||||
|
||||
Other flags have no effect.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To open a cec device applications call :c:func:`open() <cec-open>` with the
|
||||
desired device name. The function has no side effects; the device
|
||||
configuration remain unchanged.
|
||||
|
||||
When the device is opened in read-only mode, attempts to modify its
|
||||
configuration will result in an error, and ``errno`` will be set to
|
||||
EBADF.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
:c:func:`open() <cec-open>` returns the new file descriptor on success. On error,
|
||||
-1 is returned, and ``errno`` is set appropriately. Possible error codes
|
||||
include:
|
||||
|
||||
``EACCES``
|
||||
The requested access to the file is not allowed.
|
||||
|
||||
``EMFILE``
|
||||
The process already has the maximum number of files open.
|
||||
|
||||
``ENFILE``
|
||||
The system limit on the total number of open files has been reached.
|
||||
|
||||
``ENOMEM``
|
||||
Insufficient kernel memory was available.
|
||||
|
||||
``ENXIO``
|
||||
No device corresponding to this device special file exists.
|
@ -1,85 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-func-poll:
|
||||
|
||||
**********
|
||||
cec poll()
|
||||
**********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
cec-poll - Wait for some event on a file descriptor
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <sys/poll.h>
|
||||
|
||||
|
||||
.. c:function:: int poll( struct pollfd *ufds, unsigned int nfds, int timeout )
|
||||
:name: cec-poll
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``ufds``
|
||||
List of FD events to be watched
|
||||
|
||||
``nfds``
|
||||
Number of FD events at the \*ufds array
|
||||
|
||||
``timeout``
|
||||
Timeout to wait for events
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With the :c:func:`poll() <cec-poll>` function applications can wait for CEC
|
||||
events.
|
||||
|
||||
On success :c:func:`poll() <cec-poll>` returns the number of file descriptors
|
||||
that have been selected (that is, file descriptors for which the
|
||||
``revents`` field of the respective struct :c:type:`pollfd`
|
||||
is non-zero). CEC devices set the ``POLLIN`` and ``POLLRDNORM`` flags in
|
||||
the ``revents`` field if there are messages in the receive queue. If the
|
||||
transmit queue has room for new messages, the ``POLLOUT`` and
|
||||
``POLLWRNORM`` flags are set. If there are events in the event queue,
|
||||
then the ``POLLPRI`` flag is set. When the function times out it returns
|
||||
a value of zero, on failure it returns -1 and the ``errno`` variable is
|
||||
set appropriately.
|
||||
|
||||
For more details see the :c:func:`poll() <cec-poll>` manual page.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success, :c:func:`poll() <cec-poll>` returns the number structures which have
|
||||
non-zero ``revents`` fields, or zero if the call timed out. On error -1
|
||||
is returned, and the ``errno`` variable is set appropriately:
|
||||
|
||||
``EBADF``
|
||||
One or more of the ``ufds`` members specify an invalid file
|
||||
descriptor.
|
||||
|
||||
``EFAULT``
|
||||
``ufds`` references an inaccessible memory area.
|
||||
|
||||
``EINTR``
|
||||
The call was interrupted by a signal.
|
||||
|
||||
``EINVAL``
|
||||
The ``nfds`` value exceeds the ``RLIMIT_NOFILE`` value. Use
|
||||
``getrlimit()`` to obtain this value.
|
@ -1,30 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-user-func:
|
||||
|
||||
******************
|
||||
Function Reference
|
||||
******************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
cec-func-open
|
||||
cec-func-close
|
||||
cec-func-ioctl
|
||||
cec-func-poll
|
||||
cec-ioc-adap-g-caps
|
||||
cec-ioc-adap-g-log-addrs
|
||||
cec-ioc-adap-g-phys-addr
|
||||
cec-ioc-adap-g-conn-info
|
||||
cec-ioc-dqevent
|
||||
cec-ioc-g-mode
|
||||
cec-ioc-receive
|
@ -1,17 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec_header:
|
||||
|
||||
***************
|
||||
CEC Header File
|
||||
***************
|
||||
|
||||
.. kernel-include:: $BUILDDIR/cec.h.rst
|
||||
|
@ -1,49 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _cec-intro:
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
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 (:ref:`hdmi`) specification and the
|
||||
extensions added to CEC version 2.0 are defined in chapter 11 of the
|
||||
HDMI 2.0 (:ref:`hdmi2`) specification.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Drivers that support CEC will create a CEC device node (/dev/cecX) to
|
||||
give userspace access to the CEC adapter. The
|
||||
:ref:`CEC_ADAP_G_CAPS` ioctl will tell userspace what it is allowed to do.
|
||||
|
||||
In order to check the support and test it, it is suggested to download
|
||||
the `v4l-utils <https://git.linuxtv.org/v4l-utils.git/>`_ package. It
|
||||
provides three tools to handle CEC:
|
||||
|
||||
- cec-ctl: the Swiss army knife of CEC. Allows you to configure, transmit
|
||||
and monitor CEC messages.
|
||||
|
||||
- cec-compliance: does a CEC compliance test of a remote CEC device to
|
||||
determine how compliant the CEC implementation is.
|
||||
|
||||
- cec-follower: emulates a CEC follower.
|
@ -1,150 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_ADAP_G_CAPS:
|
||||
|
||||
*********************
|
||||
ioctl CEC_ADAP_G_CAPS
|
||||
*********************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
CEC_ADAP_G_CAPS - Query device capabilities
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_ADAP_G_CAPS, struct cec_caps *argp )
|
||||
:name: CEC_ADAP_G_CAPS
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All cec devices must support :ref:`ioctl CEC_ADAP_G_CAPS <CEC_ADAP_G_CAPS>`. To query
|
||||
device information, applications call the ioctl with a pointer to a
|
||||
struct :c:type:`cec_caps`. The driver fills the structure and
|
||||
returns the information to the application. The ioctl never fails.
|
||||
|
||||
.. tabularcolumns:: |p{1.2cm}|p{2.5cm}|p{13.8cm}|
|
||||
|
||||
.. c:type:: cec_caps
|
||||
|
||||
.. flat-table:: struct cec_caps
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
* - char
|
||||
- ``driver[32]``
|
||||
- The name of the cec adapter driver.
|
||||
* - char
|
||||
- ``name[32]``
|
||||
- The name of this CEC adapter. The combination ``driver`` and
|
||||
``name`` must be unique.
|
||||
* - __u32
|
||||
- ``capabilities``
|
||||
- The capabilities of the CEC adapter, see
|
||||
:ref:`cec-capabilities`.
|
||||
* - __u32
|
||||
- ``version``
|
||||
- CEC Framework API version, formatted with the ``KERNEL_VERSION()``
|
||||
macro.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{4.4cm}|p{2.5cm}|p{10.6cm}|
|
||||
|
||||
.. _cec-capabilities:
|
||||
|
||||
.. flat-table:: CEC Capabilities Flags
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 8
|
||||
|
||||
* .. _`CEC-CAP-PHYS-ADDR`:
|
||||
|
||||
- ``CEC_CAP_PHYS_ADDR``
|
||||
- 0x00000001
|
||||
- Userspace has to configure the physical address by calling
|
||||
:ref:`ioctl CEC_ADAP_S_PHYS_ADDR <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).
|
||||
* .. _`CEC-CAP-LOG-ADDRS`:
|
||||
|
||||
- ``CEC_CAP_LOG_ADDRS``
|
||||
- 0x00000002
|
||||
- Userspace has to configure the logical addresses by calling
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`. If
|
||||
this capability isn't set, then the kernel will have configured
|
||||
this.
|
||||
* .. _`CEC-CAP-TRANSMIT`:
|
||||
|
||||
- ``CEC_CAP_TRANSMIT``
|
||||
- 0x00000004
|
||||
- Userspace can transmit CEC messages by calling
|
||||
:ref:`ioctl CEC_TRANSMIT <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.
|
||||
* .. _`CEC-CAP-PASSTHROUGH`:
|
||||
|
||||
- ``CEC_CAP_PASSTHROUGH``
|
||||
- 0x00000008
|
||||
- Userspace can use the passthrough mode by calling
|
||||
:ref:`ioctl CEC_S_MODE <CEC_S_MODE>`.
|
||||
* .. _`CEC-CAP-RC`:
|
||||
|
||||
- ``CEC_CAP_RC``
|
||||
- 0x00000010
|
||||
- This adapter supports the remote control protocol.
|
||||
* .. _`CEC-CAP-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_CAP_MONITOR_ALL``
|
||||
- 0x00000020
|
||||
- The CEC hardware can monitor all messages, not just directed and
|
||||
broadcast messages.
|
||||
* .. _`CEC-CAP-NEEDS-HPD`:
|
||||
|
||||
- ``CEC_CAP_NEEDS_HPD``
|
||||
- 0x00000040
|
||||
- The CEC hardware is only active if the HDMI Hotplug Detect pin is
|
||||
high. This makes it impossible to use CEC to wake up displays that
|
||||
set the HPD pin low when in standby mode, but keep the CEC bus
|
||||
alive.
|
||||
* .. _`CEC-CAP-MONITOR-PIN`:
|
||||
|
||||
- ``CEC_CAP_MONITOR_PIN``
|
||||
- 0x00000080
|
||||
- The CEC hardware can monitor CEC pin changes from low to high voltage
|
||||
and vice versa. When in pin monitoring mode the application will
|
||||
receive ``CEC_EVENT_PIN_CEC_LOW`` and ``CEC_EVENT_PIN_CEC_HIGH`` events.
|
||||
* .. _`CEC-CAP-CONNECTOR-INFO`:
|
||||
|
||||
- ``CEC_CAP_CONNECTOR_INFO``
|
||||
- 0x00000100
|
||||
- If this capability is set, then :ref:`CEC_ADAP_G_CONNECTOR_INFO` can
|
||||
be used.
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,378 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_ADAP_LOG_ADDRS:
|
||||
.. _CEC_ADAP_G_LOG_ADDRS:
|
||||
.. _CEC_ADAP_S_LOG_ADDRS:
|
||||
|
||||
****************************************************
|
||||
ioctls CEC_ADAP_G_LOG_ADDRS and CEC_ADAP_S_LOG_ADDRS
|
||||
****************************************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS - Get or set the logical addresses
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_ADAP_G_LOG_ADDRS, struct cec_log_addrs *argp )
|
||||
:name: CEC_ADAP_G_LOG_ADDRS
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_ADAP_S_LOG_ADDRS, struct cec_log_addrs *argp )
|
||||
:name: CEC_ADAP_S_LOG_ADDRS
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`cec_log_addrs`.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To query the current CEC logical addresses, applications call
|
||||
:ref:`ioctl CEC_ADAP_G_LOG_ADDRS <CEC_ADAP_G_LOG_ADDRS>` with a pointer to a
|
||||
struct :c:type:`cec_log_addrs` where the driver stores the logical addresses.
|
||||
|
||||
To set new logical addresses, applications fill in
|
||||
struct :c:type:`cec_log_addrs` and call :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
with a pointer to this struct. The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
is only available if ``CEC_CAP_LOG_ADDRS`` is set (the ``ENOTTY`` error code is
|
||||
returned otherwise). The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
can only be called by a file descriptor in initiator mode (see :ref:`CEC_S_MODE`), if not
|
||||
the ``EBUSY`` error code will be returned.
|
||||
|
||||
To clear existing logical addresses set ``num_log_addrs`` to 0. All other fields
|
||||
will be ignored in that case. The adapter will go to the unconfigured state and the
|
||||
``cec_version``, ``vendor_id`` and ``osd_name`` fields are all reset to their default
|
||||
values (CEC version 2.0, no vendor ID and an empty OSD name).
|
||||
|
||||
If the physical address is valid (see :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`),
|
||||
then this ioctl will block until all requested logical
|
||||
addresses have been claimed. If the file descriptor is in non-blocking mode then it will
|
||||
not wait for the logical addresses to be claimed, instead it just returns 0.
|
||||
|
||||
A :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>` event is sent when the
|
||||
logical addresses are claimed or cleared.
|
||||
|
||||
Attempting to call :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>` when
|
||||
logical address types are already defined will return with error ``EBUSY``.
|
||||
|
||||
.. c:type:: cec_log_addrs
|
||||
|
||||
.. tabularcolumns:: |p{1.0cm}|p{8.0cm}|p{7.5cm}|
|
||||
|
||||
.. cssclass:: longtable
|
||||
|
||||
.. flat-table:: struct cec_log_addrs
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
* - __u8
|
||||
- ``log_addr[CEC_MAX_LOG_ADDRS]``
|
||||
- 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
|
||||
``CEC_LOG_ADDR_INVALID``. If this adapter is Unregistered, then
|
||||
``log_addr[0]`` is set to 0xf and all others to
|
||||
``CEC_LOG_ADDR_INVALID``.
|
||||
* - __u16
|
||||
- ``log_addr_mask``
|
||||
- The bitmask of all logical addresses this adapter has claimed. If
|
||||
this adapter is Unregistered then ``log_addr_mask`` sets bit 15
|
||||
and clears all other bits. If this adapter is not configured at
|
||||
all, then ``log_addr_mask`` is set to 0. Set by the driver.
|
||||
* - __u8
|
||||
- ``cec_version``
|
||||
- The CEC version that this adapter shall use. See
|
||||
:ref:`cec-versions`. Used to implement the
|
||||
``CEC_MSG_CEC_VERSION`` and ``CEC_MSG_REPORT_FEATURES`` messages.
|
||||
Note that :ref:`CEC_OP_CEC_VERSION_1_3A <CEC-OP-CEC-VERSION-1-3A>` is not allowed by the CEC
|
||||
framework.
|
||||
* - __u8
|
||||
- ``num_log_addrs``
|
||||
- Number of logical addresses to set up. Must be ≤
|
||||
``available_log_addrs`` as returned by
|
||||
:ref:`CEC_ADAP_G_CAPS`. All arrays in
|
||||
this structure are only filled up to index
|
||||
``available_log_addrs``-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.
|
||||
``CEC_MAX_LOG_ADDRS`` 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.
|
||||
* - __u32
|
||||
- ``vendor_id``
|
||||
- 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
|
||||
``CEC_VENDOR_ID_NONE``.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- Flags. See :ref:`cec-log-addrs-flags` for a list of available flags.
|
||||
* - char
|
||||
- ``osd_name[15]``
|
||||
- The On-Screen Display name as is returned by the
|
||||
``CEC_MSG_SET_OSD_NAME`` message.
|
||||
* - __u8
|
||||
- ``primary_device_type[CEC_MAX_LOG_ADDRS]``
|
||||
- Primary device type for each logical address. See
|
||||
:ref:`cec-prim-dev-types` for possible types.
|
||||
* - __u8
|
||||
- ``log_addr_type[CEC_MAX_LOG_ADDRS]``
|
||||
- Logical address types. See :ref:`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 :ref:`CEC_LOG_ADDR_TYPE_UNREGISTERED <CEC-LOG-ADDR-TYPE-UNREGISTERED>`).
|
||||
* - __u8
|
||||
- ``all_device_types[CEC_MAX_LOG_ADDRS]``
|
||||
- CEC 2.0 specific: the bit mask of all device types. See
|
||||
:ref:`cec-all-dev-types-flags`. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. For CEC 1.4 you can either leave
|
||||
this field to 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
* - __u8
|
||||
- ``features[CEC_MAX_LOG_ADDRS][12]``
|
||||
- Features for each logical address. It is used in the CEC 2.0
|
||||
``CEC_MSG_REPORT_FEATURES`` message. The 12 bytes include both the
|
||||
RC Profile and the Device Features. For CEC 1.4 you can either leave
|
||||
this field to all 0, or fill it in according to the CEC 2.0 guidelines to
|
||||
give the CEC framework more information about the device type, even
|
||||
though the framework won't use it directly in the CEC message.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{7.8cm}|p{1.0cm}|p{8.7cm}|
|
||||
|
||||
.. _cec-log-addrs-flags:
|
||||
|
||||
.. flat-table:: Flags for struct cec_log_addrs
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-LOG-ADDRS-FL-ALLOW-UNREG-FALLBACK`:
|
||||
|
||||
- ``CEC_LOG_ADDRS_FL_ALLOW_UNREG_FALLBACK``
|
||||
- 1
|
||||
- By default if no logical address of the requested type can be claimed, then
|
||||
it will go back to the unconfigured state. If this flag is set, then it will
|
||||
fallback to the Unregistered logical address. Note that if the Unregistered
|
||||
logical address was explicitly requested, then this flag has no effect.
|
||||
* .. _`CEC-LOG-ADDRS-FL-ALLOW-RC-PASSTHRU`:
|
||||
|
||||
- ``CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU``
|
||||
- 2
|
||||
- By default the ``CEC_MSG_USER_CONTROL_PRESSED`` and ``CEC_MSG_USER_CONTROL_RELEASED``
|
||||
messages are only passed on to the follower(s), if any. If this flag is set,
|
||||
then these messages are also passed on to the remote control input subsystem
|
||||
and will appear as keystrokes. This features needs to be enabled explicitly.
|
||||
If CEC is used to enter e.g. passwords, then you may not want to enable this
|
||||
to avoid trivial snooping of the keystrokes.
|
||||
* .. _`CEC-LOG-ADDRS-FL-CDC-ONLY`:
|
||||
|
||||
- ``CEC_LOG_ADDRS_FL_CDC_ONLY``
|
||||
- 4
|
||||
- If this flag is set, then the device is CDC-Only. CDC-Only CEC devices
|
||||
are CEC devices that can only handle CDC messages.
|
||||
|
||||
All other messages are ignored.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{7.8cm}|p{1.0cm}|p{8.7cm}|
|
||||
|
||||
.. _cec-versions:
|
||||
|
||||
.. flat-table:: CEC Versions
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-CEC-VERSION-1-3A`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_1_3A``
|
||||
- 4
|
||||
- CEC version according to the HDMI 1.3a standard.
|
||||
* .. _`CEC-OP-CEC-VERSION-1-4B`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_1_4B``
|
||||
- 5
|
||||
- CEC version according to the HDMI 1.4b standard.
|
||||
* .. _`CEC-OP-CEC-VERSION-2-0`:
|
||||
|
||||
- ``CEC_OP_CEC_VERSION_2_0``
|
||||
- 6
|
||||
- CEC version according to the HDMI 2.0 standard.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
||||
.. _cec-prim-dev-types:
|
||||
|
||||
.. flat-table:: CEC Primary Device Types
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-TV`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TV``
|
||||
- 0
|
||||
- Use for a TV.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-RECORD`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_RECORD``
|
||||
- 1
|
||||
- Use for a recording device.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-TUNER`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_TUNER``
|
||||
- 3
|
||||
- Use for a device with a tuner.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_PLAYBACK``
|
||||
- 4
|
||||
- Use for a playback device.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM``
|
||||
- 5
|
||||
- Use for an audio system (e.g. an audio/video receiver).
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_SWITCH``
|
||||
- 6
|
||||
- Use for a CEC switch.
|
||||
* .. _`CEC-OP-PRIM-DEVTYPE-VIDEOPROC`:
|
||||
|
||||
- ``CEC_OP_PRIM_DEVTYPE_VIDEOPROC``
|
||||
- 7
|
||||
- Use for a video processor device.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
||||
.. _cec-log-addr-types:
|
||||
|
||||
.. flat-table:: CEC Logical Address Types
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-LOG-ADDR-TYPE-TV`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_TV``
|
||||
- 0
|
||||
- Use for a TV.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-RECORD`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_RECORD``
|
||||
- 1
|
||||
- Use for a recording device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-TUNER`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_TUNER``
|
||||
- 2
|
||||
- Use for a tuner device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_PLAYBACK``
|
||||
- 3
|
||||
- Use for a playback device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_AUDIOSYSTEM``
|
||||
- 4
|
||||
- Use for an audio system device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-SPECIFIC`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_SPECIFIC``
|
||||
- 5
|
||||
- Use for a second TV or for a video processor device.
|
||||
* .. _`CEC-LOG-ADDR-TYPE-UNREGISTERED`:
|
||||
|
||||
- ``CEC_LOG_ADDR_TYPE_UNREGISTERED``
|
||||
- 6
|
||||
- Use this if you just want to remain unregistered. Used for pure
|
||||
CEC switches or CDC-only devices (CDC: Capability Discovery and
|
||||
Control).
|
||||
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
||||
|
||||
.. _cec-all-dev-types-flags:
|
||||
|
||||
.. flat-table:: CEC All Device Types Flags
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-TV`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_TV``
|
||||
- 0x80
|
||||
- This supports the TV type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-RECORD`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_RECORD``
|
||||
- 0x40
|
||||
- This supports the Recording type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-TUNER`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_TUNER``
|
||||
- 0x20
|
||||
- This supports the Tuner type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-PLAYBACK`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_PLAYBACK``
|
||||
- 0x10
|
||||
- This supports the Playback type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-AUDIOSYSTEM`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM``
|
||||
- 0x08
|
||||
- This supports the Audio System type.
|
||||
* .. _`CEC-OP-ALL-DEVTYPE-SWITCH`:
|
||||
|
||||
- ``CEC_OP_ALL_DEVTYPE_SWITCH``
|
||||
- 0x04
|
||||
- This supports the CEC Switch or Video Processing type.
|
||||
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
The :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>` can return the following
|
||||
error codes:
|
||||
|
||||
ENOTTY
|
||||
The ``CEC_CAP_LOG_ADDRS`` capability wasn't set, so this ioctl is not supported.
|
||||
|
||||
EBUSY
|
||||
The CEC adapter is currently configuring itself, or it is already configured and
|
||||
``num_log_addrs`` is non-zero, or another filehandle is in exclusive follower or
|
||||
initiator mode, or the filehandle is in mode ``CEC_MODE_NO_INITIATOR``.
|
||||
|
||||
EINVAL
|
||||
The contents of struct :c:type:`cec_log_addrs` is invalid.
|
@ -1,100 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_ADAP_PHYS_ADDR:
|
||||
.. _CEC_ADAP_G_PHYS_ADDR:
|
||||
.. _CEC_ADAP_S_PHYS_ADDR:
|
||||
|
||||
****************************************************
|
||||
ioctls CEC_ADAP_G_PHYS_ADDR and CEC_ADAP_S_PHYS_ADDR
|
||||
****************************************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR - Get or set the physical address
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_ADAP_G_PHYS_ADDR, __u16 *argp )
|
||||
:name: CEC_ADAP_G_PHYS_ADDR
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_ADAP_S_PHYS_ADDR, __u16 *argp )
|
||||
:name: CEC_ADAP_S_PHYS_ADDR
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
Pointer to the CEC address.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To query the current physical address applications call
|
||||
:ref:`ioctl CEC_ADAP_G_PHYS_ADDR <CEC_ADAP_G_PHYS_ADDR>` with a pointer to a __u16 where the
|
||||
driver stores the physical address.
|
||||
|
||||
To set a new physical address applications store the physical address in
|
||||
a __u16 and call :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` with a pointer to
|
||||
this integer. The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` is only available if
|
||||
``CEC_CAP_PHYS_ADDR`` is set (the ``ENOTTY`` error code will be returned
|
||||
otherwise). The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` can only be called
|
||||
by a file descriptor in initiator mode (see :ref:`CEC_S_MODE`), if not
|
||||
the ``EBUSY`` error code will be returned.
|
||||
|
||||
To clear an existing physical address use ``CEC_PHYS_ADDR_INVALID``.
|
||||
The adapter will go to the unconfigured state.
|
||||
|
||||
If logical address types have been defined (see :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`),
|
||||
then this ioctl will block until all
|
||||
requested logical addresses have been claimed. If the file descriptor is in non-blocking mode
|
||||
then it will not wait for the logical addresses to be claimed, instead it just returns 0.
|
||||
|
||||
A :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>` event is sent when the physical address
|
||||
changes.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` can return the following
|
||||
error codes:
|
||||
|
||||
ENOTTY
|
||||
The ``CEC_CAP_PHYS_ADDR`` capability wasn't set, so this ioctl is not supported.
|
||||
|
||||
EBUSY
|
||||
Another filehandle is in exclusive follower or initiator mode, or the filehandle
|
||||
is in mode ``CEC_MODE_NO_INITIATOR``.
|
||||
|
||||
EINVAL
|
||||
The physical address is malformed.
|
@ -1,257 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_DQEVENT:
|
||||
|
||||
*****************
|
||||
ioctl CEC_DQEVENT
|
||||
*****************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
CEC_DQEVENT - Dequeue a CEC event
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_DQEVENT, struct cec_event *argp )
|
||||
:name: CEC_DQEVENT
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
CEC devices can send asynchronous events. These can be retrieved by
|
||||
calling :c:func:`CEC_DQEVENT`. 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`` error code.
|
||||
|
||||
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 :ref:`CEC_EVENT_STATE_CHANGE <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.
|
||||
|
||||
.. tabularcolumns:: |p{1.2cm}|p{2.9cm}|p{13.4cm}|
|
||||
|
||||
.. c:type:: cec_event_state_change
|
||||
|
||||
.. flat-table:: struct cec_event_state_change
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 8
|
||||
|
||||
* - __u16
|
||||
- ``phys_addr``
|
||||
- The current physical address. This is ``CEC_PHYS_ADDR_INVALID`` if no
|
||||
valid physical address is set.
|
||||
* - __u16
|
||||
- ``log_addr_mask``
|
||||
- The current set of claimed logical addresses. This is 0 if no logical
|
||||
addresses are claimed or if ``phys_addr`` is ``CEC_PHYS_ADDR_INVALID``.
|
||||
If bit 15 is set (``1 << CEC_LOG_ADDR_UNREGISTERED``) then this device
|
||||
has the unregistered logical address. In that case all other bits are 0.
|
||||
* - __u16
|
||||
- ``have_conn_info``
|
||||
- If non-zero, then HDMI connector information is available.
|
||||
This field is only valid if ``CEC_CAP_CONNECTOR_INFO`` is set. If that
|
||||
capability is set and ``have_conn_info`` is zero, then that indicates
|
||||
that the HDMI connector device is not instantiated, either because
|
||||
the HDMI driver is still configuring the device or because the HDMI
|
||||
device was unbound.
|
||||
|
||||
|
||||
.. c:type:: cec_event_lost_msgs
|
||||
|
||||
.. tabularcolumns:: |p{1.0cm}|p{2.0cm}|p{14.5cm}|
|
||||
|
||||
.. flat-table:: struct cec_event_lost_msgs
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
* - __u32
|
||||
- ``lost_msgs``
|
||||
- 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.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{1.0cm}|p{4.4cm}|p{2.5cm}|p{9.6cm}|
|
||||
|
||||
.. c:type:: cec_event
|
||||
|
||||
.. flat-table:: struct cec_event
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 8
|
||||
|
||||
* - __u64
|
||||
- ``ts``
|
||||
- Timestamp of the event in ns.
|
||||
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock.
|
||||
|
||||
To access the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u32
|
||||
- ``event``
|
||||
- The CEC event type, see :ref:`cec-events`.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- Event flags, see :ref:`cec-event-flags`.
|
||||
* - union {
|
||||
- (anonymous)
|
||||
* - struct cec_event_state_change
|
||||
- ``state_change``
|
||||
- The new adapter state as sent by the :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>`
|
||||
event.
|
||||
* - struct cec_event_lost_msgs
|
||||
- ``lost_msgs``
|
||||
- The number of lost messages as sent by the :ref:`CEC_EVENT_LOST_MSGS <CEC-EVENT-LOST-MSGS>`
|
||||
event.
|
||||
* - }
|
||||
-
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
||||
.. _cec-events:
|
||||
|
||||
.. flat-table:: CEC Events Types
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-EVENT-STATE-CHANGE`:
|
||||
|
||||
- ``CEC_EVENT_STATE_CHANGE``
|
||||
- 1
|
||||
- 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.
|
||||
* .. _`CEC-EVENT-LOST-MSGS`:
|
||||
|
||||
- ``CEC_EVENT_LOST_MSGS``
|
||||
- 2
|
||||
- Generated if one or more CEC messages were lost because the
|
||||
application didn't dequeue CEC messages fast enough.
|
||||
* .. _`CEC-EVENT-PIN-CEC-LOW`:
|
||||
|
||||
- ``CEC_EVENT_PIN_CEC_LOW``
|
||||
- 3
|
||||
- Generated if the CEC pin goes from a high voltage to a low voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set.
|
||||
* .. _`CEC-EVENT-PIN-CEC-HIGH`:
|
||||
|
||||
- ``CEC_EVENT_PIN_CEC_HIGH``
|
||||
- 4
|
||||
- Generated if the CEC pin goes from a low voltage to a high voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set.
|
||||
* .. _`CEC-EVENT-PIN-HPD-LOW`:
|
||||
|
||||
- ``CEC_EVENT_PIN_HPD_LOW``
|
||||
- 5
|
||||
- Generated if the HPD pin goes from a high voltage to a low voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set. When open() is called, the HPD pin can be read and
|
||||
if the HPD is low, then an initial event will be generated for that
|
||||
filehandle.
|
||||
* .. _`CEC-EVENT-PIN-HPD-HIGH`:
|
||||
|
||||
- ``CEC_EVENT_PIN_HPD_HIGH``
|
||||
- 6
|
||||
- Generated if the HPD pin goes from a low voltage to a high voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set. When open() is called, the HPD pin can be read and
|
||||
if the HPD is high, then an initial event will be generated for that
|
||||
filehandle.
|
||||
* .. _`CEC-EVENT-PIN-5V-LOW`:
|
||||
|
||||
- ``CEC_EVENT_PIN_5V_LOW``
|
||||
- 6
|
||||
- Generated if the 5V pin goes from a high voltage to a low voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set. When open() is called, the 5V pin can be read and
|
||||
if the 5V is low, then an initial event will be generated for that
|
||||
filehandle.
|
||||
* .. _`CEC-EVENT-PIN-5V-HIGH`:
|
||||
|
||||
- ``CEC_EVENT_PIN_5V_HIGH``
|
||||
- 7
|
||||
- Generated if the 5V pin goes from a low voltage to a high voltage.
|
||||
Only applies to adapters that have the ``CEC_CAP_MONITOR_PIN``
|
||||
capability set. When open() is called, the 5V pin can be read and
|
||||
if the 5V is high, then an initial event will be generated for that
|
||||
filehandle.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.0cm}|p{0.6cm}|p{10.9cm}|
|
||||
|
||||
.. _cec-event-flags:
|
||||
|
||||
.. flat-table:: CEC Event Flags
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 8
|
||||
|
||||
* .. _`CEC-EVENT-FL-INITIAL-STATE`:
|
||||
|
||||
- ``CEC_EVENT_FL_INITIAL_STATE``
|
||||
- 1
|
||||
- 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.
|
||||
* .. _`CEC-EVENT-FL-DROPPED-EVENTS`:
|
||||
|
||||
- ``CEC_EVENT_FL_DROPPED_EVENTS``
|
||||
- 2
|
||||
- Set if one or more events of the given event type have been dropped.
|
||||
This is an indication that the application cannot keep up.
|
||||
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
The :ref:`ioctl CEC_DQEVENT <CEC_DQEVENT>` can return the following
|
||||
error codes:
|
||||
|
||||
EAGAIN
|
||||
This is returned when the filehandle is in non-blocking mode and there
|
||||
are no pending events.
|
||||
|
||||
ERESTARTSYS
|
||||
An interrupt (e.g. Ctrl-C) arrived while in blocking mode waiting for
|
||||
events to arrive.
|
@ -1,301 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_MODE:
|
||||
.. _CEC_G_MODE:
|
||||
.. _CEC_S_MODE:
|
||||
|
||||
********************************
|
||||
ioctls CEC_G_MODE and CEC_S_MODE
|
||||
********************************
|
||||
|
||||
CEC_G_MODE, CEC_S_MODE - Get or set exclusive use of the CEC adapter
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_G_MODE, __u32 *argp )
|
||||
:name: CEC_G_MODE
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_S_MODE, __u32 *argp )
|
||||
:name: CEC_S_MODE
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
Pointer to CEC mode.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
By default any filehandle can use :ref:`CEC_TRANSMIT`, 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.
|
||||
|
||||
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.
|
||||
|
||||
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 :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>` to dequeue
|
||||
the new message. The framework expects the follower to make the right
|
||||
decisions.
|
||||
|
||||
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 :ref:`cec-core-processing` for details.
|
||||
|
||||
If there is no initiator, then any CEC filehandle can use
|
||||
:ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. If there is an exclusive
|
||||
initiator then only that initiator can call
|
||||
:ref:`CEC_TRANSMIT`. The follower can of course
|
||||
always call :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`.
|
||||
|
||||
Available initiator modes are:
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
||||
.. _cec-mode-initiator_e:
|
||||
|
||||
.. flat-table:: Initiator Modes
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-MODE-NO-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_NO_INITIATOR``
|
||||
- 0x0
|
||||
- This is not an initiator, i.e. it cannot transmit CEC messages or
|
||||
make any other changes to the CEC adapter.
|
||||
* .. _`CEC-MODE-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_INITIATOR``
|
||||
- 0x1
|
||||
- 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.
|
||||
* .. _`CEC-MODE-EXCL-INITIATOR`:
|
||||
|
||||
- ``CEC_MODE_EXCL_INITIATOR``
|
||||
- 0x2
|
||||
- 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 code
|
||||
error.
|
||||
|
||||
|
||||
Available follower modes are:
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{0.9cm}|p{10.0cm}|
|
||||
|
||||
.. _cec-mode-follower_e:
|
||||
|
||||
.. cssclass:: longtable
|
||||
|
||||
.. flat-table:: Follower Modes
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-MODE-NO-FOLLOWER`:
|
||||
|
||||
- ``CEC_MODE_NO_FOLLOWER``
|
||||
- 0x00
|
||||
- This is not a follower (the default when the device is opened).
|
||||
* .. _`CEC-MODE-FOLLOWER`:
|
||||
|
||||
- ``CEC_MODE_FOLLOWER``
|
||||
- 0x10
|
||||
- This is a follower and it will receive CEC messages unless there
|
||||
is an exclusive follower. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-EXCL-FOLLOWER`:
|
||||
|
||||
- ``CEC_MODE_EXCL_FOLLOWER``
|
||||
- 0x20
|
||||
- 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 code. You cannot become a follower if
|
||||
:ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
|
||||
was specified, the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-EXCL-FOLLOWER-PASSTHRU`:
|
||||
|
||||
- ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU``
|
||||
- 0x30
|
||||
- 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
|
||||
code. You cannot become a follower if :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>`
|
||||
is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>` was specified,
|
||||
the ``EINVAL`` error code is returned in that case.
|
||||
* .. _`CEC-MODE-MONITOR-PIN`:
|
||||
|
||||
- ``CEC_MODE_MONITOR_PIN``
|
||||
- 0xd0
|
||||
- Put the file descriptor into pin monitoring mode. Can only be used in
|
||||
combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`,
|
||||
otherwise the ``EINVAL`` error code will be returned.
|
||||
This mode requires that the :ref:`CEC_CAP_MONITOR_PIN <CEC-CAP-MONITOR-PIN>`
|
||||
capability is set, otherwise the ``EINVAL`` error code is returned.
|
||||
While in pin monitoring mode this file descriptor can receive the
|
||||
``CEC_EVENT_PIN_CEC_LOW`` and ``CEC_EVENT_PIN_CEC_HIGH`` events to see the
|
||||
low-level CEC pin transitions. This is very useful for debugging.
|
||||
This mode is only allowed if the process has the ``CAP_NET_ADMIN``
|
||||
capability. If that is not set, then the ``EPERM`` error code is returned.
|
||||
* .. _`CEC-MODE-MONITOR`:
|
||||
|
||||
- ``CEC_MODE_MONITOR``
|
||||
- 0xe0
|
||||
- Put the file descriptor into monitor mode. Can only be used in
|
||||
combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`,
|
||||
otherwise the ``EINVAL`` error code 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 ``CAP_NET_ADMIN`` capability. If
|
||||
that is not set, then the ``EPERM`` error code is returned.
|
||||
* .. _`CEC-MODE-MONITOR-ALL`:
|
||||
|
||||
- ``CEC_MODE_MONITOR_ALL``
|
||||
- 0xf0
|
||||
- Put the file descriptor into 'monitor all' mode. Can only be used
|
||||
in combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise
|
||||
the ``EINVAL`` error code 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 :ref:`CEC_CAP_MONITOR_ALL <CEC-CAP-MONITOR-ALL>` capability is set,
|
||||
otherwise the ``EINVAL`` error code is returned. This is only allowed if
|
||||
the process has the ``CAP_NET_ADMIN`` capability. If that is not
|
||||
set, then the ``EPERM`` error code is returned.
|
||||
|
||||
|
||||
Core message processing details:
|
||||
|
||||
.. tabularcolumns:: |p{6.6cm}|p{10.9cm}|
|
||||
|
||||
.. _cec-core-processing:
|
||||
|
||||
.. flat-table:: Core Message Processing
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 8
|
||||
|
||||
* .. _`CEC-MSG-GET-CEC-VERSION`:
|
||||
|
||||
- ``CEC_MSG_GET_CEC_VERSION``
|
||||
- The core will return the CEC version that was set with
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`,
|
||||
except when in passthrough mode. In passthrough mode the core
|
||||
does nothing and this message has to be handled by a follower
|
||||
instead.
|
||||
* .. _`CEC-MSG-GIVE-DEVICE-VENDOR-ID`:
|
||||
|
||||
- ``CEC_MSG_GIVE_DEVICE_VENDOR_ID``
|
||||
- The core will return the vendor ID that was set with
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`,
|
||||
except when in passthrough mode. In passthrough mode the core
|
||||
does nothing and this message has to be handled by a follower
|
||||
instead.
|
||||
* .. _`CEC-MSG-ABORT`:
|
||||
|
||||
- ``CEC_MSG_ABORT``
|
||||
- The core will return a Feature Abort message with reason
|
||||
'Feature Refused' as per the specification, except when in
|
||||
passthrough mode. In passthrough mode the core does nothing
|
||||
and this message has to be handled by a follower instead.
|
||||
* .. _`CEC-MSG-GIVE-PHYSICAL-ADDR`:
|
||||
|
||||
- ``CEC_MSG_GIVE_PHYSICAL_ADDR``
|
||||
- The core will report the current physical address, except when
|
||||
in passthrough mode. In passthrough mode the core does nothing
|
||||
and this message has to be handled by a follower instead.
|
||||
* .. _`CEC-MSG-GIVE-OSD-NAME`:
|
||||
|
||||
- ``CEC_MSG_GIVE_OSD_NAME``
|
||||
- The core will report the current OSD name that was set with
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`,
|
||||
except when in passthrough mode. In passthrough mode the core
|
||||
does nothing and this message has to be handled by a follower
|
||||
instead.
|
||||
* .. _`CEC-MSG-GIVE-FEATURES`:
|
||||
|
||||
- ``CEC_MSG_GIVE_FEATURES``
|
||||
- The core will do nothing if the CEC version is older than 2.0,
|
||||
otherwise it will report the current features that were set with
|
||||
:ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`,
|
||||
except when in passthrough mode. In passthrough mode the core
|
||||
does nothing (for any CEC version) and this message has to be handled
|
||||
by a follower instead.
|
||||
* .. _`CEC-MSG-USER-CONTROL-PRESSED`:
|
||||
|
||||
- ``CEC_MSG_USER_CONTROL_PRESSED``
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set and if
|
||||
:ref:`CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU <CEC-LOG-ADDRS-FL-ALLOW-RC-PASSTHRU>`
|
||||
is set, then generate a remote control key
|
||||
press. This message is always passed on to the follower(s).
|
||||
* .. _`CEC-MSG-USER-CONTROL-RELEASED`:
|
||||
|
||||
- ``CEC_MSG_USER_CONTROL_RELEASED``
|
||||
- If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set and if
|
||||
:ref:`CEC_LOG_ADDRS_FL_ALLOW_RC_PASSTHRU <CEC-LOG-ADDRS-FL-ALLOW-RC-PASSTHRU>`
|
||||
is set, then generate a remote control key
|
||||
release. This message is always passed on to the follower(s).
|
||||
* .. _`CEC-MSG-REPORT-PHYSICAL-ADDR`:
|
||||
|
||||
- ``CEC_MSG_REPORT_PHYSICAL_ADDR``
|
||||
- The CEC framework will make note of the reported physical address
|
||||
and then just pass the message on to the follower(s).
|
||||
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
The :ref:`ioctl CEC_S_MODE <CEC_S_MODE>` can return the following
|
||||
error codes:
|
||||
|
||||
EINVAL
|
||||
The requested mode is invalid.
|
||||
|
||||
EPERM
|
||||
Monitor mode is requested, but the process does have the ``CAP_NET_ADMIN``
|
||||
capability.
|
||||
|
||||
EBUSY
|
||||
Someone else is already an exclusive follower or initiator.
|
@ -1,391 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CEC_TRANSMIT:
|
||||
.. _CEC_RECEIVE:
|
||||
|
||||
***********************************
|
||||
ioctls CEC_RECEIVE and CEC_TRANSMIT
|
||||
***********************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
CEC_RECEIVE, CEC_TRANSMIT - Receive or transmit a CEC message
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_RECEIVE, struct cec_msg \*argp )
|
||||
:name: CEC_RECEIVE
|
||||
|
||||
.. c:function:: int ioctl( int fd, CEC_TRANSMIT, struct cec_msg \*argp )
|
||||
:name: CEC_TRANSMIT
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <cec-open>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct cec_msg.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
To receive a CEC message the application has to fill in the
|
||||
``timeout`` field of struct :c:type:`cec_msg` and pass it to
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
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``
|
||||
error code. If the file descriptor is in blocking mode and ``timeout``
|
||||
is non-zero and no message arrived within ``timeout`` milliseconds, then
|
||||
it will return -1 and set errno to the ``ETIMEDOUT`` error code.
|
||||
|
||||
A received message can be:
|
||||
|
||||
1. a message received from another CEC device (the ``sequence`` field will
|
||||
be 0).
|
||||
2. the result of an earlier non-blocking transmit (the ``sequence`` field will
|
||||
be non-zero).
|
||||
|
||||
To send a CEC message the application has to fill in the struct
|
||||
:c:type:`cec_msg` and pass it to :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`.
|
||||
The :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` is only available if
|
||||
``CEC_CAP_TRANSMIT`` is set. If there is no more room in the transmit
|
||||
queue, then it will return -1 and set errno to the ``EBUSY`` error code.
|
||||
The transmit queue has enough room for 18 messages (about 1 second worth
|
||||
of 2-byte messages). Note that the CEC kernel framework will also reply
|
||||
to core messages (see :ref:`cec-core-processing`), so it is not a good
|
||||
idea to fully fill up the transmit queue.
|
||||
|
||||
If the file descriptor is in non-blocking mode then the transmit will
|
||||
return 0 and the result of the transmit will be available via
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>` once the transmit has finished
|
||||
(including waiting for a reply, if requested).
|
||||
|
||||
The ``sequence`` field is filled in for every transmit and this can be
|
||||
checked against the received messages to find the corresponding transmit
|
||||
result.
|
||||
|
||||
Normally calling :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` when the physical
|
||||
address is invalid (due to e.g. a disconnect) will return ``ENONET``.
|
||||
|
||||
However, the CEC specification allows sending messages from 'Unregistered' to
|
||||
'TV' when the physical address is invalid since some TVs pull the hotplug detect
|
||||
pin of the HDMI connector low when they go into standby, or when switching to
|
||||
another input.
|
||||
|
||||
When the hotplug detect pin goes low the EDID disappears, and thus the
|
||||
physical address, but the cable is still connected and CEC still works.
|
||||
In order to detect/wake up the device it is allowed to send poll and 'Image/Text
|
||||
View On' messages from initiator 0xf ('Unregistered') to destination 0 ('TV').
|
||||
|
||||
.. tabularcolumns:: |p{1.0cm}|p{3.5cm}|p{13.0cm}|
|
||||
|
||||
.. c:type:: cec_msg
|
||||
|
||||
.. cssclass:: longtable
|
||||
|
||||
.. flat-table:: struct cec_msg
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 16
|
||||
|
||||
* - __u64
|
||||
- ``tx_ts``
|
||||
- Timestamp in ns of when the last byte of the message was transmitted.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u64
|
||||
- ``rx_ts``
|
||||
- Timestamp in ns of when the last byte of the message was received.
|
||||
The timestamp has been taken from the ``CLOCK_MONOTONIC`` clock. To access
|
||||
the same clock from userspace use :c:func:`clock_gettime`.
|
||||
* - __u32
|
||||
- ``len``
|
||||
- The length of the message. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in
|
||||
by the application. The driver will fill this in for
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be
|
||||
filled in by the driver with the length of the reply message if ``reply`` was set.
|
||||
* - __u32
|
||||
- ``timeout``
|
||||
- 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 :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
If it is 0 and it is called by :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`,
|
||||
then it will be replaced by 1000 if the ``reply`` is non-zero or
|
||||
ignored if ``reply`` is 0.
|
||||
* - __u32
|
||||
- ``sequence``
|
||||
- A non-zero sequence number is automatically assigned by the CEC framework
|
||||
for all transmitted messages. It is used by the CEC framework when it queues
|
||||
the transmit result (when transmit was called in non-blocking mode). This
|
||||
allows the application to associate the received message with the original
|
||||
transmit.
|
||||
* - __u32
|
||||
- ``flags``
|
||||
- Flags. See :ref:`cec-msg-flags` for a list of available flags.
|
||||
* - __u8
|
||||
- ``tx_status``
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this message was received, not transmitted.
|
||||
* - __u8
|
||||
- ``msg[16]``
|
||||
- The message payload. For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` this is filled in by the
|
||||
application. The driver will fill this in for :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
For :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` it will be filled in by the driver with
|
||||
the payload of the reply message if ``timeout`` was set.
|
||||
* - __u8
|
||||
- ``reply``
|
||||
- Wait until this message is replied. If ``reply`` is 0 and the
|
||||
``timeout`` is 0, then don't wait for a reply but return after
|
||||
transmitting the message. Ignored by :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
The case where ``reply`` is 0 (this is the opcode for the Feature Abort
|
||||
message) and ``timeout`` is non-zero is specifically allowed to make it
|
||||
possible to send a message and wait up to ``timeout`` milliseconds for a
|
||||
Feature Abort reply. In this case ``rx_status`` will either be set
|
||||
to :ref:`CEC_RX_STATUS_TIMEOUT <CEC-RX-STATUS-TIMEOUT>` or
|
||||
:ref:`CEC_RX_STATUS_FEATURE_ABORT <CEC-RX-STATUS-FEATURE-ABORT>`.
|
||||
|
||||
If the transmitter message is ``CEC_MSG_INITIATE_ARC`` then the ``reply``
|
||||
values ``CEC_MSG_REPORT_ARC_INITIATED`` and ``CEC_MSG_REPORT_ARC_TERMINATED``
|
||||
are processed differently: either value will match both possible replies.
|
||||
The reason is that the ``CEC_MSG_INITIATE_ARC`` message is the only CEC
|
||||
message that has two possible replies other than Feature Abort. The
|
||||
``reply`` field will be updated with the actual reply so that it is
|
||||
synchronized with the contents of the received message.
|
||||
* - __u8
|
||||
- ``rx_status``
|
||||
- The status bits of the received message. See
|
||||
:ref:`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 ``rx_status``
|
||||
and ``tx_status`` are set.
|
||||
* - __u8
|
||||
- ``tx_status``
|
||||
- The status bits of the transmitted message. See
|
||||
:ref:`cec-tx-status` for the possible status values. It is 0 if
|
||||
this message was received, not transmitted.
|
||||
* - __u8
|
||||
- ``tx_arb_lost_cnt``
|
||||
- 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
|
||||
:ref:`CEC_TX_STATUS_ARB_LOST <CEC-TX-STATUS-ARB-LOST>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_nack_cnt``
|
||||
- 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
|
||||
:ref:`CEC_TX_STATUS_NACK <CEC-TX-STATUS-NACK>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_low_drive_cnt``
|
||||
- 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
|
||||
:ref:`CEC_TX_STATUS_LOW_DRIVE <CEC-TX-STATUS-LOW-DRIVE>` status bit is set.
|
||||
* - __u8
|
||||
- ``tx_error_cnt``
|
||||
- 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 :ref:`CEC_TX_STATUS_ERROR <CEC-TX-STATUS-ERROR>` status bit is set.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{6.2cm}|p{1.0cm}|p{10.3cm}|
|
||||
|
||||
.. _cec-msg-flags:
|
||||
|
||||
.. flat-table:: Flags for struct cec_msg
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
* .. _`CEC-MSG-FL-REPLY-TO-FOLLOWERS`:
|
||||
|
||||
- ``CEC_MSG_FL_REPLY_TO_FOLLOWERS``
|
||||
- 1
|
||||
- If a CEC transmit expects a reply, then by default that reply is only sent to
|
||||
the filehandle that called :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. If this
|
||||
flag is set, then the reply is also sent to all followers, if any. If the
|
||||
filehandle that called :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` is also a
|
||||
follower, then that filehandle will receive the reply twice: once as the
|
||||
result of the :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`, and once via
|
||||
:ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>`.
|
||||
|
||||
* .. _`CEC-MSG-FL-RAW`:
|
||||
|
||||
- ``CEC_MSG_FL_RAW``
|
||||
- 2
|
||||
- Normally CEC messages are validated before transmitting them. If this
|
||||
flag is set when :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` is called,
|
||||
then no validation takes place and the message is transmitted as-is.
|
||||
This is useful when debugging CEC issues.
|
||||
This flag is only allowed if the process has the ``CAP_SYS_RAWIO``
|
||||
capability. If that is not set, then the ``EPERM`` error code is
|
||||
returned.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
||||
.. _cec-tx-status:
|
||||
|
||||
.. flat-table:: CEC Transmit Status
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-TX-STATUS-OK`:
|
||||
|
||||
- ``CEC_TX_STATUS_OK``
|
||||
- 0x01
|
||||
- The message was transmitted successfully. This is mutually
|
||||
exclusive with :ref:`CEC_TX_STATUS_MAX_RETRIES <CEC-TX-STATUS-MAX-RETRIES>`.
|
||||
Other bits can still be set if earlier attempts met with failure before
|
||||
the transmit was eventually successful.
|
||||
* .. _`CEC-TX-STATUS-ARB-LOST`:
|
||||
|
||||
- ``CEC_TX_STATUS_ARB_LOST``
|
||||
- 0x02
|
||||
- CEC line arbitration was lost, i.e. another transmit started at the
|
||||
same time with a higher priority. Optional status, not all hardware
|
||||
can detect this error condition.
|
||||
* .. _`CEC-TX-STATUS-NACK`:
|
||||
|
||||
- ``CEC_TX_STATUS_NACK``
|
||||
- 0x04
|
||||
- Message was not acknowledged. Note that some hardware cannot tell apart
|
||||
a 'Not Acknowledged' status from other error conditions, i.e. the result
|
||||
of a transmit is just OK or FAIL. In that case this status will be
|
||||
returned when the transmit failed.
|
||||
* .. _`CEC-TX-STATUS-LOW-DRIVE`:
|
||||
|
||||
- ``CEC_TX_STATUS_LOW_DRIVE``
|
||||
- 0x08
|
||||
- Low drive was detected on the CEC bus. This indicates that a
|
||||
follower detected an error on the bus and requests a
|
||||
retransmission. Optional status, not all hardware can detect this
|
||||
error condition.
|
||||
* .. _`CEC-TX-STATUS-ERROR`:
|
||||
|
||||
- ``CEC_TX_STATUS_ERROR``
|
||||
- 0x10
|
||||
- Some error occurred. This is used for any errors that do not fit
|
||||
``CEC_TX_STATUS_ARB_LOST`` or ``CEC_TX_STATUS_LOW_DRIVE``, either because
|
||||
the hardware could not tell which error occurred, or because the hardware
|
||||
tested for other conditions besides those two. Optional status.
|
||||
* .. _`CEC-TX-STATUS-MAX-RETRIES`:
|
||||
|
||||
- ``CEC_TX_STATUS_MAX_RETRIES``
|
||||
- 0x20
|
||||
- The transmit failed after one or more retries. This status bit is
|
||||
mutually exclusive with :ref:`CEC_TX_STATUS_OK <CEC-TX-STATUS-OK>`.
|
||||
Other bits can still be set to explain which failures were seen.
|
||||
* .. _`CEC-TX-STATUS-ABORTED`:
|
||||
|
||||
- ``CEC_TX_STATUS_ABORTED``
|
||||
- 0x40
|
||||
- The transmit was aborted due to an HDMI disconnect, or the adapter
|
||||
was unconfigured, or a transmit was interrupted, or the driver
|
||||
returned an error when attempting to start a transmit.
|
||||
* .. _`CEC-TX-STATUS-TIMEOUT`:
|
||||
|
||||
- ``CEC_TX_STATUS_TIMEOUT``
|
||||
- 0x80
|
||||
- The transmit timed out. This should not normally happen and this
|
||||
indicates a driver problem.
|
||||
|
||||
|
||||
.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
|
||||
|
||||
.. _cec-rx-status:
|
||||
|
||||
.. flat-table:: CEC Receive Status
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 16
|
||||
|
||||
* .. _`CEC-RX-STATUS-OK`:
|
||||
|
||||
- ``CEC_RX_STATUS_OK``
|
||||
- 0x01
|
||||
- The message was received successfully.
|
||||
* .. _`CEC-RX-STATUS-TIMEOUT`:
|
||||
|
||||
- ``CEC_RX_STATUS_TIMEOUT``
|
||||
- 0x02
|
||||
- The reply to an earlier transmitted message timed out.
|
||||
* .. _`CEC-RX-STATUS-FEATURE-ABORT`:
|
||||
|
||||
- ``CEC_RX_STATUS_FEATURE_ABORT``
|
||||
- 0x04
|
||||
- The message was received successfully but the reply was
|
||||
``CEC_MSG_FEATURE_ABORT``. This status is only set if this message
|
||||
was the reply to an earlier transmitted message.
|
||||
* .. _`CEC-RX-STATUS-ABORTED`:
|
||||
|
||||
- ``CEC_RX_STATUS_ABORTED``
|
||||
- 0x08
|
||||
- The wait for a reply to an earlier transmitted message was aborted
|
||||
because the HDMI cable was disconnected, the adapter was unconfigured
|
||||
or the :ref:`CEC_TRANSMIT <CEC_RECEIVE>` that waited for a
|
||||
reply was interrupted.
|
||||
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
The :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>` can return the following
|
||||
error codes:
|
||||
|
||||
EAGAIN
|
||||
No messages are in the receive queue, and the filehandle is in non-blocking mode.
|
||||
|
||||
ETIMEDOUT
|
||||
The ``timeout`` was reached while waiting for a message.
|
||||
|
||||
ERESTARTSYS
|
||||
The wait for a message was interrupted (e.g. by Ctrl-C).
|
||||
|
||||
The :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>` can return the following
|
||||
error codes:
|
||||
|
||||
ENOTTY
|
||||
The ``CEC_CAP_TRANSMIT`` capability wasn't set, so this ioctl is not supported.
|
||||
|
||||
EPERM
|
||||
The CEC adapter is not configured, i.e. :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
has never been called, or ``CEC_MSG_FL_RAW`` was used from a process that
|
||||
did not have the ``CAP_SYS_RAWIO`` capability.
|
||||
|
||||
ENONET
|
||||
The CEC adapter is not configured, i.e. :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
|
||||
was called, but the physical address is invalid so no logical address was claimed.
|
||||
An exception is made in this case for transmits from initiator 0xf ('Unregistered')
|
||||
to destination 0 ('TV'). In that case the transmit will proceed as usual.
|
||||
|
||||
EBUSY
|
||||
Another filehandle is in exclusive follower or initiator mode, or the filehandle
|
||||
is in mode ``CEC_MODE_NO_INITIATOR``. This is also returned if the transmit
|
||||
queue is full.
|
||||
|
||||
EINVAL
|
||||
The contents of struct :c:type:`cec_msg` is invalid.
|
||||
|
||||
ERESTARTSYS
|
||||
The wait for a successful transmit was interrupted (e.g. by Ctrl-C).
|
@ -1,334 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
CEC Pin Framework Error Injection
|
||||
=================================
|
||||
|
||||
The CEC Pin Framework is a core CEC framework for CEC hardware that only
|
||||
has low-level support for the CEC bus. Most hardware today will have
|
||||
high-level CEC support where the hardware deals with driving the CEC bus,
|
||||
but some older devices aren't that fancy. However, this framework also
|
||||
allows you to connect the CEC pin to a GPIO on e.g. a Raspberry Pi and
|
||||
you have now made a CEC adapter.
|
||||
|
||||
What makes doing this so interesting is that since we have full control
|
||||
over the bus it is easy to support error injection. This is ideal to
|
||||
test how well CEC adapters can handle error conditions.
|
||||
|
||||
Currently only the cec-gpio driver (when the CEC line is directly
|
||||
connected to a pull-up GPIO line) and the AllWinner A10/A20 drm driver
|
||||
support this framework.
|
||||
|
||||
If ``CONFIG_CEC_PIN_ERROR_INJ`` is enabled, then error injection is available
|
||||
through debugfs. Specifically, in ``/sys/kernel/debug/cec/cecX/`` there is
|
||||
now an ``error-inj`` file.
|
||||
|
||||
.. note::
|
||||
|
||||
The error injection commands are not a stable ABI and may change in the
|
||||
future.
|
||||
|
||||
With ``cat error-inj`` you can see both the possible commands and the current
|
||||
error injection status::
|
||||
|
||||
$ cat /sys/kernel/debug/cec/cec0/error-inj
|
||||
# Clear error injections:
|
||||
# clear clear all rx and tx error injections
|
||||
# rx-clear clear all rx error injections
|
||||
# tx-clear clear all tx error injections
|
||||
# <op> clear clear all rx and tx error injections for <op>
|
||||
# <op> rx-clear clear all rx error injections for <op>
|
||||
# <op> tx-clear clear all tx error injections for <op>
|
||||
#
|
||||
# RX error injection:
|
||||
# <op>[,<mode>] rx-nack NACK the message instead of sending an ACK
|
||||
# <op>[,<mode>] rx-low-drive <bit> force a low-drive condition at this bit position
|
||||
# <op>[,<mode>] rx-add-byte add a spurious byte to the received CEC message
|
||||
# <op>[,<mode>] rx-remove-byte remove the last byte from the received CEC message
|
||||
# <op>[,<mode>] rx-arb-lost <poll> generate a POLL message to trigger an arbitration lost
|
||||
#
|
||||
# TX error injection settings:
|
||||
# tx-ignore-nack-until-eom ignore early NACKs until EOM
|
||||
# tx-custom-low-usecs <usecs> define the 'low' time for the custom pulse
|
||||
# tx-custom-high-usecs <usecs> define the 'high' time for the custom pulse
|
||||
# tx-custom-pulse transmit the custom pulse once the bus is idle
|
||||
#
|
||||
# TX error injection:
|
||||
# <op>[,<mode>] tx-no-eom don't set the EOM bit
|
||||
# <op>[,<mode>] tx-early-eom set the EOM bit one byte too soon
|
||||
# <op>[,<mode>] tx-add-bytes <num> append <num> (1-255) spurious bytes to the message
|
||||
# <op>[,<mode>] tx-remove-byte drop the last byte from the message
|
||||
# <op>[,<mode>] tx-short-bit <bit> make this bit shorter than allowed
|
||||
# <op>[,<mode>] tx-long-bit <bit> make this bit longer than allowed
|
||||
# <op>[,<mode>] tx-custom-bit <bit> send the custom pulse instead of this bit
|
||||
# <op>[,<mode>] tx-short-start send a start pulse that's too short
|
||||
# <op>[,<mode>] tx-long-start send a start pulse that's too long
|
||||
# <op>[,<mode>] tx-custom-start send the custom pulse instead of the start pulse
|
||||
# <op>[,<mode>] tx-last-bit <bit> stop sending after this bit
|
||||
# <op>[,<mode>] tx-low-drive <bit> force a low-drive condition at this bit position
|
||||
#
|
||||
# <op> CEC message opcode (0-255) or 'any'
|
||||
# <mode> 'once' (default), 'always', 'toggle' or 'off'
|
||||
# <bit> CEC message bit (0-159)
|
||||
# 10 bits per 'byte': bits 0-7: data, bit 8: EOM, bit 9: ACK
|
||||
# <poll> CEC poll message used to test arbitration lost (0x00-0xff, default 0x0f)
|
||||
# <usecs> microseconds (0-10000000, default 1000)
|
||||
|
||||
clear
|
||||
|
||||
You can write error injection commands to ``error-inj`` using
|
||||
``echo 'cmd' >error-inj`` or ``cat cmd.txt >error-inj``. The ``cat error-inj``
|
||||
output contains the current error commands. You can save the output to a file
|
||||
and use it as an input to ``error-inj`` later.
|
||||
|
||||
Basic Syntax
|
||||
------------
|
||||
|
||||
Leading spaces/tabs are ignored. If the next character is a ``#`` or the end
|
||||
of the line was reached, then the whole line is ignored. Otherwise a command
|
||||
is expected.
|
||||
|
||||
The error injection commands fall in two main groups: those relating to
|
||||
receiving CEC messages and those relating to transmitting CEC messages. In
|
||||
addition, there are commands to clear existing error injection commands and
|
||||
to create custom pulses on the CEC bus.
|
||||
|
||||
Most error injection commands can be executed for specific CEC opcodes or for
|
||||
all opcodes (``any``). Each command also has a 'mode' which can be ``off``
|
||||
(can be used to turn off an existing error injection command), ``once``
|
||||
(the default) which will trigger the error injection only once for the next
|
||||
received or transmitted message, ``always`` to always trigger the error
|
||||
injection and ``toggle`` to toggle the error injection on or off for every
|
||||
transmit or receive.
|
||||
|
||||
So '``any rx-nack``' will NACK the next received CEC message,
|
||||
'``any,always rx-nack``' will NACK all received CEC messages and
|
||||
'``0x82,toggle rx-nack``' will only NACK if an Active Source message was
|
||||
received and do that only for every other received message.
|
||||
|
||||
After an error was injected with mode ``once`` the error injection command
|
||||
is cleared automatically, so ``once`` is a one-time deal.
|
||||
|
||||
All combinations of ``<op>`` and error injection commands can co-exist. So
|
||||
this is fine::
|
||||
|
||||
0x9e tx-add-bytes 1
|
||||
0x9e tx-early-eom
|
||||
0x9f tx-add-bytes 2
|
||||
any rx-nack
|
||||
|
||||
All four error injection commands will be active simultaneously.
|
||||
|
||||
However, if the same ``<op>`` and command combination is specified,
|
||||
but with different arguments::
|
||||
|
||||
0x9e tx-add-bytes 1
|
||||
0x9e tx-add-bytes 2
|
||||
|
||||
Then the second will overwrite the first.
|
||||
|
||||
Clear Error Injections
|
||||
----------------------
|
||||
|
||||
``clear``
|
||||
Clear all error injections.
|
||||
|
||||
``rx-clear``
|
||||
Clear all receive error injections
|
||||
|
||||
``tx-clear``
|
||||
Clear all transmit error injections
|
||||
|
||||
``<op> clear``
|
||||
Clear all error injections for the given opcode.
|
||||
|
||||
``<op> rx-clear``
|
||||
Clear all receive error injections for the given opcode.
|
||||
|
||||
``<op> tx-clear``
|
||||
Clear all transmit error injections for the given opcode.
|
||||
|
||||
Receive Messages
|
||||
----------------
|
||||
|
||||
``<op>[,<mode>] rx-nack``
|
||||
NACK broadcast messages and messages directed to this CEC adapter.
|
||||
Every byte of the message will be NACKed in case the transmitter
|
||||
keeps transmitting after the first byte was NACKed.
|
||||
|
||||
``<op>[,<mode>] rx-low-drive <bit>``
|
||||
Force a Low Drive condition at this bit position. If <op> specifies
|
||||
a specific CEC opcode then the bit position must be at least 18,
|
||||
otherwise the opcode hasn't been received yet. This tests if the
|
||||
transmitter can handle the Low Drive condition correctly and reports
|
||||
the error correctly. Note that a Low Drive in the first 4 bits can also
|
||||
be interpreted as an Arbitration Lost condition by the transmitter.
|
||||
This is implementation dependent.
|
||||
|
||||
``<op>[,<mode>] rx-add-byte``
|
||||
Add a spurious 0x55 byte to the received CEC message, provided
|
||||
the message was 15 bytes long or less. This is useful to test
|
||||
the high-level protocol since spurious bytes should be ignored.
|
||||
|
||||
``<op>[,<mode>] rx-remove-byte``
|
||||
Remove the last byte from the received CEC message, provided it
|
||||
was at least 2 bytes long. This is useful to test the high-level
|
||||
protocol since messages that are too short should be ignored.
|
||||
|
||||
``<op>[,<mode>] rx-arb-lost <poll>``
|
||||
Generate a POLL message to trigger an Arbitration Lost condition.
|
||||
This command is only allowed for ``<op>`` values of ``next`` or ``all``.
|
||||
As soon as a start bit has been received the CEC adapter will switch
|
||||
to transmit mode and it will transmit a POLL message. By default this is
|
||||
0x0f, but it can also be specified explicitly via the ``<poll>`` argument.
|
||||
|
||||
This command can be used to test the Arbitration Lost condition in
|
||||
the remote CEC transmitter. Arbitration happens when two CEC adapters
|
||||
start sending a message at the same time. In that case the initiator
|
||||
with the most leading zeroes wins and the other transmitter has to
|
||||
stop transmitting ('Arbitration Lost'). This is very hard to test,
|
||||
except by using this error injection command.
|
||||
|
||||
This does not work if the remote CEC transmitter has logical address
|
||||
0 ('TV') since that will always win.
|
||||
|
||||
Transmit Messages
|
||||
-----------------
|
||||
|
||||
``tx-ignore-nack-until-eom``
|
||||
This setting changes the behavior of transmitting CEC messages. Normally
|
||||
as soon as the receiver NACKs a byte the transmit will stop, but the
|
||||
specification also allows that the full message is transmitted and only
|
||||
at the end will the transmitter look at the ACK bit. This is not
|
||||
recommended behavior since there is no point in keeping the CEC bus busy
|
||||
for longer than is strictly needed. Especially given how slow the bus is.
|
||||
|
||||
This setting can be used to test how well a receiver deals with
|
||||
transmitters that ignore NACKs until the very end of the message.
|
||||
|
||||
``<op>[,<mode>] tx-no-eom``
|
||||
Don't set the EOM bit. Normally the last byte of the message has the EOM
|
||||
(End-Of-Message) bit set. With this command the transmit will just stop
|
||||
without ever sending an EOM. This can be used to test how a receiver
|
||||
handles this case. Normally receivers have a time-out after which
|
||||
they will go back to the Idle state.
|
||||
|
||||
``<op>[,<mode>] tx-early-eom``
|
||||
Set the EOM bit one byte too soon. This obviously only works for messages
|
||||
of two bytes or more. The EOM bit will be set for the second-to-last byte
|
||||
and not for the final byte. The receiver should ignore the last byte in
|
||||
this case. Since the resulting message is likely to be too short for this
|
||||
same reason the whole message is typically ignored. The receiver should be
|
||||
in Idle state after the last byte was transmitted.
|
||||
|
||||
``<op>[,<mode>] tx-add-bytes <num>``
|
||||
Append ``<num>`` (1-255) spurious bytes to the message. The extra bytes
|
||||
have the value of the byte position in the message. So if you transmit a
|
||||
two byte message (e.g. a Get CEC Version message) and add 2 bytes, then
|
||||
the full message received by the remote CEC adapter is
|
||||
``0x40 0x9f 0x02 0x03``.
|
||||
|
||||
This command can be used to test buffer overflows in the receiver. E.g.
|
||||
what does it do when it receives more than the maximum message size of 16
|
||||
bytes.
|
||||
|
||||
``<op>[,<mode>] tx-remove-byte``
|
||||
Drop the last byte from the message, provided the message is at least
|
||||
two bytes long. The receiver should ignore messages that are too short.
|
||||
|
||||
``<op>[,<mode>] tx-short-bit <bit>``
|
||||
Make this bit period shorter than allowed. The bit position cannot be
|
||||
an Ack bit. If <op> specifies a specific CEC opcode then the bit position
|
||||
must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
Normally the period of a data bit is between 2.05 and 2.75 milliseconds.
|
||||
With this command the period of this bit is 1.8 milliseconds, this is
|
||||
done by reducing the time the CEC bus is high. This bit period is less
|
||||
than is allowed and the receiver should respond with a Low Drive
|
||||
condition.
|
||||
|
||||
This command is ignored for 0 bits in bit positions 0 to 3. This is
|
||||
because the receiver also looks for an Arbitration Lost condition in
|
||||
those first four bits and it is undefined what will happen if it
|
||||
sees a too-short 0 bit.
|
||||
|
||||
``<op>[,<mode>] tx-long-bit <bit>``
|
||||
Make this bit period longer than is valid. The bit position cannot be
|
||||
an Ack bit. If <op> specifies a specific CEC opcode then the bit position
|
||||
must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
Normally the period of a data bit is between 2.05 and 2.75 milliseconds.
|
||||
With this command the period of this bit is 2.9 milliseconds, this is
|
||||
done by increasing the time the CEC bus is high.
|
||||
|
||||
Even though this bit period is longer than is valid it is undefined what
|
||||
a receiver will do. It might just accept it, or it might time out and
|
||||
return to Idle state. Unfortunately the CEC specification is silent about
|
||||
this.
|
||||
|
||||
This command is ignored for 0 bits in bit positions 0 to 3. This is
|
||||
because the receiver also looks for an Arbitration Lost condition in
|
||||
those first four bits and it is undefined what will happen if it
|
||||
sees a too-long 0 bit.
|
||||
|
||||
``<op>[,<mode>] tx-short-start``
|
||||
Make this start bit period shorter than allowed. Normally the period of
|
||||
a start bit is between 4.3 and 4.7 milliseconds. With this command the
|
||||
period of the start bit is 4.1 milliseconds, this is done by reducing
|
||||
the time the CEC bus is high. This start bit period is less than is
|
||||
allowed and the receiver should return to Idle state when this is detected.
|
||||
|
||||
``<op>[,<mode>] tx-long-start``
|
||||
Make this start bit period longer than is valid. Normally the period of
|
||||
a start bit is between 4.3 and 4.7 milliseconds. With this command the
|
||||
period of the start bit is 5 milliseconds, this is done by increasing
|
||||
the time the CEC bus is high. This start bit period is more than is
|
||||
valid and the receiver should return to Idle state when this is detected.
|
||||
|
||||
Even though this start bit period is longer than is valid it is undefined
|
||||
what a receiver will do. It might just accept it, or it might time out and
|
||||
return to Idle state. Unfortunately the CEC specification is silent about
|
||||
this.
|
||||
|
||||
``<op>[,<mode>] tx-last-bit <bit>``
|
||||
Just stop transmitting after this bit. If <op> specifies a specific CEC
|
||||
opcode then the bit position must be at least 18, otherwise the opcode
|
||||
hasn't been received yet. This command can be used to test how the receiver
|
||||
reacts when a message just suddenly stops. It should time out and go back
|
||||
to Idle state.
|
||||
|
||||
``<op>[,<mode>] tx-low-drive <bit>``
|
||||
Force a Low Drive condition at this bit position. If <op> specifies a
|
||||
specific CEC opcode then the bit position must be at least 18, otherwise
|
||||
the opcode hasn't been received yet. This can be used to test how the
|
||||
receiver handles Low Drive conditions. Note that if this happens at bit
|
||||
positions 0-3 the receiver can interpret this as an Arbitration Lost
|
||||
condition. This is implementation dependent.
|
||||
|
||||
Custom Pulses
|
||||
-------------
|
||||
|
||||
``tx-custom-low-usecs <usecs>``
|
||||
This defines the duration in microseconds that the custom pulse pulls
|
||||
the CEC line low. The default is 1000 microseconds.
|
||||
|
||||
``tx-custom-high-usecs <usecs>``
|
||||
This defines the duration in microseconds that the custom pulse keeps the
|
||||
CEC line high (unless another CEC adapter pulls it low in that time).
|
||||
The default is 1000 microseconds. The total period of the custom pulse is
|
||||
``tx-custom-low-usecs + tx-custom-high-usecs``.
|
||||
|
||||
``<op>[,<mode>] tx-custom-bit <bit>``
|
||||
Send the custom bit instead of a regular data bit. The bit position cannot
|
||||
be an Ack bit. If <op> specifies a specific CEC opcode then the bit
|
||||
position must be at least 18, otherwise the opcode hasn't been received yet.
|
||||
|
||||
``<op>[,<mode>] tx-custom-start``
|
||||
Send the custom bit instead of a regular start bit.
|
||||
|
||||
``tx-custom-pulse``
|
||||
Transmit a single custom pulse as soon as the CEC bus is idle.
|
@ -1,66 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_BILINGUAL_CHANNEL_SELECT:
|
||||
|
||||
==============================
|
||||
AUDIO_BILINGUAL_CHANNEL_SELECT
|
||||
==============================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_BILINGUAL_CHANNEL_SELECT
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_BILINGUAL_CHANNEL_SELECT, struct *audio_channel_select)
|
||||
:name: AUDIO_BILINGUAL_CHANNEL_SELECT
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- audio_channel_select_t ch
|
||||
|
||||
- Select the output format of the audio (mono left/right, stereo).
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl is obsolete. Do not use in new drivers. It has been replaced
|
||||
by the V4L2 ``V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK`` control
|
||||
for MPEG decoders controlled through V4L2.
|
||||
|
||||
This ioctl call asks the Audio Device to select the requested channel
|
||||
for bilingual streams if possible.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,66 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_CHANNEL_SELECT:
|
||||
|
||||
====================
|
||||
AUDIO_CHANNEL_SELECT
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_CHANNEL_SELECT
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_CHANNEL_SELECT, struct *audio_channel_select)
|
||||
:name: AUDIO_CHANNEL_SELECT
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- audio_channel_select_t ch
|
||||
|
||||
- Select the output format of the audio (mono left/right, stereo).
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl is for Digital TV devices only. To control a V4L2 decoder use the
|
||||
V4L2 ``V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK`` control instead.
|
||||
|
||||
This ioctl call asks the Audio Device to select the requested channel if
|
||||
possible.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,55 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_CLEAR_BUFFER:
|
||||
|
||||
==================
|
||||
AUDIO_CLEAR_BUFFER
|
||||
==================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_CLEAR_BUFFER
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_CLEAR_BUFFER)
|
||||
:name: AUDIO_CLEAR_BUFFER
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to clear all software and hardware
|
||||
buffers of the audio decoder device.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,56 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_CONTINUE:
|
||||
|
||||
==============
|
||||
AUDIO_CONTINUE
|
||||
==============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_CONTINUE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_CONTINUE)
|
||||
:name: AUDIO_CONTINUE
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl restarts the decoding and playing process previously paused
|
||||
with AUDIO_PAUSE command.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,63 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _audio_fclose:
|
||||
|
||||
========================
|
||||
Digital TV audio close()
|
||||
========================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV audio close()
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int close(int fd)
|
||||
:name: dvb-audio-close
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call closes a previously opened audio device.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EBADF``
|
||||
|
||||
- fd is not a valid open file descriptor.
|
@ -1,115 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _audio_fopen:
|
||||
|
||||
=======================
|
||||
Digital TV audio open()
|
||||
=======================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV audio open()
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int open(const char *deviceName, int flags)
|
||||
:name: dvb-audio-open
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- const char \*deviceName
|
||||
|
||||
- Name of specific audio device.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int flags
|
||||
|
||||
- A bit-wise OR of the following flags:
|
||||
|
||||
- .. row 3
|
||||
|
||||
-
|
||||
- O_RDONLY read-only access
|
||||
|
||||
- .. row 4
|
||||
|
||||
-
|
||||
- O_RDWR read/write access
|
||||
|
||||
- .. row 5
|
||||
|
||||
-
|
||||
- O_NONBLOCK open in non-blocking mode
|
||||
|
||||
- .. row 6
|
||||
|
||||
-
|
||||
- (blocking mode is the default)
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call opens a named audio device (e.g.
|
||||
/dev/dvb/adapter0/audio0) for subsequent use. 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 Audio Device
|
||||
in O_RDWR mode. All other attempts to open the device in this mode will
|
||||
fail, and an error code will be returned. If the Audio Device is opened
|
||||
in O_RDONLY mode, the only ioctl call that can be used is
|
||||
AUDIO_GET_STATUS. All other call will return with an error code.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``ENODEV``
|
||||
|
||||
- Device driver not loaded/available.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``EBUSY``
|
||||
|
||||
- Device or resource busy.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``EINVAL``
|
||||
|
||||
- Invalid argument.
|
@ -1,91 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _audio_fwrite:
|
||||
|
||||
=========================
|
||||
Digital TV audio write()
|
||||
=========================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV audio write()
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: size_t write(int fd, const void *buf, size_t count)
|
||||
:name: dvb-audio-write
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- void \*buf
|
||||
|
||||
- Pointer to the buffer containing the PES data.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- size_t count
|
||||
|
||||
- Size of buf.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call can only be used if AUDIO_SOURCE_MEMORY is selected
|
||||
in the ioctl call AUDIO_SELECT_SOURCE. The data provided shall be in
|
||||
PES format. If O_NONBLOCK is not specified the function will block
|
||||
until buffer space is available. The amount of data to be transferred is
|
||||
implied by count.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EPERM``
|
||||
|
||||
- Mode AUDIO_SOURCE_MEMORY not selected.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``ENOMEM``
|
||||
|
||||
- Attempted to write more data than the internal buffer can hold.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``EBADF``
|
||||
|
||||
- fd is not a valid open file descriptor.
|
@ -1,63 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_GET_CAPABILITIES:
|
||||
|
||||
======================
|
||||
AUDIO_GET_CAPABILITIES
|
||||
======================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_GET_CAPABILITIES
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_GET_CAPABILITIES, unsigned int *cap)
|
||||
:name: AUDIO_GET_CAPABILITIES
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- unsigned int \*cap
|
||||
|
||||
- Returns a bit array of supported sound formats.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to tell us about the decoding
|
||||
capabilities of the audio hardware.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,63 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_GET_STATUS:
|
||||
|
||||
================
|
||||
AUDIO_GET_STATUS
|
||||
================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_GET_STATUS
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_GET_STATUS, struct audio_status *status)
|
||||
:name: AUDIO_GET_STATUS
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- struct audio_status \*status
|
||||
|
||||
- Returns the current state of Audio Device.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to return the current state of the
|
||||
Audio Device.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_PAUSE:
|
||||
|
||||
===========
|
||||
AUDIO_PAUSE
|
||||
===========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_PAUSE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_PAUSE)
|
||||
:name: AUDIO_PAUSE
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call suspends the audio stream being played. Decoding and
|
||||
playing are paused. It is then possible to restart again decoding and
|
||||
playing process of the audio stream using AUDIO_CONTINUE command.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,56 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_PLAY:
|
||||
|
||||
==========
|
||||
AUDIO_PLAY
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_PLAY
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_PLAY)
|
||||
:name: AUDIO_PLAY
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to start playing an audio stream
|
||||
from the selected source.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,65 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SELECT_SOURCE:
|
||||
|
||||
===================
|
||||
AUDIO_SELECT_SOURCE
|
||||
===================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SELECT_SOURCE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SELECT_SOURCE, struct audio_stream_source *source)
|
||||
:name: AUDIO_SELECT_SOURCE
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- audio_stream_source_t source
|
||||
|
||||
- Indicates the source that shall be used for the Audio stream.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call informs the audio device which source shall be used for
|
||||
the input data. The possible sources are demux or memory. If
|
||||
AUDIO_SOURCE_MEMORY is selected, the data is fed to the Audio Device
|
||||
through the write command.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,67 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_AV_SYNC:
|
||||
|
||||
=================
|
||||
AUDIO_SET_AV_SYNC
|
||||
=================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_AV_SYNC
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SET_AV_SYNC, boolean state)
|
||||
:name: AUDIO_SET_AV_SYNC
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- boolean state
|
||||
|
||||
- Tells the Digital TV subsystem if A/V synchronization shall be ON or OFF.
|
||||
|
||||
TRUE: AV-sync ON
|
||||
|
||||
FALSE: AV-sync OFF
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to turn ON or OFF A/V
|
||||
synchronization.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,70 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_BYPASS_MODE:
|
||||
|
||||
=====================
|
||||
AUDIO_SET_BYPASS_MODE
|
||||
=====================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_BYPASS_MODE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SET_BYPASS_MODE, boolean mode)
|
||||
:name: AUDIO_SET_BYPASS_MODE
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- boolean mode
|
||||
|
||||
- Enables or disables the decoding of the current Audio stream in
|
||||
the Digital TV subsystem.
|
||||
|
||||
TRUE: Bypass is disabled
|
||||
|
||||
FALSE: Bypass is enabled
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to bypass the Audio decoder and
|
||||
forward the stream without decoding. This mode shall be used if streams
|
||||
that can’t be handled by the Digital TV system shall be decoded. Dolby
|
||||
DigitalTM streams are automatically forwarded by the Digital TV subsystem if
|
||||
the hardware can handle it.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,67 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_ID:
|
||||
|
||||
============
|
||||
AUDIO_SET_ID
|
||||
============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_ID
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SET_ID, int id)
|
||||
:name: AUDIO_SET_ID
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- int id
|
||||
|
||||
- audio sub-stream id
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl selects which sub-stream is to be decoded if a program or
|
||||
system stream is sent to the video device. If no audio stream type is
|
||||
set the id has to be in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for
|
||||
AC3 and in [0xA0,0xA7] for LPCM. More specifications may follow for
|
||||
other stream types. If the stream type is set the id just specifies the
|
||||
substream id of the audio stream and only the first 5 bits are
|
||||
recognized.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,61 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_MIXER:
|
||||
|
||||
===============
|
||||
AUDIO_SET_MIXER
|
||||
===============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_MIXER
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SET_MIXER, struct audio_mixer *mix)
|
||||
:name: AUDIO_SET_MIXER
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- audio_mixer_t \*mix
|
||||
|
||||
- mixer settings.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl lets you adjust the mixer settings of the audio decoder.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,71 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_MUTE:
|
||||
|
||||
==============
|
||||
AUDIO_SET_MUTE
|
||||
==============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_MUTE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_SET_MUTE, boolean state)
|
||||
:name: AUDIO_SET_MUTE
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- boolean state
|
||||
|
||||
- Indicates if audio device shall mute or not.
|
||||
|
||||
TRUE: Audio Mute
|
||||
|
||||
FALSE: Audio Un-mute
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl is for Digital TV devices only. To control a V4L2 decoder use the
|
||||
V4L2 :ref:`VIDIOC_DECODER_CMD` with the
|
||||
``V4L2_DEC_CMD_START_MUTE_AUDIO`` flag instead.
|
||||
|
||||
This ioctl call asks the audio device to mute the stream that is
|
||||
currently being played.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,77 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_SET_STREAMTYPE:
|
||||
|
||||
====================
|
||||
AUDIO_SET_STREAMTYPE
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_SET_STREAMTYPE
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, AUDIO_SET_STREAMTYPE, int type)
|
||||
:name: AUDIO_SET_STREAMTYPE
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
-
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
-
|
||||
|
||||
- int type
|
||||
|
||||
- stream type
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl tells the driver which kind of audio stream to expect. This
|
||||
is useful if the stream offers several audio sub-streams like LPCM and
|
||||
AC3.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EINVAL``
|
||||
|
||||
- type is not a valid or supported stream type.
|
@ -1,56 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _AUDIO_STOP:
|
||||
|
||||
==========
|
||||
AUDIO_STOP
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
AUDIO_STOP
|
||||
|
||||
.. attention:: This ioctl is deprecated
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(int fd, AUDIO_STOP)
|
||||
:name: AUDIO_STOP
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call asks the Audio Device to stop playing the current
|
||||
stream.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,34 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dvb_audio:
|
||||
|
||||
#######################
|
||||
Digital TV Audio Device
|
||||
#######################
|
||||
|
||||
The Digital TV audio device controls the MPEG2 audio decoder of the Digital
|
||||
TV hardware. It can be accessed through ``/dev/dvb/adapter?/audio?``. Data
|
||||
types and and ioctl definitions can be accessed by including
|
||||
``linux/dvb/audio.h`` in your application.
|
||||
|
||||
Please note that some Digital TV cards don’t have their own MPEG decoder, which
|
||||
results in the omission of the audio and video device.
|
||||
|
||||
These ioctls were also used by V4L2 to control MPEG decoders implemented
|
||||
in V4L2. The use of these ioctls for that purpose has been made obsolete
|
||||
and proper V4L2 ioctls or controls have been created to replace that
|
||||
functionality.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
audio_data_types
|
||||
audio_function_calls
|
@ -1,123 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _audio_data_types:
|
||||
|
||||
****************
|
||||
Audio Data Types
|
||||
****************
|
||||
|
||||
This section describes the structures, data types and defines used when
|
||||
talking to the audio device.
|
||||
|
||||
.. c:type:: audio_stream_source
|
||||
|
||||
The audio stream source is set through the AUDIO_SELECT_SOURCE call
|
||||
and can take the following values, depending on whether we are replaying
|
||||
from an internal (demux) or external (user write) source.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_SOURCE_DEMUX,
|
||||
AUDIO_SOURCE_MEMORY
|
||||
} audio_stream_source_t;
|
||||
|
||||
AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the
|
||||
frontend or the DVR device) as the source of the video stream. If
|
||||
AUDIO_SOURCE_MEMORY is selected the stream comes from the application
|
||||
through the ``write()`` system call.
|
||||
|
||||
|
||||
.. c:type:: audio_play_state
|
||||
|
||||
The following values can be returned by the AUDIO_GET_STATUS call
|
||||
representing the state of audio playback.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STOPPED,
|
||||
AUDIO_PLAYING,
|
||||
AUDIO_PAUSED
|
||||
} audio_play_state_t;
|
||||
|
||||
|
||||
.. c:type:: audio_channel_select
|
||||
|
||||
The audio channel selected via AUDIO_CHANNEL_SELECT is determined by
|
||||
the following values.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STEREO,
|
||||
AUDIO_MONO_LEFT,
|
||||
AUDIO_MONO_RIGHT,
|
||||
AUDIO_MONO,
|
||||
AUDIO_STEREO_SWAPPED
|
||||
} audio_channel_select_t;
|
||||
|
||||
|
||||
.. c:type:: audio_status
|
||||
|
||||
The AUDIO_GET_STATUS call returns the following structure informing
|
||||
about various states of the playback operation.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct audio_status {
|
||||
boolean AV_sync_state;
|
||||
boolean mute_state;
|
||||
audio_play_state_t play_state;
|
||||
audio_stream_source_t stream_source;
|
||||
audio_channel_select_t channel_select;
|
||||
boolean bypass_mode;
|
||||
audio_mixer_t mixer_state;
|
||||
} audio_status_t;
|
||||
|
||||
|
||||
.. c:type:: audio_mixer
|
||||
|
||||
The following structure is used by the AUDIO_SET_MIXER call to set the
|
||||
audio volume.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct audio_mixer {
|
||||
unsigned int volume_left;
|
||||
unsigned int volume_right;
|
||||
} audio_mixer_t;
|
||||
|
||||
|
||||
.. _audio_encodings:
|
||||
|
||||
audio encodings
|
||||
===============
|
||||
|
||||
A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the
|
||||
following bits set according to the hardwares capabilities.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#define AUDIO_CAP_DTS 1
|
||||
#define AUDIO_CAP_LPCM 2
|
||||
#define AUDIO_CAP_MP1 4
|
||||
#define AUDIO_CAP_MP2 8
|
||||
#define AUDIO_CAP_MP3 16
|
||||
#define AUDIO_CAP_AAC 32
|
||||
#define AUDIO_CAP_OGG 64
|
||||
#define AUDIO_CAP_SDDS 128
|
||||
#define AUDIO_CAP_AC3 256
|
@ -1,37 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _audio_function_calls:
|
||||
|
||||
********************
|
||||
Audio Function Calls
|
||||
********************
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
audio-fopen
|
||||
audio-fclose
|
||||
audio-fwrite
|
||||
audio-stop
|
||||
audio-play
|
||||
audio-pause
|
||||
audio-continue
|
||||
audio-select-source
|
||||
audio-set-mute
|
||||
audio-set-av-sync
|
||||
audio-set-bypass-mode
|
||||
audio-channel-select
|
||||
audio-bilingual-channel-select
|
||||
audio-get-status
|
||||
audio-get-capabilities
|
||||
audio-clear-buffer
|
||||
audio-set-id
|
||||
audio-set-mixer
|
||||
audio-set-streamtype
|
@ -1,50 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _ca_fclose:
|
||||
|
||||
=====================
|
||||
Digital TV CA close()
|
||||
=====================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV CA close()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int close(int fd)
|
||||
:name: dvb-ca-close
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call closes a previously opened CA device.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,84 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _ca_fopen:
|
||||
|
||||
====================
|
||||
Digital TV CA open()
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV CA open()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int open(const char *name, int flags)
|
||||
:name: dvb-ca-open
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``name``
|
||||
Name of specific Digital TV CA device.
|
||||
|
||||
``flags``
|
||||
A bit-wise OR of the following flags:
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- - ``O_RDONLY``
|
||||
- read-only access
|
||||
|
||||
- - ``O_RDWR``
|
||||
- read/write access
|
||||
|
||||
- - ``O_NONBLOCK``
|
||||
- open in non-blocking mode
|
||||
(blocking mode is the default)
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call opens a named ca device (e.g. ``/dev/dvb/adapter?/ca?``)
|
||||
for subsequent use.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,53 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_GET_CAP:
|
||||
|
||||
==========
|
||||
CA_GET_CAP
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_GET_CAP
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_GET_CAP, struct ca_caps *caps)
|
||||
:name: CA_GET_CAP
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
``caps``
|
||||
Pointer to struct :c:type:`ca_caps`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Queries the Kernel for information about the available CA and descrambler
|
||||
slots, and their types.
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned and :c:type:`ca_caps` is filled.
|
||||
|
||||
On error, -1 is returned and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,49 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_GET_DESCR_INFO:
|
||||
|
||||
=================
|
||||
CA_GET_DESCR_INFO
|
||||
=================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_GET_DESCR_INFO
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_GET_DESCR_INFO, struct ca_descr_info *desc)
|
||||
:name: CA_GET_DESCR_INFO
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
``desc``
|
||||
Pointer to struct :c:type:`ca_descr_info`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns information about all descrambler slots.
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, and :c:type:`ca_descr_info` is filled.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,59 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_GET_MSG:
|
||||
|
||||
==========
|
||||
CA_GET_MSG
|
||||
==========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_GET_MSG
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_GET_MSG, struct ca_msg *msg)
|
||||
:name: CA_GET_MSG
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
``msg``
|
||||
Pointer to struct :c:type:`ca_msg`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Receives a message via a CI CA module.
|
||||
|
||||
.. note::
|
||||
|
||||
Please notice that, on most drivers, this is done by reading from
|
||||
the /dev/adapter?/ca? device node.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,64 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_GET_SLOT_INFO:
|
||||
|
||||
================
|
||||
CA_GET_SLOT_INFO
|
||||
================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_GET_SLOT_INFO
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_GET_SLOT_INFO, struct ca_slot_info *info)
|
||||
:name: CA_GET_SLOT_INFO
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <cec-open>`.
|
||||
|
||||
``info``
|
||||
Pointer to struct :c:type:`ca_slot_info`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Returns information about a CA slot identified by
|
||||
:c:type:`ca_slot_info`.slot_num.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned, and :c:type:`ca_slot_info` is filled.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- - ``ENODEV``
|
||||
- the slot is not available.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,51 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_RESET:
|
||||
|
||||
========
|
||||
CA_RESET
|
||||
========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_RESET
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_RESET)
|
||||
:name: CA_RESET
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <cec-open>`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Puts the Conditional Access hardware on its initial state. It should
|
||||
be called before start using the CA hardware.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,58 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_SEND_MSG:
|
||||
|
||||
===========
|
||||
CA_SEND_MSG
|
||||
===========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_SEND_MSG
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_SEND_MSG, struct ca_msg *msg)
|
||||
:name: CA_SEND_MSG
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <cec-open>`.
|
||||
|
||||
``msg``
|
||||
Pointer to struct :c:type:`ca_msg`.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Sends a message via a CI CA module.
|
||||
|
||||
.. note::
|
||||
|
||||
Please notice that, on most drivers, this is done by writing
|
||||
to the /dev/adapter?/ca? device node.
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,53 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _CA_SET_DESCR:
|
||||
|
||||
============
|
||||
CA_SET_DESCR
|
||||
============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
CA_SET_DESCR
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, CA_SET_DESCR, struct ca_descr *desc)
|
||||
:name: CA_SET_DESCR
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <cec-open>`.
|
||||
|
||||
``msg``
|
||||
Pointer to struct :c:type:`ca_descr`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
CA_SET_DESCR is used for feeding descrambler CA slots with descrambling
|
||||
keys (referred as control words).
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,32 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dvb_ca:
|
||||
|
||||
####################
|
||||
Digital TV CA Device
|
||||
####################
|
||||
|
||||
The Digital TV CA device controls the conditional access hardware. It
|
||||
can be accessed through ``/dev/dvb/adapter?/ca?``. Data types and and ioctl
|
||||
definitions can be accessed by including ``linux/dvb/ca.h`` in your
|
||||
application.
|
||||
|
||||
.. note::
|
||||
|
||||
There are three ioctls at this API that aren't documented:
|
||||
:ref:`CA_GET_MSG`, :ref:`CA_SEND_MSG` and :ref:`CA_SET_DESCR`.
|
||||
Documentation for them are welcome.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ca_data_types
|
||||
ca_function_calls
|
||||
ca_high_level
|
@ -1,16 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _ca_data_types:
|
||||
|
||||
*************
|
||||
CA Data Types
|
||||
*************
|
||||
|
||||
.. kernel-doc:: include/uapi/linux/dvb/ca.h
|
@ -1,27 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _ca_function_calls:
|
||||
|
||||
*****************
|
||||
CA Function Calls
|
||||
*****************
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ca-fopen
|
||||
ca-fclose
|
||||
ca-reset
|
||||
ca-get-cap
|
||||
ca-get-slot-info
|
||||
ca-get-descr-info
|
||||
ca-get-msg
|
||||
ca-send-msg
|
||||
ca-set-descr
|
@ -1,30 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dvb_demux:
|
||||
|
||||
#######################
|
||||
Digital TV Demux Device
|
||||
#######################
|
||||
|
||||
The Digital TV demux device controls the MPEG-TS filters for the
|
||||
digital TV. If the driver and hardware supports, those filters are
|
||||
implemented at the hardware. Otherwise, the Kernel provides a software
|
||||
emulation.
|
||||
|
||||
It can be accessed through ``/dev/adapter?/demux?``. Data types and and
|
||||
ioctl definitions can be accessed by including ``linux/dvb/dmx.h`` in
|
||||
your application.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dmx_types
|
||||
dmx_fcalls
|
@ -1,56 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_ADD_PID:
|
||||
|
||||
===========
|
||||
DMX_ADD_PID
|
||||
===========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_ADD_PID
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, DMX_ADD_PID, __u16 *pid)
|
||||
:name: DMX_ADD_PID
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``pid``
|
||||
PID number to be filtered.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call allows to add multiple PIDs to a transport stream filter
|
||||
previously set up with :ref:`DMX_SET_PES_FILTER` and output equal to
|
||||
:c:type:`DMX_OUT_TSDEMUX_TAP <dmx_output>`.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,97 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_EXPBUF:
|
||||
|
||||
****************
|
||||
ioctl DMX_EXPBUF
|
||||
****************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
DMX_EXPBUF - Export a buffer as a DMABUF file descriptor.
|
||||
|
||||
.. warning:: this API is still experimental
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp )
|
||||
:name: DMX_EXPBUF
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <dmx_fopen>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`dmx_exportbuffer`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl is an extension to the memory mapping I/O method.
|
||||
It can be used to export a buffer as a DMABUF file at any time after
|
||||
buffers have been allocated with the :ref:`DMX_REQBUFS` ioctl.
|
||||
|
||||
To export a buffer, applications fill struct :c:type:`dmx_exportbuffer`.
|
||||
Applications must set the ``index`` field. Valid index numbers
|
||||
range from zero to the number of buffers allocated with :ref:`DMX_REQBUFS`
|
||||
(struct :c:type:`dmx_requestbuffers` ``count``) minus one.
|
||||
Additional flags may be posted in the ``flags`` field. Refer to a manual
|
||||
for open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY,
|
||||
and O_RDWR are supported.
|
||||
All other fields must be set to zero. In the
|
||||
case of multi-planar API, every plane is exported separately using
|
||||
multiple :ref:`DMX_EXPBUF` calls.
|
||||
|
||||
After calling :ref:`DMX_EXPBUF` the ``fd`` field will be set by a
|
||||
driver, on success. This is a DMABUF file descriptor. The application may
|
||||
pass it to other DMABUF-aware devices. It is recommended to close a DMABUF
|
||||
file when it is no longer used to allow the associated memory to be reclaimed.
|
||||
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd)
|
||||
{
|
||||
struct dmx_exportbuffer expbuf;
|
||||
|
||||
memset(&expbuf, 0, sizeof(expbuf));
|
||||
expbuf.type = bt;
|
||||
expbuf.index = index;
|
||||
if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) {
|
||||
perror("DMX_EXPBUF");
|
||||
return -1;
|
||||
}
|
||||
|
||||
*dmafd = expbuf.fd;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
EINVAL
|
||||
A queue is not in MMAP mode or DMABUF exporting is not supported or
|
||||
``flags`` or ``index`` fields are invalid.
|
@ -1,52 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_fclose:
|
||||
|
||||
========================
|
||||
Digital TV demux close()
|
||||
========================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV demux close()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int close(int fd)
|
||||
:name: dvb-dmx-close
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to
|
||||
:c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call deactivates and deallocates a filter that was
|
||||
previously allocated via the :c:func:`open() <dvb-dmx-open>` call.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error, -1 is returned and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,98 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_fopen:
|
||||
|
||||
=======================
|
||||
Digital TV demux open()
|
||||
=======================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV demux open()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int open(const char *deviceName, int flags)
|
||||
:name: dvb-dmx-open
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``name``
|
||||
Name of specific Digital TV demux device.
|
||||
|
||||
``flags``
|
||||
A bit-wise OR of the following flags:
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
-
|
||||
- ``O_RDONLY``
|
||||
- read-only access
|
||||
|
||||
-
|
||||
- ``O_RDWR``
|
||||
- read/write access
|
||||
|
||||
-
|
||||
- ``O_NONBLOCK``
|
||||
- open in non-blocking mode
|
||||
(blocking mode is the default)
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call, used with a device name of ``/dev/dvb/adapter?/demux?``,
|
||||
allocates a new filter and returns a handle which can be used for
|
||||
subsequent control of that filter. This call has to be made for each
|
||||
filter to be used, i.e. every returned file descriptor is a reference to
|
||||
a single filter. ``/dev/dvb/adapter?/dvr?`` is a logical device to be used
|
||||
for retrieving Transport Streams for digital video recording. When
|
||||
reading from this device a transport stream containing the packets from
|
||||
all PES filters set in the corresponding demux device
|
||||
(``/dev/dvb/adapter?/demux?``) having the output set to ``DMX_OUT_TS_TAP``.
|
||||
A recorded Transport Stream is replayed by writing to this device.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- - ``EMFILE``
|
||||
- “Too many open files”, i.e. no more filters available.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,87 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_fread:
|
||||
|
||||
=======================
|
||||
Digital TV demux read()
|
||||
=======================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV demux read()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: size_t read(int fd, void *buf, size_t count)
|
||||
:name: dvb-dmx-read
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
``buf``
|
||||
Buffer to be filled
|
||||
|
||||
``count``
|
||||
Max number of bytes to read
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call returns filtered data, which might be section or Packetized
|
||||
Elementary Stream (PES) data. The filtered data is transferred from
|
||||
the driver’s internal circular buffer to ``buf``. The maximum amount of data
|
||||
to be transferred is implied by count.
|
||||
|
||||
.. note::
|
||||
|
||||
if a section filter created with
|
||||
:c:type:`DMX_CHECK_CRC <dmx_sct_filter_params>` flag set,
|
||||
data that fails on CRC check will be silently ignored.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- - ``EWOULDBLOCK``
|
||||
- No data to return and ``O_NONBLOCK`` was specified.
|
||||
|
||||
- - ``EOVERFLOW``
|
||||
- The filtered data was not read from the buffer in due time,
|
||||
resulting in non-read data being lost. The buffer is flushed.
|
||||
|
||||
- - ``ETIMEDOUT``
|
||||
- The section was not loaded within the stated timeout period.
|
||||
See ioctl :ref:`DMX_SET_FILTER` for how to set a timeout.
|
||||
|
||||
- - ``EFAULT``
|
||||
- The driver failed to write to the callers buffer due to an
|
||||
invalid \*buf pointer.
|
||||
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,79 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_fwrite:
|
||||
|
||||
========================
|
||||
Digital TV demux write()
|
||||
========================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
Digital TV demux write()
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: ssize_t write(int fd, const void *buf, size_t count)
|
||||
:name: dvb-dmx-write
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by a previous call to :c:func:`open() <dvb-ca-open>`.
|
||||
|
||||
``buf``
|
||||
Buffer with data to be written
|
||||
|
||||
``count``
|
||||
Number of bytes at the buffer
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This system call is only provided by the logical device
|
||||
``/dev/dvb/adapter?/dvr?``, associated with the physical demux device that
|
||||
provides the actual DVR functionality. It is used for replay of a
|
||||
digitally recorded Transport Stream. Matching filters have to be defined
|
||||
in the corresponding physical demux device, ``/dev/dvb/adapter?/demux?``.
|
||||
The amount of data to be transferred is implied by count.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- - ``EWOULDBLOCK``
|
||||
- No data was written. This might happen if ``O_NONBLOCK`` was
|
||||
specified and there is no more buffer space available (if
|
||||
``O_NONBLOCK`` is not specified the function will block until buffer
|
||||
space is available).
|
||||
|
||||
- - ``EBUSY``
|
||||
- This error code indicates that there are conflicting requests. The
|
||||
corresponding demux device is setup to receive data from the
|
||||
front- end. Make sure that these filters are stopped and that the
|
||||
filters with input set to ``DMX_IN_DVR`` are started.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,71 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_GET_PES_PIDS:
|
||||
|
||||
================
|
||||
DMX_GET_PES_PIDS
|
||||
================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_GET_PES_PIDS
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, DMX_GET_PES_PIDS, __u16 pids[5])
|
||||
:name: DMX_GET_PES_PIDS
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``pids``
|
||||
Array used to store 5 Program IDs.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl allows to query a DVB device to return the first PID used
|
||||
by audio, video, textext, subtitle and PCR programs on a given service.
|
||||
They're stored as:
|
||||
|
||||
======================= ======== =======================================
|
||||
PID element position content
|
||||
======================= ======== =======================================
|
||||
pids[DMX_PES_AUDIO] 0 first audio PID
|
||||
pids[DMX_PES_VIDEO] 1 first video PID
|
||||
pids[DMX_PES_TELETEXT] 2 first teletext PID
|
||||
pids[DMX_PES_SUBTITLE] 3 first subtitle PID
|
||||
pids[DMX_PES_PCR] 4 first Program Clock Reference PID
|
||||
======================= ======== =======================================
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
A value equal to 0xffff means that the PID was not filled by the
|
||||
Kernel.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,73 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_GET_STC:
|
||||
|
||||
===========
|
||||
DMX_GET_STC
|
||||
===========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_GET_STC
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_GET_STC, struct dmx_stc *stc)
|
||||
:name: DMX_GET_STC
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``stc``
|
||||
Pointer to :c:type:`dmx_stc` where the stc data is to be stored.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call returns the current value of the system time counter
|
||||
(which is driven by a PES filter of type :c:type:`DMX_PES_PCR <dmx_ts_pes>`).
|
||||
Some hardware supports more than one STC, so you must specify which one by
|
||||
setting the :c:type:`num <dmx_stc>` field of stc before the ioctl (range 0...n).
|
||||
The result is returned in form of a ratio with a 64 bit numerator
|
||||
and a 32 bit denominator, so the real 90kHz STC value is
|
||||
``stc->stc / stc->base``.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EINVAL``
|
||||
|
||||
- Invalid stc number.
|
||||
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,125 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx-mmap:
|
||||
|
||||
*****************
|
||||
Digital TV mmap()
|
||||
*****************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
dmx-mmap - Map device memory into application address space
|
||||
|
||||
.. warning:: this API is still experimental
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
|
||||
.. c:function:: void *mmap( void *start, size_t length, int prot, int flags, int fd, off_t offset )
|
||||
:name: dmx-mmap
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``start``
|
||||
Map the buffer to this address in the application's address space.
|
||||
When the ``MAP_FIXED`` flag is specified, ``start`` 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 ``NULL`` pointer here.
|
||||
|
||||
``length``
|
||||
Length of the memory area to map. This must be a multiple of the
|
||||
DVB packet length (188, on most drivers).
|
||||
|
||||
``prot``
|
||||
The ``prot`` argument describes the desired memory protection.
|
||||
Regardless of the device type and the direction of data exchange it
|
||||
should be set to ``PROT_READ`` | ``PROT_WRITE``, permitting read
|
||||
and write access to image buffers. Drivers should support at least
|
||||
this combination of flags.
|
||||
|
||||
``flags``
|
||||
The ``flags`` 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.
|
||||
|
||||
``MAP_FIXED`` requests that the driver selects no other address than
|
||||
the one specified. If the specified address cannot be used,
|
||||
:ref:`mmap() <dmx-mmap>` will fail. If ``MAP_FIXED`` is specified,
|
||||
``start`` must be a multiple of the pagesize. Use of this option is
|
||||
discouraged.
|
||||
|
||||
One of the ``MAP_SHARED`` or ``MAP_PRIVATE`` flags must be set.
|
||||
``MAP_SHARED`` allows applications to share the mapped memory with
|
||||
other (e. g. child-) processes.
|
||||
|
||||
.. note::
|
||||
|
||||
The Linux Digital TV applications should not set the
|
||||
``MAP_PRIVATE``, ``MAP_DENYWRITE``, ``MAP_EXECUTABLE`` or ``MAP_ANON``
|
||||
flags.
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <dmx_fopen>`.
|
||||
|
||||
``offset``
|
||||
Offset of the buffer in device memory, as returned by
|
||||
:ref:`DMX_QUERYBUF` ioctl.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The :ref:`mmap() <dmx-mmap>` function asks to map ``length`` bytes starting at
|
||||
``offset`` in the memory of the device specified by ``fd`` into the
|
||||
application address space, preferably at address ``start``. This latter
|
||||
address is a hint only, and is usually specified as 0.
|
||||
|
||||
Suitable length and offset parameters are queried with the
|
||||
:ref:`DMX_QUERYBUF` ioctl. Buffers must be allocated with the
|
||||
:ref:`DMX_REQBUFS` ioctl before they can be queried.
|
||||
|
||||
To unmap buffers the :ref:`munmap() <dmx-munmap>` function is used.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success :ref:`mmap() <dmx-mmap>` returns a pointer to the mapped buffer. On
|
||||
error ``MAP_FAILED`` (-1) is returned, and the ``errno`` variable is set
|
||||
appropriately. Possible error codes are:
|
||||
|
||||
EBADF
|
||||
``fd`` is not a valid file descriptor.
|
||||
|
||||
EACCES
|
||||
``fd`` is not open for reading and writing.
|
||||
|
||||
EINVAL
|
||||
The ``start`` or ``length`` or ``offset`` are not suitable. (E. g.
|
||||
they are too large, or not aligned on a ``PAGESIZE`` boundary.)
|
||||
|
||||
The ``flags`` or ``prot`` value is not supported.
|
||||
|
||||
No buffers have been allocated with the
|
||||
:ref:`DMX_REQBUFS` ioctl.
|
||||
|
||||
ENOMEM
|
||||
Not enough physical or virtual memory was available to complete the
|
||||
request.
|
@ -1,63 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx-munmap:
|
||||
|
||||
************
|
||||
DVB munmap()
|
||||
************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
dmx-munmap - Unmap device memory
|
||||
|
||||
.. warning:: This API is still experimental.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
|
||||
.. c:function:: int munmap( void *start, size_t length )
|
||||
:name: dmx-munmap
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``start``
|
||||
Address of the mapped buffer as returned by the
|
||||
:ref:`mmap() <dmx-mmap>` function.
|
||||
|
||||
``length``
|
||||
Length of the mapped buffer. This must be the same value as given to
|
||||
:ref:`mmap() <dmx-mmap>`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Unmaps a previously with the :ref:`mmap() <dmx-mmap>` function mapped
|
||||
buffer and frees it, if possible.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success :ref:`munmap() <dmx-munmap>` returns 0, on failure -1 and the
|
||||
``errno`` variable is set appropriately:
|
||||
|
||||
EINVAL
|
||||
The ``start`` or ``length`` is incorrect, or no buffers have been
|
||||
mapped yet.
|
@ -1,93 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_QBUF:
|
||||
|
||||
*************************
|
||||
ioctl DMX_QBUF, DMX_DQBUF
|
||||
*************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
DMX_QBUF - DMX_DQBUF - Exchange a buffer with the driver
|
||||
|
||||
.. warning:: this API is still experimental
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_QBUF, struct dmx_buffer *argp )
|
||||
:name: DMX_QBUF
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_DQBUF, struct dmx_buffer *argp )
|
||||
:name: DMX_DQBUF
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <dmx_fopen>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`dmx_buffer`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Applications call the ``DMX_QBUF`` ioctl to enqueue an empty
|
||||
(capturing) or filled (output) buffer in the driver's incoming queue.
|
||||
The semantics depend on the selected I/O method.
|
||||
|
||||
To enqueue a buffer applications set the ``index`` field. Valid index
|
||||
numbers range from zero to the number of buffers allocated with
|
||||
:ref:`DMX_REQBUFS` (struct :c:type:`dmx_requestbuffers` ``count``) minus
|
||||
one. The contents of the struct :c:type:`dmx_buffer` returned
|
||||
by a :ref:`DMX_QUERYBUF` ioctl will do as well.
|
||||
|
||||
When ``DMX_QBUF`` is called with a pointer to this structure, it locks the
|
||||
memory pages of the buffer in physical memory, so they cannot be swapped
|
||||
out to disk. Buffers remain locked until dequeued, until the
|
||||
the device is closed.
|
||||
|
||||
Applications call the ``DMX_DQBUF`` ioctl to dequeue a filled
|
||||
(capturing) buffer from the driver's outgoing queue.
|
||||
They just set the ``index`` field with the buffer ID to be queued.
|
||||
When ``DMX_DQBUF`` is called with a pointer to struct :c:type:`dmx_buffer`,
|
||||
the driver fills the remaining fields or returns an error code.
|
||||
|
||||
By default ``DMX_DQBUF`` blocks when no buffer is in the outgoing
|
||||
queue. When the ``O_NONBLOCK`` flag was given to the
|
||||
:ref:`open() <dmx_fopen>` function, ``DMX_DQBUF`` returns
|
||||
immediately with an ``EAGAIN`` error code when no buffer is available.
|
||||
|
||||
The struct :c:type:`dmx_buffer` structure is specified in
|
||||
:ref:`buffer`.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
EAGAIN
|
||||
Non-blocking I/O has been selected using ``O_NONBLOCK`` and no
|
||||
buffer was in the outgoing queue.
|
||||
|
||||
EINVAL
|
||||
The ``index`` is out of bounds, or no buffers have been allocated yet.
|
||||
|
||||
EIO
|
||||
``DMX_DQBUF`` failed due to an internal error. Can also indicate
|
||||
temporary problems like signal loss or CRC errors.
|
@ -1,72 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_QUERYBUF:
|
||||
|
||||
******************
|
||||
ioctl DMX_QUERYBUF
|
||||
******************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
DMX_QUERYBUF - Query the status of a buffer
|
||||
|
||||
.. warning:: this API is still experimental
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_QUERYBUF, struct dvb_buffer *argp )
|
||||
:name: DMX_QUERYBUF
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <dmx_fopen>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`dvb_buffer`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl is part of the mmap streaming I/O method. It can
|
||||
be used to query the status of a buffer at any time after buffers have
|
||||
been allocated with the :ref:`DMX_REQBUFS` ioctl.
|
||||
|
||||
Applications set the ``index`` field. Valid index numbers range from zero
|
||||
to the number of buffers allocated with :ref:`DMX_REQBUFS`
|
||||
(struct :c:type:`dvb_requestbuffers` ``count``) minus one.
|
||||
|
||||
After calling :ref:`DMX_QUERYBUF` with a pointer to this structure,
|
||||
drivers return an error code or fill the rest of the structure.
|
||||
|
||||
On success, the ``offset`` will contain the offset of the buffer from the
|
||||
start of the device memory, the ``length`` field its size, and the
|
||||
``bytesused`` the number of bytes occupied by data in the buffer (payload).
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, the ``offset`` will contain the offset of the
|
||||
buffer from the start of the device memory, the ``length`` field its size,
|
||||
and the ``bytesused`` the number of bytes occupied by data in the buffer
|
||||
(payload).
|
||||
|
||||
On error it returns -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
EINVAL
|
||||
The ``index`` is out of bounds.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_REMOVE_PID:
|
||||
|
||||
==============
|
||||
DMX_REMOVE_PID
|
||||
==============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_REMOVE_PID
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl(fd, DMX_REMOVE_PID, __u16 *pid)
|
||||
:name: DMX_REMOVE_PID
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``pid``
|
||||
PID of the PES filter to be removed.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call allows to remove a PID when multiple PIDs are set on a
|
||||
transport stream filter, e. g. a filter previously set up with output
|
||||
equal to :c:type:`DMX_OUT_TSDEMUX_TAP <dmx_output>`, created via either
|
||||
:ref:`DMX_SET_PES_FILTER` or :ref:`DMX_ADD_PID`.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,83 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_REQBUFS:
|
||||
|
||||
*****************
|
||||
ioctl DMX_REQBUFS
|
||||
*****************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
DMX_REQBUFS - Initiate Memory Mapping and/or DMA buffer I/O
|
||||
|
||||
.. warning:: this API is still experimental
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_REQBUFS, struct dmx_requestbuffers *argp )
|
||||
:name: DMX_REQBUFS
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <dmx_fopen>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`dmx_requestbuffers`.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl is used to initiate a memory mapped or DMABUF based demux I/O.
|
||||
|
||||
Memory mapped buffers are located in device memory and must be allocated
|
||||
with this ioctl before they can be mapped into the application's address
|
||||
space. User buffers are allocated by applications themselves, and this
|
||||
ioctl is merely used to switch the driver into user pointer I/O mode and
|
||||
to setup some internal structures. Similarly, DMABUF buffers are
|
||||
allocated by applications through a device driver, and this ioctl only
|
||||
configures the driver into DMABUF I/O mode without performing any direct
|
||||
allocation.
|
||||
|
||||
To allocate device buffers applications initialize all fields of the
|
||||
struct :c:type:`dmx_requestbuffers` structure. They set the ``count`` field
|
||||
to the desired number of buffers, and ``size`` to the size of each
|
||||
buffer.
|
||||
|
||||
When the ioctl is called with a pointer to this structure, the driver will
|
||||
attempt to allocate the requested number of buffers and it stores the actual
|
||||
number allocated in the ``count`` field. The ``count`` can be smaller than the number requested, even zero, when the driver runs out of free memory. A larger
|
||||
number is also possible when the driver requires more buffers to
|
||||
function correctly. The actual allocated buffer size can is returned
|
||||
at ``size``, and can be smaller than what's requested.
|
||||
|
||||
When this I/O method is not supported, the ioctl returns an ``EOPNOTSUPP``
|
||||
error code.
|
||||
|
||||
Applications can call :ref:`DMX_REQBUFS` again to change the number of
|
||||
buffers, however this cannot succeed when any buffers are still mapped.
|
||||
A ``count`` value of zero frees all buffers, after aborting or finishing
|
||||
any DMA in progress.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
EOPNOTSUPP
|
||||
The the requested I/O method is not supported.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_SET_BUFFER_SIZE:
|
||||
|
||||
===================
|
||||
DMX_SET_BUFFER_SIZE
|
||||
===================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_SET_BUFFER_SIZE
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_SET_BUFFER_SIZE, unsigned long size)
|
||||
:name: DMX_SET_BUFFER_SIZE
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``size``
|
||||
Unsigned long size
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call is used to set the size of the circular buffer used for
|
||||
filtered data. The default size is two maximum sized sections, i.e. if
|
||||
this function is not called a buffer size of ``2 * 4096`` bytes will be
|
||||
used.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,64 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_SET_FILTER:
|
||||
|
||||
==============
|
||||
DMX_SET_FILTER
|
||||
==============
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_SET_FILTER
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_SET_FILTER, struct dmx_sct_filter_params *params)
|
||||
:name: DMX_SET_FILTER
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``params``
|
||||
|
||||
Pointer to structure containing filter parameters.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call sets up a filter according to the filter and mask
|
||||
parameters provided. A timeout may be defined stating number of seconds
|
||||
to wait for a section to be loaded. A value of 0 means that no timeout
|
||||
should be applied. Finally there is a flag field where it is possible to
|
||||
state whether a section should be CRC-checked, whether the filter should
|
||||
be a ”one-shot” filter, i.e. if the filtering operation should be
|
||||
stopped after the first section is received, and whether the filtering
|
||||
operation should be started immediately (without waiting for a
|
||||
:ref:`DMX_START` ioctl call). If a filter was previously set-up, this
|
||||
filter will be canceled, and the receive buffer will be flushed.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,76 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_SET_PES_FILTER:
|
||||
|
||||
==================
|
||||
DMX_SET_PES_FILTER
|
||||
==================
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_SET_PES_FILTER
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_SET_PES_FILTER, struct dmx_pes_filter_params *params)
|
||||
:name: DMX_SET_PES_FILTER
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
``params``
|
||||
Pointer to structure containing filter parameters.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call sets up a PES filter according to the parameters
|
||||
provided. By a PES filter is meant a filter that is based just on the
|
||||
packet identifier (PID), i.e. no PES header or payload filtering
|
||||
capability is supported.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 16
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EBUSY``
|
||||
|
||||
- This error code indicates that there are conflicting requests.
|
||||
There are active filters filtering data from another input source.
|
||||
Make sure that these filters are stopped before starting this
|
||||
filter.
|
||||
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,75 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_START:
|
||||
|
||||
=========
|
||||
DMX_START
|
||||
=========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_START
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_START)
|
||||
:name: DMX_START
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call is used to start the actual filtering operation defined
|
||||
via the ioctl calls :ref:`DMX_SET_FILTER` or :ref:`DMX_SET_PES_FILTER`.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. tabularcolumns:: |p{2.5cm}|p{15.0cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EINVAL``
|
||||
|
||||
- Invalid argument, i.e. no filtering parameters provided via the
|
||||
:ref:`DMX_SET_FILTER` or :ref:`DMX_SET_PES_FILTER` ioctls.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``EBUSY``
|
||||
|
||||
- This error code indicates that there are conflicting requests.
|
||||
There are active filters filtering data from another input source.
|
||||
Make sure that these filters are stopped before starting this
|
||||
filter.
|
||||
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,52 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _DMX_STOP:
|
||||
|
||||
========
|
||||
DMX_STOP
|
||||
========
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
DMX_STOP
|
||||
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
|
||||
.. c:function:: int ioctl( int fd, DMX_STOP)
|
||||
:name: DMX_STOP
|
||||
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-dmx-open>`.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This ioctl call is used to stop the actual filtering operation defined
|
||||
via the ioctl calls :ref:`DMX_SET_FILTER` or :ref:`DMX_SET_PES_FILTER` and
|
||||
started via the :ref:`DMX_START` command.
|
||||
|
||||
|
||||
Return Value
|
||||
------------
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,37 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_fcalls:
|
||||
|
||||
********************
|
||||
Demux Function Calls
|
||||
********************
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dmx-fopen
|
||||
dmx-fclose
|
||||
dmx-fread
|
||||
dmx-fwrite
|
||||
dmx-mmap
|
||||
dmx-munmap
|
||||
dmx-start
|
||||
dmx-stop
|
||||
dmx-set-filter
|
||||
dmx-set-pes-filter
|
||||
dmx-set-buffer-size
|
||||
dmx-get-stc
|
||||
dmx-get-pes-pids
|
||||
dmx-add-pid
|
||||
dmx-remove-pid
|
||||
dmx-reqbufs
|
||||
dmx-querybuf
|
||||
dmx-expbuf
|
||||
dmx-qbuf
|
@ -1,16 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dmx_types:
|
||||
|
||||
****************
|
||||
Demux Data Types
|
||||
****************
|
||||
|
||||
.. kernel-doc:: include/uapi/linux/dvb/dmx.h
|
@ -1,32 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dvb-fe-read-status:
|
||||
|
||||
***************************************
|
||||
Querying frontend status and statistics
|
||||
***************************************
|
||||
|
||||
Once :ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` 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.
|
||||
|
||||
The information about the frontend tuner locking status can be queried
|
||||
using :ref:`FE_READ_STATUS`.
|
||||
|
||||
Signal statistics are provided via
|
||||
:ref:`FE_GET_PROPERTY`.
|
||||
|
||||
.. note::
|
||||
|
||||
Most statistics require the demodulator to be fully locked
|
||||
(e. g. with :c:type:`FE_HAS_LOCK <fe_status>` bit set). See
|
||||
:ref:`Frontend statistics indicators <frontend-stat-properties>` for
|
||||
more details.
|
@ -1,22 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. c:type:: dvb_frontend_event
|
||||
|
||||
***************
|
||||
frontend events
|
||||
***************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dvb_frontend_event {
|
||||
fe_status_t status;
|
||||
struct dvb_frontend_parameters parameters;
|
||||
};
|
@ -1,126 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. c:type:: dvb_frontend_parameters
|
||||
|
||||
*******************
|
||||
frontend parameters
|
||||
*******************
|
||||
|
||||
The kind of parameters passed to the frontend device for tuning depend
|
||||
on the kind of hardware you are using.
|
||||
|
||||
The struct ``dvb_frontend_parameters`` uses a 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
|
||||
:ref:`FE_GET_PROPERTY/FE_SET_PROPERTY <FE_GET_PROPERTY>`
|
||||
ioctl's. The new API is flexible enough to add new parameters to
|
||||
existing delivery systems, and to add newer delivery systems.
|
||||
|
||||
So, newer applications should use
|
||||
:ref:`FE_GET_PROPERTY/FE_SET_PROPERTY <FE_GET_PROPERTY>`
|
||||
instead, in order to be able to support the newer System Delivery like
|
||||
DVB-S2, DVB-T2, DVB-C2, ISDB, etc.
|
||||
|
||||
All kinds of parameters are combined as a union in the
|
||||
``dvb_frontend_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
In the case of QPSK frontends the ``frequency`` 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 ``frequency`` specifies the absolute frequency and is
|
||||
given in Hz.
|
||||
|
||||
|
||||
.. c:type:: dvb_qpsk_parameters
|
||||
|
||||
QPSK parameters
|
||||
===============
|
||||
|
||||
For satellite QPSK frontends you have to use the ``dvb_qpsk_parameters``
|
||||
structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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) */
|
||||
};
|
||||
|
||||
|
||||
.. c:type:: dvb_qam_parameters
|
||||
|
||||
QAM parameters
|
||||
==============
|
||||
|
||||
for cable QAM frontend you use the ``dvb_qam_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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) */
|
||||
};
|
||||
|
||||
|
||||
.. c:type:: dvb_vsb_parameters
|
||||
|
||||
VSB parameters
|
||||
==============
|
||||
|
||||
ATSC frontends are supported by the ``dvb_vsb_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dvb_vsb_parameters {
|
||||
fe_modulation_t modulation; /* modulation type (see above) */
|
||||
};
|
||||
|
||||
|
||||
.. c:type:: dvb_ofdm_parameters
|
||||
|
||||
OFDM parameters
|
||||
===============
|
||||
|
||||
DVB-T frontends are supported by the ``dvb_ofdm_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
};
|
@ -1,126 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
.. _dvbapi:
|
||||
|
||||
########################
|
||||
Part II - Digital TV API
|
||||
########################
|
||||
|
||||
.. note::
|
||||
|
||||
This API is also known as Linux **DVB API**.
|
||||
|
||||
It it was originally written to support the European digital TV
|
||||
standard (DVB), and later extended to support all digital TV standards.
|
||||
|
||||
In order to avoid confusion, within this document, it was opted to refer to
|
||||
it, and to associated hardware as **Digital TV**.
|
||||
|
||||
The word **DVB** is reserved to be used for:
|
||||
|
||||
- the Digital TV API version
|
||||
(e. g. DVB API version 3 or DVB API version 5);
|
||||
- digital TV data types (enums, structs, defines, etc);
|
||||
- digital TV device nodes (``/dev/dvb/...``);
|
||||
- the European DVB standard.
|
||||
|
||||
**Version 5.10**
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. class:: toc-title
|
||||
|
||||
Table of Contents
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:numbered:
|
||||
|
||||
intro
|
||||
frontend
|
||||
demux
|
||||
ca
|
||||
net
|
||||
legacy_dvb_apis
|
||||
examples
|
||||
headers
|
||||
|
||||
|
||||
**********************
|
||||
Revision and Copyright
|
||||
**********************
|
||||
|
||||
Authors:
|
||||
|
||||
- J. K. Metzler, Ralph <rjkm@metzlerbros.de>
|
||||
|
||||
- Original author of the Digital TV API documentation.
|
||||
|
||||
- O. C. Metzler, Marcus <rjkm@metzlerbros.de>
|
||||
|
||||
- Original author of the Digital TV API documentation.
|
||||
|
||||
- Carvalho Chehab, Mauro <mchehab+samsung@kernel.org>
|
||||
|
||||
- Ported document to Docbook XML, addition of DVBv5 API, documentation gaps fix.
|
||||
|
||||
**Copyright** |copy| 2002-2003 : Convergence GmbH
|
||||
|
||||
**Copyright** |copy| 2009-2017 : Mauro Carvalho Chehab
|
||||
|
||||
****************
|
||||
Revision History
|
||||
****************
|
||||
|
||||
:revision: 2.2.0 / 2017-09-01 (*mcc*)
|
||||
|
||||
Most gaps between the uAPI document and the Kernel implementation
|
||||
got fixed for the non-legacy API.
|
||||
|
||||
:revision: 2.1.0 / 2015-05-29 (*mcc*)
|
||||
|
||||
DocBook improvements and cleanups, in order to document the system calls
|
||||
on a more standard way and provide more description about the current
|
||||
Digital TV API.
|
||||
|
||||
:revision: 2.0.4 / 2011-05-06 (*mcc*)
|
||||
|
||||
Add more information about DVBv5 API, better describing the frontend
|
||||
GET/SET props ioctl's.
|
||||
|
||||
|
||||
:revision: 2.0.3 / 2010-07-03 (*mcc*)
|
||||
|
||||
Add some frontend capabilities flags, present on kernel, but missing at
|
||||
the specs.
|
||||
|
||||
|
||||
:revision: 2.0.2 / 2009-10-25 (*mcc*)
|
||||
|
||||
documents FE_SET_FRONTEND_TUNE_MODE and
|
||||
FE_DISHETWORK_SEND_LEGACY_CMD ioctls.
|
||||
|
||||
|
||||
:revision: 2.0.1 / 2009-09-16 (*mcc*)
|
||||
|
||||
Added ISDB-T test originally written by Patrick Boettcher
|
||||
|
||||
|
||||
:revision: 2.0.0 / 2009-09-06 (*mcc*)
|
||||
|
||||
Conversion from LaTex to DocBook XML. The contents is the same as the
|
||||
original LaTex version.
|
||||
|
||||
|
||||
:revision: 1.0.0 / 2003-07-24 (*rjkm*)
|
||||
|
||||
Initial revision on LaTEX.
|
@ -1,133 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _frontend-properties:
|
||||
|
||||
**************
|
||||
Property types
|
||||
**************
|
||||
|
||||
Tuning into a Digital TV physical channel and starting decoding it
|
||||
requires changing a set of parameters, in order to control the tuner,
|
||||
the demodulator, the Linear Low-noise Amplifier (LNA) and to set the
|
||||
antenna subsystem via Satellite Equipment Control - SEC (on satellite
|
||||
systems). The actual parameters are specific to each particular digital
|
||||
TV standards, and may change as the digital TV specs evolves.
|
||||
|
||||
In the past (up to DVB API version 3 - DVBv3), the strategy used was to have a
|
||||
union with the parameters needed to tune for DVB-S, DVB-C, DVB-T and
|
||||
ATSC delivery systems grouped there. The problem is that, as the second
|
||||
generation standards appeared, the size of such union was not big
|
||||
enough to group the structs that would be required for those new
|
||||
standards. Also, extending it would break userspace.
|
||||
|
||||
So, the legacy union/struct based approach was deprecated, in favor
|
||||
of a properties set approach. On such approach,
|
||||
:ref:`FE_GET_PROPERTY and FE_SET_PROPERTY <FE_GET_PROPERTY>` are used
|
||||
to setup the frontend and read its status.
|
||||
|
||||
The actual action is determined by a set of dtv_property cmd/data pairs.
|
||||
With one single ioctl, is possible to get/set up to 64 properties.
|
||||
|
||||
This section describes the new and recommended way to set the frontend,
|
||||
with supports all digital TV delivery systems.
|
||||
|
||||
.. note::
|
||||
|
||||
1. On Linux DVB API version 3, setting a frontend was done via
|
||||
struct :c:type:`dvb_frontend_parameters`.
|
||||
|
||||
2. Don't use DVB API version 3 calls on hardware with supports
|
||||
newer standards. Such API provides no support or a very limited
|
||||
support to new standards and/or new hardware.
|
||||
|
||||
3. Nowadays, most frontends support multiple delivery systems.
|
||||
Only with DVB API version 5 calls it is possible to switch between
|
||||
the multiple delivery systems supported by a frontend.
|
||||
|
||||
4. DVB API version 5 is also called *S2API*, as the first
|
||||
new standard added to it was DVB-S2.
|
||||
|
||||
**Example**: in order to set the hardware to tune into a DVB-C channel
|
||||
at 651 kHz, modulated with 256-QAM, FEC 3/4 and symbol rate of 5.217
|
||||
Mbauds, those properties should be sent to
|
||||
:ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` ioctl:
|
||||
|
||||
:ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>` = SYS_DVBC_ANNEX_A
|
||||
|
||||
:ref:`DTV_FREQUENCY <DTV-FREQUENCY>` = 651000000
|
||||
|
||||
:ref:`DTV_MODULATION <DTV-MODULATION>` = QAM_256
|
||||
|
||||
:ref:`DTV_INVERSION <DTV-INVERSION>` = INVERSION_AUTO
|
||||
|
||||
:ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>` = 5217000
|
||||
|
||||
:ref:`DTV_INNER_FEC <DTV-INNER-FEC>` = FEC_3_4
|
||||
|
||||
:ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
The code that would that would do the above is show in
|
||||
:ref:`dtv-prop-example`.
|
||||
|
||||
.. code-block:: c
|
||||
:caption: Example: Setting digital TV frontend properties
|
||||
:name: dtv-prop-example
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
|
||||
static struct dtv_property props[] = {
|
||||
{ .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A },
|
||||
{ .cmd = DTV_FREQUENCY, .u.data = 651000000 },
|
||||
{ .cmd = DTV_MODULATION, .u.data = QAM_256 },
|
||||
{ .cmd = DTV_INVERSION, .u.data = INVERSION_AUTO },
|
||||
{ .cmd = DTV_SYMBOL_RATE, .u.data = 5217000 },
|
||||
{ .cmd = DTV_INNER_FEC, .u.data = FEC_3_4 },
|
||||
{ .cmd = DTV_TUNE }
|
||||
};
|
||||
|
||||
static struct dtv_properties dtv_prop = {
|
||||
.num = 6, .props = props
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR);
|
||||
|
||||
if (!fd) {
|
||||
perror ("open");
|
||||
return -1;
|
||||
}
|
||||
if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) {
|
||||
perror("ioctl");
|
||||
return -1;
|
||||
}
|
||||
printf("Frontend set\\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
.. attention:: While it is possible to directly call the Kernel code like the
|
||||
above example, it is strongly recommended to use
|
||||
`libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__, as it
|
||||
provides abstraction to work with the supported digital TV standards and
|
||||
provides methods for usual operations like program scanning and to
|
||||
read/write channel descriptor files.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
fe_property_parameters
|
||||
frontend-stat-properties
|
||||
frontend-property-terrestrial-systems
|
||||
frontend-property-cable-systems
|
||||
frontend-property-satellite-systems
|
||||
frontend-header
|
@ -1,43 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
This file is dual-licensed: you can use it either under the terms
|
||||
of the GPL 2.0 or the GFDL 1.1+ license, at your option. Note that this
|
||||
dual licensing only applies to this file, and not this project as a
|
||||
whole.
|
||||
|
||||
a) This file 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 file 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.
|
||||
|
||||
Or, alternatively,
|
||||
|
||||
b) 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 no Invariant Sections, no Front-Cover Texts
|
||||
and no Back-Cover Texts. A copy of the license is included at
|
||||
Documentation/media/uapi/fdl-appendix.rst.
|
||||
|
||||
TODO: replace it to GPL-2.0 OR GFDL-1.1-or-later WITH no-invariant-sections
|
||||
-->
|
||||
<svg id="svg2" width="15.847cm" height="8.4187cm" fill-rule="evenodd" stroke-linejoin="round" stroke-width="28.222" preserveAspectRatio="xMidYMid" version="1.2" viewBox="0 0 23770.123 12628.122" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><defs id="defs142"><marker id="Arrow1Lend" overflow="visible" orient="auto"><path id="path954" transform="matrix(-.8 0 0 -.8 -10 0)" d="m0 0 5-5-17.5 5 17.5 5z" fill-rule="evenodd" stroke="#000" stroke-width="1pt"/></marker><marker id="marker1243" overflow="visible" orient="auto"><path id="path1241" transform="matrix(-.8 0 0 -.8 -10 0)" d="m0 0 5-5-17.5 5 17.5 5z" fill-rule="evenodd" stroke="#000" stroke-width="1pt"/></marker></defs><metadata id="metadata519"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><rect id="rect197" class="BoundingBox" x="5355.1" y="13.122" width="18403" height="9603" fill="none"/><path id="path199" d="m14556 9614.1h-9200v-9600h18400v9600z" fill="#fff"/><path id="path201" d="m14556 9614.1h-9200v-9600h18400v9600z" fill="none" stroke="#000"/><rect id="rect206" class="BoundingBox" x="13.122" y="4013.1" width="4544" height="2403" fill="none"/><path id="path208" d="m2285.1 6414.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path210" d="m2285.1 6414.1h-2271v-2400h4541v2400z" fill="none" stroke="#000"/><text id="text212" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan214" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan216" class="TextPosition"
|
||||
x="1281.1219" y="5435.1221"><tspan id="tspan218" fill="#000000">Antena</tspan></tspan></tspan></text>
|
||||
<rect id="rect223" class="BoundingBox" x="6213.1" y="1813.1" width="4544" height="2403" fill="none"/><path id="path225" d="m8485.1 4214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path227" d="m8485.1 4214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000"/><text id="text229" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan231" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan233" class="TextPosition" x="7217.1221" y="3235.1221"><tspan id="tspan235" fill="#000000">Frontend</tspan></tspan></tspan></text>
|
||||
<rect id="rect240" class="BoundingBox" x="12113" y="1813.1" width="4544" height="2403" fill="none"/><path id="path242" d="m14385 4214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path244" d="m14385 4214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000"/><text id="text246" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan248" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan250" class="TextPosition" x="13944.122" y="3235.1221"><tspan id="tspan252" fill="#000000">CA</tspan></tspan></tspan></text>
|
||||
<rect id="rect257" class="BoundingBox" x="18113" y="1813.1" width="4544" height="2403" fill="none"/><path id="path259" d="m20385 4214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path261" d="m20385 4214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000"/><text id="text263" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan265" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan267" class="TextPosition" x="19384.123" y="3235.1221"><tspan id="tspan269" fill="#000000">Demux</tspan></tspan></tspan></text>
|
||||
<rect id="rect274" class="BoundingBox" x="6113.1" y="5813.1" width="4544" height="2403" fill="none"/><path id="path276" d="m8385.1 8214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path278" d="m8385.1 8214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000"/><text id="text280" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan282" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan284" class="TextPosition" x="7733.1221" y="7235.1221"><tspan id="tspan286" fill="#000000">SEC</tspan></tspan></tspan></text>
|
||||
<rect id="rect291" class="BoundingBox" x="12213" y="5813.1" width="4544" height="2403" fill="none"/><path id="path293" d="m14485 8214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path295" d="m14485 8214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000" stroke-dasharray="28.22200113,56.44400226" stroke-width="28.222"/><text id="text297" class="TextShape" x="-2443.8779" y="-4903.3779"><tspan id="tspan299" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan301" class="TextPosition" x="13676.122" y="6917.6221"><tspan id="tspan303" fill="#000000">Audio</tspan></tspan></tspan></text>
|
||||
<rect id="rect308" class="BoundingBox" x="18113" y="5813.1" width="4544" height="2403" fill="none"/><path id="path310" d="m20385 8214.1h-2271v-2400h4541v2400z" fill="#fff"/><path id="path312" d="m20385 8214.1h-2271v-2400h4541v2400z" fill="none" stroke="#000" stroke-dasharray="28.22200113,56.44400226" stroke-width="28.222"/><text id="text314" class="TextShape" x="-2443.8779" y="-4903.3779"><tspan id="tspan316" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan318" class="TextPosition" x="19583.123" y="6917.6221"><tspan id="tspan320" fill="#000000">Video</tspan></tspan></tspan></text>
|
||||
<rect id="rect325" class="BoundingBox" x="15213" y="10213" width="4544" height="2403" fill="none"/><path id="path327" d="m17485 12614h-2271v-2400h4541v2400z" fill="#fff"/><path id="path329" d="m17485 12614h-2271v-2400h4541v2400z" fill="none" stroke="#000" stroke-dasharray="28.22200113,56.44400226" stroke-width="28.222"/><text id="text331" class="TextShape" x="-2443.8779" y="-4585.8779"><tspan id="tspan333" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400"><tspan id="tspan335" class="TextPosition" x="17076.123" y="11635.122"><tspan id="tspan337" fill="#000000">TV</tspan></tspan></tspan></text>
|
||||
<rect id="rect342" class="BoundingBox" x="4555.1" y="3014.1" width="1661" height="2202" fill="none"/><path id="path344" d="m4556.1 5214.1 1400-1857" fill="none" stroke="#000"/><path id="path346" d="m6215.1 3014.1-391 269 240 181z"/><rect id="rect351" class="BoundingBox" x="4555.1" y="5213.1" width="1561" height="1802" fill="none"/><path id="path353" d="m4556.1 5214.1 1277 1475" fill="none" stroke="#000"/><path id="path355" d="m6115.1 7014.1-181-438-227 196z"/><rect id="rect360" class="BoundingBox" x="10755" y="2864.1" width="1361" height="301" fill="none"/><path id="path362" d="m10756 3014.1h929" fill="none" stroke="#000"/><path id="path364" d="m12115 3014.1-450-150v300z"/><rect id="rect369" class="BoundingBox" x="16655" y="2864.1" width="1461" height="301" fill="none"/><path id="path371" d="m16656 3014.1h1029" fill="none" stroke="#000"/><path id="path373" d="m18115
|
||||
3014.1-450-150v300z"/><rect id="rect378" class="BoundingBox" x="20235" y="4213.1" width="301" height="1602" fill="none"/><rect id="rect387" class="BoundingBox" x="17485" y="8213.1" width="2902" height="2002" fill="none"/><path id="path389" d="m20385 8214.1-2546 1756" fill="none" stroke="#000" stroke-dasharray="28.22200113,56.44400226" stroke-width="28.222"/><path id="path391" d="m17485 10214 456-132-171-247z"/><rect id="rect396" class="BoundingBox" x="14484" y="8213.1" width="3002" height="2002" fill="none"/><path id="path398" d="m14485 8214.1 2642 1761" fill="none" stroke="#000" stroke-dasharray="28.22200113,56.44400226" stroke-width="28.222"/><path id="path400" d="m17485 10214-291-374-167 249z"/><rect id="rect405" class="BoundingBox" x="14485" y="4213.1" width="5902" height="1629" fill="none"/><path id="path949" d="m20387 4213.1v1629" fill="none" marker-end="url(#Arrow1Lend)"
|
||||
stroke="#000" stroke-dasharray="26.45879596, 52.91759192999999328" stroke-linejoin="miter" stroke-width="26.459"/><path id="path1233" d="m20385 4214.1-3628 1599" fill="none" marker-end="url(#marker1243)" stroke="#000" stroke-dasharray="26.45879596, 52.91759193" stroke-linejoin="miter" stroke-width="26.459"/><text id="text297-3" class="TextShape" x="-2911.9202" y="-4257.2061" font-size="12px" stroke-width="1"><tspan id="tspan299-6" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400" stroke-width="1"><tspan id="tspan301-7" class="TextPosition" x="13208.079" y="7563.793" stroke-width="1"><tspan id="tspan303-5" fill="#000000" stroke-width="1">Decoder</tspan></tspan></tspan></text>
|
||||
<text id="text297-3-3" class="TextShape" x="2950.9287" y="-4259.5928" font-size="12px" stroke-width="1"><tspan id="tspan299-6-5" class="TextParagraph" font-family="sans-serif" font-size="635px" font-weight="400" stroke-width="1"><tspan id="tspan301-7-6" class="TextPosition" x="19070.928" y="7561.4053" stroke-width="1"><tspan id="tspan303-5-2" fill="#000000" stroke-width="1">Decoder</tspan></tspan></tspan></text>
|
||||
</svg>
|
@ -1,23 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _dvb_examples:
|
||||
|
||||
********
|
||||
Examples
|
||||
********
|
||||
|
||||
In the past, we used to have a set of examples here. However, those
|
||||
examples got out of date and doesn't even compile nowadays.
|
||||
|
||||
Also, nowadays, the best is to use the libdvbv5 DVB API nowadays,
|
||||
with is fully documented.
|
||||
|
||||
Please refer to the `libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__
|
||||
for updated/recommended examples.
|
@ -1,81 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
******************
|
||||
Frontend bandwidth
|
||||
******************
|
||||
|
||||
.. c:type:: fe_bandwidth
|
||||
|
||||
.. flat-table:: enum fe_bandwidth
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _BANDWIDTH-AUTO:
|
||||
|
||||
``BANDWIDTH_AUTO``
|
||||
|
||||
- Autodetect bandwidth (if supported)
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _BANDWIDTH-1-712-MHZ:
|
||||
|
||||
``BANDWIDTH_1_712_MHZ``
|
||||
|
||||
- 1.712 MHz
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _BANDWIDTH-5-MHZ:
|
||||
|
||||
``BANDWIDTH_5_MHZ``
|
||||
|
||||
- 5 MHz
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _BANDWIDTH-6-MHZ:
|
||||
|
||||
``BANDWIDTH_6_MHZ``
|
||||
|
||||
- 6 MHz
|
||||
|
||||
- .. row 6
|
||||
|
||||
- .. _BANDWIDTH-7-MHZ:
|
||||
|
||||
``BANDWIDTH_7_MHZ``
|
||||
|
||||
- 7 MHz
|
||||
|
||||
- .. row 7
|
||||
|
||||
- .. _BANDWIDTH-8-MHZ:
|
||||
|
||||
``BANDWIDTH_8_MHZ``
|
||||
|
||||
- 8 MHz
|
||||
|
||||
- .. row 8
|
||||
|
||||
- .. _BANDWIDTH-10-MHZ:
|
||||
|
||||
``BANDWIDTH_10_MHZ``
|
||||
|
||||
- 10 MHz
|
@ -1,55 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_DISEQC_RECV_SLAVE_REPLY:
|
||||
|
||||
********************************
|
||||
ioctl FE_DISEQC_RECV_SLAVE_REPLY
|
||||
********************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_DISEQC_RECV_SLAVE_REPLY - Receives reply from a DiSEqC 2.0 command
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_DISEQC_RECV_SLAVE_REPLY, struct dvb_diseqc_slave_reply *argp )
|
||||
:name: FE_DISEQC_RECV_SLAVE_REPLY
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``argp``
|
||||
pointer to struct :c:type:`dvb_diseqc_slave_reply`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Receives reply from a DiSEqC 2.0 command.
|
||||
|
||||
The received message is stored at the buffer pointed by ``argp``.
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,53 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_DISEQC_RESET_OVERLOAD:
|
||||
|
||||
******************************
|
||||
ioctl FE_DISEQC_RESET_OVERLOAD
|
||||
******************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_DISEQC_RESET_OVERLOAD - Restores the power to the antenna subsystem, if it was powered off due - to power overload.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_DISEQC_RESET_OVERLOAD, NULL )
|
||||
:name: FE_DISEQC_RESET_OVERLOAD
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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 Digital TV adapters support this ioctl.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,59 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_DISEQC_SEND_BURST:
|
||||
|
||||
**************************
|
||||
ioctl FE_DISEQC_SEND_BURST
|
||||
**************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_DISEQC_SEND_BURST - Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_DISEQC_SEND_BURST, enum fe_sec_mini_cmd tone )
|
||||
:name: FE_DISEQC_SEND_BURST
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``tone``
|
||||
An integer enumered value described at :c:type:`fe_sec_mini_cmd`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
It provides support for what's specified at
|
||||
`Digital Satellite Equipment Control (DiSEqC) - Simple "ToneBurst" Detection Circuit specification. <http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf>`__
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,56 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_DISEQC_SEND_MASTER_CMD:
|
||||
|
||||
*******************************
|
||||
ioctl FE_DISEQC_SEND_MASTER_CMD
|
||||
*******************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_DISEQC_SEND_MASTER_CMD - Sends a DiSEqC command
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_DISEQC_SEND_MASTER_CMD, struct dvb_diseqc_master_cmd *argp )
|
||||
:name: FE_DISEQC_SEND_MASTER_CMD
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``argp``
|
||||
pointer to struct
|
||||
:c:type:`dvb_diseqc_master_cmd`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Sends the DiSEqC command pointed by :c:type:`dvb_diseqc_master_cmd`
|
||||
to the antenna subsystem.
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
@ -1,62 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_DISHNETWORK_SEND_LEGACY_CMD:
|
||||
|
||||
******************************
|
||||
FE_DISHNETWORK_SEND_LEGACY_CMD
|
||||
******************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_DISHNETWORK_SEND_LEGACY_CMD
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl(int fd, FE_DISHNETWORK_SEND_LEGACY_CMD, unsigned long cmd)
|
||||
:name: FE_DISHNETWORK_SEND_LEGACY_CMD
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
``cmd``
|
||||
Sends the specified raw cmd to the dish via DISEqC.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
.. warning::
|
||||
This is a very obscure legacy command, used only at stv0299
|
||||
driver. Should not be used on newer drivers.
|
||||
|
||||
It provides a non-standard method for selecting Diseqc voltage on the
|
||||
frontend, for Dish Network legacy switches.
|
||||
|
||||
As support for this ioctl were added in 2004, this means that such
|
||||
dishes were already legacy in 2004.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,61 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_ENABLE_HIGH_LNB_VOLTAGE:
|
||||
|
||||
********************************
|
||||
ioctl FE_ENABLE_HIGH_LNB_VOLTAGE
|
||||
********************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_ENABLE_HIGH_LNB_VOLTAGE - Select output DC level between normal LNBf voltages or higher LNBf - voltages.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_ENABLE_HIGH_LNB_VOLTAGE, unsigned int high )
|
||||
:name: FE_ENABLE_HIGH_LNB_VOLTAGE
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``high``
|
||||
Valid flags:
|
||||
|
||||
- 0 - normal 13V and 18V.
|
||||
|
||||
- >0 - enables slightly higher voltages instead of 13/18V, in order
|
||||
to compensate for long antenna cables.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Select output DC level between normal LNBf voltages or higher LNBf
|
||||
voltages between 0 (normal) or a value grater than 0 for higher
|
||||
voltages.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,78 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_GET_EVENT:
|
||||
|
||||
************
|
||||
FE_GET_EVENT
|
||||
************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_GET_EVENT
|
||||
|
||||
.. attention:: This ioctl is deprecated.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl(int fd, FE_GET_EVENT, struct dvb_frontend_event *ev)
|
||||
:name: FE_GET_EVENT
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
``ev``
|
||||
Points to the location where the event, if any, is to be stored.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EWOULDBLOCK``
|
||||
|
||||
- There is no event pending, and the device is in non-blocking mode.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``EOVERFLOW``
|
||||
|
||||
- Overflow in event queue - one or more events were lost.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,69 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_GET_FRONTEND:
|
||||
|
||||
***************
|
||||
FE_GET_FRONTEND
|
||||
***************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_GET_FRONTEND
|
||||
|
||||
.. attention:: This ioctl is deprecated.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl(int fd, FE_GET_FRONTEND, struct dvb_frontend_parameters *p)
|
||||
:name: FE_GET_FRONTEND
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
|
||||
``p``
|
||||
Points to parameters for tuning operation.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl call queries the currently effective frontend parameters. For
|
||||
this command, read-only access to the device is sufficient.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``EINVAL``
|
||||
|
||||
- Maximum supported symbol rate reached.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,70 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_GET_INFO:
|
||||
|
||||
*****************
|
||||
ioctl FE_GET_INFO
|
||||
*****************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_GET_INFO - Query Digital TV frontend capabilities and returns information
|
||||
about the - front-end. This call only requires read-only access to the device.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_GET_INFO, struct dvb_frontend_info *argp )
|
||||
:name: FE_GET_INFO
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``argp``
|
||||
pointer to struct struct
|
||||
:c:type:`dvb_frontend_info`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All Digital TV frontend devices support the :ref:`FE_GET_INFO` 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.
|
||||
|
||||
|
||||
frontend capabilities
|
||||
=====================
|
||||
|
||||
Capabilities describe what a frontend can do. Some capabilities are
|
||||
supported only on some specific frontend types.
|
||||
|
||||
The frontend capabilities are described at :c:type:`fe_caps`.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,83 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_GET_PROPERTY:
|
||||
|
||||
**************************************
|
||||
ioctl FE_SET_PROPERTY, FE_GET_PROPERTY
|
||||
**************************************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_SET_PROPERTY - FE_GET_PROPERTY - FE_SET_PROPERTY sets one or more frontend properties. - FE_GET_PROPERTY returns one or more frontend properties.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_GET_PROPERTY, struct dtv_properties *argp )
|
||||
:name: FE_GET_PROPERTY
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_SET_PROPERTY, struct dtv_properties *argp )
|
||||
:name: FE_SET_PROPERTY
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``argp``
|
||||
Pointer to struct :c:type:`dtv_properties`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All Digital TV frontend devices support the ``FE_SET_PROPERTY`` and
|
||||
``FE_GET_PROPERTY`` ioctls. The supported properties and statistics
|
||||
depends on the delivery system and on the device:
|
||||
|
||||
- ``FE_SET_PROPERTY:``
|
||||
|
||||
- This ioctl is used to set one or more frontend properties.
|
||||
|
||||
- This is the basic command to request the frontend to tune into
|
||||
some frequency and to start decoding the digital TV signal.
|
||||
|
||||
- This call requires read/write access to the device.
|
||||
|
||||
.. note::
|
||||
|
||||
At return, the values aren't updated to reflect the actual
|
||||
parameters used. If the actual parameters are needed, an explicit
|
||||
call to ``FE_GET_PROPERTY`` is needed.
|
||||
|
||||
- ``FE_GET_PROPERTY:``
|
||||
|
||||
- This ioctl is used to get properties and statistics from the
|
||||
frontend.
|
||||
|
||||
- No properties are changed, and statistics aren't reset.
|
||||
|
||||
- This call only requires read-only access to the device.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_READ_BER:
|
||||
|
||||
***********
|
||||
FE_READ_BER
|
||||
***********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_READ_BER
|
||||
|
||||
.. attention:: This ioctl is deprecated.
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl(int fd, FE_READ_BER, uint32_t *ber)
|
||||
:name: FE_READ_BER
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
``ber``
|
||||
The bit error rate is stored into \*ber.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_READ_SIGNAL_STRENGTH:
|
||||
|
||||
***********************
|
||||
FE_READ_SIGNAL_STRENGTH
|
||||
***********************
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_READ_SIGNAL_STRENGTH
|
||||
|
||||
.. attention:: This ioctl is deprecated.
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, FE_READ_SIGNAL_STRENGTH, uint16_t *strength)
|
||||
:name: FE_READ_SIGNAL_STRENGTH
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
``strength``
|
||||
The signal strength value is stored into \*strength.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
@ -1,57 +0,0 @@
|
||||
.. 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 no Invariant Sections, no Front-Cover Texts
|
||||
.. and no Back-Cover Texts. A copy of the license is included at
|
||||
.. Documentation/media/uapi/fdl-appendix.rst.
|
||||
..
|
||||
.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
|
||||
|
||||
.. _FE_READ_SNR:
|
||||
|
||||
***********
|
||||
FE_READ_SNR
|
||||
***********
|
||||
|
||||
Name
|
||||
====
|
||||
|
||||
FE_READ_SNR
|
||||
|
||||
.. attention:: This ioctl is deprecated.
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl(int fd, FE_READ_SNR, int16_t *snr)
|
||||
:name: FE_READ_SNR
|
||||
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :c:func:`open() <dvb-fe-open>`.
|
||||
|
||||
``snr``
|
||||
The signal-to-noise ratio is stored into \*snr.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success 0 is returned.
|
||||
|
||||
On error -1 is returned, and the ``errno`` variable is set
|
||||
appropriately.
|
||||
|
||||
Generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user