Skip to content

Commit

Permalink
Improve parser-choosing system
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacajack committed Mar 26, 2016
1 parent c15f664 commit 7627e4f
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 15 deletions.
8 changes: 4 additions & 4 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ check: FORCE
--exclude .gitattributes --exclude .gitignore --exclude README.md --exclude LICENSE . test/modlib
cd test && $(CC) $(CFLAGS) --coverage -c modlib/master/mbasic.c
cd test && $(CC) $(CFLAGS) --coverage -c modlib/slave/sbasic.c
cd test && $(CC) $(CFLAGS) --coverage -DMODBUS_MASTER_BASIC=1 -c modlib/master.c
cd test && $(CC) $(CFLAGS) --coverage -DMODBUS_SLAVE_BASIC=1 -c modlib/slave.c
cd test && $(CC) $(CFLAGS) --coverage -DMODBUS_MASTER_SUPPORT=1 -c modlib/master.c
cd test && $(CC) $(CFLAGS) --coverage -DMODBUS_SLAVE_SUPPORT=1 -c modlib/slave.c
cd test && $(CC) $(CFLAGS) --coverage -c modlib/modlib.c
cd test && $(CC) $(CFLAGS) --coverage -c test.c
cd test && $(CC) $(CFLAGS) --coverage test.o modlib.o master.o slave.o mbasic.o sbasic.o -o test
Expand All @@ -76,7 +76,7 @@ master-base: master.c master.h parser.h master/mtypes.h FORCE
echo "master.o: base" >> obj/versions.txt

master-basic: master.c master.h parser.h master/mtypes.h master/mbasic.c master/mbasic.h FORCE
$(CC) $(CFLAGS) -c master.c -DMODBUS_MASTER_BASIC=1 -o obj/master-base.o
$(CC) $(CFLAGS) -c master.c -DMODBUS_MASTER_SUPPORT=1 -o obj/master-base.o
$(CC) $(CFLAGS) -c master/mbasic.c -o obj/master/mbasic.o
$(LD) $(LDFLAGS) -r obj/master-base.o obj/master/mbasic.o -o obj/master-basic.o
rm -rf obj/master-base.o
Expand All @@ -91,7 +91,7 @@ slave-base: slave.c slave.h parser.h slave/stypes.h FORCE
echo "slave.o: base" >> obj/versions.txt

slave-basic: slave.c slave.h parser.h slave/stypes.h slave/sbasic.c slave/sbasic.h FORCE
$(CC) $(CFLAGS) -c slave.c -DMODBUS_SLAVE_BASIC=1 -o obj/slave-base.o
$(CC) $(CFLAGS) -c slave.c -DMODBUS_SLAVE_SUPPORT=1 -o obj/slave-base.o
$(CC) $(CFLAGS) -c slave/sbasic.c -o obj/slave/sbasic.o
$(LD) $(LDFLAGS) -r obj/slave-base.o obj/slave/sbasic.o -o obj/slave-basic.o
rm -rf obj/slave-base.o
Expand Down
19 changes: 16 additions & 3 deletions master.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ void MODBUSParseException( union MODBUSParser *Parser )
MODBUSMaster.Error = 1;
}

void MODBUSParseResponse( uint8_t *Frame, uint8_t FrameLength, uint8_t *RequestFrame, uint8_t RequestFrameLength )
uint8_t MODBUSParseResponse( uint8_t *Frame, uint8_t FrameLength, uint8_t *RequestFrame, uint8_t RequestFrameLength )
{
//This function parses response from master
//Calling it will lead to losing all data and exceptions stored in MODBUSMaster (space will be reallocated)

//If non-zero some parser failed its job
uint8_t ParseSuccess = 0;

//Allocate memory for union and copy frame to it
union MODBUSParser *Parser = (union MODBUSParser *) malloc( FrameLength );
memcpy( ( *Parser ).Frame, Frame, FrameLength );
Expand All @@ -45,13 +48,23 @@ void MODBUSParseResponse( uint8_t *Frame, uint8_t FrameLength, uint8_t *RequestF
}
else
{
if ( MODBUS_MASTER_BASIC )
MODBUSParseResponseBasic( Parser, RequestParser );
switch ( MODBUS_MASTER_SUPPORT )
{
case 0: //Only base - no parsing
break;

case 1: //Basic support - basic parser
ParseSuccess += MODBUSParseResponseBasic( Parser, RequestParser );
break;
}
}

//Free used memory
free( Parser );
free( RequestParser );

if ( ParseSuccess > MODBUS_MASTER_SUPPORT - 1 ) return 1;
else return 0;
}

void MODBUSMasterInit( )
Expand Down
6 changes: 3 additions & 3 deletions master.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
#include "master/mbasic.h"

//Enabling modules in compilation process (use makefile to automate this process)
#ifndef MODBUS_MASTER_BASIC
#define MODBUS_MASTER_BASIC 0
#ifndef MODBUS_MASTER_SUPPORT
#define MODBUS_MASTER_SUPPORT 0
#endif

//Variables declarations
extern MODBUSMasterStatus MODBUSMaster; //Master configuration

extern void MODBUSParseResponse( uint8_t *, uint8_t, uint8_t *, uint8_t );
extern uint8_t MODBUSParseResponse( uint8_t *, uint8_t, uint8_t *, uint8_t );
extern void MODBUSMasterInit( );
13 changes: 10 additions & 3 deletions slave.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,17 @@ void MODBUSParseRequest( uint8_t *Frame, uint8_t FrameLength )
return;
}

if ( MODBUS_SLAVE_BASIC )
ParseSuccess += MODBUSParseRequestBasic( Parser );
switch ( MODBUS_SLAVE_SUPPORT )
{
case 0: //Only base - no parsing
break;

case 1: //Basic support - basic parser
ParseSuccess += MODBUSParseRequestBasic( Parser );
break;
}

if ( ParseSuccess > 0 )
if ( ParseSuccess > MODBUS_SLAVE_SUPPORT - 1 )
if ( ( *Parser ).Base.Address != 0 ) MODBUSBuildException( ( *Parser ).Base.Function, 0x01 );

free( Parser );
Expand Down
4 changes: 2 additions & 2 deletions slave.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
#include "slave/sbasic.h"

//Enabling modules in compilation process (use makefile to automate this process)
#ifndef MODBUS_SLAVE_BASIC
#define MODBUS_SLAVE_BASIC 0
#ifndef MODBUS_SLAVE_SUPPORT
#define MODBUS_SLAVE_SUPPORT 0
#endif

//Variables declarations
Expand Down

0 comments on commit 7627e4f

Please sign in to comment.