code style
This commit is contained in:
parent
9c495b07dd
commit
30455feef7
109
src/zmc.cpp
109
src/zmc.cpp
|
@ -73,8 +73,7 @@ possible, this should run at more or less constant speed.
|
||||||
#include "zm_signal.h"
|
#include "zm_signal.h"
|
||||||
#include "zm_monitor.h"
|
#include "zm_monitor.h"
|
||||||
|
|
||||||
void Usage()
|
void Usage() {
|
||||||
{
|
|
||||||
fprintf( stderr, "zmc -d <device_path> or -r <proto> -H <host> -P <port> -p <path> or -f <file_path> or -m <monitor_id>\n" );
|
fprintf( stderr, "zmc -d <device_path> or -r <proto> -H <host> -P <port> -p <path> or -f <file_path> or -m <monitor_id>\n" );
|
||||||
|
|
||||||
fprintf( stderr, "Options:\n" );
|
fprintf( stderr, "Options:\n" );
|
||||||
|
@ -91,8 +90,7 @@ void Usage()
|
||||||
exit( 0 );
|
exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
int main( int argc, char *argv[] )
|
int main( int argc, char *argv[] ) {
|
||||||
{
|
|
||||||
self = argv[0];
|
self = argv[0];
|
||||||
|
|
||||||
srand( getpid() * time( 0 ) );
|
srand( getpid() * time( 0 ) );
|
||||||
|
@ -110,21 +108,19 @@ int main( int argc, char *argv[] )
|
||||||
{"protocol", 1, 0, 'r'},
|
{"protocol", 1, 0, 'r'},
|
||||||
{"host", 1, 0, 'H'},
|
{"host", 1, 0, 'H'},
|
||||||
{"port", 1, 0, 'P'},
|
{"port", 1, 0, 'P'},
|
||||||
{"path", 1, 0, 'p'},
|
{"path", 1, 0, 'p'},
|
||||||
{"file", 1, 0, 'f'},
|
{"file", 1, 0, 'f'},
|
||||||
{"monitor", 1, 0, 'm'},
|
{"monitor", 1, 0, 'm'},
|
||||||
{"help", 0, 0, 'h'},
|
{"help", 0, 0, 'h'},
|
||||||
{"version", 0, 0, 'v'},
|
{"version", 0, 0, 'v'},
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
while (1)
|
while (1) {
|
||||||
{
|
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
|
|
||||||
int c = getopt_long (argc, argv, "d:H:P:p:f:m:h:v", long_options, &option_index);
|
int c = getopt_long (argc, argv, "d:H:P:p:f:m:h:v", long_options, &option_index);
|
||||||
if (c == -1)
|
if (c == -1) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,8 +157,7 @@ int main( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optind < argc)
|
if (optind < argc) {
|
||||||
{
|
|
||||||
fprintf( stderr, "Extraneous options, " );
|
fprintf( stderr, "Extraneous options, " );
|
||||||
while (optind < argc)
|
while (optind < argc)
|
||||||
printf ("%s ", argv[optind++]);
|
printf ("%s ", argv[optind++]);
|
||||||
|
@ -171,37 +166,28 @@ int main( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
|
|
||||||
int modes = ( device[0]?1:0 + host[0]?1:0 + file[0]?1:0 + (monitor_id>0?1:0) );
|
int modes = ( device[0]?1:0 + host[0]?1:0 + file[0]?1:0 + (monitor_id>0?1:0) );
|
||||||
if ( modes > 1 )
|
if ( modes > 1 ) {
|
||||||
{
|
|
||||||
fprintf( stderr, "Only one of device, host/port/path, file or monitor id allowed\n" );
|
fprintf( stderr, "Only one of device, host/port/path, file or monitor id allowed\n" );
|
||||||
Usage();
|
Usage();
|
||||||
exit( 0 );
|
exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( modes < 1 )
|
if ( modes < 1 ) {
|
||||||
{
|
|
||||||
fprintf( stderr, "One of device, host/port/path, file or monitor id must be specified\n" );
|
fprintf( stderr, "One of device, host/port/path, file or monitor id must be specified\n" );
|
||||||
Usage();
|
Usage();
|
||||||
exit( 0 );
|
exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
char log_id_string[32] = "";
|
char log_id_string[32] = "";
|
||||||
if ( device[0] )
|
if ( device[0] ) {
|
||||||
{
|
|
||||||
const char *slash_ptr = strrchr( device, '/' );
|
const char *slash_ptr = strrchr( device, '/' );
|
||||||
snprintf( log_id_string, sizeof(log_id_string), "zmc_d%s", slash_ptr?slash_ptr+1:device );
|
snprintf( log_id_string, sizeof(log_id_string), "zmc_d%s", slash_ptr?slash_ptr+1:device );
|
||||||
}
|
} else if ( host[0] ) {
|
||||||
else if ( host[0] )
|
|
||||||
{
|
|
||||||
snprintf( log_id_string, sizeof(log_id_string), "zmc_h%s", host );
|
snprintf( log_id_string, sizeof(log_id_string), "zmc_h%s", host );
|
||||||
}
|
} else if ( file[0] ) {
|
||||||
else if ( file[0] )
|
|
||||||
{
|
|
||||||
const char *slash_ptr = strrchr( file, '/' );
|
const char *slash_ptr = strrchr( file, '/' );
|
||||||
snprintf( log_id_string, sizeof(log_id_string), "zmc_f%s", slash_ptr?slash_ptr+1:file );
|
snprintf( log_id_string, sizeof(log_id_string), "zmc_f%s", slash_ptr?slash_ptr+1:file );
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
snprintf( log_id_string, sizeof(log_id_string), "zmc_m%d", monitor_id );
|
snprintf( log_id_string, sizeof(log_id_string), "zmc_m%d", monitor_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,35 +200,26 @@ int main( int argc, char *argv[] )
|
||||||
Monitor **monitors = 0;
|
Monitor **monitors = 0;
|
||||||
int n_monitors = 0;
|
int n_monitors = 0;
|
||||||
#if ZM_HAS_V4L
|
#if ZM_HAS_V4L
|
||||||
if ( device[0] )
|
if ( device[0] ) {
|
||||||
{
|
|
||||||
n_monitors = Monitor::LoadLocalMonitors( device, monitors, Monitor::CAPTURE );
|
n_monitors = Monitor::LoadLocalMonitors( device, monitors, Monitor::CAPTURE );
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
#endif // ZM_HAS_V4L
|
#endif // ZM_HAS_V4L
|
||||||
if ( host[0] )
|
if ( host[0] ) {
|
||||||
{
|
|
||||||
if ( !port )
|
if ( !port )
|
||||||
port = "80";
|
port = "80";
|
||||||
n_monitors = Monitor::LoadRemoteMonitors( protocol, host, port, path, monitors, Monitor::CAPTURE );
|
n_monitors = Monitor::LoadRemoteMonitors( protocol, host, port, path, monitors, Monitor::CAPTURE );
|
||||||
}
|
} else if ( file[0] ) {
|
||||||
else if ( file[0] )
|
|
||||||
{
|
|
||||||
n_monitors = Monitor::LoadFileMonitors( file, monitors, Monitor::CAPTURE );
|
n_monitors = Monitor::LoadFileMonitors( file, monitors, Monitor::CAPTURE );
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
Monitor *monitor = Monitor::Load( monitor_id, true, Monitor::CAPTURE );
|
Monitor *monitor = Monitor::Load( monitor_id, true, Monitor::CAPTURE );
|
||||||
if ( monitor )
|
if ( monitor ) {
|
||||||
{
|
|
||||||
monitors = new Monitor *[1];
|
monitors = new Monitor *[1];
|
||||||
monitors[0] = monitor;
|
monitors[0] = monitor;
|
||||||
n_monitors = 1;
|
n_monitors = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !n_monitors )
|
if ( !n_monitors ) {
|
||||||
{
|
|
||||||
Error( "No monitors found" );
|
Error( "No monitors found" );
|
||||||
exit ( -1 );
|
exit ( -1 );
|
||||||
}
|
}
|
||||||
|
@ -259,8 +236,7 @@ int main( int argc, char *argv[] )
|
||||||
sigaddset( &block_set, SIGUSR2 );
|
sigaddset( &block_set, SIGUSR2 );
|
||||||
|
|
||||||
monitors[0]->setStartupTime( (time_t)time(NULL) );
|
monitors[0]->setStartupTime( (time_t)time(NULL) );
|
||||||
if ( monitors[0]->PrimeCapture() < 0 )
|
if ( monitors[0]->PrimeCapture() < 0 ) {
|
||||||
{
|
|
||||||
Error( "Failed to prime capture of initial monitor" );
|
Error( "Failed to prime capture of initial monitor" );
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
}
|
}
|
||||||
|
@ -269,8 +245,7 @@ int main( int argc, char *argv[] )
|
||||||
long *alarm_capture_delays = new long[n_monitors];
|
long *alarm_capture_delays = new long[n_monitors];
|
||||||
long *next_delays = new long[n_monitors];
|
long *next_delays = new long[n_monitors];
|
||||||
struct timeval * last_capture_times = new struct timeval[n_monitors];
|
struct timeval * last_capture_times = new struct timeval[n_monitors];
|
||||||
for ( int i = 0; i < n_monitors; i++ )
|
for ( int i = 0; i < n_monitors; i++ ) {
|
||||||
{
|
|
||||||
last_capture_times[i].tv_sec = last_capture_times[i].tv_usec = 0;
|
last_capture_times[i].tv_sec = last_capture_times[i].tv_usec = 0;
|
||||||
capture_delays[i] = monitors[i]->GetCaptureDelay();
|
capture_delays[i] = monitors[i]->GetCaptureDelay();
|
||||||
alarm_capture_delays[i] = monitors[i]->GetAlarmCaptureDelay();
|
alarm_capture_delays[i] = monitors[i]->GetAlarmCaptureDelay();
|
||||||
|
@ -279,18 +254,14 @@ int main( int argc, char *argv[] )
|
||||||
int result = 0;
|
int result = 0;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
struct DeltaTimeval delta_time;
|
struct DeltaTimeval delta_time;
|
||||||
while( !zm_terminate )
|
while( !zm_terminate ) {
|
||||||
{
|
|
||||||
sigprocmask( SIG_BLOCK, &block_set, 0 );
|
sigprocmask( SIG_BLOCK, &block_set, 0 );
|
||||||
for ( int i = 0; i < n_monitors; i++ )
|
for ( int i = 0; i < n_monitors; i++ ) {
|
||||||
{
|
|
||||||
long min_delay = MAXINT;
|
long min_delay = MAXINT;
|
||||||
|
|
||||||
gettimeofday( &now, NULL );
|
gettimeofday( &now, NULL );
|
||||||
for ( int j = 0; j < n_monitors; j++ )
|
for ( int j = 0; j < n_monitors; j++ ) {
|
||||||
{
|
if ( last_capture_times[j].tv_sec ) {
|
||||||
if ( last_capture_times[j].tv_sec )
|
|
||||||
{
|
|
||||||
DELTA_TIMEVAL( delta_time, now, last_capture_times[j], DT_PREC_3 );
|
DELTA_TIMEVAL( delta_time, now, last_capture_times[j], DT_PREC_3 );
|
||||||
if ( monitors[i]->GetState() == Monitor::ALARM )
|
if ( monitors[i]->GetState() == Monitor::ALARM )
|
||||||
next_delays[j] = alarm_capture_delays[j]-delta_time.delta;
|
next_delays[j] = alarm_capture_delays[j]-delta_time.delta;
|
||||||
|
@ -298,48 +269,39 @@ int main( int argc, char *argv[] )
|
||||||
next_delays[j] = capture_delays[j]-delta_time.delta;
|
next_delays[j] = capture_delays[j]-delta_time.delta;
|
||||||
if ( next_delays[j] < 0 )
|
if ( next_delays[j] < 0 )
|
||||||
next_delays[j] = 0;
|
next_delays[j] = 0;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
next_delays[j] = 0;
|
next_delays[j] = 0;
|
||||||
}
|
}
|
||||||
if ( next_delays[j] <= min_delay )
|
if ( next_delays[j] <= min_delay ) {
|
||||||
{
|
|
||||||
min_delay = next_delays[j];
|
min_delay = next_delays[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( next_delays[i] <= min_delay || next_delays[i] <= 0 )
|
if ( next_delays[i] <= min_delay || next_delays[i] <= 0 ) {
|
||||||
{
|
if ( monitors[i]->PreCapture() < 0 ) {
|
||||||
if ( monitors[i]->PreCapture() < 0 )
|
|
||||||
{
|
|
||||||
Error( "Failed to pre-capture monitor %d %d (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
Error( "Failed to pre-capture monitor %d %d (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
||||||
zm_terminate = true;
|
zm_terminate = true;
|
||||||
result = -1;
|
result = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( monitors[i]->Capture() < 0 )
|
if ( monitors[i]->Capture() < 0 ) {
|
||||||
{
|
|
||||||
Error( "Failed to capture image from monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
Error( "Failed to capture image from monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
||||||
zm_terminate = true;
|
zm_terminate = true;
|
||||||
result = -1;
|
result = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( monitors[i]->PostCapture() < 0 )
|
if ( monitors[i]->PostCapture() < 0 ) {
|
||||||
{
|
|
||||||
Error( "Failed to post-capture monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
Error( "Failed to post-capture monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors );
|
||||||
zm_terminate = true;
|
zm_terminate = true;
|
||||||
result = -1;
|
result = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( next_delays[i] > 0 )
|
if ( next_delays[i] > 0 ) {
|
||||||
{
|
|
||||||
gettimeofday( &now, NULL );
|
gettimeofday( &now, NULL );
|
||||||
DELTA_TIMEVAL( delta_time, now, last_capture_times[i], DT_PREC_3 );
|
DELTA_TIMEVAL( delta_time, now, last_capture_times[i], DT_PREC_3 );
|
||||||
long sleep_time = next_delays[i]-delta_time.delta;
|
long sleep_time = next_delays[i]-delta_time.delta;
|
||||||
if ( sleep_time > 0 )
|
if ( sleep_time > 0 ) {
|
||||||
{
|
|
||||||
usleep( sleep_time*(DT_MAXGRAN/DT_PREC_3) );
|
usleep( sleep_time*(DT_MAXGRAN/DT_PREC_3) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -349,8 +311,7 @@ int main( int argc, char *argv[] )
|
||||||
} // end foreach n_monitors
|
} // end foreach n_monitors
|
||||||
sigprocmask( SIG_UNBLOCK, &block_set, 0 );
|
sigprocmask( SIG_UNBLOCK, &block_set, 0 );
|
||||||
} // end while ! zm_terminate
|
} // end while ! zm_terminate
|
||||||
for ( int i = 0; i < n_monitors; i++ )
|
for ( int i = 0; i < n_monitors; i++ ) {
|
||||||
{
|
|
||||||
delete monitors[i];
|
delete monitors[i];
|
||||||
}
|
}
|
||||||
delete [] monitors;
|
delete [] monitors;
|
||||||
|
|
Loading…
Reference in New Issue