On 08/24/16 12:31, Johan Fjeldtvedt wrote:
> If the CEC device is disconnected, ioctl will return ENODEV. This is
> checked for in cec-ctl (when monitoring), cec-follower and
> cec-compliance, to make these exit when the CEC device disappears.
>
> Signed-off-by: Johan Fjeldtvedt <[email protected]>
> ---
> utils/cec-compliance/cec-compliance.h | 9 +++++++--
> utils/cec-ctl/cec-ctl.cpp | 7 ++++++-
> utils/cec-follower/cec-processing.cpp | 14 ++++++++++++--
> 3 files changed, 25 insertions(+), 5 deletions(-)
>
> diff --git a/utils/cec-compliance/cec-compliance.h
> b/utils/cec-compliance/cec-compliance.h
> index cb236fd..6b180c1 100644
> --- a/utils/cec-compliance/cec-compliance.h
> +++ b/utils/cec-compliance/cec-compliance.h
> @@ -334,10 +334,15 @@ static inline bool transmit_timeout(struct node *node,
> struct cec_msg *msg,
> unsigned timeout = 2000)
> {
> struct cec_msg original_msg = *msg;
> + int res;
>
> msg->timeout = timeout;
> - if (doioctl(node, CEC_TRANSMIT, msg) ||
> - !(msg->tx_status & CEC_TX_STATUS_OK))
> + res = doioctl(node, CEC_TRANSMIT, msg);
> + if (res == ENODEV) {
> + printf("No device.\n");
I think that "Device was disconnected." would be a better text to use. It's a
bit more
descriptive.
Regards,
Hans
> + exit(1);
> + }
> + if (res || !(msg->tx_status & CEC_TX_STATUS_OK))
> return false;
>
> if (((msg->rx_status & CEC_RX_STATUS_OK) || (msg->rx_status &
> CEC_RX_STATUS_FEATURE_ABORT))
> diff --git a/utils/cec-ctl/cec-ctl.cpp b/utils/cec-ctl/cec-ctl.cpp
> index 2d0d9e5..10efcbd 100644
> --- a/utils/cec-ctl/cec-ctl.cpp
> +++ b/utils/cec-ctl/cec-ctl.cpp
> @@ -1945,7 +1945,12 @@ skip_la:
> struct cec_msg msg = { };
> __u8 from, to;
>
> - if (doioctl(&node, CEC_RECEIVE, &msg))
> + res = doioctl(&node, CEC_RECEIVE, &msg);
> + if (res == ENODEV) {
> + printf("No device.\n");
> + break;
> + }
> + if (res)
> continue;
>
> from = cec_msg_initiator(&msg);
> diff --git a/utils/cec-follower/cec-processing.cpp
> b/utils/cec-follower/cec-processing.cpp
> index 34d65e4..bbe80c5 100644
> --- a/utils/cec-follower/cec-processing.cpp
> +++ b/utils/cec-follower/cec-processing.cpp
> @@ -979,7 +979,12 @@ void testProcessing(struct node *node)
> if (FD_ISSET(fd, &ex_fds)) {
> struct cec_event ev;
>
> - if (doioctl(node, CEC_DQEVENT, &ev))
> + res = doioctl(node, CEC_DQEVENT, &ev);
> + if (res == ENODEV) {
> + printf("No device.\n");
> + break;
> + }
> + if (res)
> continue;
> log_event(ev);
> if (ev.event == CEC_EVENT_STATE_CHANGE) {
> @@ -995,7 +1000,12 @@ void testProcessing(struct node *node)
> if (FD_ISSET(fd, &rd_fds)) {
> struct cec_msg msg = { };
>
> - if (doioctl(node, CEC_RECEIVE, &msg))
> + res = doioctl(node, CEC_RECEIVE, &msg);
> + if (res == ENODEV) {
> + printf("No device.\n");
> + break;
> + }
> + if (res)
> continue;
>
> __u8 from = cec_msg_initiator(&msg);
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html