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 <jaf...@gmail.com> > --- > 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html