diff options
author | Martin Burnicki <martin.burnicki@meinberg.de> | 2024-01-03 11:12:37 +0100 |
---|---|---|
committer | Martin Burnicki <martin.burnicki@meinberg.de> | 2024-01-03 11:12:37 +0100 |
commit | 38cb02567e44cccdd0074bf17b9c07ece3ac8af5 (patch) | |
tree | af40f9f2ba15d92e8d1a7f72490029bc5f88d3f1 | |
parent | bd7416de0b38da4111416114460968c0b6b86d22 (diff) | |
download | mbgreadtimestring-38cb02567e44cccdd0074bf17b9c07ece3ac8af5.tar.gz mbgreadtimestring-38cb02567e44cccdd0074bf17b9c07ece3ac8af5.zip |
Improve mbglib usage
-rw-r--r-- | mbgreadtimestring.c | 51 |
1 files changed, 14 insertions, 37 deletions
diff --git a/mbgreadtimestring.c b/mbgreadtimestring.c index d8166cd..6e385ad 100644 --- a/mbgreadtimestring.c +++ b/mbgreadtimestring.c @@ -45,12 +45,9 @@ static const char *target; static int must_print_usage; static int must_query; static int quiet; +static ulong poll_timeout = 2000; // ms -#if !defined( DEFAULT_DEV_NAME ) - #define DEFAULT_DEV_NAME NULL -#endif - -static const char *default_target = DEFAULT_DEV_NAME; +static const char *default_target = DEFAULT_SERIAL_DEVICE_NAME; static MBGSERIO_DEV *p_sdev; @@ -65,48 +62,27 @@ static MBGSERIO_DEV *p_sdev; static /*HDR*/ -int read_timestring( MBG_PORT_HANDLE dh, char *ts, int max_len ) +int read_timestring( MBGSERIO_DEV *sdev, char *ts, int max_len ) { char *cp = ts; int received_stx = 0; for (;;) { - char buffer[80]; - ssize_t bytes_read; - fd_set read_set; - struct timeval tv_timeout; - int rc; int i; + char buffer[80]; + int rc = mbgserio_read_wait( sdev, buffer, sizeof( buffer ) ); - tv_timeout.tv_sec = 2; - tv_timeout.tv_usec = 0; - FD_ZERO( &read_set ); - FD_SET( dh, &read_set ); - - rc = select( dh + 1, &read_set, NULL, NULL, &tv_timeout ); - - if ( rc < 0 ) // select() failed + if ( mbg_rc_is_error( rc ) ) { - perror( "select failed" ); + fprintf(stderr, "Read failed: %s\n", mbg_strerror( rc ) ); return rc; } - if ( rc == 0 ) // select() timed out - return 0; + // rc holds the number of bytes read. - bytes_read = read( dh, buffer, sizeof( buffer ) ); - - if ( bytes_read <= 0 ) - { - if ( bytes_read < 0 ) - perror( "reading" ); - - return bytes_read; - } - - for ( i = 0; i < bytes_read; i++ ) + for ( i = 0; i < rc; i++ ) { char c = buffer[i]; @@ -187,7 +163,7 @@ void usage( const char *progname ) "Target argument:\n" ); #if _USE_SERIAL_IO - printf( " can specify a serial port, e.g %s\n", + printf( " can specify a serial port, default: %s\n", default_target ); #endif @@ -306,13 +282,14 @@ int main( int argc, char *argv[] ) #if _USE_SERIAL_IO rc = mbgserio_open( &p_sdev, target ); - if ( rc < 0 ) + if ( mbg_rc_is_error( rc ) ) { fprintf( stderr, "Failed to open %s: %s\n", target, mbg_strerror( rc ) ); return 1; // Error ... } mbgserio_set_parms( p_sdev, baudrate, framing ); + mbgserio_set_dev_poll_timeout( p_sdev, poll_timeout ); if ( !quiet ) printf( "Using %s with %li baud, %s\n", @@ -330,9 +307,9 @@ int main( int argc, char *argv[] ) mbgserio_write( p_sdev, &request_char, sizeof( request_char ) ); } - rc = read_timestring( p_sdev->port_handle, ts, sizeof( ts ) ); + rc = read_timestring( p_sdev, ts, sizeof( ts ) ); - if ( rc > 0 ) + if ( mbg_rc_is_success( rc ) ) { ts[rc] = 0; // terminating 0 printf( "%s\n", ts ); |