summaryrefslogtreecommitdiff
path: root/2003/n/pic/asserv/src/dial.c
blob: 6076ee5bd99369b632d5ad0fce991353d7607240 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
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;
      }