Commit 337c81e2 authored by Christophe Massiot's avatar Christophe Massiot

* ALL: Add status messages where appropriate.

parent 0bfd39d3
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <errno.h> #include <errno.h>
#include <bitstream/common.h>
#include "asi.h" #include "asi.h"
#include "dvblast.h" #include "dvblast.h"
...@@ -56,10 +58,12 @@ ...@@ -56,10 +58,12 @@
#define ASI_DEVICE "/dev/asirx%u" #define ASI_DEVICE "/dev/asirx%u"
#define ASI_TIMESTAMPS_FILE "/sys/class/asi/asirx%u/timestamps" #define ASI_TIMESTAMPS_FILE "/sys/class/asi/asirx%u/timestamps"
#define ASI_BUFSIZE_FILE "/sys/class/asi/asirx%u/bufsize" #define ASI_BUFSIZE_FILE "/sys/class/asi/asirx%u/bufsize"
#define ASI_LOCK_TIMEOUT 5000000 /* 5 s */
static int i_handle; static int i_handle;
static int i_bufsize; static int i_bufsize;
static uint8_t p_pid_filter[8192 / 8]; static uint8_t p_pid_filter[8192 / 8];
static mtime_t i_last_packet = 0;
/***************************************************************************** /*****************************************************************************
* Local helpers * Local helpers
...@@ -217,6 +221,18 @@ block_t *asi_Read( mtime_t i_poll_timeout ) ...@@ -217,6 +221,18 @@ block_t *asi_Read( mtime_t i_poll_timeout )
block_t *p_ts, **pp_current = &p_ts; block_t *p_ts, **pp_current = &p_ts;
int i, i_len; int i, i_len;
if ( !i_last_packet )
{
switch (i_print_type) {
case PRINT_XML:
printf("<STATUS type=\"lock\" status=\"1\"/>\n");
break;
default:
printf("frontend has acquired lock\n" );
}
}
i_last_packet = i_wallclock;
for ( i = 0; i < i_bufsize / TS_SIZE; i++ ) for ( i = 0; i < i_bufsize / TS_SIZE; i++ )
{ {
*pp_current = block_New(); *pp_current = block_New();
...@@ -247,6 +263,18 @@ block_t *asi_Read( mtime_t i_poll_timeout ) ...@@ -247,6 +263,18 @@ block_t *asi_Read( mtime_t i_poll_timeout )
return p_ts; return p_ts;
} }
else if ( i_last_packet && i_last_packet + ASI_LOCK_TIMEOUT < i_wallclock )
{
switch (i_print_type) {
case PRINT_XML:
printf("<STATUS type=\"lock\" status=\"0\"/>\n");
break;
default:
printf("frontend has lost lock\n" );
}
i_last_packet = 0;
}
return NULL; return NULL;
} }
...@@ -272,7 +300,7 @@ int asi_SetFilter( uint16_t i_pid ) ...@@ -272,7 +300,7 @@ int asi_SetFilter( uint16_t i_pid )
void asi_UnsetFilter( int i_fd, uint16_t i_pid ) void asi_UnsetFilter( int i_fd, uint16_t i_pid )
{ {
#ifdef USE_HARDWARE_FILTERING #ifdef USE_HARDWARE_FILTERING
p_pid_filter[ i_pid / 8 ] &= ~(0x01 << (i_pid % 8)); p_pid_filter[ i_pid / 8 ] &= ~(0x01 << (i_pid % 8));
if ( ioctl( i_handle, ASI_IOC_RXSETPF, p_pid_filter ) < 0 ) if ( ioctl( i_handle, ASI_IOC_RXSETPF, p_pid_filter ) < 0 )
msg_Warn( NULL, "couldn't remove filter on PID %u", i_pid ); msg_Warn( NULL, "couldn't remove filter on PID %u", i_pid );
#endif #endif
......
...@@ -368,7 +368,7 @@ static void FrontendPoll( void ) ...@@ -368,7 +368,7 @@ static void FrontendPoll( void )
printf("<STATUS type=\"lock\" status=\"1\"/>\n"); printf("<STATUS type=\"lock\" status=\"1\"/>\n");
break; break;
default: default:
printf("frontend has acquired lock" ); printf("frontend has acquired lock\n" );
} }
i_frontend_timeout = 0; i_frontend_timeout = 0;
i_last_packet = i_wallclock; i_last_packet = i_wallclock;
...@@ -392,7 +392,7 @@ static void FrontendPoll( void ) ...@@ -392,7 +392,7 @@ static void FrontendPoll( void )
printf("<STATUS type=\"lock\" status=\"0\"/>\n"); printf("<STATUS type=\"lock\" status=\"0\"/>\n");
break; break;
default: default:
printf("frontend has lost lock" ); printf("frontend has lost lock\n" );
} }
i_frontend_timeout = i_wallclock + i_frontend_timeout_duration; i_frontend_timeout = i_wallclock + i_frontend_timeout_duration;
} }
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <errno.h> #include <errno.h>
#include <bitstream/common.h>
#include <bitstream/ietf/rtp.h> #include <bitstream/ietf/rtp.h>
#include "dvblast.h" #include "dvblast.h"
...@@ -45,11 +46,14 @@ ...@@ -45,11 +46,14 @@
/***************************************************************************** /*****************************************************************************
* Local declarations * Local declarations
*****************************************************************************/ *****************************************************************************/
#define UDP_LOCK_TIMEOUT 5000000 /* 5 s */
static int i_handle; static int i_handle;
static bool b_udp = false; static bool b_udp = false;
static int i_block_cnt; static int i_block_cnt;
static uint8_t pi_ssrc[4] = { 0, 0, 0, 0 }; static uint8_t pi_ssrc[4] = { 0, 0, 0, 0 };
static uint16_t i_cc = 0; static uint16_t i_cc = 0;
static mtime_t i_last_packet = 0;
/***************************************************************************** /*****************************************************************************
* udp_Open * udp_Open
...@@ -263,6 +267,18 @@ block_t *udp_Read( mtime_t i_poll_timeout ) ...@@ -263,6 +267,18 @@ block_t *udp_Read( mtime_t i_poll_timeout )
ssize_t i_len; ssize_t i_len;
uint8_t p_rtp_hdr[RTP_HEADER_SIZE]; uint8_t p_rtp_hdr[RTP_HEADER_SIZE];
if ( !i_last_packet )
{
switch (i_print_type) {
case PRINT_XML:
printf("<STATUS type=\"lock\" status=\"1\"/>\n");
break;
default:
printf("frontend has acquired lock\n" );
}
}
i_last_packet = i_wallclock;
if ( !b_udp ) if ( !b_udp )
{ {
/* FIXME : this is wrong if RTP header > 12 bytes */ /* FIXME : this is wrong if RTP header > 12 bytes */
...@@ -289,8 +305,6 @@ block_t *udp_Read( mtime_t i_poll_timeout ) ...@@ -289,8 +305,6 @@ block_t *udp_Read( mtime_t i_poll_timeout )
goto err; goto err;
} }
int meuh = i_len;
if ( !b_udp ) if ( !b_udp )
{ {
uint8_t pi_new_ssrc[4]; uint8_t pi_new_ssrc[4];
...@@ -311,6 +325,14 @@ int meuh = i_len; ...@@ -311,6 +325,14 @@ int meuh = i_len;
memcpy( &addr.s_addr, pi_new_ssrc, 4 * sizeof(uint8_t) ); memcpy( &addr.s_addr, pi_new_ssrc, 4 * sizeof(uint8_t) );
msg_Dbg( NULL, "new RTP source: %s", inet_ntoa( addr ) ); msg_Dbg( NULL, "new RTP source: %s", inet_ntoa( addr ) );
memcpy( pi_ssrc, pi_new_ssrc, 4 * sizeof(uint8_t) ); memcpy( pi_ssrc, pi_new_ssrc, 4 * sizeof(uint8_t) );
switch (i_print_type) {
case PRINT_XML:
printf("<STATUS type=\"source\" source=\"%s\"/>\n",
inet_ntoa( addr ));
break;
default:
printf("new RTP source: %s\n", inet_ntoa( addr ) );
}
} }
i_cc = rtp_get_cc(p_rtp_hdr) + 1; i_cc = rtp_get_cc(p_rtp_hdr) + 1;
...@@ -326,15 +348,23 @@ int meuh = i_len; ...@@ -326,15 +348,23 @@ int meuh = i_len;
} }
i_wallclock = mdate(); i_wallclock = mdate();
if ( *pp_current )
msg_Dbg( NULL, "partial buffer received %d", meuh );
err: err:
block_DeleteChain( *pp_current ); block_DeleteChain( *pp_current );
*pp_current = NULL; *pp_current = NULL;
return p_ts; return p_ts;
} }
else if ( i_last_packet && i_last_packet + UDP_LOCK_TIMEOUT < i_wallclock )
{
switch (i_print_type) {
case PRINT_XML:
printf("<STATUS type=\"lock\" status=\"0\"/>\n");
break;
default:
printf("frontend has lost lock\n" );
}
i_last_packet = 0;
}
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment