/***************************************************************************** * Frontend events *****************************************************************************/ static void FrontendRead(struct ev_loop *loop, struct ev_io *w, int revents) { struct dvb_frontend_event event; fe_status_t i_status, i_diff; for( ;; ) { int i_ret = ioctl( i_frontend, FE_GET_EVENT, &event ); if( i_ret < 0 ) { if( errno == EWOULDBLOCK ) return; /* no more events */ msg_Err( NULL, "reading frontend event failed (%d) %s", i_ret, strerror(errno) ); return; } i_status = event.status; i_diff = i_status ^ i_last_status; i_last_status = i_status; { #define IF_UP( x ) \ } \ if ( i_diff & (x) ) \ { \ if ( i_status & (x) ) IF_UP( FE_HAS_SIGNAL ) msg_Dbg( NULL, "frontend has acquired signal" ); else msg_Dbg( NULL, "frontend has lost signal" ); IF_UP( FE_HAS_CARRIER ) msg_Dbg( NULL, "frontend has acquired carrier" ); else msg_Dbg( NULL, "frontend has lost carrier" ); IF_UP( FE_HAS_VITERBI ) msg_Dbg( NULL, "frontend has acquired stable FEC" ); else
/***************************************************************************** * FrontendPoll : Poll for frontend events *****************************************************************************/ void FrontendPoll( access_t *p_access ) { access_sys_t *p_sys = p_access->p_sys; frontend_t * p_frontend = p_sys->p_frontend; struct dvb_frontend_event event; fe_status_t i_status, i_diff; for( ;; ) { if( ioctl( p_sys->i_frontend_handle, FE_GET_EVENT, &event ) < 0 ) { if( errno != EWOULDBLOCK ) msg_Err( p_access, "frontend event error: %m" ); return; } i_status = event.status; i_diff = i_status ^ p_frontend->i_last_status; p_frontend->i_last_status = i_status; { #define IF_UP( x ) \ } \ if ( i_diff & (x) ) \ { \ if ( i_status & (x) ) IF_UP( FE_HAS_SIGNAL ) msg_Dbg( p_access, "frontend has acquired signal" ); else msg_Dbg( p_access, "frontend has lost signal" ); IF_UP( FE_HAS_CARRIER ) msg_Dbg( p_access, "frontend has acquired carrier" ); else msg_Dbg( p_access, "frontend has lost carrier" ); IF_UP( FE_HAS_VITERBI ) msg_Dbg( p_access, "frontend has acquired stable FEC" ); else