Modbus RTU/ASCII/TCP with lwip TCP working partial, but with errors (retransmitions)

Dependencies:   EthernetNetIf mbed

Committer:
tmav123
Date:
Mon Dec 05 22:49:02 2011 +0000
Revision:
0:f54e9507171b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tmav123 0:f54e9507171b 1 /*
tmav123 0:f54e9507171b 2 * FreeModbus Libary: lwIP Port
tmav123 0:f54e9507171b 3 * Copyright (C) 2006 Christian Walter <wolti@sil.at>
tmav123 0:f54e9507171b 4 *
tmav123 0:f54e9507171b 5 * This library is free software; you can redistribute it and/or
tmav123 0:f54e9507171b 6 * modify it under the terms of the GNU Lesser General Public
tmav123 0:f54e9507171b 7 * License as published by the Free Software Foundation; either
tmav123 0:f54e9507171b 8 * version 2.1 of the License, or (at your option) any later version.
tmav123 0:f54e9507171b 9 *
tmav123 0:f54e9507171b 10 * This library is distributed in the hope that it will be useful,
tmav123 0:f54e9507171b 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
tmav123 0:f54e9507171b 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
tmav123 0:f54e9507171b 13 * Lesser General Public License for more details.
tmav123 0:f54e9507171b 14 *
tmav123 0:f54e9507171b 15 * You should have received a copy of the GNU Lesser General Public
tmav123 0:f54e9507171b 16 * License along with this library; if not, write to the Free Software
tmav123 0:f54e9507171b 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
tmav123 0:f54e9507171b 18 *
tmav123 0:f54e9507171b 19 * File: $Id: portother.c,v 1.1 2006/08/30 23:18:07 wolti Exp $
tmav123 0:f54e9507171b 20 */
tmav123 0:f54e9507171b 21
tmav123 0:f54e9507171b 22 /* ----------------------- System includes ----------------------------------*/
tmav123 0:f54e9507171b 23 //#include <sys/types.h>
tmav123 0:f54e9507171b 24 //#include <sys/stat.h>
tmav123 0:f54e9507171b 25 //#include <unistd.h>
tmav123 0:f54e9507171b 26 #include <stdio.h>
tmav123 0:f54e9507171b 27 #include <stdarg.h>
tmav123 0:f54e9507171b 28 #include <string.h>
tmav123 0:f54e9507171b 29
tmav123 0:f54e9507171b 30 #include "port.h"
tmav123 0:f54e9507171b 31
tmav123 0:f54e9507171b 32 /* ----------------------- Defines ------------------------------------------*/
tmav123 0:f54e9507171b 33 #define MB_FRAME_LOG_BUFSIZE 512
tmav123 0:f54e9507171b 34
tmav123 0:f54e9507171b 35 /* ----------------------- Start implementation -----------------------------*/
tmav123 0:f54e9507171b 36
tmav123 0:f54e9507171b 37 #ifdef MB_TCP_DEBUG
tmav123 0:f54e9507171b 38 void
tmav123 0:f54e9507171b 39 prvvMBTCPLogFrame( const CHAR * pucMsg, UCHAR * pucFrame, USHORT usFrameLen )
tmav123 0:f54e9507171b 40 {
tmav123 0:f54e9507171b 41 int i;
tmav123 0:f54e9507171b 42 int res;
tmav123 0:f54e9507171b 43 int iBufPos = 0;
tmav123 0:f54e9507171b 44 size_t iBufLeft = MB_FRAME_LOG_BUFSIZE;
tmav123 0:f54e9507171b 45 static CHAR arcBuffer[MB_FRAME_LOG_BUFSIZE];
tmav123 0:f54e9507171b 46
tmav123 0:f54e9507171b 47 assert( pucFrame != NULL );
tmav123 0:f54e9507171b 48
tmav123 0:f54e9507171b 49 for( i = 0; i < usFrameLen; i++ )
tmav123 0:f54e9507171b 50 {
tmav123 0:f54e9507171b 51 /* Print some additional frame information. */
tmav123 0:f54e9507171b 52 switch ( i )
tmav123 0:f54e9507171b 53 {
tmav123 0:f54e9507171b 54 case 0:
tmav123 0:f54e9507171b 55 /* TID = Transaction Identifier. */
tmav123 0:f54e9507171b 56 res = snprintf( &arcBuffer[iBufPos], iBufLeft, "| TID = " );
tmav123 0:f54e9507171b 57 break;
tmav123 0:f54e9507171b 58 case 2:
tmav123 0:f54e9507171b 59 /* PID = Protocol Identifier. */
tmav123 0:f54e9507171b 60 res = snprintf( &arcBuffer[iBufPos], iBufLeft, " | PID = " );
tmav123 0:f54e9507171b 61 break;
tmav123 0:f54e9507171b 62 case 4:
tmav123 0:f54e9507171b 63 /* Length */
tmav123 0:f54e9507171b 64 res = snprintf( &arcBuffer[iBufPos], iBufLeft, " | LEN = " );
tmav123 0:f54e9507171b 65 break;
tmav123 0:f54e9507171b 66 case 6:
tmav123 0:f54e9507171b 67 /* UID = Unit Identifier. */
tmav123 0:f54e9507171b 68 res = snprintf( &arcBuffer[iBufPos], iBufLeft, " | UID = " );
tmav123 0:f54e9507171b 69 break;
tmav123 0:f54e9507171b 70 case 7:
tmav123 0:f54e9507171b 71 /* MB Function Code. */
tmav123 0:f54e9507171b 72 res = snprintf( &arcBuffer[iBufPos], iBufLeft, "|| FUNC = " );
tmav123 0:f54e9507171b 73 break;
tmav123 0:f54e9507171b 74 case 8:
tmav123 0:f54e9507171b 75 /* MB PDU rest. */
tmav123 0:f54e9507171b 76 res = snprintf( &arcBuffer[iBufPos], iBufLeft, " | DATA = " );
tmav123 0:f54e9507171b 77 break;
tmav123 0:f54e9507171b 78 default:
tmav123 0:f54e9507171b 79 res = 0;
tmav123 0:f54e9507171b 80 break;
tmav123 0:f54e9507171b 81 }
tmav123 0:f54e9507171b 82 if( res == -1 )
tmav123 0:f54e9507171b 83 {
tmav123 0:f54e9507171b 84 break;
tmav123 0:f54e9507171b 85 }
tmav123 0:f54e9507171b 86 else
tmav123 0:f54e9507171b 87 {
tmav123 0:f54e9507171b 88 iBufPos += res;
tmav123 0:f54e9507171b 89 iBufLeft -= res;
tmav123 0:f54e9507171b 90 }
tmav123 0:f54e9507171b 91
tmav123 0:f54e9507171b 92 /* Print the data. */
tmav123 0:f54e9507171b 93 res = snprintf( &arcBuffer[iBufPos], iBufLeft, "%02X", pucFrame[i] );
tmav123 0:f54e9507171b 94 if( res == -1 )
tmav123 0:f54e9507171b 95 {
tmav123 0:f54e9507171b 96 break;
tmav123 0:f54e9507171b 97 }
tmav123 0:f54e9507171b 98 else
tmav123 0:f54e9507171b 99 {
tmav123 0:f54e9507171b 100 iBufPos += res;
tmav123 0:f54e9507171b 101 iBufLeft -= res;
tmav123 0:f54e9507171b 102 }
tmav123 0:f54e9507171b 103 }
tmav123 0:f54e9507171b 104
tmav123 0:f54e9507171b 105 if( res != -1 )
tmav123 0:f54e9507171b 106 {
tmav123 0:f54e9507171b 107 /* Append an end of frame string. */
tmav123 0:f54e9507171b 108 res = snprintf( &arcBuffer[iBufPos], iBufLeft, " |\r\n" );
tmav123 0:f54e9507171b 109 if( res != -1 )
tmav123 0:f54e9507171b 110 {
tmav123 0:f54e9507171b 111 vMBPortLog( MB_LOG_DEBUG, pucMsg, "%s", arcBuffer );
tmav123 0:f54e9507171b 112 }
tmav123 0:f54e9507171b 113 }
tmav123 0:f54e9507171b 114 }
tmav123 0:f54e9507171b 115 #endif
tmav123 0:f54e9507171b 116
tmav123 0:f54e9507171b 117 #ifdef MB_TCP_DEBUG
tmav123 0:f54e9507171b 118 void
tmav123 0:f54e9507171b 119 vMBPortLog( eMBPortLogLevel eLevel, const CHAR * szModule, const CHAR * szFmt, ... )
tmav123 0:f54e9507171b 120 {
tmav123 0:f54e9507171b 121 va_list args;
tmav123 0:f54e9507171b 122 static const char *arszLevel2Str[] = { "ERROR", "WARN", "INFO", "DEBUG"};
tmav123 0:f54e9507171b 123
tmav123 0:f54e9507171b 124 ( void )printf( "%s: %s: ", arszLevel2Str[eLevel], szModule );
tmav123 0:f54e9507171b 125 va_start( args, szFmt );
tmav123 0:f54e9507171b 126 vprintf( szFmt, args );
tmav123 0:f54e9507171b 127 va_end( args );
tmav123 0:f54e9507171b 128 }
tmav123 0:f54e9507171b 129 #endif