summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Burnicki <martin.burnicki@meinberg.de>2024-01-03 11:12:37 +0100
committerMartin Burnicki <martin.burnicki@meinberg.de>2024-01-03 11:12:37 +0100
commit38cb02567e44cccdd0074bf17b9c07ece3ac8af5 (patch)
treeaf40f9f2ba15d92e8d1a7f72490029bc5f88d3f1
parentbd7416de0b38da4111416114460968c0b6b86d22 (diff)
downloadmbgreadtimestring-38cb02567e44cccdd0074bf17b9c07ece3ac8af5.tar.gz
mbgreadtimestring-38cb02567e44cccdd0074bf17b9c07ece3ac8af5.zip
Improve mbglib usage
-rw-r--r--mbgreadtimestring.c51
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 );