MySmartUSB-MK3-Interface

MySmartUSB MK3 Interface
git clone git://xatko.vsos.ethz.ch/MySmartUSB-MK3-Interface.git
Log | Files | Refs

commit 934ac32b75fe7e07529b62e1d437780da14e5af6
parent a648f5d3b35ee4dbb283f47c471b318d1e912054
Author: Dominik Schmidt <das1993@hotmail.com>
Date:   Sat, 15 Dec 2012 13:52:08 +0100

Termination string handling improved

Diffstat:
include/com.h | 3++-
src/cmd_dispatch.c | 5++++-
src/com.c | 26+++++++++++++++++++-------
3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/include/com.h b/include/com.h @@ -8,6 +8,8 @@ * */ #pragma once +#define BAUD_RATE_SWITCH_WAIT 5000 +#define RECEIVE_TERM_STR "\n\n" extern char *readString(int fd, unsigned int length); extern int sendRawString(int fd, const char *str); extern int sendString(int fd, const char *str); @@ -15,4 +17,3 @@ extern int sendMagicPacket(int fd, char c); extern int checkIfOk(char *str); extern char parseMagicPacket(char *str); extern char readMagicPacket(int fd); -#define BAUD_RATE_SWITCH_WAIT 5000 diff --git a/src/cmd_dispatch.c b/src/cmd_dispatch.c @@ -84,8 +84,11 @@ int prepareCommandExecution(int fd, struct conf *config){ if(config->need_mymode){ sendMagicPacket(fd,'i'); config->oldmode.mode=readMagicPacket(fd); + config->oldmode.baud=getBaudRate(fd); if(config->oldmode.mode!='m'){ - config->oldmode.baud=getBaudRate(fd); + char str[50]; + sprintf(str,"Switching from %c to m", config->oldmode.mode); + do_log("prepareCommandExecution",str,LOG_LEVEL_DEBUG,LOG_TYPE_NORMAL); sendMagicPacket(fd,'m'); usleep(BAUD_RATE_SWITCH_WAIT); setBaudRateExt(fd,B500000, BAUD_INPUT|BAUD_OUTPUT, TCSADRAIN); diff --git a/src/com.c b/src/com.c @@ -18,6 +18,9 @@ char *readString(int fd, unsigned int length){ unsigned int size=10; char *str=malloc(size); + char termstr[]=RECEIVE_TERM_STR; + char *tp=termstr; + unsigned int i=0; char c; int ret; @@ -35,8 +38,15 @@ char *readString(int fd, unsigned int length){ str[i]='\0'; break; } - if(c==0x0A){ - str[i]='\0'; + if(c==*tp){ + if(*(tp+1)=='\0'){ + str[i]='\0'; + break; + } + else{ + tp++; + continue; + } } else if(c==0){ continue; @@ -51,19 +61,21 @@ char *readString(int fd, unsigned int length){ char readMagicPacket(int fd){ int ret; char c,r; - unsigned short int lfcnt=0; + char termstr[]=RECEIVE_TERM_STR; + char *tp=termstr; r=0; while((ret=read(fd,&c,sizeof(char)))){ if(ret<=0){ do_log("readString","Read Error",LOG_LEVEL_ERROR,LOG_TYPE_SIGNAL); return 0; } - if(c==0x0A){ - if(lfcnt==0){ - lfcnt++; + if(c==*tp){ + if(*(tp+1)=='\0'){ + break; } else{ - break; + tp+=1; + continue; } } else if((c>='a'&&c<='z')||c=='+'||c=='-'){