summaryrefslogtreecommitdiff
path: root/2003/n/pic/asserv/src/dial.c
diff options
context:
space:
mode:
Diffstat (limited to '2003/n/pic/asserv/src/dial.c')
-rw-r--r--2003/n/pic/asserv/src/dial.c185
1 files changed, 185 insertions, 0 deletions
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;
+ }
+