commit a648f5d3b35ee4dbb283f47c471b318d1e912054
parent ff02b470f9ab114f33d220f586522a91f0ba0b91
Author: Dominik Schmidt <das1993@hotmail.com>
Date: Sat, 15 Dec 2012 13:31:16 +0100
Seems like the termination string isnt \LF, but \LF\LF
Diffstat:
4 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/include/com.h b/include/com.h
@@ -15,3 +15,4 @@ 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.c b/src/cmd.c
@@ -140,7 +140,7 @@ GENERATE_CALLBACK(cmd_set_emul_mode){
return -2;
}
if(newBaud!=0){
- usleep(5000);
+ usleep(BAUD_RATE_SWITCH_WAIT);
setBaudRateExt(fd,newBaud,BAUD_INPUT|BAUD_OUTPUT, TCSADRAIN);
}
if(readMagicPacket(fd)!=mode){
diff --git a/src/cmd_dispatch.c b/src/cmd_dispatch.c
@@ -24,7 +24,7 @@ struct command_def commands[]={
{.name="Boardreset", .opt={.arg_length=0, .short_option="-r", .long_option="--board-reset"}, .request_mymode=0, .callback=&cmd_board_reset},
{.name="Resetline", .opt={.usage="[1/0]", .arg_length=1, .short_option="-rL", .long_option="--reset-line"}, .request_mymode=1, .callback=&cmd_reset_line},
{.name="Boardpower", .opt={.usage="[1/0]", .arg_length=1, .short_option="-bP", .long_option="--board-power"}, .request_mymode=0, .callback=&cmd_board_power},
- {.name="Set Emulation Mode", .opt={.usage="[d/UART,s/STK500,a/AVR910,q/Quiet,m/MyMode,p/ProgMode]", .arg_length=1, .short_option="-sE", .long_option="--set-emulation"}, .request_mymode=0, .callback=&cmd_set_emul_mode},
+ {.name="Emulation Mode", .opt={.usage="[d/UART,s/STK500,a/AVR910,q/Quiet,m/MyMode,p/ProgMode]", .arg_length=1, .short_option="-eM", .long_option="--emulation-mode"}, .request_mymode=0, .callback=&cmd_set_emul_mode},
{.name="Rescue Clock", .opt={.usage="[1,0]", .arg_length=1, .short_option="-rC", .long_option="--rescue-clock"}, .request_mymode=0, .callback=&cmd_set_emul_mode},
{.name="Programming Mode", .opt={.usage="[i/ISP, p/HVP, s/HVS, t/TPI, T/TPIHV]", .arg_length=1, .short_option="-pM", .long_option="--programming-mode"}, .request_mymode=1, .callback=&cmd_set_prog_mode},
{.name=NULL}
@@ -87,14 +87,13 @@ int prepareCommandExecution(int fd, struct conf *config){
if(config->oldmode.mode!='m'){
config->oldmode.baud=getBaudRate(fd);
sendMagicPacket(fd,'m');
- usleep(5000);
+ usleep(BAUD_RATE_SWITCH_WAIT);
setBaudRateExt(fd,B500000, BAUD_INPUT|BAUD_OUTPUT, TCSADRAIN);
char c=readMagicPacket(fd);
if(c!='m'){
do_log("prepareCommandExecution","Couldn't switch to mymode",LOG_LEVEL_ERROR,LOG_TYPE_NORMAL);
return -1;
}
- setBaudRate(fd,B500000, BAUD_INPUT|BAUD_OUTPUT);
}
}
@@ -103,7 +102,7 @@ int prepareCommandExecution(int fd, struct conf *config){
int finishCommandExecution(int fd, struct conf *config){
if(config->oldmode.mode>0){
sendMagicPacket(fd,config->oldmode.mode);
- usleep(5000);
+ usleep(BAUD_RATE_SWITCH_WAIT);
setBaudRate(fd, config->oldmode.baud, BAUD_INPUT|BAUD_OUTPUT);
}
return 0;
diff --git a/src/com.c b/src/com.c
@@ -51,6 +51,7 @@ char *readString(int fd, unsigned int length){
char readMagicPacket(int fd){
int ret;
char c,r;
+ unsigned short int lfcnt=0;
r=0;
while((ret=read(fd,&c,sizeof(char)))){
if(ret<=0){
@@ -58,7 +59,12 @@ char readMagicPacket(int fd){
return 0;
}
if(c==0x0A){
- break;
+ if(lfcnt==0){
+ lfcnt++;
+ }
+ else{
+ break;
+ }
}
else if((c>='a'&&c<='z')||c=='+'||c=='-'){
r=c;