From 053986cf009d11dcb4a17937c783d6d85530a0ce Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sat, 29 Jul 2023 22:53:01 +0300 Subject: [PATCH] read by lines (working) --- ~/C/libserialport/listen.c | 41 +++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/~/C/libserialport/listen.c b/~/C/libserialport/listen.c index 6f87190..69b9135 100644 --- a/~/C/libserialport/listen.c +++ b/~/C/libserialport/listen.c @@ -6,45 +6,50 @@ /* Helper function for error handling. */ int check(enum sp_return result); -int main(int argc, char **argv) { +int main() { int result; - const int size = 30; + const int size = 256; char *buffer = malloc(size + 1); const char *port_name = "/dev/ttyACM0"; const unsigned int timeout = 1000; struct sp_port *serial_port; check(sp_get_port_by_name(port_name, &serial_port)); - - printf("Opening port.\n"); check(sp_open(serial_port, SP_MODE_READ_WRITE)); - printf("Setting port to 9600 8N1, no flow control.\n"); check(sp_set_baudrate(serial_port, 9600)); check(sp_set_bits(serial_port, 8)); check(sp_set_parity(serial_port, SP_PARITY_NONE)); check(sp_set_stopbits(serial_port, 1)); check(sp_set_flowcontrol(serial_port, SP_FLOWCONTROL_NONE)); - result = - check(sp_blocking_write(serial_port, "ping", strlen("ping"), timeout)); - while (1) { - result = check(sp_blocking_read(serial_port, buffer, size, timeout)); + int pos = 0; - if (result == -1) { - printf("Error reading from serial port\n"); - break; - } else if (result == 0) { - printf("No more data\n"); - break; - } else { - buffer[result] = '\0'; - printf("=====\n%s\n", buffer); + while (pos < size) { + result = check(sp_blocking_read(serial_port, buffer + pos, 1, timeout)); + + if (result == -1) { + printf("Error reading from serial port\n"); + break; + } else if (result == 0) { + printf("No more data\n"); + break; + } else { + if (buffer[pos] == '\n') { + buffer[pos] = '\0'; + break; + } else + pos++; + } + + printf("%s\n", buffer); } } free(buffer); + + return 0; } /* Helper function for error handling. */