summaryrefslogtreecommitdiff
path: root/apps/modbus/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-07-23 15:37:13 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-07-23 15:37:13 +0000
commit6355e50a2289d7d764ac9de87ddd1528c510bd8f (patch)
treebdace79b95ff390c7c1b0ccdd005816be2c83e6c /apps/modbus/nuttx
parent92ee042ea3f2cd97bcca3f1d752ec68dac919d85 (diff)
downloadnuttx-6355e50a2289d7d764ac9de87ddd1528c510bd8f.tar.gz
nuttx-6355e50a2289d7d764ac9de87ddd1528c510bd8f.tar.bz2
nuttx-6355e50a2289d7d764ac9de87ddd1528c510bd8f.zip
Baud definitions (B9600 for example) are again encoded; Now supports the BOTHER settings which allows specifying the baud via c_ispeed and c_ospeed termios fields
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4970 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/modbus/nuttx')
-rw-r--r--apps/modbus/nuttx/portserial.c54
1 files changed, 19 insertions, 35 deletions
diff --git a/apps/modbus/nuttx/portserial.c b/apps/modbus/nuttx/portserial.c
index bf862bd22..bf1f4526a 100644
--- a/apps/modbus/nuttx/portserial.c
+++ b/apps/modbus/nuttx/portserial.c
@@ -35,7 +35,7 @@
#include <unistd.h>
#include <assert.h>
-#ifdef CONFIG_MB_TERMIOS
+#ifdef CONFIG_SERIAL_TERMIOS
# include <termios.h>
#endif
@@ -65,7 +65,7 @@ static uint8_t ucBuffer[BUF_SIZE];
static int uiRxBufferPos;
static int uiTxBufferPos;
-#ifdef CONFIG_MB_TERMIOS
+#ifdef CONFIG_SERIAL_TERMIOS
static struct termios xOldTIO;
#endif
@@ -84,7 +84,7 @@ void vMBPortSerialEnable(bool bEnableRx, bool bEnableTx)
if (bEnableRx)
{
-#ifdef CONFIG_MB_TERMIOS
+#ifdef CONFIG_SERIAL_TERMIOS
(void)tcflush(iSerialFd, TCIFLUSH);
#endif
uiRxBufferPos = 0;
@@ -112,9 +112,8 @@ bool xMBPortSerialInit(uint8_t ucPort, uint32_t ulBaudRate,
char szDevice[16];
bool bStatus = true;
-#ifdef CONFIG_MB_TERMIOS
- struct termios xNewTIO;
- speed_t xNewSpeed;
+#ifdef CONFIG_SERIAL_TERMIOS
+ struct termios xNewTIO;
#endif
snprintf(szDevice, 16, "/dev/ttyS%d", ucPort);
@@ -125,7 +124,7 @@ bool xMBPortSerialInit(uint8_t ucPort, uint32_t ulBaudRate,
szDevice, errno);
}
-#ifdef CONFIG_MB_TERMIOS
+#ifdef CONFIG_SERIAL_TERMIOS
else if (tcgetattr(iSerialFd, &xOldTIO) != 0)
{
vMBPortLog(MB_LOG_ERROR, "SER-INIT", "Can't get settings from port %s: %d\n",
@@ -163,35 +162,20 @@ bool xMBPortSerialInit(uint8_t ucPort, uint32_t ulBaudRate,
bStatus = false;
}
- switch (ulBaudRate)
- {
- case 9600:
- xNewSpeed = B9600;
- break;
- case 19200:
- xNewSpeed = B19200;
- break;
- case 38400:
- xNewSpeed = B38400;
- break;
- case 57600:
- xNewSpeed = B57600;
- break;
- case 115200:
- xNewSpeed = B115200;
- break;
- default:
- bStatus = false;
- }
-
if (bStatus)
{
- if (cfsetispeed(&xNewTIO, xNewSpeed) != 0)
- {
- vMBPortLog(MB_LOG_ERROR, "SER-INIT", "Can't set baud rate %ld for port %s: %d\n",
- ulBaudRate, errno);
- }
- else if (cfsetospeed(&xNewTIO, xNewSpeed) != 0)
+ /* Set the new baud using the (non-standard) BOTHER mechanism
+ * supported by NuttX.
+ */
+
+ xNewTIO.c_ispeed = (speed_t)ulBaudRate;
+ xNewTIO.c_ospeed = (speed_t)ulBaudRate;
+
+ /* NOTE: In NuttX, cfset[i|o]speed always return OK. Failures will
+ * only be reported when tcsetattr() is called.
+ */
+
+ if (cfsetispeed(&xNewTIO, BOTHER) != 0 || cfsetospeed(&xNewTIO, BOTHER) != 0)
{
vMBPortLog(MB_LOG_ERROR, "SER-INIT", "Can't set baud rate %ld for port %s: %d\n",
ulBaudRate, szDevice, errno);
@@ -231,7 +215,7 @@ void vMBPortClose(void)
{
if (iSerialFd != -1)
{
-#ifdef CONFIG_MB_TERMIOS
+#ifdef CONFIG_SERIAL_TERMIOS
(void)tcsetattr(iSerialFd, TCSANOW, &xOldTIO);
#endif
(void)close(iSerialFd);