summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Carvalho de Assis <acassis@gmail.com>2012-02-25 15:32:52 -0200
committerAlan Carvalho de Assis <acassis@gmail.com>2012-02-25 15:32:52 -0200
commita82b50ca75f47038e43d1a515f4910633b5c9025 (patch)
tree016032a99e40d05d7e5f203233696734b3aafed5
parent0a9fab9abe80fe61e9c068e78c517c45d669935f (diff)
Fix console by sending chunk blocks lesser than 32 bytes
We cannot send a big chunk of bytes to sercomm_puts because .txready on NuttX doesn't detect when "UART" finished sending data, then data are lost. An work-around to fix it is sending less bytes and putting a delay after each transfer. Signed-off-by: Alan Carvalho de Assis <acassis@gmail.com>
-rw-r--r--nuttx/drivers/sercomm/console.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/nuttx/drivers/sercomm/console.c b/nuttx/drivers/sercomm/console.c
index 09ce469ad2..1b96acf127 100644
--- a/nuttx/drivers/sercomm/console.c
+++ b/nuttx/drivers/sercomm/console.c
@@ -106,14 +106,27 @@ static ssize_t sc_console_read(file_t *filep, FAR char *buffer, size_t buflen)
}
/* XXX: redirect to old Osmocom-BB comm/sercomm_cons.c -> 2 buffers */
-extern int sercomm_write(void *file, const char *s, const int len);
+extern int sercomm_puts(const char *s);
static ssize_t sc_console_write(file_t *filep, FAR const char *buffer, size_t buflen)
{
- int ret = sercomm_write(filep, buffer, buflen);
- if(ret < 0)
- return ret;
+ int i, cnt;
+ char dstbuf[32];
+
+ if (buflen >= 31)
+ cnt = 31;
else
- return buflen;
+ cnt = buflen;
+
+ memcpy(dstbuf, buffer, cnt);
+ dstbuf[cnt] = '\0';
+
+ /* print part of our buffer */
+ sercomm_puts(dstbuf);
+
+ /* wait a little bit to get data transfered */
+ up_mdelay(1);
+
+ return cnt;
}
/* Forward ioctl to uart driver */