commit 934ac32b75fe7e07529b62e1d437780da14e5af6
parent a648f5d3b35ee4dbb283f47c471b318d1e912054
Author: Dominik Schmidt <das1993@hotmail.com>
Date: Sat, 15 Dec 2012 13:52:08 +0100
Termination string handling improved
Diffstat:
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=='-'){