apps/examples/usbserial: Can now be run as an NSH builtin-function. Now uses a configurable IO buffer size
This commit is contained in:
parent
bc2cf8affd
commit
d836478728
@ -1398,4 +1398,6 @@
|
|||||||
|
|
||||||
* apps/examples/can: Extend the CAN loopback test by adding more
|
* apps/examples/can: Extend the CAN loopback test by adding more
|
||||||
command line options (2015-08-17).
|
command line options (2015-08-17).
|
||||||
|
* apps/examples/usbserial: Can now be run as an NSH builtin-function.
|
||||||
|
Now uses a configurable IO buffer size (2015-08-20).
|
||||||
|
|
||||||
|
@ -11,6 +11,13 @@ config EXAMPLES_USBSERIAL
|
|||||||
|
|
||||||
if EXAMPLES_USBSERIAL
|
if EXAMPLES_USBSERIAL
|
||||||
|
|
||||||
|
config EXAMPLES_USBSERIAL_BUFSIZE
|
||||||
|
int "Target I/O Buffer Size"
|
||||||
|
default 512
|
||||||
|
---help---
|
||||||
|
The size of the array that is used as an I/O buffer for USB serial
|
||||||
|
data transfers.
|
||||||
|
|
||||||
config EXAMPLES_USBSERIAL_TRACEINIT
|
config EXAMPLES_USBSERIAL_TRACEINIT
|
||||||
bool "USB Trace Initialization"
|
bool "USB Trace Initialization"
|
||||||
default n
|
default n
|
||||||
|
@ -37,6 +37,11 @@
|
|||||||
include $(APPDIR)/Make.defs
|
include $(APPDIR)/Make.defs
|
||||||
|
|
||||||
# USB serial device example
|
# USB serial device example
|
||||||
|
# Built-in application info
|
||||||
|
|
||||||
|
APPNAME = usbserial
|
||||||
|
PRIORITY = SCHED_PRIORITY_DEFAULT
|
||||||
|
STACKSIZE = 2048
|
||||||
|
|
||||||
ASRCS =
|
ASRCS =
|
||||||
CSRCS =
|
CSRCS =
|
||||||
@ -104,7 +109,14 @@ install:
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
|
||||||
|
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat: $(DEPCONFIG) Makefile
|
||||||
|
$(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
|
||||||
|
|
||||||
|
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat
|
||||||
|
else
|
||||||
context:
|
context:
|
||||||
|
endif
|
||||||
|
|
||||||
.depend: Makefile $(SRCS)
|
.depend: Makefile $(SRCS)
|
||||||
@$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
|
@$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
############################################################################
|
############################################################################
|
||||||
# apps/examples/usbserial/Makefile.host
|
# apps/examples/usbserial/Makefile.host
|
||||||
#
|
#
|
||||||
# Copyright (C) 2008, 2011 Gregory Nutt. All rights reserved.
|
# Copyright (C) 2008, 2011, 2015 Gregory Nutt. All rights reserved.
|
||||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@ -53,6 +53,9 @@ endif
|
|||||||
ifeq ($(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG),y)
|
ifeq ($(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG),y)
|
||||||
DEFINES += -DCONFIG_EXAMPLES_USBSERIAL_ONLYBIG=1
|
DEFINES += -DCONFIG_EXAMPLES_USBSERIAL_ONLYBIG=1
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(CONFIG_CDCACM),y)
|
||||||
|
DEFINES += -DCONFIG_CDCACM=1
|
||||||
|
endif
|
||||||
|
|
||||||
all: $(BIN)
|
all: $(BIN)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_EXAMPLES_USBSERIAL_INONLY) && defined(CONFIG_EXAMPLES_USBSERIAL_OUTONLY)
|
#if defined(CONFIG_EXAMPLES_USBSERIAL_INONLY) && defined(CONFIG_EXAMPLES_USBSERIAL_OUTONLY)
|
||||||
@ -181,6 +181,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
fprintf(stderr, "Too many arguments on command line\n");
|
fprintf(stderr, "Too many arguments on command line\n");
|
||||||
show_usage(argv[0], 1);
|
show_usage(argv[0], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_ttydev = argv[1];
|
g_ttydev = argv[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,13 +193,15 @@ int main(int argc, char **argv, char **envp)
|
|||||||
fd = open(g_ttydev, O_RDWR);
|
fd = open(g_ttydev, O_RDWR);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
printf("main: ERROR: Failed to open %s: %s\n", g_ttydev, strerror(errno));
|
printf("main: ERROR: Failed to open %s: %s\n",
|
||||||
|
g_ttydev, strerror(errno));
|
||||||
printf("main: Assume not connected. Wait and try again.\n");
|
printf("main: Assume not connected. Wait and try again.\n");
|
||||||
printf("main: (Control-C to terminate).\n");
|
printf("main: (Control-C to terminate).\n");
|
||||||
sleep(5);
|
sleep(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (fd < 0);
|
while (fd < 0);
|
||||||
|
|
||||||
printf("main: Successfully opened the serial driver\n");
|
printf("main: Successfully opened the serial driver\n");
|
||||||
|
|
||||||
/* Configure the serial port in raw mode (at least turn off echo) */
|
/* Configure the serial port in raw mode (at least turn off echo) */
|
||||||
@ -206,7 +209,8 @@ int main(int argc, char **argv, char **envp)
|
|||||||
ret = tcgetattr(fd, &tty);
|
ret = tcgetattr(fd, &tty);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
printf("main: ERROR: Failed to get termios for %s: %s\n", g_ttydev, strerror(errno));
|
printf("main: ERROR: Failed to get termios for %s: %s\n",
|
||||||
|
g_ttydev, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -220,7 +224,8 @@ int main(int argc, char **argv, char **envp)
|
|||||||
ret = tcsetattr(fd, TCSANOW, &tty);
|
ret = tcsetattr(fd, TCSANOW, &tty);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
printf("main: ERROR: Failed to set termios for %s: %s\n", g_ttydev, strerror(errno));
|
printf("main: ERROR: Failed to set termios for %s: %s\n",
|
||||||
|
g_ttydev, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -237,7 +242,8 @@ int main(int argc, char **argv, char **envp)
|
|||||||
nbytes = read(fd, g_iobuffer, BUFFER_SIZE-1);
|
nbytes = read(fd, g_iobuffer, BUFFER_SIZE-1);
|
||||||
if (nbytes < 0)
|
if (nbytes < 0)
|
||||||
{
|
{
|
||||||
printf("main: ERROR: Failed to read from %s: %s\n", g_ttydev, strerror(errno));
|
printf("main: ERROR: Failed to read from %s: %s\n",
|
||||||
|
g_ttydev, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -271,9 +277,11 @@ int main(int argc, char **argv, char **envp)
|
|||||||
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
|
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
|
#elif !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
|
||||||
printf("main: Sending %d bytes..\n", sizeof(g_longmsg));
|
printf("main: Sending %d bytes..\n", sizeof(g_longmsg));
|
||||||
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
|
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
|
||||||
|
|
||||||
#else /* !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) */
|
#else /* !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) */
|
||||||
printf("main: Sending %d bytes..\n", sizeof(g_shortmsg));
|
printf("main: Sending %d bytes..\n", sizeof(g_shortmsg));
|
||||||
nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));
|
nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));
|
||||||
@ -287,6 +295,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("main: %ld bytes sent\n", (long)nbytes);
|
printf("main: %ld bytes sent\n", (long)nbytes);
|
||||||
#endif /* CONFIG_EXAMPLES_USBSERIAL_INONLY */
|
#endif /* CONFIG_EXAMPLES_USBSERIAL_INONLY */
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* examples/usbserial/usbserial_main.c
|
* examples/usbserial/usbserial_main.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008, 2010-2012 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2008, 2010-2012, 2015 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -56,7 +56,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_EXAMPLES_USBSERIAL_INONLY) && defined(CONFIG_EXAMPLES_USBSERIAL_OUTONLY)
|
#if defined(CONFIG_EXAMPLES_USBSERIAL_INONLY) && defined(CONFIG_EXAMPLES_USBSERIAL_OUTONLY)
|
||||||
@ -113,7 +113,9 @@
|
|||||||
# define USBSER_DEVNAME "/dev/ttyUSB0"
|
# define USBSER_DEVNAME "/dev/ttyUSB0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IOBUFFER_SIZE 256
|
#ifndef CONFIG_EXAMPLES_USBSERIAL_BUFSIZE
|
||||||
|
# define CONFIG_EXAMPLES_USBSERIAL_BUFSIZE 256
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
@ -153,7 +155,7 @@ static const char g_longmsg[] =
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_EXAMPLES_USBSERIAL_INONLY
|
#ifndef CONFIG_EXAMPLES_USBSERIAL_INONLY
|
||||||
static char g_iobuffer[IOBUFFER_SIZE];
|
static char g_iobuffer[CONFIG_EXAMPLES_USBSERIAL_BUFSIZE];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -214,9 +216,11 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
printf("usbserial_main: ERROR: Failed to create the USB serial device: %d\n", -ret);
|
printf("usbserial_main: ERROR: Failed to create the USB serial device: %d\n",
|
||||||
|
-ret);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("usbserial_main: Successfully registered the serial driver\n");
|
printf("usbserial_main: Successfully registered the serial driver\n");
|
||||||
|
|
||||||
#if CONFIG_USBDEV_TRACE && CONFIG_USBDEV_TRACE_INITIALIDSET != 0
|
#if CONFIG_USBDEV_TRACE && CONFIG_USBDEV_TRACE_INITIALIDSET != 0
|
||||||
@ -242,7 +246,8 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
if (outfd < 0)
|
if (outfd < 0)
|
||||||
{
|
{
|
||||||
int errcode = errno;
|
int errcode = errno;
|
||||||
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME " for writing: %d\n", errcode);
|
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME
|
||||||
|
" for writing: %d\n", errcode);
|
||||||
|
|
||||||
/* ENOTCONN means that the USB device is not yet connected */
|
/* ENOTCONN means that the USB device is not yet connected */
|
||||||
|
|
||||||
@ -274,7 +279,8 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
infd = open(USBSER_DEVNAME, O_RDONLY|O_NONBLOCK);
|
infd = open(USBSER_DEVNAME, O_RDONLY|O_NONBLOCK);
|
||||||
if (infd < 0)
|
if (infd < 0)
|
||||||
{
|
{
|
||||||
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME " for reading: %d\n", errno);
|
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME
|
||||||
|
" for reading: %d\n", errno);
|
||||||
close(outfd);
|
close(outfd);
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
@ -285,7 +291,8 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
if (infd < 0)
|
if (infd < 0)
|
||||||
{
|
{
|
||||||
int errcode = errno;
|
int errcode = errno;
|
||||||
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME " for reading: %d\n", errno);
|
printf("usbserial_main: ERROR: Failed to open " USBSER_DEVNAME
|
||||||
|
" for reading: %d\n", errno);
|
||||||
|
|
||||||
/* ENOTCONN means that the USB device is not yet connected */
|
/* ENOTCONN means that the USB device is not yet connected */
|
||||||
|
|
||||||
@ -333,9 +340,11 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
nbytes = write(outfd, g_longmsg, sizeof(g_longmsg));
|
nbytes = write(outfd, g_longmsg, sizeof(g_longmsg));
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
|
#elif !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
|
||||||
printf("usbserial_main: Reciting QEI's speech of 1588\n");
|
printf("usbserial_main: Reciting QEI's speech of 1588\n");
|
||||||
nbytes = write(outfd, g_longmsg, sizeof(g_longmsg));
|
nbytes = write(outfd, g_longmsg, sizeof(g_longmsg));
|
||||||
|
|
||||||
#else /* !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) */
|
#else /* !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) */
|
||||||
printf("usbserial_main: Saying hello\n");
|
printf("usbserial_main: Saying hello\n");
|
||||||
nbytes = write(outfd, g_shortmsg, sizeof(g_shortmsg));
|
nbytes = write(outfd, g_shortmsg, sizeof(g_shortmsg));
|
||||||
@ -352,6 +361,7 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
close(outfd);
|
close(outfd);
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("usbserial_main: %ld bytes sent\n", (long)nbytes);
|
printf("usbserial_main: %ld bytes sent\n", (long)nbytes);
|
||||||
#endif /* CONFIG_EXAMPLES_USBSERIAL_OUTONLY */
|
#endif /* CONFIG_EXAMPLES_USBSERIAL_OUTONLY */
|
||||||
|
|
||||||
@ -363,8 +373,8 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
printf("usbserial_main: Polling for OUT messages\n");
|
printf("usbserial_main: Polling for OUT messages\n");
|
||||||
for (i = 0; i < 5; i++)
|
for (i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
memset(g_iobuffer, 'X', IOBUFFER_SIZE);
|
memset(g_iobuffer, 'X', CONFIG_EXAMPLES_USBSERIAL_BUFSIZE);
|
||||||
nbytes = read(infd, g_iobuffer, IOBUFFER_SIZE);
|
nbytes = read(infd, g_iobuffer, CONFIG_EXAMPLES_USBSERIAL_BUFSIZE);
|
||||||
if (nbytes < 0)
|
if (nbytes < 0)
|
||||||
{
|
{
|
||||||
int errorcode = errno;
|
int errorcode = errno;
|
||||||
@ -380,7 +390,7 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("usbserial_main: Received l%d bytes:\n", (long)nbytes);
|
printf("usbserial_main: Received %ld bytes:\n", (long)nbytes);
|
||||||
if (nbytes > 0)
|
if (nbytes > 0)
|
||||||
{
|
{
|
||||||
for (j = 0; j < nbytes; j += 16)
|
for (j = 0; j < nbytes; j += 16)
|
||||||
@ -392,6 +402,7 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
printf(" ");
|
printf(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j+k < nbytes)
|
if (j+k < nbytes)
|
||||||
{
|
{
|
||||||
printf("%02x", g_iobuffer[j+k]);
|
printf("%02x", g_iobuffer[j+k]);
|
||||||
@ -401,6 +412,7 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
printf(" ");
|
printf(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf(" ");
|
printf(" ");
|
||||||
for (k = 0; k < 16; k++)
|
for (k = 0; k < 16; k++)
|
||||||
{
|
{
|
||||||
@ -408,6 +420,7 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
printf(" ");
|
printf(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j+k < nbytes)
|
if (j+k < nbytes)
|
||||||
{
|
{
|
||||||
if (g_iobuffer[j+k] >= 0x20 && g_iobuffer[j+k] < 0x7f)
|
if (g_iobuffer[j+k] >= 0x20 && g_iobuffer[j+k] < 0x7f)
|
||||||
@ -424,12 +437,15 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
printf(" ");
|
printf(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* CONFIG_EXAMPLES_USBSERIAL_INONLY */
|
#else /* CONFIG_EXAMPLES_USBSERIAL_INONLY */
|
||||||
printf("usbserial_main: Waiting\n");
|
printf("usbserial_main: Waiting\n");
|
||||||
sleep(5);
|
sleep(5);
|
||||||
@ -450,4 +466,3 @@ int usbserial_main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user