Port of the FreeModbus Libary for mbed, copied from https://developer.mbed.org/users/cam/code/Modbus/ and upgraded to mbed 5

Dependents:   NUCLEO-F401-printf

Committer:
Rajit Singh
Date:
Wed Aug 16 17:31:26 2017 +0100
Revision:
1:3e360cf155b6
Parent:
0:9db3bed8fffd
Remove main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rajit Singh 0:9db3bed8fffd 1 /*
Rajit Singh 0:9db3bed8fffd 2 * FreeModbus Libary: A portable Modbus implementation for Modbus ASCII/RTU.
Rajit Singh 0:9db3bed8fffd 3 * Copyright (c) 2006 Christian Walter <wolti@sil.at>
Rajit Singh 0:9db3bed8fffd 4 * All rights reserved.
Rajit Singh 0:9db3bed8fffd 5 *
Rajit Singh 0:9db3bed8fffd 6 * Redistribution and use in source and binary forms, with or without
Rajit Singh 0:9db3bed8fffd 7 * modification, are permitted provided that the following conditions
Rajit Singh 0:9db3bed8fffd 8 * are met:
Rajit Singh 0:9db3bed8fffd 9 * 1. Redistributions of source code must retain the above copyright
Rajit Singh 0:9db3bed8fffd 10 * notice, this list of conditions and the following disclaimer.
Rajit Singh 0:9db3bed8fffd 11 * 2. Redistributions in binary form must reproduce the above copyright
Rajit Singh 0:9db3bed8fffd 12 * notice, this list of conditions and the following disclaimer in the
Rajit Singh 0:9db3bed8fffd 13 * documentation and/or other materials provided with the distribution.
Rajit Singh 0:9db3bed8fffd 14 * 3. The name of the author may not be used to endorse or promote products
Rajit Singh 0:9db3bed8fffd 15 * derived from this software without specific prior written permission.
Rajit Singh 0:9db3bed8fffd 16 *
Rajit Singh 0:9db3bed8fffd 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
Rajit Singh 0:9db3bed8fffd 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Rajit Singh 0:9db3bed8fffd 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Rajit Singh 0:9db3bed8fffd 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
Rajit Singh 0:9db3bed8fffd 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Rajit Singh 0:9db3bed8fffd 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Rajit Singh 0:9db3bed8fffd 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Rajit Singh 0:9db3bed8fffd 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Rajit Singh 0:9db3bed8fffd 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
Rajit Singh 0:9db3bed8fffd 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Rajit Singh 0:9db3bed8fffd 27 *
Rajit Singh 0:9db3bed8fffd 28 * File: $Id: mbfunccoils.c,v 1.8 2007/02/18 23:47:16 wolti Exp $
Rajit Singh 0:9db3bed8fffd 29 */
Rajit Singh 0:9db3bed8fffd 30
Rajit Singh 0:9db3bed8fffd 31 /* ----------------------- System includes ----------------------------------*/
Rajit Singh 0:9db3bed8fffd 32 #include "stdlib.h"
Rajit Singh 0:9db3bed8fffd 33 #include "string.h"
Rajit Singh 0:9db3bed8fffd 34
Rajit Singh 0:9db3bed8fffd 35 /* ----------------------- Platform includes --------------------------------*/
Rajit Singh 0:9db3bed8fffd 36 #include "port.h"
Rajit Singh 0:9db3bed8fffd 37
Rajit Singh 0:9db3bed8fffd 38 /* ----------------------- Modbus includes ----------------------------------*/
Rajit Singh 0:9db3bed8fffd 39 #include "mb.h"
Rajit Singh 0:9db3bed8fffd 40 #include "mbframe.h"
Rajit Singh 0:9db3bed8fffd 41 #include "mbproto.h"
Rajit Singh 0:9db3bed8fffd 42 #include "mbconfig.h"
Rajit Singh 0:9db3bed8fffd 43
Rajit Singh 0:9db3bed8fffd 44 /* ----------------------- Defines ------------------------------------------*/
Rajit Singh 0:9db3bed8fffd 45 #define MB_PDU_FUNC_READ_ADDR_OFF ( MB_PDU_DATA_OFF )
Rajit Singh 0:9db3bed8fffd 46 #define MB_PDU_FUNC_READ_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
Rajit Singh 0:9db3bed8fffd 47 #define MB_PDU_FUNC_READ_SIZE ( 4 )
Rajit Singh 0:9db3bed8fffd 48 #define MB_PDU_FUNC_READ_COILCNT_MAX ( 0x07D0 )
Rajit Singh 0:9db3bed8fffd 49
Rajit Singh 0:9db3bed8fffd 50 #define MB_PDU_FUNC_WRITE_ADDR_OFF ( MB_PDU_DATA_OFF )
Rajit Singh 0:9db3bed8fffd 51 #define MB_PDU_FUNC_WRITE_VALUE_OFF ( MB_PDU_DATA_OFF + 2 )
Rajit Singh 0:9db3bed8fffd 52 #define MB_PDU_FUNC_WRITE_SIZE ( 4 )
Rajit Singh 0:9db3bed8fffd 53
Rajit Singh 0:9db3bed8fffd 54 #define MB_PDU_FUNC_WRITE_MUL_ADDR_OFF ( MB_PDU_DATA_OFF )
Rajit Singh 0:9db3bed8fffd 55 #define MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF ( MB_PDU_DATA_OFF + 2 )
Rajit Singh 0:9db3bed8fffd 56 #define MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF ( MB_PDU_DATA_OFF + 4 )
Rajit Singh 0:9db3bed8fffd 57 #define MB_PDU_FUNC_WRITE_MUL_VALUES_OFF ( MB_PDU_DATA_OFF + 5 )
Rajit Singh 0:9db3bed8fffd 58 #define MB_PDU_FUNC_WRITE_MUL_SIZE_MIN ( 5 )
Rajit Singh 0:9db3bed8fffd 59 #define MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ( 0x07B0 )
Rajit Singh 0:9db3bed8fffd 60
Rajit Singh 0:9db3bed8fffd 61 /* ----------------------- Static functions ---------------------------------*/
Rajit Singh 0:9db3bed8fffd 62 eMBException prveMBError2Exception( eMBErrorCode eErrorCode );
Rajit Singh 0:9db3bed8fffd 63
Rajit Singh 0:9db3bed8fffd 64 /* ----------------------- Start implementation -----------------------------*/
Rajit Singh 0:9db3bed8fffd 65
Rajit Singh 0:9db3bed8fffd 66 #if MB_FUNC_READ_COILS_ENABLED > 0
Rajit Singh 0:9db3bed8fffd 67
Rajit Singh 0:9db3bed8fffd 68 eMBException
Rajit Singh 0:9db3bed8fffd 69 eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen )
Rajit Singh 0:9db3bed8fffd 70 {
Rajit Singh 0:9db3bed8fffd 71 USHORT usRegAddress;
Rajit Singh 0:9db3bed8fffd 72 USHORT usCoilCount;
Rajit Singh 0:9db3bed8fffd 73 UCHAR ucNBytes;
Rajit Singh 0:9db3bed8fffd 74 UCHAR *pucFrameCur;
Rajit Singh 0:9db3bed8fffd 75
Rajit Singh 0:9db3bed8fffd 76 eMBException eStatus = MB_EX_NONE;
Rajit Singh 0:9db3bed8fffd 77 eMBErrorCode eRegStatus;
Rajit Singh 0:9db3bed8fffd 78
Rajit Singh 0:9db3bed8fffd 79 if( *usLen == ( MB_PDU_FUNC_READ_SIZE + MB_PDU_SIZE_MIN ) )
Rajit Singh 0:9db3bed8fffd 80 {
Rajit Singh 0:9db3bed8fffd 81 usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF] << 8 );
Rajit Singh 0:9db3bed8fffd 82 usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_ADDR_OFF + 1] );
Rajit Singh 0:9db3bed8fffd 83 usRegAddress++;
Rajit Singh 0:9db3bed8fffd 84
Rajit Singh 0:9db3bed8fffd 85 usCoilCount = ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF] << 8 );
Rajit Singh 0:9db3bed8fffd 86 usCoilCount |= ( USHORT )( pucFrame[MB_PDU_FUNC_READ_COILCNT_OFF + 1] );
Rajit Singh 0:9db3bed8fffd 87
Rajit Singh 0:9db3bed8fffd 88 /* Check if the number of registers to read is valid. If not
Rajit Singh 0:9db3bed8fffd 89 * return Modbus illegal data value exception.
Rajit Singh 0:9db3bed8fffd 90 */
Rajit Singh 0:9db3bed8fffd 91 if( ( usCoilCount >= 1 ) &&
Rajit Singh 0:9db3bed8fffd 92 ( usCoilCount < MB_PDU_FUNC_READ_COILCNT_MAX ) )
Rajit Singh 0:9db3bed8fffd 93 {
Rajit Singh 0:9db3bed8fffd 94 /* Set the current PDU data pointer to the beginning. */
Rajit Singh 0:9db3bed8fffd 95 pucFrameCur = &pucFrame[MB_PDU_FUNC_OFF];
Rajit Singh 0:9db3bed8fffd 96 *usLen = MB_PDU_FUNC_OFF;
Rajit Singh 0:9db3bed8fffd 97
Rajit Singh 0:9db3bed8fffd 98 /* First byte contains the function code. */
Rajit Singh 0:9db3bed8fffd 99 *pucFrameCur++ = MB_FUNC_READ_COILS;
Rajit Singh 0:9db3bed8fffd 100 *usLen += 1;
Rajit Singh 0:9db3bed8fffd 101
Rajit Singh 0:9db3bed8fffd 102 /* Test if the quantity of coils is a multiple of 8. If not last
Rajit Singh 0:9db3bed8fffd 103 * byte is only partially field with unused coils set to zero. */
Rajit Singh 0:9db3bed8fffd 104 if( ( usCoilCount & 0x0007 ) != 0 )
Rajit Singh 0:9db3bed8fffd 105 {
Rajit Singh 0:9db3bed8fffd 106 ucNBytes = ( UCHAR )( usCoilCount / 8 + 1 );
Rajit Singh 0:9db3bed8fffd 107 }
Rajit Singh 0:9db3bed8fffd 108 else
Rajit Singh 0:9db3bed8fffd 109 {
Rajit Singh 0:9db3bed8fffd 110 ucNBytes = ( UCHAR )( usCoilCount / 8 );
Rajit Singh 0:9db3bed8fffd 111 }
Rajit Singh 0:9db3bed8fffd 112 *pucFrameCur++ = ucNBytes;
Rajit Singh 0:9db3bed8fffd 113 *usLen += 1;
Rajit Singh 0:9db3bed8fffd 114
Rajit Singh 0:9db3bed8fffd 115 eRegStatus =
Rajit Singh 0:9db3bed8fffd 116 eMBRegCoilsCB( pucFrameCur, usRegAddress, usCoilCount,
Rajit Singh 0:9db3bed8fffd 117 MB_REG_READ );
Rajit Singh 0:9db3bed8fffd 118
Rajit Singh 0:9db3bed8fffd 119 /* If an error occured convert it into a Modbus exception. */
Rajit Singh 0:9db3bed8fffd 120 if( eRegStatus != MB_ENOERR )
Rajit Singh 0:9db3bed8fffd 121 {
Rajit Singh 0:9db3bed8fffd 122 eStatus = prveMBError2Exception( eRegStatus );
Rajit Singh 0:9db3bed8fffd 123 }
Rajit Singh 0:9db3bed8fffd 124 else
Rajit Singh 0:9db3bed8fffd 125 {
Rajit Singh 0:9db3bed8fffd 126 /* The response contains the function code, the starting address
Rajit Singh 0:9db3bed8fffd 127 * and the quantity of registers. We reuse the old values in the
Rajit Singh 0:9db3bed8fffd 128 * buffer because they are still valid. */
Rajit Singh 0:9db3bed8fffd 129 *usLen += ucNBytes;;
Rajit Singh 0:9db3bed8fffd 130 }
Rajit Singh 0:9db3bed8fffd 131 }
Rajit Singh 0:9db3bed8fffd 132 else
Rajit Singh 0:9db3bed8fffd 133 {
Rajit Singh 0:9db3bed8fffd 134 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 135 }
Rajit Singh 0:9db3bed8fffd 136 }
Rajit Singh 0:9db3bed8fffd 137 else
Rajit Singh 0:9db3bed8fffd 138 {
Rajit Singh 0:9db3bed8fffd 139 /* Can't be a valid read coil register request because the length
Rajit Singh 0:9db3bed8fffd 140 * is incorrect. */
Rajit Singh 0:9db3bed8fffd 141 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 142 }
Rajit Singh 0:9db3bed8fffd 143 return eStatus;
Rajit Singh 0:9db3bed8fffd 144 }
Rajit Singh 0:9db3bed8fffd 145
Rajit Singh 0:9db3bed8fffd 146 #if MB_FUNC_WRITE_COIL_ENABLED > 0
Rajit Singh 0:9db3bed8fffd 147 eMBException
Rajit Singh 0:9db3bed8fffd 148 eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen )
Rajit Singh 0:9db3bed8fffd 149 {
Rajit Singh 0:9db3bed8fffd 150 USHORT usRegAddress;
Rajit Singh 0:9db3bed8fffd 151 UCHAR ucBuf[2];
Rajit Singh 0:9db3bed8fffd 152
Rajit Singh 0:9db3bed8fffd 153 eMBException eStatus = MB_EX_NONE;
Rajit Singh 0:9db3bed8fffd 154 eMBErrorCode eRegStatus;
Rajit Singh 0:9db3bed8fffd 155
Rajit Singh 0:9db3bed8fffd 156 if( *usLen == ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) )
Rajit Singh 0:9db3bed8fffd 157 {
Rajit Singh 0:9db3bed8fffd 158 usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 );
Rajit Singh 0:9db3bed8fffd 159 usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] );
Rajit Singh 0:9db3bed8fffd 160 usRegAddress++;
Rajit Singh 0:9db3bed8fffd 161
Rajit Singh 0:9db3bed8fffd 162 if( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF + 1] == 0x00 ) &&
Rajit Singh 0:9db3bed8fffd 163 ( ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF ) ||
Rajit Singh 0:9db3bed8fffd 164 ( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0x00 ) ) )
Rajit Singh 0:9db3bed8fffd 165 {
Rajit Singh 0:9db3bed8fffd 166 ucBuf[1] = 0;
Rajit Singh 0:9db3bed8fffd 167 if( pucFrame[MB_PDU_FUNC_WRITE_VALUE_OFF] == 0xFF )
Rajit Singh 0:9db3bed8fffd 168 {
Rajit Singh 0:9db3bed8fffd 169 ucBuf[0] = 1;
Rajit Singh 0:9db3bed8fffd 170 }
Rajit Singh 0:9db3bed8fffd 171 else
Rajit Singh 0:9db3bed8fffd 172 {
Rajit Singh 0:9db3bed8fffd 173 ucBuf[0] = 0;
Rajit Singh 0:9db3bed8fffd 174 }
Rajit Singh 0:9db3bed8fffd 175 eRegStatus =
Rajit Singh 0:9db3bed8fffd 176 eMBRegCoilsCB( &ucBuf[0], usRegAddress, 1, MB_REG_WRITE );
Rajit Singh 0:9db3bed8fffd 177
Rajit Singh 0:9db3bed8fffd 178 /* If an error occured convert it into a Modbus exception. */
Rajit Singh 0:9db3bed8fffd 179 if( eRegStatus != MB_ENOERR )
Rajit Singh 0:9db3bed8fffd 180 {
Rajit Singh 0:9db3bed8fffd 181 eStatus = prveMBError2Exception( eRegStatus );
Rajit Singh 0:9db3bed8fffd 182 }
Rajit Singh 0:9db3bed8fffd 183 }
Rajit Singh 0:9db3bed8fffd 184 else
Rajit Singh 0:9db3bed8fffd 185 {
Rajit Singh 0:9db3bed8fffd 186 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 187 }
Rajit Singh 0:9db3bed8fffd 188 }
Rajit Singh 0:9db3bed8fffd 189 else
Rajit Singh 0:9db3bed8fffd 190 {
Rajit Singh 0:9db3bed8fffd 191 /* Can't be a valid write coil register request because the length
Rajit Singh 0:9db3bed8fffd 192 * is incorrect. */
Rajit Singh 0:9db3bed8fffd 193 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 194 }
Rajit Singh 0:9db3bed8fffd 195 return eStatus;
Rajit Singh 0:9db3bed8fffd 196 }
Rajit Singh 0:9db3bed8fffd 197
Rajit Singh 0:9db3bed8fffd 198 #endif
Rajit Singh 0:9db3bed8fffd 199
Rajit Singh 0:9db3bed8fffd 200 #if MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED > 0
Rajit Singh 0:9db3bed8fffd 201 eMBException
Rajit Singh 0:9db3bed8fffd 202 eMBFuncWriteMultipleCoils( UCHAR * pucFrame, USHORT * usLen )
Rajit Singh 0:9db3bed8fffd 203 {
Rajit Singh 0:9db3bed8fffd 204 USHORT usRegAddress;
Rajit Singh 0:9db3bed8fffd 205 USHORT usCoilCnt;
Rajit Singh 0:9db3bed8fffd 206 UCHAR ucByteCount;
Rajit Singh 0:9db3bed8fffd 207 UCHAR ucByteCountVerify;
Rajit Singh 0:9db3bed8fffd 208
Rajit Singh 0:9db3bed8fffd 209 eMBException eStatus = MB_EX_NONE;
Rajit Singh 0:9db3bed8fffd 210 eMBErrorCode eRegStatus;
Rajit Singh 0:9db3bed8fffd 211
Rajit Singh 0:9db3bed8fffd 212 if( *usLen > ( MB_PDU_FUNC_WRITE_SIZE + MB_PDU_SIZE_MIN ) )
Rajit Singh 0:9db3bed8fffd 213 {
Rajit Singh 0:9db3bed8fffd 214 usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF] << 8 );
Rajit Singh 0:9db3bed8fffd 215 usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_ADDR_OFF + 1] );
Rajit Singh 0:9db3bed8fffd 216 usRegAddress++;
Rajit Singh 0:9db3bed8fffd 217
Rajit Singh 0:9db3bed8fffd 218 usCoilCnt = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF] << 8 );
Rajit Singh 0:9db3bed8fffd 219 usCoilCnt |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_MUL_COILCNT_OFF + 1] );
Rajit Singh 0:9db3bed8fffd 220
Rajit Singh 0:9db3bed8fffd 221 ucByteCount = pucFrame[MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF];
Rajit Singh 0:9db3bed8fffd 222
Rajit Singh 0:9db3bed8fffd 223 /* Compute the number of expected bytes in the request. */
Rajit Singh 0:9db3bed8fffd 224 if( ( usCoilCnt & 0x0007 ) != 0 )
Rajit Singh 0:9db3bed8fffd 225 {
Rajit Singh 0:9db3bed8fffd 226 ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 + 1 );
Rajit Singh 0:9db3bed8fffd 227 }
Rajit Singh 0:9db3bed8fffd 228 else
Rajit Singh 0:9db3bed8fffd 229 {
Rajit Singh 0:9db3bed8fffd 230 ucByteCountVerify = ( UCHAR )( usCoilCnt / 8 );
Rajit Singh 0:9db3bed8fffd 231 }
Rajit Singh 0:9db3bed8fffd 232
Rajit Singh 0:9db3bed8fffd 233 if( ( usCoilCnt >= 1 ) &&
Rajit Singh 0:9db3bed8fffd 234 ( usCoilCnt <= MB_PDU_FUNC_WRITE_MUL_COILCNT_MAX ) &&
Rajit Singh 0:9db3bed8fffd 235 ( ucByteCountVerify == ucByteCount ) )
Rajit Singh 0:9db3bed8fffd 236 {
Rajit Singh 0:9db3bed8fffd 237 eRegStatus =
Rajit Singh 0:9db3bed8fffd 238 eMBRegCoilsCB( &pucFrame[MB_PDU_FUNC_WRITE_MUL_VALUES_OFF],
Rajit Singh 0:9db3bed8fffd 239 usRegAddress, usCoilCnt, MB_REG_WRITE );
Rajit Singh 0:9db3bed8fffd 240
Rajit Singh 0:9db3bed8fffd 241 /* If an error occured convert it into a Modbus exception. */
Rajit Singh 0:9db3bed8fffd 242 if( eRegStatus != MB_ENOERR )
Rajit Singh 0:9db3bed8fffd 243 {
Rajit Singh 0:9db3bed8fffd 244 eStatus = prveMBError2Exception( eRegStatus );
Rajit Singh 0:9db3bed8fffd 245 }
Rajit Singh 0:9db3bed8fffd 246 else
Rajit Singh 0:9db3bed8fffd 247 {
Rajit Singh 0:9db3bed8fffd 248 /* The response contains the function code, the starting address
Rajit Singh 0:9db3bed8fffd 249 * and the quantity of registers. We reuse the old values in the
Rajit Singh 0:9db3bed8fffd 250 * buffer because they are still valid. */
Rajit Singh 0:9db3bed8fffd 251 *usLen = MB_PDU_FUNC_WRITE_MUL_BYTECNT_OFF;
Rajit Singh 0:9db3bed8fffd 252 }
Rajit Singh 0:9db3bed8fffd 253 }
Rajit Singh 0:9db3bed8fffd 254 else
Rajit Singh 0:9db3bed8fffd 255 {
Rajit Singh 0:9db3bed8fffd 256 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 257 }
Rajit Singh 0:9db3bed8fffd 258 }
Rajit Singh 0:9db3bed8fffd 259 else
Rajit Singh 0:9db3bed8fffd 260 {
Rajit Singh 0:9db3bed8fffd 261 /* Can't be a valid write coil register request because the length
Rajit Singh 0:9db3bed8fffd 262 * is incorrect. */
Rajit Singh 0:9db3bed8fffd 263 eStatus = MB_EX_ILLEGAL_DATA_VALUE;
Rajit Singh 0:9db3bed8fffd 264 }
Rajit Singh 0:9db3bed8fffd 265 return eStatus;
Rajit Singh 0:9db3bed8fffd 266 }
Rajit Singh 0:9db3bed8fffd 267
Rajit Singh 0:9db3bed8fffd 268 #endif
Rajit Singh 0:9db3bed8fffd 269
Rajit Singh 0:9db3bed8fffd 270 #endif