Factor out serial_readline() to serial.c.
Only one (slightly different) variant remains in agilent-dmm, this will be merged soon too, though.
This commit is contained in:
parent
2980cc2494
commit
6f22a8ef2c
|
@ -18,14 +18,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include "libsigrok.h"
|
|
||||||
#include "libsigrok-internal.h"
|
|
||||||
#include "agilent-dmm.h"
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include "libsigrok.h"
|
||||||
|
#include "libsigrok-internal.h"
|
||||||
|
#include "agilent-dmm.h"
|
||||||
|
|
||||||
static const int hwopts[] = {
|
static const int hwopts[] = {
|
||||||
SR_HWOPT_CONN,
|
SR_HWOPT_CONN,
|
||||||
|
@ -104,7 +104,8 @@ static int hw_init(void)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int serial_readline(int fd, char **buf, int *buflen, uint64_t timeout_ms)
|
/* TODO: Merge into serial_readline() from serial.c. */
|
||||||
|
static int serial_readline2(int fd, char **buf, int *buflen, uint64_t timeout_ms)
|
||||||
{
|
{
|
||||||
uint64_t start;
|
uint64_t start;
|
||||||
int maxlen, len;
|
int maxlen, len;
|
||||||
|
@ -196,7 +197,7 @@ static GSList *hw_scan(GSList *options)
|
||||||
|
|
||||||
len = 128;
|
len = 128;
|
||||||
buf = g_try_malloc(len);
|
buf = g_try_malloc(len);
|
||||||
serial_readline(fd, &buf, &len, 150);
|
serial_readline2(fd, &buf, &len, 150);
|
||||||
if (!len)
|
if (!len)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -383,3 +383,37 @@ SR_PRIV int serial_set_paramstr(int fd, const char *paramstr)
|
||||||
return SR_ERR_ARG;
|
return SR_ERR_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SR_PRIV int serial_readline(int fd, char **buf, int *buflen,
|
||||||
|
uint64_t timeout_ms)
|
||||||
|
{
|
||||||
|
uint64_t start;
|
||||||
|
int maxlen, len;
|
||||||
|
|
||||||
|
timeout_ms *= 1000;
|
||||||
|
start = g_get_monotonic_time();
|
||||||
|
|
||||||
|
maxlen = *buflen;
|
||||||
|
*buflen = len = 0;
|
||||||
|
while(1) {
|
||||||
|
len = maxlen - *buflen - 1;
|
||||||
|
if (len < 1)
|
||||||
|
break;
|
||||||
|
len = serial_read(fd, *buf + *buflen, 1);
|
||||||
|
if (len > 0) {
|
||||||
|
*buflen += len;
|
||||||
|
*(*buf + *buflen) = '\0';
|
||||||
|
if (*buflen > 0 && *(*buf + *buflen - 1) == '\r') {
|
||||||
|
/* Strip LF and terminate. */
|
||||||
|
*(*buf + --*buflen) = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (g_get_monotonic_time() - start > timeout_ms)
|
||||||
|
/* Timeout */
|
||||||
|
break;
|
||||||
|
g_usleep(2000);
|
||||||
|
}
|
||||||
|
sr_dbg("Received %d: '%s'.", *buflen, *buf);
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
|
@ -18,14 +18,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include "libsigrok.h"
|
|
||||||
#include "libsigrok-internal.h"
|
|
||||||
#include "fluke-dmm.h"
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include "libsigrok.h"
|
||||||
|
#include "libsigrok-internal.h"
|
||||||
|
#include "fluke-dmm.h"
|
||||||
|
|
||||||
static const int hwopts[] = {
|
static const int hwopts[] = {
|
||||||
SR_HWOPT_CONN,
|
SR_HWOPT_CONN,
|
||||||
|
@ -95,40 +95,6 @@ static int hw_init(void)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int serial_readline(int fd, char **buf, int *buflen, uint64_t timeout_ms)
|
|
||||||
{
|
|
||||||
uint64_t start;
|
|
||||||
int maxlen, len;
|
|
||||||
|
|
||||||
timeout_ms *= 1000;
|
|
||||||
start = g_get_monotonic_time();
|
|
||||||
|
|
||||||
maxlen = *buflen;
|
|
||||||
*buflen = len = 0;
|
|
||||||
while(1) {
|
|
||||||
len = maxlen - *buflen - 1;
|
|
||||||
if (len < 1)
|
|
||||||
break;
|
|
||||||
len = serial_read(fd, *buf + *buflen, 1);
|
|
||||||
if (len > 0) {
|
|
||||||
*buflen += len;
|
|
||||||
*(*buf + *buflen) = '\0';
|
|
||||||
if (*buflen > 0 && *(*buf + *buflen - 1) == '\r') {
|
|
||||||
/* Strip LF and terminate. */
|
|
||||||
*(*buf + --*buflen) = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (g_get_monotonic_time() - start > timeout_ms)
|
|
||||||
/* Timeout */
|
|
||||||
break;
|
|
||||||
g_usleep(2000);
|
|
||||||
}
|
|
||||||
sr_dbg("Received %d: '%s'.", *buflen, *buf);
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GSList *fluke_scan(const char *conn, const char *serialcomm)
|
static GSList *fluke_scan(const char *conn, const char *serialcomm)
|
||||||
{
|
{
|
||||||
struct sr_dev_inst *sdi;
|
struct sr_dev_inst *sdi;
|
||||||
|
|
|
@ -19,14 +19,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include "libsigrok.h"
|
|
||||||
#include "libsigrok-internal.h"
|
|
||||||
#include "radioshack-dmm.h"
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include "libsigrok.h"
|
||||||
|
#include "libsigrok-internal.h"
|
||||||
|
#include "radioshack-dmm.h"
|
||||||
|
|
||||||
static const int hwopts[] = {
|
static const int hwopts[] = {
|
||||||
SR_HWOPT_CONN,
|
SR_HWOPT_CONN,
|
||||||
|
@ -93,40 +93,6 @@ static int hw_init(void)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int serial_readline(int fd, char **buf, size_t *buflen,
|
|
||||||
uint64_t timeout_ms)
|
|
||||||
{
|
|
||||||
uint64_t start;
|
|
||||||
int maxlen, len;
|
|
||||||
|
|
||||||
timeout_ms *= 1000;
|
|
||||||
start = g_get_monotonic_time();
|
|
||||||
|
|
||||||
maxlen = *buflen;
|
|
||||||
*buflen = len = 0;
|
|
||||||
while(1) {
|
|
||||||
len = maxlen - *buflen - 1;
|
|
||||||
if (len < 1)
|
|
||||||
break;
|
|
||||||
len = serial_read(fd, *buf + *buflen, 1);
|
|
||||||
if (len > 0) {
|
|
||||||
*buflen += len;
|
|
||||||
*(*buf + *buflen) = '\0';
|
|
||||||
if (*buflen > 0 && *(*buf + *buflen - 1) == '\r') {
|
|
||||||
/* Strip LF and terminate. */
|
|
||||||
*(*buf + --*buflen) = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (g_get_monotonic_time() - start > timeout_ms)
|
|
||||||
/* Timeout */
|
|
||||||
break;
|
|
||||||
g_usleep(2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GSList *rs_22_812_scan(const char *conn, const char *serialcomm)
|
static GSList *rs_22_812_scan(const char *conn, const char *serialcomm)
|
||||||
{
|
{
|
||||||
struct sr_dev_inst *sdi;
|
struct sr_dev_inst *sdi;
|
||||||
|
|
|
@ -89,40 +89,6 @@ static int hw_init(void)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int serial_readline(int fd, char **buf, int *buflen,
|
|
||||||
uint64_t timeout_ms)
|
|
||||||
{
|
|
||||||
uint64_t start;
|
|
||||||
int maxlen, len;
|
|
||||||
|
|
||||||
timeout_ms *= 1000;
|
|
||||||
start = g_get_monotonic_time();
|
|
||||||
|
|
||||||
maxlen = *buflen;
|
|
||||||
*buflen = len = 0;
|
|
||||||
while (1) {
|
|
||||||
len = maxlen - *buflen - 1;
|
|
||||||
if (len < 1)
|
|
||||||
break;
|
|
||||||
len = serial_read(fd, *buf + *buflen, 1);
|
|
||||||
if (len > 0) {
|
|
||||||
*buflen += len;
|
|
||||||
*(*buf + *buflen) = '\0';
|
|
||||||
if (*buflen > 0 && *(*buf + *buflen - 1) == '\r') {
|
|
||||||
/* Strip LF and terminate. */
|
|
||||||
*(*buf + --*buflen) = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (g_get_monotonic_time() - start > timeout_ms)
|
|
||||||
/* Timeout */
|
|
||||||
break;
|
|
||||||
g_usleep(2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GSList *lcd14_scan(const char *conn, const char *serialcomm)
|
static GSList *lcd14_scan(const char *conn, const char *serialcomm)
|
||||||
{
|
{
|
||||||
struct sr_dev_inst *sdi;
|
struct sr_dev_inst *sdi;
|
||||||
|
|
|
@ -135,6 +135,8 @@ SR_PRIV void serial_restore_params(int fd, void *backup);
|
||||||
SR_PRIV int serial_set_params(int fd, int baudrate, int bits, int parity,
|
SR_PRIV int serial_set_params(int fd, int baudrate, int bits, int parity,
|
||||||
int stopbits, int flowcontrol);
|
int stopbits, int flowcontrol);
|
||||||
SR_PRIV int serial_set_paramstr(int fd, const char *paramstr);
|
SR_PRIV int serial_set_paramstr(int fd, const char *paramstr);
|
||||||
|
SR_PRIV int serial_readline(int fd, char **buf, int *buflen,
|
||||||
|
uint64_t timeout_ms);
|
||||||
|
|
||||||
/*--- hardware/common/ezusb.c -----------------------------------------------*/
|
/*--- hardware/common/ezusb.c -----------------------------------------------*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue