1059b1c5bSMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 254f38fcaSMauro Carvalho Chehab 3*e9305a00SHans Verkuil.. _cec_pin_error_inj: 4*e9305a00SHans Verkuil 554f38fcaSMauro Carvalho ChehabCEC Pin Framework Error Injection 654f38fcaSMauro Carvalho Chehab================================= 754f38fcaSMauro Carvalho Chehab 854f38fcaSMauro Carvalho ChehabThe CEC Pin Framework is a core CEC framework for CEC hardware that only 954f38fcaSMauro Carvalho Chehabhas low-level support for the CEC bus. Most hardware today will have 1054f38fcaSMauro Carvalho Chehabhigh-level CEC support where the hardware deals with driving the CEC bus, 1154f38fcaSMauro Carvalho Chehabbut some older devices aren't that fancy. However, this framework also 1254f38fcaSMauro Carvalho Chehaballows you to connect the CEC pin to a GPIO on e.g. a Raspberry Pi and 1354f38fcaSMauro Carvalho Chehabyou have now made a CEC adapter. 1454f38fcaSMauro Carvalho Chehab 1554f38fcaSMauro Carvalho ChehabWhat makes doing this so interesting is that since we have full control 1654f38fcaSMauro Carvalho Chehabover the bus it is easy to support error injection. This is ideal to 1754f38fcaSMauro Carvalho Chehabtest how well CEC adapters can handle error conditions. 1854f38fcaSMauro Carvalho Chehab 1954f38fcaSMauro Carvalho ChehabCurrently only the cec-gpio driver (when the CEC line is directly 2054f38fcaSMauro Carvalho Chehabconnected to a pull-up GPIO line) and the AllWinner A10/A20 drm driver 2154f38fcaSMauro Carvalho Chehabsupport this framework. 2254f38fcaSMauro Carvalho Chehab 2354f38fcaSMauro Carvalho ChehabIf ``CONFIG_CEC_PIN_ERROR_INJ`` is enabled, then error injection is available 2454f38fcaSMauro Carvalho Chehabthrough debugfs. Specifically, in ``/sys/kernel/debug/cec/cecX/`` there is 2554f38fcaSMauro Carvalho Chehabnow an ``error-inj`` file. 2654f38fcaSMauro Carvalho Chehab 2754f38fcaSMauro Carvalho Chehab.. note:: 2854f38fcaSMauro Carvalho Chehab 2954f38fcaSMauro Carvalho Chehab The error injection commands are not a stable ABI and may change in the 3054f38fcaSMauro Carvalho Chehab future. 3154f38fcaSMauro Carvalho Chehab 3254f38fcaSMauro Carvalho ChehabWith ``cat error-inj`` you can see both the possible commands and the current 3354f38fcaSMauro Carvalho Chehaberror injection status:: 3454f38fcaSMauro Carvalho Chehab 3554f38fcaSMauro Carvalho Chehab $ cat /sys/kernel/debug/cec/cec0/error-inj 3654f38fcaSMauro Carvalho Chehab # Clear error injections: 3754f38fcaSMauro Carvalho Chehab # clear clear all rx and tx error injections 3854f38fcaSMauro Carvalho Chehab # rx-clear clear all rx error injections 3954f38fcaSMauro Carvalho Chehab # tx-clear clear all tx error injections 4054f38fcaSMauro Carvalho Chehab # <op> clear clear all rx and tx error injections for <op> 4154f38fcaSMauro Carvalho Chehab # <op> rx-clear clear all rx error injections for <op> 4254f38fcaSMauro Carvalho Chehab # <op> tx-clear clear all tx error injections for <op> 4354f38fcaSMauro Carvalho Chehab # 4454f38fcaSMauro Carvalho Chehab # RX error injection: 4554f38fcaSMauro Carvalho Chehab # <op>[,<mode>] rx-nack NACK the message instead of sending an ACK 4654f38fcaSMauro Carvalho Chehab # <op>[,<mode>] rx-low-drive <bit> force a low-drive condition at this bit position 4754f38fcaSMauro Carvalho Chehab # <op>[,<mode>] rx-add-byte add a spurious byte to the received CEC message 4854f38fcaSMauro Carvalho Chehab # <op>[,<mode>] rx-remove-byte remove the last byte from the received CEC message 4992eda6b7SHans Verkuil # any[,<mode>] rx-arb-lost [<poll>] generate a POLL message to trigger an arbitration lost 5054f38fcaSMauro Carvalho Chehab # 5154f38fcaSMauro Carvalho Chehab # TX error injection settings: 5254f38fcaSMauro Carvalho Chehab # tx-ignore-nack-until-eom ignore early NACKs until EOM 5354f38fcaSMauro Carvalho Chehab # tx-custom-low-usecs <usecs> define the 'low' time for the custom pulse 5454f38fcaSMauro Carvalho Chehab # tx-custom-high-usecs <usecs> define the 'high' time for the custom pulse 5554f38fcaSMauro Carvalho Chehab # tx-custom-pulse transmit the custom pulse once the bus is idle 5654f38fcaSMauro Carvalho Chehab # 5754f38fcaSMauro Carvalho Chehab # TX error injection: 5854f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-no-eom don't set the EOM bit 5954f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-early-eom set the EOM bit one byte too soon 6054f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-add-bytes <num> append <num> (1-255) spurious bytes to the message 6154f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-remove-byte drop the last byte from the message 6254f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-short-bit <bit> make this bit shorter than allowed 6354f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-long-bit <bit> make this bit longer than allowed 6454f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-custom-bit <bit> send the custom pulse instead of this bit 6554f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-short-start send a start pulse that's too short 6654f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-long-start send a start pulse that's too long 6754f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-custom-start send the custom pulse instead of the start pulse 6854f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-last-bit <bit> stop sending after this bit 6954f38fcaSMauro Carvalho Chehab # <op>[,<mode>] tx-low-drive <bit> force a low-drive condition at this bit position 7054f38fcaSMauro Carvalho Chehab # 7154f38fcaSMauro Carvalho Chehab # <op> CEC message opcode (0-255) or 'any' 7254f38fcaSMauro Carvalho Chehab # <mode> 'once' (default), 'always', 'toggle' or 'off' 7354f38fcaSMauro Carvalho Chehab # <bit> CEC message bit (0-159) 7454f38fcaSMauro Carvalho Chehab # 10 bits per 'byte': bits 0-7: data, bit 8: EOM, bit 9: ACK 7554f38fcaSMauro Carvalho Chehab # <poll> CEC poll message used to test arbitration lost (0x00-0xff, default 0x0f) 7654f38fcaSMauro Carvalho Chehab # <usecs> microseconds (0-10000000, default 1000) 7754f38fcaSMauro Carvalho Chehab 7854f38fcaSMauro Carvalho Chehab clear 7954f38fcaSMauro Carvalho Chehab 8054f38fcaSMauro Carvalho ChehabYou can write error injection commands to ``error-inj`` using 8154f38fcaSMauro Carvalho Chehab``echo 'cmd' >error-inj`` or ``cat cmd.txt >error-inj``. The ``cat error-inj`` 8254f38fcaSMauro Carvalho Chehaboutput contains the current error commands. You can save the output to a file 8354f38fcaSMauro Carvalho Chehaband use it as an input to ``error-inj`` later. 8454f38fcaSMauro Carvalho Chehab 8554f38fcaSMauro Carvalho ChehabBasic Syntax 8654f38fcaSMauro Carvalho Chehab------------ 8754f38fcaSMauro Carvalho Chehab 8854f38fcaSMauro Carvalho ChehabLeading spaces/tabs are ignored. If the next character is a ``#`` or the end 8954f38fcaSMauro Carvalho Chehabof the line was reached, then the whole line is ignored. Otherwise a command 9054f38fcaSMauro Carvalho Chehabis expected. 9154f38fcaSMauro Carvalho Chehab 9254f38fcaSMauro Carvalho ChehabThe error injection commands fall in two main groups: those relating to 9354f38fcaSMauro Carvalho Chehabreceiving CEC messages and those relating to transmitting CEC messages. In 9454f38fcaSMauro Carvalho Chehabaddition, there are commands to clear existing error injection commands and 9554f38fcaSMauro Carvalho Chehabto create custom pulses on the CEC bus. 9654f38fcaSMauro Carvalho Chehab 9754f38fcaSMauro Carvalho ChehabMost error injection commands can be executed for specific CEC opcodes or for 9854f38fcaSMauro Carvalho Chehaball opcodes (``any``). Each command also has a 'mode' which can be ``off`` 9954f38fcaSMauro Carvalho Chehab(can be used to turn off an existing error injection command), ``once`` 10054f38fcaSMauro Carvalho Chehab(the default) which will trigger the error injection only once for the next 10154f38fcaSMauro Carvalho Chehabreceived or transmitted message, ``always`` to always trigger the error 10254f38fcaSMauro Carvalho Chehabinjection and ``toggle`` to toggle the error injection on or off for every 10354f38fcaSMauro Carvalho Chehabtransmit or receive. 10454f38fcaSMauro Carvalho Chehab 10554f38fcaSMauro Carvalho ChehabSo '``any rx-nack``' will NACK the next received CEC message, 10654f38fcaSMauro Carvalho Chehab'``any,always rx-nack``' will NACK all received CEC messages and 10754f38fcaSMauro Carvalho Chehab'``0x82,toggle rx-nack``' will only NACK if an Active Source message was 10854f38fcaSMauro Carvalho Chehabreceived and do that only for every other received message. 10954f38fcaSMauro Carvalho Chehab 11054f38fcaSMauro Carvalho ChehabAfter an error was injected with mode ``once`` the error injection command 11154f38fcaSMauro Carvalho Chehabis cleared automatically, so ``once`` is a one-time deal. 11254f38fcaSMauro Carvalho Chehab 11354f38fcaSMauro Carvalho ChehabAll combinations of ``<op>`` and error injection commands can co-exist. So 11454f38fcaSMauro Carvalho Chehabthis is fine:: 11554f38fcaSMauro Carvalho Chehab 11654f38fcaSMauro Carvalho Chehab 0x9e tx-add-bytes 1 11754f38fcaSMauro Carvalho Chehab 0x9e tx-early-eom 11854f38fcaSMauro Carvalho Chehab 0x9f tx-add-bytes 2 11954f38fcaSMauro Carvalho Chehab any rx-nack 12054f38fcaSMauro Carvalho Chehab 12154f38fcaSMauro Carvalho ChehabAll four error injection commands will be active simultaneously. 12254f38fcaSMauro Carvalho Chehab 12354f38fcaSMauro Carvalho ChehabHowever, if the same ``<op>`` and command combination is specified, 12454f38fcaSMauro Carvalho Chehabbut with different arguments:: 12554f38fcaSMauro Carvalho Chehab 12654f38fcaSMauro Carvalho Chehab 0x9e tx-add-bytes 1 12754f38fcaSMauro Carvalho Chehab 0x9e tx-add-bytes 2 12854f38fcaSMauro Carvalho Chehab 12954f38fcaSMauro Carvalho ChehabThen the second will overwrite the first. 13054f38fcaSMauro Carvalho Chehab 13154f38fcaSMauro Carvalho ChehabClear Error Injections 13254f38fcaSMauro Carvalho Chehab---------------------- 13354f38fcaSMauro Carvalho Chehab 13454f38fcaSMauro Carvalho Chehab``clear`` 13554f38fcaSMauro Carvalho Chehab Clear all error injections. 13654f38fcaSMauro Carvalho Chehab 13754f38fcaSMauro Carvalho Chehab``rx-clear`` 13854f38fcaSMauro Carvalho Chehab Clear all receive error injections 13954f38fcaSMauro Carvalho Chehab 14054f38fcaSMauro Carvalho Chehab``tx-clear`` 14154f38fcaSMauro Carvalho Chehab Clear all transmit error injections 14254f38fcaSMauro Carvalho Chehab 14354f38fcaSMauro Carvalho Chehab``<op> clear`` 14454f38fcaSMauro Carvalho Chehab Clear all error injections for the given opcode. 14554f38fcaSMauro Carvalho Chehab 14654f38fcaSMauro Carvalho Chehab``<op> rx-clear`` 14754f38fcaSMauro Carvalho Chehab Clear all receive error injections for the given opcode. 14854f38fcaSMauro Carvalho Chehab 14954f38fcaSMauro Carvalho Chehab``<op> tx-clear`` 15054f38fcaSMauro Carvalho Chehab Clear all transmit error injections for the given opcode. 15154f38fcaSMauro Carvalho Chehab 15254f38fcaSMauro Carvalho ChehabReceive Messages 15354f38fcaSMauro Carvalho Chehab---------------- 15454f38fcaSMauro Carvalho Chehab 15554f38fcaSMauro Carvalho Chehab``<op>[,<mode>] rx-nack`` 15654f38fcaSMauro Carvalho Chehab NACK broadcast messages and messages directed to this CEC adapter. 15754f38fcaSMauro Carvalho Chehab Every byte of the message will be NACKed in case the transmitter 15854f38fcaSMauro Carvalho Chehab keeps transmitting after the first byte was NACKed. 15954f38fcaSMauro Carvalho Chehab 16054f38fcaSMauro Carvalho Chehab``<op>[,<mode>] rx-low-drive <bit>`` 16154f38fcaSMauro Carvalho Chehab Force a Low Drive condition at this bit position. If <op> specifies 16254f38fcaSMauro Carvalho Chehab a specific CEC opcode then the bit position must be at least 18, 16354f38fcaSMauro Carvalho Chehab otherwise the opcode hasn't been received yet. This tests if the 16454f38fcaSMauro Carvalho Chehab transmitter can handle the Low Drive condition correctly and reports 16554f38fcaSMauro Carvalho Chehab the error correctly. Note that a Low Drive in the first 4 bits can also 16654f38fcaSMauro Carvalho Chehab be interpreted as an Arbitration Lost condition by the transmitter. 16754f38fcaSMauro Carvalho Chehab This is implementation dependent. 16854f38fcaSMauro Carvalho Chehab 16954f38fcaSMauro Carvalho Chehab``<op>[,<mode>] rx-add-byte`` 17054f38fcaSMauro Carvalho Chehab Add a spurious 0x55 byte to the received CEC message, provided 17154f38fcaSMauro Carvalho Chehab the message was 15 bytes long or less. This is useful to test 17254f38fcaSMauro Carvalho Chehab the high-level protocol since spurious bytes should be ignored. 17354f38fcaSMauro Carvalho Chehab 17454f38fcaSMauro Carvalho Chehab``<op>[,<mode>] rx-remove-byte`` 17554f38fcaSMauro Carvalho Chehab Remove the last byte from the received CEC message, provided it 17654f38fcaSMauro Carvalho Chehab was at least 2 bytes long. This is useful to test the high-level 17754f38fcaSMauro Carvalho Chehab protocol since messages that are too short should be ignored. 17854f38fcaSMauro Carvalho Chehab 17954f38fcaSMauro Carvalho Chehab``<op>[,<mode>] rx-arb-lost <poll>`` 18054f38fcaSMauro Carvalho Chehab Generate a POLL message to trigger an Arbitration Lost condition. 18154f38fcaSMauro Carvalho Chehab This command is only allowed for ``<op>`` values of ``next`` or ``all``. 18254f38fcaSMauro Carvalho Chehab As soon as a start bit has been received the CEC adapter will switch 18354f38fcaSMauro Carvalho Chehab to transmit mode and it will transmit a POLL message. By default this is 18454f38fcaSMauro Carvalho Chehab 0x0f, but it can also be specified explicitly via the ``<poll>`` argument. 18554f38fcaSMauro Carvalho Chehab 18654f38fcaSMauro Carvalho Chehab This command can be used to test the Arbitration Lost condition in 18754f38fcaSMauro Carvalho Chehab the remote CEC transmitter. Arbitration happens when two CEC adapters 18854f38fcaSMauro Carvalho Chehab start sending a message at the same time. In that case the initiator 18954f38fcaSMauro Carvalho Chehab with the most leading zeroes wins and the other transmitter has to 19054f38fcaSMauro Carvalho Chehab stop transmitting ('Arbitration Lost'). This is very hard to test, 19154f38fcaSMauro Carvalho Chehab except by using this error injection command. 19254f38fcaSMauro Carvalho Chehab 19354f38fcaSMauro Carvalho Chehab This does not work if the remote CEC transmitter has logical address 19454f38fcaSMauro Carvalho Chehab 0 ('TV') since that will always win. 19554f38fcaSMauro Carvalho Chehab 19654f38fcaSMauro Carvalho ChehabTransmit Messages 19754f38fcaSMauro Carvalho Chehab----------------- 19854f38fcaSMauro Carvalho Chehab 19954f38fcaSMauro Carvalho Chehab``tx-ignore-nack-until-eom`` 20054f38fcaSMauro Carvalho Chehab This setting changes the behavior of transmitting CEC messages. Normally 20154f38fcaSMauro Carvalho Chehab as soon as the receiver NACKs a byte the transmit will stop, but the 20254f38fcaSMauro Carvalho Chehab specification also allows that the full message is transmitted and only 20354f38fcaSMauro Carvalho Chehab at the end will the transmitter look at the ACK bit. This is not 20454f38fcaSMauro Carvalho Chehab recommended behavior since there is no point in keeping the CEC bus busy 20554f38fcaSMauro Carvalho Chehab for longer than is strictly needed. Especially given how slow the bus is. 20654f38fcaSMauro Carvalho Chehab 20754f38fcaSMauro Carvalho Chehab This setting can be used to test how well a receiver deals with 20854f38fcaSMauro Carvalho Chehab transmitters that ignore NACKs until the very end of the message. 20954f38fcaSMauro Carvalho Chehab 21054f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-no-eom`` 21154f38fcaSMauro Carvalho Chehab Don't set the EOM bit. Normally the last byte of the message has the EOM 21254f38fcaSMauro Carvalho Chehab (End-Of-Message) bit set. With this command the transmit will just stop 21354f38fcaSMauro Carvalho Chehab without ever sending an EOM. This can be used to test how a receiver 21454f38fcaSMauro Carvalho Chehab handles this case. Normally receivers have a time-out after which 21554f38fcaSMauro Carvalho Chehab they will go back to the Idle state. 21654f38fcaSMauro Carvalho Chehab 21754f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-early-eom`` 21854f38fcaSMauro Carvalho Chehab Set the EOM bit one byte too soon. This obviously only works for messages 21954f38fcaSMauro Carvalho Chehab of two bytes or more. The EOM bit will be set for the second-to-last byte 22054f38fcaSMauro Carvalho Chehab and not for the final byte. The receiver should ignore the last byte in 22154f38fcaSMauro Carvalho Chehab this case. Since the resulting message is likely to be too short for this 22254f38fcaSMauro Carvalho Chehab same reason the whole message is typically ignored. The receiver should be 22354f38fcaSMauro Carvalho Chehab in Idle state after the last byte was transmitted. 22454f38fcaSMauro Carvalho Chehab 22554f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-add-bytes <num>`` 22654f38fcaSMauro Carvalho Chehab Append ``<num>`` (1-255) spurious bytes to the message. The extra bytes 22754f38fcaSMauro Carvalho Chehab have the value of the byte position in the message. So if you transmit a 22854f38fcaSMauro Carvalho Chehab two byte message (e.g. a Get CEC Version message) and add 2 bytes, then 22954f38fcaSMauro Carvalho Chehab the full message received by the remote CEC adapter is 23054f38fcaSMauro Carvalho Chehab ``0x40 0x9f 0x02 0x03``. 23154f38fcaSMauro Carvalho Chehab 23254f38fcaSMauro Carvalho Chehab This command can be used to test buffer overflows in the receiver. E.g. 23354f38fcaSMauro Carvalho Chehab what does it do when it receives more than the maximum message size of 16 23454f38fcaSMauro Carvalho Chehab bytes. 23554f38fcaSMauro Carvalho Chehab 23654f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-remove-byte`` 23754f38fcaSMauro Carvalho Chehab Drop the last byte from the message, provided the message is at least 23854f38fcaSMauro Carvalho Chehab two bytes long. The receiver should ignore messages that are too short. 23954f38fcaSMauro Carvalho Chehab 24054f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-short-bit <bit>`` 24154f38fcaSMauro Carvalho Chehab Make this bit period shorter than allowed. The bit position cannot be 24254f38fcaSMauro Carvalho Chehab an Ack bit. If <op> specifies a specific CEC opcode then the bit position 24354f38fcaSMauro Carvalho Chehab must be at least 18, otherwise the opcode hasn't been received yet. 24454f38fcaSMauro Carvalho Chehab Normally the period of a data bit is between 2.05 and 2.75 milliseconds. 24554f38fcaSMauro Carvalho Chehab With this command the period of this bit is 1.8 milliseconds, this is 24654f38fcaSMauro Carvalho Chehab done by reducing the time the CEC bus is high. This bit period is less 24754f38fcaSMauro Carvalho Chehab than is allowed and the receiver should respond with a Low Drive 24854f38fcaSMauro Carvalho Chehab condition. 24954f38fcaSMauro Carvalho Chehab 25054f38fcaSMauro Carvalho Chehab This command is ignored for 0 bits in bit positions 0 to 3. This is 25154f38fcaSMauro Carvalho Chehab because the receiver also looks for an Arbitration Lost condition in 25254f38fcaSMauro Carvalho Chehab those first four bits and it is undefined what will happen if it 25354f38fcaSMauro Carvalho Chehab sees a too-short 0 bit. 25454f38fcaSMauro Carvalho Chehab 25554f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-long-bit <bit>`` 25654f38fcaSMauro Carvalho Chehab Make this bit period longer than is valid. The bit position cannot be 25754f38fcaSMauro Carvalho Chehab an Ack bit. If <op> specifies a specific CEC opcode then the bit position 25854f38fcaSMauro Carvalho Chehab must be at least 18, otherwise the opcode hasn't been received yet. 25954f38fcaSMauro Carvalho Chehab Normally the period of a data bit is between 2.05 and 2.75 milliseconds. 26054f38fcaSMauro Carvalho Chehab With this command the period of this bit is 2.9 milliseconds, this is 26154f38fcaSMauro Carvalho Chehab done by increasing the time the CEC bus is high. 26254f38fcaSMauro Carvalho Chehab 26354f38fcaSMauro Carvalho Chehab Even though this bit period is longer than is valid it is undefined what 26454f38fcaSMauro Carvalho Chehab a receiver will do. It might just accept it, or it might time out and 26554f38fcaSMauro Carvalho Chehab return to Idle state. Unfortunately the CEC specification is silent about 26654f38fcaSMauro Carvalho Chehab this. 26754f38fcaSMauro Carvalho Chehab 26854f38fcaSMauro Carvalho Chehab This command is ignored for 0 bits in bit positions 0 to 3. This is 26954f38fcaSMauro Carvalho Chehab because the receiver also looks for an Arbitration Lost condition in 27054f38fcaSMauro Carvalho Chehab those first four bits and it is undefined what will happen if it 27154f38fcaSMauro Carvalho Chehab sees a too-long 0 bit. 27254f38fcaSMauro Carvalho Chehab 27354f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-short-start`` 27454f38fcaSMauro Carvalho Chehab Make this start bit period shorter than allowed. Normally the period of 27554f38fcaSMauro Carvalho Chehab a start bit is between 4.3 and 4.7 milliseconds. With this command the 27654f38fcaSMauro Carvalho Chehab period of the start bit is 4.1 milliseconds, this is done by reducing 27754f38fcaSMauro Carvalho Chehab the time the CEC bus is high. This start bit period is less than is 27854f38fcaSMauro Carvalho Chehab allowed and the receiver should return to Idle state when this is detected. 27954f38fcaSMauro Carvalho Chehab 28054f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-long-start`` 28154f38fcaSMauro Carvalho Chehab Make this start bit period longer than is valid. Normally the period of 28254f38fcaSMauro Carvalho Chehab a start bit is between 4.3 and 4.7 milliseconds. With this command the 28354f38fcaSMauro Carvalho Chehab period of the start bit is 5 milliseconds, this is done by increasing 28454f38fcaSMauro Carvalho Chehab the time the CEC bus is high. This start bit period is more than is 28554f38fcaSMauro Carvalho Chehab valid and the receiver should return to Idle state when this is detected. 28654f38fcaSMauro Carvalho Chehab 28754f38fcaSMauro Carvalho Chehab Even though this start bit period is longer than is valid it is undefined 28854f38fcaSMauro Carvalho Chehab what a receiver will do. It might just accept it, or it might time out and 28954f38fcaSMauro Carvalho Chehab return to Idle state. Unfortunately the CEC specification is silent about 29054f38fcaSMauro Carvalho Chehab this. 29154f38fcaSMauro Carvalho Chehab 29254f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-last-bit <bit>`` 29354f38fcaSMauro Carvalho Chehab Just stop transmitting after this bit. If <op> specifies a specific CEC 29454f38fcaSMauro Carvalho Chehab opcode then the bit position must be at least 18, otherwise the opcode 29554f38fcaSMauro Carvalho Chehab hasn't been received yet. This command can be used to test how the receiver 29654f38fcaSMauro Carvalho Chehab reacts when a message just suddenly stops. It should time out and go back 29754f38fcaSMauro Carvalho Chehab to Idle state. 29854f38fcaSMauro Carvalho Chehab 29954f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-low-drive <bit>`` 30054f38fcaSMauro Carvalho Chehab Force a Low Drive condition at this bit position. If <op> specifies a 30154f38fcaSMauro Carvalho Chehab specific CEC opcode then the bit position must be at least 18, otherwise 30254f38fcaSMauro Carvalho Chehab the opcode hasn't been received yet. This can be used to test how the 30354f38fcaSMauro Carvalho Chehab receiver handles Low Drive conditions. Note that if this happens at bit 30454f38fcaSMauro Carvalho Chehab positions 0-3 the receiver can interpret this as an Arbitration Lost 30554f38fcaSMauro Carvalho Chehab condition. This is implementation dependent. 30654f38fcaSMauro Carvalho Chehab 30754f38fcaSMauro Carvalho ChehabCustom Pulses 30854f38fcaSMauro Carvalho Chehab------------- 30954f38fcaSMauro Carvalho Chehab 31054f38fcaSMauro Carvalho Chehab``tx-custom-low-usecs <usecs>`` 31154f38fcaSMauro Carvalho Chehab This defines the duration in microseconds that the custom pulse pulls 31254f38fcaSMauro Carvalho Chehab the CEC line low. The default is 1000 microseconds. 31354f38fcaSMauro Carvalho Chehab 31454f38fcaSMauro Carvalho Chehab``tx-custom-high-usecs <usecs>`` 31554f38fcaSMauro Carvalho Chehab This defines the duration in microseconds that the custom pulse keeps the 31654f38fcaSMauro Carvalho Chehab CEC line high (unless another CEC adapter pulls it low in that time). 31754f38fcaSMauro Carvalho Chehab The default is 1000 microseconds. The total period of the custom pulse is 31854f38fcaSMauro Carvalho Chehab ``tx-custom-low-usecs + tx-custom-high-usecs``. 31954f38fcaSMauro Carvalho Chehab 32054f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-custom-bit <bit>`` 32154f38fcaSMauro Carvalho Chehab Send the custom bit instead of a regular data bit. The bit position cannot 32254f38fcaSMauro Carvalho Chehab be an Ack bit. If <op> specifies a specific CEC opcode then the bit 32354f38fcaSMauro Carvalho Chehab position must be at least 18, otherwise the opcode hasn't been received yet. 32454f38fcaSMauro Carvalho Chehab 32554f38fcaSMauro Carvalho Chehab``<op>[,<mode>] tx-custom-start`` 32654f38fcaSMauro Carvalho Chehab Send the custom bit instead of a regular start bit. 32754f38fcaSMauro Carvalho Chehab 32854f38fcaSMauro Carvalho Chehab``tx-custom-pulse`` 32954f38fcaSMauro Carvalho Chehab Transmit a single custom pulse as soon as the CEC bus is idle. 330