X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fserial.c;h=25e2b97b3ce63ef30e04317e50c9e3b7303462f2;hb=2634b7781242796352616a571b794700f409baf7;hp=fc7063882a259d6a1fe381ab3a20d60d69bb5a97;hpb=b1a7ca3b605a8a7e7ce97dfc9eb211e9b3a5c918;p=libsigrok.git diff --git a/src/serial.c b/src/serial.c index fc706388..25e2b97b 100644 --- a/src/serial.c +++ b/src/serial.c @@ -25,10 +25,26 @@ #include #include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" +/** @cond PRIVATE */ #define LOG_PREFIX "serial" +/** @endcond */ + +/** + * @file + * + * Serial port handling. + */ + +/** + * @defgroup grp_serial Serial port handling + * + * Serial port handling functions. + * + * @{ + */ /** * Open the specified serial port. @@ -42,6 +58,8 @@ * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags) { @@ -90,6 +108,8 @@ SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags) * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_close(struct sr_serial_dev_inst *serial) { @@ -135,6 +155,8 @@ SR_PRIV int serial_close(struct sr_serial_dev_inst *serial) * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial) { @@ -177,6 +199,8 @@ SR_PRIV int serial_flush(struct sr_serial_dev_inst *serial) * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_drain(struct sr_serial_dev_inst *serial) { @@ -257,6 +281,8 @@ static int _serial_write(struct sr_serial_dev_inst *serial, * @retval SR_ERR Other error. * @retval other The number of bytes written. If this is less than the number * specified in the call, the timeout was reached. + * + * @private */ SR_PRIV int serial_write_blocking(struct sr_serial_dev_inst *serial, const void *buf, size_t count, unsigned int timeout_ms) @@ -274,7 +300,9 @@ SR_PRIV int serial_write_blocking(struct sr_serial_dev_inst *serial, * @retval SR_ERR_ARG Invalid argument. * @retval SR_ERR Other error. * @retval other The number of bytes written. -*/ + * + * @private + */ SR_PRIV int serial_write_nonblocking(struct sr_serial_dev_inst *serial, const void *buf, size_t count) { @@ -331,6 +359,8 @@ static int _serial_read(struct sr_serial_dev_inst *serial, void *buf, * @retval SR_ERR Other error. * @retval other The number of bytes read. If this is less than the number * requested, the timeout was reached. + * + * @private */ SR_PRIV int serial_read_blocking(struct sr_serial_dev_inst *serial, void *buf, size_t count, unsigned int timeout_ms) @@ -349,6 +379,8 @@ SR_PRIV int serial_read_blocking(struct sr_serial_dev_inst *serial, void *buf, * @retval SR_ERR_ARG Invalid argument. * @retval SR_ERR Other error. * @retval other The number of bytes read. + * + * @private */ SR_PRIV int serial_read_nonblocking(struct sr_serial_dev_inst *serial, void *buf, size_t count) @@ -371,6 +403,8 @@ SR_PRIV int serial_read_nonblocking(struct sr_serial_dev_inst *serial, void *buf * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, int bits, int parity, int stopbits, @@ -450,13 +484,18 @@ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, * rts=0|1 Set RTS off resp. on.\n * Please note that values and combinations of these parameters must be * supported by the concrete serial interface hardware and the drivers for it. + * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_set_paramstr(struct sr_serial_dev_inst *serial, const char *paramstr) { +/** @cond PRIVATE */ #define SERIAL_COMM_SPEC "^(\\d+)/([5678])([neo])([12])(.*)$" +/** @endcond */ GRegex *reg; GMatchInfo *match; @@ -561,6 +600,8 @@ SR_PRIV int serial_set_paramstr(struct sr_serial_dev_inst *serial, * * @retval SR_OK Success. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_readline(struct sr_serial_dev_inst *serial, char **buf, int *buflen, gint64 timeout_ms) @@ -583,7 +624,7 @@ SR_PRIV int serial_readline(struct sr_serial_dev_inst *serial, char **buf, maxlen = *buflen; *buflen = len = 0; - while(1) { + while (1) { len = maxlen - *buflen - 1; if (len < 1) break; @@ -628,6 +669,8 @@ SR_PRIV int serial_readline(struct sr_serial_dev_inst *serial, char **buf, * * @retval SR_OK Valid packet was found within the given timeout. * @retval SR_ERR Failure. + * + * @private */ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial, uint8_t *buf, size_t *buflen, @@ -650,7 +693,7 @@ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial, } /* Assume 8n1 transmission. That is 10 bits for every byte. */ - byte_delay_us = 10 * (1000000 / baudrate); + byte_delay_us = 10 * ((1000 * 1000) / baudrate); start = g_get_monotonic_time(); i = ibuf = len = 0; @@ -701,12 +744,14 @@ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial, * Extract the serial device and options from the options linked list. * * @param options List of options passed from the command line. - * @param serial_device Pointer where to store the exctracted serial device. + * @param serial_device Pointer where to store the extracted serial device. * @param serial_options Pointer where to store the optional extracted serial * options. * * @return SR_OK if a serial_device is found, SR_ERR if no device is found. The * returned string should not be freed by the caller. + * + * @private */ SR_PRIV int sr_serial_extract_options(GSList *options, const char **serial_device, const char **serial_options) @@ -738,12 +783,15 @@ SR_PRIV int sr_serial_extract_options(GSList *options, const char **serial_devic return SR_OK; } +/** @cond PRIVATE */ #ifdef _WIN32 typedef HANDLE event_handle; #else typedef int event_handle; #endif +/** @endcond */ +/** @private */ SR_PRIV int serial_source_add(struct sr_session *session, struct sr_serial_dev_inst *serial, int events, int timeout, sr_receive_data_callback cb, void *cb_data) @@ -789,11 +837,15 @@ SR_PRIV int serial_source_add(struct sr_session *session, return SR_OK; } +/** @private */ SR_PRIV int serial_source_remove(struct sr_session *session, struct sr_serial_dev_inst *serial) { unsigned int i; + if (!serial->event_set) + return SR_OK; + for (i = 0; i < serial->event_set->count; i++) if (sr_session_source_remove_pollfd(session, &serial->pollfds[i]) != SR_OK) return SR_ERR; @@ -886,6 +938,8 @@ SR_API GSList *sr_serial_list(const struct sr_dev_driver *driver) * @return A GSList of strings containing the path of the serial device or * NULL if no serial device is found. The returned list must be freed * by the caller. + * + * @private */ SR_PRIV GSList *sr_serial_find_usb(uint16_t vendor_id, uint16_t product_id) { @@ -909,6 +963,7 @@ SR_PRIV GSList *sr_serial_find_usb(uint16_t vendor_id, uint16_t product_id) return tty_devs; } +/** @private */ SR_PRIV int serial_timeout(struct sr_serial_dev_inst *port, int num_bytes) { struct sp_port_config *config; @@ -948,3 +1003,5 @@ SR_PRIV int serial_timeout(struct sr_serial_dev_inst *port, int num_bytes) return timeout_ms; } + +/** @} */