From a9f3689ee85da91a51d01a76a469cbb5298806d2 Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 27 Jun 2004 11:53:30 +0000 Subject: Initial revision --- 2003/n/pic/asserv/src/dial.c | 185 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 2003/n/pic/asserv/src/dial.c (limited to '2003/n/pic/asserv/src/dial.c') diff --git a/2003/n/pic/asserv/src/dial.c b/2003/n/pic/asserv/src/dial.c new file mode 100644 index 0000000..6076ee5 --- /dev/null +++ b/2003/n/pic/asserv/src/dial.c @@ -0,0 +1,185 @@ +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +// Fonctions concernant le dialogue avec le PC +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- + //--------------------------------------------------------------------- + // valide_num() + // Cette fonction permet de vérifier la validité des paramètres envoyés sous forme de 3octets précédés d'un # + //--------------------------------------------------------------------- + boolean valide_num(char *caract) + { + // Si le caractère reçu n'est pas un chiffre + if( caract[0]<'0' || caract[0]>'2' || caract[1]<'0' || caract[1]>'9' || caract[2]<'0' || caract[2]>'9') + { + return false; + } + + return true; + } + + //--------------------------------------------------------------------- + // validation() + // Cette fonction permet de vérifier la validité des paramètres envoyés + //--------------------------------------------------------------------- + boolean validation(char *caract) + { + // Si le premier chiffre est codé en BCD + if(caract[0]==BCD) + { + // Si le premier chiffre est codé en BCD + if(!valide_num(caract+1)) + { + return false; + } + + // Si le second mot est en BCD + if(caract[4]==BCD) + { + if(caract[8]!='\0') + { + return false; + } + + if(!valide_num(caract+5)) + { + return false; + } + } + // Si le second mot est un simple octet ou un octet échappé + else + { + if((caract[4]==ECH && caract[6]!='\0') || (caract[4]!=ECH && caract[5]!='\0')) + { + return false; + } + } + } + else + { + // Si le premier mot est échappé + if(caract[0]==ECH) + { + // Si le second est codé en BCD + if(caract[2]==BCD) + { + if(caract[6]!='\0') + { + return false; + } + + if(!valide_num(caract+3)) + { + return false; + } + } + else + { + // Si le second mot est un simple octet ou un octet échappé + if((caract[2]==ECH && caract[4]!='\0') || (caract[2]!=ECH && caract[3]!='\0')) + { + return false; + } + } + } + // Si le premier mot est un octet simple + else + { + // Si le second est codé en BCD + if(caract[1]==BCD) + { + if(caract[5]!='\0') + { + return false; + } + if(!valide_num(caract+2)) + { + return false; + } + } + else + { + // Si le second mot est un simple octet ou un octet échappé + if((caract[1]==ECH && caract[3]!='\0') || (caract[1]!=ECH && caract[2]!='\0')) + { + return false; + } + } + } + } + + return true; + } + + //--------------------------------------------------------------------- + // decodage() + // Cette fonction récupère la valeur passée en paramètre au module une fois qu'ils ont été vérifiés + //--------------------------------------------------------------------- + long decodage(char *caract) + { + long tmp; + + if(caract[0]==BCD) + { + tmp= (100*(caract[1]-'0') + 10*(caract[2]-'0') + (caract[3]-'0'))*256; + + if(caract[4]==BCD) + { + tmp= 100*(caract[5]-'0') +10*(caract[6]-'0') + caract[7] -'0'+tmp; + } + else{ + if(caract[4]==ECH) + { + tmp=(caract[5])+tmp; + } + else + { + tmp=(caract[4])+tmp; + } + } + } + else + { + if(caract[0]==ECH) + { + tmp=256*(caract[1]); + + if(caract[2]==BCD) + { + tmp= 100*(caract[3]-'0') +10*(caract[4]-'0') + (caract[5]-'0')+tmp; + } + else + { + if(caract[2]==ECH) + { + tmp=(caract[3])+tmp; + } + else + { + tmp=(caract[2])+tmp; + } + } + } + else + { + tmp=256*(caract[0]); + + if(caract[1]==BCD) + { + tmp= 100*(caract[2]-'0') +10*(caract[3]-'0') + (caract[4]-'0')+tmp; + } + + if(caract[1]==ECH) + { + tmp=(caract[2])+tmp; + } + else + { + tmp=(caract[1])+tmp; + } + } + } + + return tmp; + } + -- cgit v1.2.3