Commit 52d8a1eaf954b611aaf0861144b440a15f7c517d

Authored by Souheib Khinache
2 parents c35daaf6 d12f48f7

Merge branch 'master' of https://archives.plil.fr/amoreau/skam_projet

Tangible/ethernet.h 100755 → 100644
Tangible/socket.c 100755 → 100644
1 -/*  
2 -*  
3 -@file socket.c  
4 -@brief setting chip register for socket  
5 - last update : 2008. Jan  
6 -*  
7 -*/  
8 -  
9 -#include "ethernet.h"  
10 -#include "w5100.h"  
11 -#include "socket.h"  
12 -  
13 -#ifdef __DEF_IINCHIP_DBG__  
14 -#include <stdio.h>  
15 -#endif  
16 -  
17 -static uint16 local_port;  
18 -  
19 -/**  
20 -@brief This Socket function initialize the channel in perticular mode, and set the port and wait for W5100 done it.  
21 -@return 1 for success else 0.  
22 -*/  
23 -uint8 socket(  
24 - SOCKET s, /**< for socket number */  
25 - uint8 protocol, /**< for socket protocol */  
26 - uint16 port, /**< the source port for the socket */  
27 - uint8 flag /**< the option for the socket */  
28 - )  
29 -{  
30 - uint8 ret;  
31 -#ifdef __DEF_IINCHIP_DBG__  
32 - printf("socket()\r\n");  
33 -#endif  
34 - if ((protocol == Sn_MR_TCP) || (protocol == Sn_MR_UDP) || (protocol == Sn_MR_IPRAW) || (protocol == Sn_MR_MACRAW) || (protocol == Sn_MR_PPPOE))  
35 - {  
36 - close(s);  
37 - IINCHIP_WRITE(Sn_MR(s),protocol | flag);  
38 - if (port != 0) {  
39 - IINCHIP_WRITE(Sn_PORT0(s),(uint8)((port & 0xff00) >> 8));  
40 - IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(port & 0x00ff));  
41 - } else {  
42 - local_port++; // if don't set the source port, set local_port number.  
43 - IINCHIP_WRITE(Sn_PORT0(s),(uint8)((local_port & 0xff00) >> 8));  
44 - IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(local_port & 0x00ff));  
45 - }  
46 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_OPEN); // run sockinit Sn_CR  
47 -  
48 - /* +20071122[chungs]:wait to process the command... */  
49 - while( IINCHIP_READ(Sn_CR(s)) )  
50 - ;  
51 - /* ------- */  
52 - ret = 1;  
53 - }  
54 - else  
55 - {  
56 - ret = 0;  
57 - }  
58 -#ifdef __DEF_IINCHIP_DBG__  
59 - printf("Sn_SR = %.2x , Protocol = %.2x\r\n", IINCHIP_READ(Sn_SR(s)), IINCHIP_READ(Sn_MR(s)));  
60 -#endif  
61 - return ret;  
62 -}  
63 -  
64 -  
65 -/**  
66 -@brief This function close the socket and parameter is "s" which represent the socket number  
67 -*/  
68 -void close(SOCKET s)  
69 -{  
70 -#ifdef __DEF_IINCHIP_DBG__  
71 - printf("close()\r\n");  
72 -#endif  
73 -  
74 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_CLOSE);  
75 -  
76 - /* +20071122[chungs]:wait to process the command... */  
77 - while( IINCHIP_READ(Sn_CR(s)) )  
78 - ;  
79 - /* ------- */  
80 -  
81 - /* +2008.01 [hwkim]: clear interrupt */  
82 - #ifdef __DEF_IINCHIP_INT__  
83 - /* m2008.01 [bj] : all clear */  
84 - putISR(s, 0x00);  
85 - #else  
86 - /* m2008.01 [bj] : all clear */  
87 - IINCHIP_WRITE(Sn_IR(s), 0xFF);  
88 - #endif  
89 -}  
90 -  
91 -  
92 -/**  
93 -@brief This function established the connection for the channel in passive (server) mode. This function waits for the request from the peer.  
94 -@return 1 for success else 0.  
95 -*/  
96 -uint8 listen(  
97 - SOCKET s /**< the socket number */  
98 - )  
99 -{  
100 - uint8 ret;  
101 -#ifdef __DEF_IINCHIP_DBG__  
102 - printf("listen()\r\n");  
103 -#endif  
104 - if (IINCHIP_READ(Sn_SR(s)) == SOCK_INIT)  
105 - {  
106 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_LISTEN);  
107 - /* +20071122[chungs]:wait to process the command... */  
108 - while( IINCHIP_READ(Sn_CR(s)) )  
109 - ;  
110 - /* ------- */  
111 - ret = 1;  
112 - }  
113 - else  
114 - {  
115 - ret = 0;  
116 -#ifdef __DEF_IINCHIP_DBG__  
117 - printf("Fail[invalid ip,port]\r\n");  
118 -#endif  
119 - }  
120 - return ret;  
121 -}  
122 -  
123 -  
124 -/**  
125 -@brief This function established the connection for the channel in Active (client) mode.  
126 - This function waits for the until the connection is established.  
127 -  
128 -@return 1 for success else 0.  
129 -*/  
130 -uint8 connect(SOCKET s, uint8 * addr, uint16 port)  
131 -{  
132 - uint8 ret;  
133 -#ifdef __DEF_IINCHIP_DBG__  
134 - printf("connect()\r\n");  
135 -#endif  
136 - if  
137 - (  
138 - ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||  
139 - ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||  
140 - (port == 0x00)  
141 - )  
142 - {  
143 - ret = 0;  
144 -#ifdef __DEF_IINCHIP_DBG__  
145 - printf("Fail[invalid ip,port]\r\n");  
146 -#endif  
147 - }  
148 - else  
149 - {  
150 - ret = 1;  
151 - // set destination IP  
152 - IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);  
153 - IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);  
154 - IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);  
155 - IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);  
156 - IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));  
157 - IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));  
158 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_CONNECT);  
159 - /* m2008.01 [bj] : wait for completion */  
160 - while ( IINCHIP_READ(Sn_CR(s)) ) ;  
161 -  
162 - }  
163 -  
164 - return ret;  
165 -}  
166 -  
167 -  
168 -  
169 -/**  
170 -@brief This function used for disconnect the socket and parameter is "s" which represent the socket number  
171 -@return 1 for success else 0.  
172 -*/  
173 -void disconnect(SOCKET s)  
174 -{  
175 -#ifdef __DEF_IINCHIP_DBG__  
176 - printf("disconnect()\r\n");  
177 -#endif  
178 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_DISCON);  
179 -  
180 - /* +20071122[chungs]:wait to process the command... */  
181 - while( IINCHIP_READ(Sn_CR(s)) )  
182 - ;  
183 - /* ------- */  
184 -}  
185 -  
186 -  
187 -/**  
188 -@brief This function used to send the data in TCP mode  
189 -@return 1 for success else 0.  
190 -*/  
191 -uint16 send(  
192 - SOCKET s, /**< the socket index */  
193 - const uint8 * buf, /**< a pointer to data */  
194 - uint16 len /**< the data size to be send */  
195 - )  
196 -{  
197 - uint8 status=0;  
198 - uint16 ret=0;  
199 - uint16 freesize=0;  
200 -#ifdef __DEF_IINCHIP_DBG__  
201 - printf("send()\r\n");  
202 -#endif  
203 -  
204 - if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.  
205 - else ret = len;  
206 -  
207 - // if freebuf is available, start.  
208 - do  
209 - {  
210 - freesize = getSn_TX_FSR(s);  
211 - status = IINCHIP_READ(Sn_SR(s));  
212 - if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT))  
213 - {  
214 - ret = 0;  
215 - break;  
216 - }  
217 -#ifdef __DEF_IINCHIP_DBG__  
218 - printf("socket %d freesize(%d) empty or error\r\n", s, freesize);  
219 -#endif  
220 - } while (freesize < ret);  
221 -  
222 - // copy data  
223 - send_data_processing(s, (uint8 *)buf, ret);  
224 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);  
225 -  
226 - /* +20071122[chungs]:wait to process the command... */  
227 - while( IINCHIP_READ(Sn_CR(s)) )  
228 - ;  
229 - /* ------- */  
230 -  
231 -/* +2008.01 bj */  
232 -#ifdef __DEF_IINCHIP_INT__  
233 - while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
234 -#else  
235 - while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
236 -#endif  
237 - {  
238 - /* m2008.01 [bj] : reduce code */  
239 - if ( IINCHIP_READ(Sn_SR(s)) == SOCK_CLOSED )  
240 - {  
241 -#ifdef __DEF_IINCHIP_DBG__  
242 - printf("SOCK_CLOSED.\r\n");  
243 -#endif  
244 - close(s);  
245 - return 0;  
246 - }  
247 - }  
248 -/* +2008.01 bj */  
249 -#ifdef __DEF_IINCHIP_INT__  
250 - putISR(s, getISR(s) & (~Sn_IR_SEND_OK));  
251 -#else  
252 - IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);  
253 -#endif  
254 - return ret;  
255 -}  
256 -  
257 -  
258 -/**  
259 -@brief This function is an application I/F function which is used to receive the data in TCP mode.  
260 - It continues to wait for data as much as the application wants to receive.  
261 -  
262 -@return received data size for success else -1.  
263 -*/  
264 -uint16 recv(  
265 - SOCKET s, /**< socket index */  
266 - uint8 * buf, /**< a pointer to copy the data to be received */  
267 - uint16 len /**< the data size to be read */  
268 - )  
269 -{  
270 - uint16 ret=0;  
271 -#ifdef __DEF_IINCHIP_DBG__  
272 - printf("recv()\r\n");  
273 -#endif  
274 -  
275 -  
276 - if ( len > 0 )  
277 - {  
278 - recv_data_processing(s, buf, len);  
279 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);  
280 -  
281 - /* +20071122[chungs]:wait to process the command... */  
282 - while( IINCHIP_READ(Sn_CR(s)) )  
283 - ;  
284 - /* ------- */  
285 - ret = len;  
286 - }  
287 - return ret;  
288 -}  
289 -  
290 -  
291 -/**  
292 -@brief This function is an application I/F function which is used to send the data for other then TCP mode.  
293 - Unlike TCP transmission, The peer's destination address and the port is needed.  
294 -  
295 -@return This function return send data size for success else -1.  
296 -*/  
297 -uint16 sendto(  
298 - SOCKET s, /**< socket index */  
299 - const uint8 * buf, /**< a pointer to the data */  
300 - uint16 len, /**< the data size to send */  
301 - uint8 * addr, /**< the peer's Destination IP address */  
302 - uint16 port /**< the peer's destination port number */  
303 - )  
304 -{  
305 -// uint8 status=0;  
306 -// uint8 isr=0;  
307 - uint16 ret=0;  
308 -  
309 -#ifdef __DEF_IINCHIP_DBG__  
310 - printf("sendto()\r\n");  
311 -#endif  
312 - if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.  
313 - else ret = len;  
314 -  
315 - if  
316 - (  
317 - ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||  
318 - ((port == 0x00)) ||(ret == 0)  
319 - )  
320 - {  
321 - /* +2008.01 [bj] : added return value */  
322 - ret = 0;  
323 -#ifdef __DEF_IINCHIP_DBG__  
324 - printf("%d Fail[%.2x.%.2x.%.2x.%.2x, %.d, %d]\r\n",s, addr[0], addr[1], addr[2], addr[3] , port, len);  
325 - printf("Fail[invalid ip,port]\r\n");  
326 -#endif  
327 - }  
328 - else  
329 - {  
330 - IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);  
331 - IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);  
332 - IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);  
333 - IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);  
334 - IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));  
335 - IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));  
336 -  
337 - // copy data  
338 - send_data_processing(s, (uint8 *)buf, ret);  
339 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);  
340 -  
341 - /* +20071122[chungs]:wait to process the command... */  
342 - while( IINCHIP_READ(Sn_CR(s)) )  
343 - ;  
344 - /* ------- */  
345 -  
346 -/* +2008.01 bj */  
347 -#ifdef __DEF_IINCHIP_INT__  
348 - while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
349 -#else  
350 - while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
351 -#endif  
352 - {  
353 -#ifdef __DEF_IINCHIP_INT__  
354 - if (getISR(s) & Sn_IR_TIMEOUT)  
355 -#else  
356 - if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)  
357 -#endif  
358 - {  
359 -#ifdef __DEF_IINCHIP_DBG__  
360 - printf("send fail.\r\n");  
361 -#endif  
362 -/* +2008.01 [bj]: clear interrupt */  
363 -#ifdef __DEF_IINCHIP_INT__  
364 - putISR(s, getISR(s) & ~(Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */  
365 -#else  
366 - IINCHIP_WRITE(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */  
367 -#endif  
368 - return 0;  
369 - }  
370 - }  
371 -  
372 -/* +2008.01 bj */  
373 -#ifdef __DEF_IINCHIP_INT__  
374 - putISR(s, getISR(s) & (~Sn_IR_SEND_OK));  
375 -#else  
376 - IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);  
377 -#endif  
378 -  
379 - }  
380 - return ret;  
381 -}  
382 -  
383 -  
384 -/**  
385 -@brief This function is an application I/F function which is used to receive the data in other then  
386 - TCP mode. This function is used to receive UDP, IP_RAW and MAC_RAW mode, and handle the header as well.  
387 -  
388 -@return This function return received data size for success else -1.  
389 -*/  
390 -uint16 recvfrom(  
391 - SOCKET s, /**< the socket number */  
392 - uint8 * buf, /**< a pointer to copy the data to be received */  
393 - uint16 len, /**< the data size to read */  
394 - uint8 * addr, /**< a pointer to store the peer's IP address */  
395 - uint16 *port /**< a pointer to store the peer's port number. */  
396 - )  
397 -{  
398 - uint8 head[8];  
399 - uint16 data_len=0;  
400 - uint16 ptr=0;  
401 -#ifdef __DEF_IINCHIP_DBG__  
402 - printf("recvfrom()\r\n");  
403 -#endif  
404 -  
405 - if ( len > 0 )  
406 - {  
407 - ptr = IINCHIP_READ(Sn_RX_RD0(s));  
408 - ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD0(s) + 1);  
409 -#ifdef __DEF_IINCHIP_DBG__  
410 - printf("ISR_RX: rd_ptr : %.4x\r\n", ptr);  
411 -#endif  
412 - switch (IINCHIP_READ(Sn_MR(s)) & 0x07)  
413 - {  
414 - case Sn_MR_UDP :  
415 - read_data(s, (uint8 *)ptr, head, 0x08);  
416 - ptr += 8;  
417 - // read peer's IP address, port number.  
418 - addr[0] = head[0];  
419 - addr[1] = head[1];  
420 - addr[2] = head[2];  
421 - addr[3] = head[3];  
422 - *port = head[4];  
423 - *port = (*port << 8) + head[5];  
424 - data_len = head[6];  
425 - data_len = (data_len << 8) + head[7];  
426 -  
427 -#ifdef __DEF_IINCHIP_DBG__  
428 - printf("UDP msg arrived\r\n");  
429 - printf("source Port : %d\r\n", *port);  
430 - printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);  
431 -#endif  
432 -  
433 - read_data(s, (uint8 *)ptr, buf, data_len); // data copy.  
434 - ptr += data_len;  
435 -  
436 - IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));  
437 - IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));  
438 - break;  
439 -  
440 - case Sn_MR_IPRAW :  
441 - read_data(s, (uint8 *)ptr, head, 0x06);  
442 - ptr += 6;  
443 -  
444 - addr[0] = head[0];  
445 - addr[1] = head[1];  
446 - addr[2] = head[2];  
447 - addr[3] = head[3];  
448 - data_len = head[4];  
449 - data_len = (data_len << 8) + head[5];  
450 -  
451 -#ifdef __DEF_IINCHIP_DBG__  
452 - printf("IP RAW msg arrived\r\n");  
453 - printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);  
454 -#endif  
455 - read_data(s, (uint8 *)ptr, buf, data_len); // data copy.  
456 - ptr += data_len;  
457 -  
458 - IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));  
459 - IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));  
460 - break;  
461 - case Sn_MR_MACRAW :  
462 - read_data(s,(uint8*)ptr,head,2);  
463 - ptr+=2;  
464 - data_len = head[0];  
465 - data_len = (data_len<<8) + head[1] - 2;  
466 -  
467 - read_data(s,(uint8*) ptr,buf,data_len);  
468 - ptr += data_len;  
469 - IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));  
470 - IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));  
471 -  
472 -#ifdef __DEF_IINCHIP_DGB__  
473 - printf("MAC RAW msg arrived\r\n");  
474 - printf("dest mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);  
475 - printf("src mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]);  
476 - printf("type =%.2X%.2X\r\n",buf[12],buf[13]);  
477 -#endif  
478 - break;  
479 -  
480 - default :  
481 - break;  
482 - }  
483 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);  
484 -  
485 - /* +20071122[chungs]:wait to process the command... */  
486 - while( IINCHIP_READ(Sn_CR(s)) )  
487 - ;  
488 - /* ------- */  
489 - }  
490 -#ifdef __DEF_IINCHIP_DBG__  
491 - printf("recvfrom() end ..\r\n");  
492 -#endif  
493 - return data_len;  
494 -}  
495 -  
496 -  
497 -uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len)  
498 -{  
499 -// uint8 status=0;  
500 -// uint8 isr=0;  
501 - uint16 ret=0;  
502 -  
503 -#ifdef __DEF_IINCHIP_DBG__  
504 - printf("igmpsend()\r\n");  
505 -#endif  
506 - if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.  
507 - else ret = len;  
508 -  
509 - if (ret == 0)  
510 - {  
511 - ;  
512 -#ifdef __DEF_IINCHIP_DBG__  
513 - printf("%d Fail[%d]\r\n",len,ret);  
514 -#endif  
515 - }  
516 - else  
517 - {  
518 - // copy data  
519 - send_data_processing(s, (uint8 *)buf, ret);  
520 - IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);  
521 -/* +2008.01 bj */  
522 - while( IINCHIP_READ(Sn_CR(s)) )  
523 - ;  
524 -/* ------- */  
525 -  
526 -/* +2008.01 bj */  
527 -#ifdef __DEF_IINCHIP_INT__  
528 - while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
529 -#else  
530 - while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )  
531 -#endif  
532 - {  
533 - IINCHIP_READ(Sn_SR(s));  
534 -#ifdef __DEF_IINCHIP_INT__  
535 - if (getISR(s) & Sn_IR_TIMEOUT)  
536 -#else  
537 - if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)  
538 -#endif  
539 - {  
540 -#ifdef __DEF_IINCHIP_DBG__  
541 - printf("igmpsend fail.\r\n");  
542 -#endif  
543 - /* in case of igmp, if send fails, then socket closed */  
544 - /* if you want change, remove this code. */  
545 - close(s);  
546 - /* ----- */  
547 -  
548 - return 0;  
549 - }  
550 - }  
551 -  
552 -/* +2008.01 bj */  
553 -#ifdef __DEF_IINCHIP_INT__  
554 - putISR(s, getISR(s) & (~Sn_IR_SEND_OK));  
555 -#else  
556 - IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);  
557 -#endif  
558 - }  
559 - return ret;  
560 -}  
561 - 1 +/*
  2 +*
  3 +@file socket.c
  4 +@brief setting chip register for socket
  5 + last update : 2008. Jan
  6 +*
  7 +*/
  8 +
  9 +#include "ethernet.h"
  10 +#include "w5100.h"
  11 +#include "socket.h"
  12 +
  13 +#ifdef __DEF_IINCHIP_DBG__
  14 +#include <stdio.h>
  15 +#endif
  16 +
  17 +static uint16 local_port;
  18 +
  19 +/**
  20 +@brief This Socket function initialize the channel in perticular mode, and set the port and wait for W5100 done it.
  21 +@return 1 for success else 0.
  22 +*/
  23 +uint8 socket(
  24 + SOCKET s, /**< for socket number */
  25 + uint8 protocol, /**< for socket protocol */
  26 + uint16 port, /**< the source port for the socket */
  27 + uint8 flag /**< the option for the socket */
  28 + )
  29 +{
  30 + uint8 ret;
  31 +#ifdef __DEF_IINCHIP_DBG__
  32 + printf("socket()\r\n");
  33 +#endif
  34 + if ((protocol == Sn_MR_TCP) || (protocol == Sn_MR_UDP) || (protocol == Sn_MR_IPRAW) || (protocol == Sn_MR_MACRAW) || (protocol == Sn_MR_PPPOE))
  35 + {
  36 + close(s);
  37 + IINCHIP_WRITE(Sn_MR(s),protocol | flag);
  38 + if (port != 0) {
  39 + IINCHIP_WRITE(Sn_PORT0(s),(uint8)((port & 0xff00) >> 8));
  40 + IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(port & 0x00ff));
  41 + } else {
  42 + local_port++; // if don't set the source port, set local_port number.
  43 + IINCHIP_WRITE(Sn_PORT0(s),(uint8)((local_port & 0xff00) >> 8));
  44 + IINCHIP_WRITE((Sn_PORT0(s) + 1),(uint8)(local_port & 0x00ff));
  45 + }
  46 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_OPEN); // run sockinit Sn_CR
  47 +
  48 + /* +20071122[chungs]:wait to process the command... */
  49 + while( IINCHIP_READ(Sn_CR(s)) )
  50 + ;
  51 + /* ------- */
  52 + ret = 1;
  53 + }
  54 + else
  55 + {
  56 + ret = 0;
  57 + }
  58 +#ifdef __DEF_IINCHIP_DBG__
  59 + printf("Sn_SR = %.2x , Protocol = %.2x\r\n", IINCHIP_READ(Sn_SR(s)), IINCHIP_READ(Sn_MR(s)));
  60 +#endif
  61 + return ret;
  62 +}
  63 +
  64 +
  65 +/**
  66 +@brief This function close the socket and parameter is "s" which represent the socket number
  67 +*/
  68 +void close(SOCKET s)
  69 +{
  70 +#ifdef __DEF_IINCHIP_DBG__
  71 + printf("close()\r\n");
  72 +#endif
  73 +
  74 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_CLOSE);
  75 +
  76 + /* +20071122[chungs]:wait to process the command... */
  77 + while( IINCHIP_READ(Sn_CR(s)) )
  78 + ;
  79 + /* ------- */
  80 +
  81 + /* +2008.01 [hwkim]: clear interrupt */
  82 + #ifdef __DEF_IINCHIP_INT__
  83 + /* m2008.01 [bj] : all clear */
  84 + putISR(s, 0x00);
  85 + #else
  86 + /* m2008.01 [bj] : all clear */
  87 + IINCHIP_WRITE(Sn_IR(s), 0xFF);
  88 + #endif
  89 +}
  90 +
  91 +
  92 +/**
  93 +@brief This function established the connection for the channel in passive (server) mode. This function waits for the request from the peer.
  94 +@return 1 for success else 0.
  95 +*/
  96 +uint8 listen(
  97 + SOCKET s /**< the socket number */
  98 + )
  99 +{
  100 + uint8 ret;
  101 +#ifdef __DEF_IINCHIP_DBG__
  102 + printf("listen()\r\n");
  103 +#endif
  104 + if (IINCHIP_READ(Sn_SR(s)) == SOCK_INIT)
  105 + {
  106 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_LISTEN);
  107 + /* +20071122[chungs]:wait to process the command... */
  108 + while( IINCHIP_READ(Sn_CR(s)) );
  109 + /* ------- */
  110 + ret = 1;
  111 +#ifdef __DEF_IINCHIP_DBG__
  112 + printf("status = %x\r\n",IINCHIP_READ(Sn_SR(s)));
  113 +#endif
  114 + }
  115 + else
  116 + {
  117 + ret = 0;
  118 +#ifdef __DEF_IINCHIP_DBG__
  119 + printf("Fail[invalid ip,port]\r\n");
  120 +#endif
  121 + }
  122 + return ret;
  123 +}
  124 +
  125 +/**
  126 +@brief This function wait for client connection
  127 +@return 1 for success else 0.
  128 +*/
  129 +uint8 accept(
  130 + SOCKET s /**< the socket number */
  131 + )
  132 +{
  133 + uint8 ret;
  134 +#ifdef __DEF_IINCHIP_DBG__
  135 + printf("accept()\r\n");
  136 +#endif
  137 + if (IINCHIP_READ(Sn_SR(s)) == SOCK_LISTEN)
  138 + {
  139 + while( IINCHIP_READ(Sn_SR(s)) != SOCK_ESTABLISHED )
  140 + ret = 1;
  141 +#ifdef __DEF_IINCHIP_DBG__
  142 + printf("status = %x\r\n",IINCHIP_READ(Sn_SR(s)));
  143 +#endif
  144 + }
  145 + else
  146 + {
  147 + ret = 0;
  148 +#ifdef __DEF_IINCHIP_DBG__
  149 + printf("Fail[not listening]\r\n");
  150 +#endif
  151 + }
  152 + return ret;
  153 +}
  154 +
  155 +
  156 +/**
  157 +@brief This function established the connection for the channel in Active (client) mode.
  158 + This function waits for the until the connection is established.
  159 +
  160 +@return 1 for success else 0.
  161 +*/
  162 +uint8 connect(SOCKET s, uint8 * addr, uint16 port)
  163 +{
  164 + uint8 ret;
  165 +#ifdef __DEF_IINCHIP_DBG__
  166 + printf("connect()\r\n");
  167 +#endif
  168 + if
  169 + (
  170 + ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
  171 + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
  172 + (port == 0x00)
  173 + )
  174 + {
  175 + ret = 0;
  176 +#ifdef __DEF_IINCHIP_DBG__
  177 + printf("Fail[invalid ip,port]\r\n");
  178 +#endif
  179 + }
  180 + else
  181 + {
  182 + ret = 1;
  183 + // set destination IP
  184 + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
  185 + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
  186 + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
  187 + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
  188 + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
  189 + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));
  190 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_CONNECT);
  191 + /* m2008.01 [bj] : wait for completion */
  192 + while ( IINCHIP_READ(Sn_CR(s)) ) ;
  193 +
  194 + }
  195 +
  196 + return ret;
  197 +}
  198 +
  199 +
  200 +
  201 +/**
  202 +@brief This function used for disconnect the socket and parameter is "s" which represent the socket number
  203 +@return 1 for success else 0.
  204 +*/
  205 +void disconnect(SOCKET s)
  206 +{
  207 +#ifdef __DEF_IINCHIP_DBG__
  208 + printf("disconnect()\r\n");
  209 +#endif
  210 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_DISCON);
  211 +
  212 + /* +20071122[chungs]:wait to process the command... */
  213 + while( IINCHIP_READ(Sn_CR(s)) )
  214 + ;
  215 + /* ------- */
  216 +}
  217 +
  218 +
  219 +/**
  220 +@brief This function used to send the data in TCP mode
  221 +@return 1 for success else 0.
  222 +*/
  223 +uint16 send(
  224 + SOCKET s, /**< the socket index */
  225 + const uint8 * buf, /**< a pointer to data */
  226 + uint16 len /**< the data size to be send */
  227 + )
  228 +{
  229 + uint8 status=0;
  230 + uint16 ret=0;
  231 + uint16 freesize=0;
  232 +#ifdef __DEF_IINCHIP_DBG__
  233 + printf("send()\r\n");
  234 +#endif
  235 +
  236 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  237 + else ret = len;
  238 +
  239 + // if freebuf is available, start.
  240 + do
  241 + {
  242 + freesize = getSn_TX_FSR(s);
  243 + status = IINCHIP_READ(Sn_SR(s));
  244 + if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT))
  245 + {
  246 +#ifdef __DEF_IINCHIP_DBG__
  247 + printf("socket %d freesize(%d) empty or error\r\n", s, freesize);
  248 +#endif
  249 + ret = 0;
  250 + break;
  251 + }
  252 + } while (freesize < ret);
  253 +
  254 + // copy data
  255 + send_data_processing(s, (uint8 *)buf, ret);
  256 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  257 +
  258 + /* +20071122[chungs]:wait to process the command... */
  259 + while( IINCHIP_READ(Sn_CR(s)) )
  260 + ;
  261 + /* ------- */
  262 +
  263 +/* +2008.01 bj */
  264 +#ifdef __DEF_IINCHIP_INT__
  265 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  266 +#else
  267 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  268 +#endif
  269 + {
  270 + /* m2008.01 [bj] : reduce code */
  271 + if ( IINCHIP_READ(Sn_SR(s)) == SOCK_CLOSED )
  272 + {
  273 +#ifdef __DEF_IINCHIP_DBG__
  274 + printf("SOCK_CLOSED.\r\n");
  275 +#endif
  276 + close(s);
  277 + return 0;
  278 + }
  279 + }
  280 +/* +2008.01 bj */
  281 +#ifdef __DEF_IINCHIP_INT__
  282 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  283 +#else
  284 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  285 +#endif
  286 + return ret;
  287 +}
  288 +
  289 +
  290 +/**
  291 +@brief This function is an application I/F function which is used to receive the data in TCP mode.
  292 + It continues to wait for data as much as the application wants to receive.
  293 +
  294 +@return received data size for success else -1.
  295 +*/
  296 +int16 recv(
  297 + SOCKET s, /**< socket index */
  298 + uint8 * buf, /**< a pointer to copy the data to be received */
  299 + uint16 len /**< the data size to be read */
  300 + )
  301 +{
  302 + uint16 ret=0;
  303 + if( IINCHIP_READ(Sn_SR(s)) != SOCK_ESTABLISHED ){
  304 + printf("Bad status = %02x\n",IINCHIP_READ(Sn_SR(s)));
  305 + return -1;
  306 + }
  307 + int plen = getSn_RX_RSR(0);
  308 + if( plen <= 0 ) return 0;
  309 +
  310 +#ifdef __DEF_IINCHIP_DBG__
  311 + printf("recv()\r\n");
  312 +#endif
  313 +
  314 + if( plen < len ) len=plen;
  315 + if ( len > 0 )
  316 + {
  317 + recv_data_processing(s, buf, len);
  318 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);
  319 +
  320 + /* +20071122[chungs]:wait to process the command... */
  321 + while( IINCHIP_READ(Sn_CR(s)) )
  322 + ;
  323 + /* ------- */
  324 + ret = len;
  325 + }
  326 + return ret;
  327 +}
  328 +
  329 +
  330 +/**
  331 +@brief This function is an application I/F function which is used to send the data for other then TCP mode.
  332 + Unlike TCP transmission, The peer's destination address and the port is needed.
  333 +
  334 +@return This function return send data size for success else -1.
  335 +*/
  336 +uint16 sendto(
  337 + SOCKET s, /**< socket index */
  338 + const uint8 * buf, /**< a pointer to the data */
  339 + uint16 len, /**< the data size to send */
  340 + uint8 * addr, /**< the peer's Destination IP address */
  341 + uint16 port /**< the peer's destination port number */
  342 + )
  343 +{
  344 +// uint8 status=0;
  345 +// uint8 isr=0;
  346 + uint16 ret=0;
  347 +
  348 +#ifdef __DEF_IINCHIP_DBG__
  349 + printf("sendto()\r\n");
  350 +#endif
  351 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  352 + else ret = len;
  353 +
  354 + if
  355 + (
  356 + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
  357 + ((port == 0x00)) ||(ret == 0)
  358 + )
  359 + {
  360 + /* +2008.01 [bj] : added return value */
  361 + ret = 0;
  362 +#ifdef __DEF_IINCHIP_DBG__
  363 + printf("%d Fail[%.2x.%.2x.%.2x.%.2x, %.d, %d]\r\n",s, addr[0], addr[1], addr[2], addr[3] , port, len);
  364 + printf("Fail[invalid ip,port]\r\n");
  365 +#endif
  366 + }
  367 + else
  368 + {
  369 + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
  370 + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
  371 + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
  372 + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
  373 + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
  374 + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));
  375 +
  376 + // copy data
  377 + send_data_processing(s, (uint8 *)buf, ret);
  378 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  379 +
  380 + /* +20071122[chungs]:wait to process the command... */
  381 + while( IINCHIP_READ(Sn_CR(s)) )
  382 + ;
  383 + /* ------- */
  384 +
  385 +/* +2008.01 bj */
  386 +#ifdef __DEF_IINCHIP_INT__
  387 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  388 +#else
  389 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  390 +#endif
  391 + {
  392 +#ifdef __DEF_IINCHIP_INT__
  393 + if (getISR(s) & Sn_IR_TIMEOUT)
  394 +#else
  395 + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)
  396 +#endif
  397 + {
  398 +#ifdef __DEF_IINCHIP_DBG__
  399 + printf("send fail.\r\n");
  400 +#endif
  401 +/* +2008.01 [bj]: clear interrupt */
  402 +#ifdef __DEF_IINCHIP_INT__
  403 + putISR(s, getISR(s) & ~(Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
  404 +#else
  405 + IINCHIP_WRITE(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
  406 +#endif
  407 + return 0;
  408 + }
  409 + }
  410 +
  411 +/* +2008.01 bj */
  412 +#ifdef __DEF_IINCHIP_INT__
  413 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  414 +#else
  415 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  416 +#endif
  417 +
  418 + }
  419 + return ret;
  420 +}
  421 +
  422 +
  423 +/**
  424 +@brief This function is an application I/F function which is used to receive the data in other then
  425 + TCP mode. This function is used to receive UDP, IP_RAW and MAC_RAW mode, and handle the header as well.
  426 +
  427 +@return This function return received data size for success else -1.
  428 +*/
  429 +uint16 recvfrom(
  430 + SOCKET s, /**< the socket number */
  431 + uint8 * buf, /**< a pointer to copy the data to be received */
  432 + uint16 len, /**< the data size to read */
  433 + uint8 * addr, /**< a pointer to store the peer's IP address */
  434 + uint16 *port /**< a pointer to store the peer's port number. */
  435 + )
  436 +{
  437 + uint8 head[8];
  438 + uint16 data_len=0;
  439 + uint16 plen = getSn_RX_RSR(s);
  440 + uint16 ptr=0;
  441 +
  442 + if(plen <=0 ) return 0;
  443 +
  444 +#ifdef __DEF_IINCHIP_DBG__
  445 + printf("recvfrom()\r\n");
  446 +#endif
  447 +
  448 + plen = getSn_RX_RSR(s);
  449 + if ( len > 0 )
  450 + {
  451 + ptr = IINCHIP_READ(Sn_RX_RD0(s));
  452 + ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD0(s) + 1);
  453 +
  454 +#ifdef __DEF_IINCHIP_DBG__
  455 + printf("ISR_RX: rd_ptr : %.4x size=%d\r\n", ptr, plen);
  456 +#endif
  457 + switch (IINCHIP_READ(Sn_MR(s)) & 0x07)
  458 + {
  459 + case Sn_MR_UDP :
  460 + read_data(s, (uint8 *)ptr, head, 0x08);
  461 + ptr += 8;
  462 + // read peer's IP address, port number.
  463 + addr[0] = head[0];
  464 + addr[1] = head[1];
  465 + addr[2] = head[2];
  466 + addr[3] = head[3];
  467 + *port = head[4];
  468 + *port = (*port << 8) + head[5];
  469 + data_len = head[6];
  470 + data_len = (data_len << 8) + head[7];
  471 +
  472 +#ifdef __DEF_IINCHIP_DBG__
  473 + printf("UDP msg #%d arrived\r\n",data_len);
  474 + printf("source Port : %u\r\n", *port);
  475 + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);
  476 +#endif
  477 +
  478 + read_data(s, (uint8 *)ptr, buf, data_len); // data copy.
  479 + ptr += data_len;
  480 +
  481 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  482 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  483 + break;
  484 +
  485 + case Sn_MR_IPRAW :
  486 + read_data(s, (uint8 *)ptr, head, 0x06);
  487 + ptr += 6;
  488 +
  489 + addr[0] = head[0];
  490 + addr[1] = head[1];
  491 + addr[2] = head[2];
  492 + addr[3] = head[3];
  493 + data_len = head[4];
  494 + data_len = (data_len << 8) + head[5];
  495 +
  496 +#ifdef __DEF_IINCHIP_DBG__
  497 + printf("IP RAW msg arrived\r\n");
  498 + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);
  499 +#endif
  500 + read_data(s, (uint8 *)ptr, buf, data_len); // data copy.
  501 + ptr += data_len;
  502 +
  503 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  504 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  505 + break;
  506 + case Sn_MR_MACRAW :
  507 + read_data(s,(uint8*)ptr,head,2);
  508 + ptr+=2;
  509 + data_len = head[0];
  510 + data_len = (data_len<<8) + head[1] - 2;
  511 +
  512 + read_data(s,(uint8*) ptr,buf,data_len);
  513 + ptr += data_len;
  514 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  515 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  516 +
  517 +#ifdef __DEF_IINCHIP_DGB__
  518 + printf("MAC RAW msg arrived\r\n");
  519 + printf("dest mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
  520 + printf("src mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]);
  521 + printf("type =%.2X%.2X\r\n",buf[12],buf[13]);
  522 +#endif
  523 + break;
  524 +
  525 + default :
  526 + break;
  527 + }
  528 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);
  529 +
  530 + /* +20071122[chungs]:wait to process the command... */
  531 + while( IINCHIP_READ(Sn_CR(s)) )
  532 + ;
  533 + /* ------- */
  534 + }
  535 +#ifdef __DEF_IINCHIP_DBG__
  536 + printf("recvfrom() end ..\r\n");
  537 +#endif
  538 + return data_len;
  539 +}
  540 +
  541 +
  542 +uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len)
  543 +{
  544 + uint8 status=0;
  545 +// uint8 isr=0;
  546 + uint16 ret=0;
  547 +
  548 +#ifdef __DEF_IINCHIP_DBG__
  549 + printf("igmpsend()\r\n");
  550 +#endif
  551 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  552 + else ret = len;
  553 +
  554 + if (ret == 0)
  555 + {
  556 + ;
  557 +#ifdef __DEF_IINCHIP_DBG__
  558 + printf("%d Fail[%d]\r\n",len,ret);
  559 +#endif
  560 + }
  561 + else
  562 + {
  563 + // copy data
  564 + send_data_processing(s, (uint8 *)buf, ret);
  565 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  566 +/* +2008.01 bj */
  567 + while( IINCHIP_READ(Sn_CR(s)) )
  568 + ;
  569 +/* ------- */
  570 +
  571 +/* +2008.01 bj */
  572 +#ifdef __DEF_IINCHIP_INT__
  573 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  574 +#else
  575 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  576 +#endif
  577 + {
  578 + status = IINCHIP_READ(Sn_SR(s));
  579 +#ifdef __DEF_IINCHIP_INT__
  580 + if (getISR(s) & Sn_IR_TIMEOUT)
  581 +#else
  582 + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)
  583 +#endif
  584 + {
  585 +#ifdef __DEF_IINCHIP_DBG__
  586 + printf("igmpsend fail.\r\n");
  587 +#endif
  588 + /* in case of igmp, if send fails, then socket closed */
  589 + /* if you want change, remove this code. */
  590 + close(s);
  591 + /* ----- */
  592 +
  593 + return 0;
  594 + }
  595 + }
  596 +
  597 +/* +2008.01 bj */
  598 +#ifdef __DEF_IINCHIP_INT__
  599 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  600 +#else
  601 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  602 +#endif
  603 + }
  604 + return ret;
  605 +}
  606 +
Tangible/socket.h 100755 → 100644
1 -/*  
2 -*  
3 -@file socket.h  
4 -@brief define function of socket API  
5 -*  
6 -*/  
7 -  
8 -#ifndef _SOCKET_H_  
9 -#define _SOCKET_H_  
10 -  
11 -extern uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag); // Opens a socket(TCP or UDP or IP_RAW mode)  
12 -extern void close(SOCKET s); // Close socket  
13 -  
14 -  
15 -extern uint8 connect(SOCKET s, uint8 * addr, uint16 port); // Establish TCP connection (Active connection)  
16 -extern void disconnect(SOCKET s); // Disconnect the connection  
17 -  
18 -extern uint8 listen(SOCKET s); // Establish TCP connection (Passive connection)  
19 -extern uint16 send(SOCKET s, const uint8 * buf, uint16 len); // Send data (TCP)  
20 -extern uint16 recv(SOCKET s, uint8 * buf, uint16 len); // Receive data (TCP)  
21 -  
22 -  
23 -extern uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port); // Send data (UDP/IP RAW)  
24 -extern uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port); // Receive data (UDP/IP RAW)  
25 -  
26 -extern uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len);  
27 -#endif  
28 -/* _SOCKET_H_ */ 1 +/*
  2 +*
  3 +@file socket.h
  4 +@brief define function of socket API
  5 +*
  6 +*/
  7 +
  8 +#ifndef _SOCKET_H_
  9 +#define _SOCKET_H_
  10 +
  11 +extern uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag); // Opens a socket(TCP or UDP or IP_RAW mode)
  12 +extern void close(SOCKET s); // Close socket
  13 +extern uint8 connect(SOCKET s, uint8 * addr, uint16 port); // Establish TCP connection (Active connection)
  14 +extern void disconnect(SOCKET s); // disconnect the connection
  15 +extern uint8 listen(SOCKET s); // Establish TCP connection (Passive connection)
  16 +extern uint8 accept(SOCKET s); // Wait for client (Passive connection)
  17 +extern uint16 send(SOCKET s, const uint8 * buf, uint16 len); // Send data (TCP)
  18 +extern int16 recv(SOCKET s, uint8 * buf, uint16 len); // Receive data (TCP)
  19 +extern uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port); // Send data (UDP/IP RAW)
  20 +extern uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port); // Receive data (UDP/IP RAW)
  21 +
  22 +extern uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len);
  23 +#endif
  24 +/* _SOCKET_H_ */
  25 +
  26 +//1110000000010100
Tangible/socket.o
No preview for this file type
Tangible/spi.h 100755 → 100644
Tangible/tangibleInterface
No preview for this file type
Tangible/tangibleInterface.c
@@ -12,48 +12,62 @@ @@ -12,48 +12,62 @@
12 12
13 int main(void) 13 int main(void)
14 { 14 {
  15 + uint8 com[4],per[14];
15 uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD}; 16 uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
16 uint8_t ip[IPV4_SIZE] = {172,26,145,205}; 17 uint8_t ip[IPV4_SIZE] = {172,26,145,205};
17 uint8_t gateway[4] = {172,26,145,254}; 18 uint8_t gateway[4] = {172,26,145,254};
18 uint8_t mask[4] = {255,255,255,0}; 19 uint8_t mask[4] = {255,255,255,0};
19 -  
20 - const char * answer = "I'm ok";  
21 -  
22 - uint8 buf[16]; // Message à stocker.  
23 - uint8_t addr[IPV4_SIZE]; // Adresse source du message reçu.  
24 - uint16_t port; // Port source du message reçu. 20 + int isUDP = 0;
  21 + const char answer [16] = "I'm ok";
25 22
  23 + uint8 buf[16];
  24 + uint8_t addr[IPV4_SIZE];
  25 + uint16_t port;
  26 + uint16 datasize;
  27 + uint8_t addrpifou[IPV4_SIZE]={172,26,145,35};
  28 + uint16 size;
26 SOCKET sUDP=0; 29 SOCKET sUDP=0;
27 SOCKET sTCP=1; 30 SOCKET sTCP=1;
28 - init_printf(); // On active la liaison série (9600 BD).  
29 - // On assimile une adresse MAC et IP au shield + Indication de la passerelle et du masque de sous-réseau. 31 + init_printf();
30 ethernet_init(mac,ip,gateway,mask); 32 ethernet_init(mac,ip,gateway,mask);
31 -  
32 - if (!socket(sTCP,Sn_MR_TCP,2020,0))  
33 - {  
34 - return -1;  
35 - }  
36 - while(1)  
37 - {  
38 - printf("BOUCLE\n");  
39 - if(listen(sTCP)) //Repondre je vais bien à un client 33 + if (!socket(sUDP,Sn_MR_UDP,2020,0))
  34 + {
  35 + return -1;
  36 + }
  37 + if (!socket(sTCP,Sn_MR_TCP,2020,0))
  38 + {
  39 + return -1;
  40 + }
  41 + while(1)
  42 + {
  43 + if((datasize=recvfrom(sUDP,buf,sizeof(buf),addr,&port)) == 17)
40 { 44 {
41 - send(sTCP,(uint8 *)answer,sizeof(answer));  
42 - }  
43 -  
44 - }  
45 - close(sTCP);  
46 - close(sUDP);  
47 - return 0; 45 + com[0]=buf[0];
  46 + com[1]=buf[1];
  47 + com[2]=buf[2];
  48 + com[3]='\0';
  49 + per[0]=buf[3];
  50 + per[1]=buf[4];
  51 + per[2]=buf[5];
  52 + per[3]=buf[6];
  53 + per[4]=buf[7];
  54 + per[5]=buf[8];
  55 + per[6]=buf[9];
  56 + per[7]=buf[10];
  57 + per[8]=buf[11];
  58 + per[9]=buf[12];
  59 + per[10]=buf[13];
  60 + per[11]=buf[14];
  61 + per[12]=buf[15];
  62 + per[13]='\0';
  63 + printf("Com : %s\n",com);
  64 + printf("Per : %s\n",per);
  65 + }
  66 + }
  67 + printf("RESET\n");
  68 + close(sTCP);
  69 + close(sUDP);
  70 + return 0;
48 } 71 }
49 -  
50 - /* if (recvfrom(sUDP,buf,sizeof(buf),addr,&port) != -1) //Reception via UDP (infos de la sonde) */  
51 - /* { */  
52 - /* } */  
53 -  
54 -  
55 72
56 - /* if (!socket(sUDP,Sn_MR_UDP,2020,0)) */  
57 - /* { */  
58 - /* return -1; */  
59 - /* } */ 73 +//send(sTCP,(uint8*)answer, (uint16)sizeof(answer));
Tangible/tangibleInterface.hex
@@ -5,18 +5,18 @@ @@ -5,18 +5,18 @@
5 :100040000C9451000C9451000C9451000C945100EC 5 :100040000C9451000C9451000C9451000C945100EC
6 :100050000C9451000C9451000C9451000C945100DC 6 :100050000C9451000C9451000C9451000C945100DC
7 :100060000C9451000C94510011241FBECFEFD8E026 7 :100060000C9451000C94510011241FBECFEFD8E026
8 -:10007000DEBFCDBF13E0A0E0B1E0E4E1FEE102C0ED  
9 -:1000800005900D92A830B107D9F723E0A8E0B3E0BE  
10 -:1000900001C01D92A434B207E1F70E948E0B0C94AC  
11 -:1000A000080F0C940000E82FF0E0E85CFC4F808122  
12 -:1000B0000895E82FF0E0E85CFC4F60830895E82F96  
13 -:1000C000F0E0EE0FFF1FE85EFC4F80819181089504  
14 -:1000D000E82FF0E0EE0FFF1FE05EFC4F8081918182  
15 -:1000E0000895E82FF0E0EE0FFF1FE85DFC4F8081E0  
16 -:1000F00091810895E82FF0E0EE0FFF1FE05DFC4FC7  
17 -:10010000808191810895E82FF0E0EE0FFF1FE85FF6 8 +:10007000DEBFCDBF13E0A0E0B1E0EEEBFFE102C0D8
  9 +:1000800005900D92A836B107D9F723E0A8E6B3E0B2
  10 +:1000900001C01D92A43AB207E1F70E94050C0C942E
  11 +:1000A000DD0F0C940000E82FF0E0E856FC4F808153
  12 +:1000B0000895E82FF0E0E856FC4F60830895E82F9C
  13 +:1000C000F0E0EE0FFF1FE858FC4F8081918108950A
  14 +:1000D000E82FF0E0EE0FFF1FE058FC4F8081918188
  15 +:1000E0000895E82FF0E0EE0FFF1FE857FC4F8081E6
  16 +:1000F00091810895E82FF0E0EE0FFF1FE057FC4FCD
  17 +:10010000808191810895E82FF0E0EE0FFF1FE859FC
18 :10011000FC4F808191810895E82FF0E0EE0FFF1FE2 18 :10011000FC4F808191810895E82FF0E0EE0FFF1FE2
19 -:10012000E05FFC4F80819181089524B12C6224B955 19 +:10012000E059FC4F80819181089524B12C6224B95B
20 :100130002A9A25B1277D25B920E52CBD2A9820EFE4 20 :100130002A9A25B1277D25B920E52CBD2A9820EFE4
21 :100140002EBD0DB407FEFDCF9EBD0DB407FEFDCF45 21 :100140002EBD0DB407FEFDCF9EBD0DB407FEFDCF45
22 :100150008EBD0DB407FEFDCF6EBD0DB407FEFDCF05 22 :100150008EBD0DB407FEFDCF6EBD0DB407FEFDCF05
@@ -37,13 +37,13 @@ @@ -37,13 +37,13 @@
37 :10024000CA0108952F923F924F925F926F927F92D0 37 :10024000CA0108952F923F924F925F926F927F92D0
38 :100250008F929F92AF92BF92CF92DF92EF92FF92D6 38 :100250008F929F92AF92BF92CF92DF92EF92FF92D6
39 :100260000F931F93CF93DF93CDB7DEB728970FB6C9 39 :100260000F931F93CF93DF93CDB7DEB728970FB6C9
40 -:10027000F894DEBF0FBECDBF282E362E8DE291E062  
41 -:100280000E94230C622D8BE190E00E949500632D6B  
42 -:100290008AE190E00E94950080E090E49093110341  
43 -:1002A0008093100380E090E6909309038093080305  
44 -:1002B00088E391E00E94230C88E0882E83E0982E4A  
45 -:1002C00090E1A92E93E0B92E20E233E038872F8306  
46 -:1002D00008E113E028E2C22E23E0D22E30E3E32E21 40 +:10027000F894DEBF0FBECDBF282E362E88E291E067
  41 +:100280000E94F80C622D8BE190E00E949500632D96
  42 +:100290008AE190E00E94950080E090E490937103E1
  43 +:1002A0008093700380E090E69093690380936803E5
  44 +:1002B00083E391E00E94F80C88E6882E83E0982E74
  45 +:1002C00090E7A92E93E0B92E20E833E038872F83FA
  46 +:1002D00008E713E028E8C22E23E0D22E30E9E32E0F
47 :1002E00033E0F32E1A821982412C512C1C821B827E 47 :1002E00033E0F32E1A821982412C512C1C821B827E
48 :1002F000612C712C222D30E03E832D83232C312C58 48 :1002F000612C712C222D30E03E832D83232C312C58
49 :10030000AF81B88511961C921E92F801118210825D 49 :10030000AF81B88511961C921E92F801118210825D
@@ -70,7 +70,7 @@ @@ -70,7 +70,7 @@
70 :100450004D935C93F40160817181F2E08F0E911CE9 70 :100450004D935C93F40160817181F2E08F0E911CE9
71 :10046000D5014C9111965C91B2E0AB0EB11C3F935B 71 :10046000D5014C9111965C91B2E0AB0EB11C3F935B
72 :100470002F939F938F937F936F935F934F937F926D 72 :100470002F939F938F937F936F935F934F937F926D
73 -:100480006F92A1E6B1E0BF93AF930E940D0CFFEF16 73 +:100480006F92ACE5B1E0BF93AF930E94E20CFFEF37
74 :100490006F1A7F0A29813A812E5F3F4F3A83298361 74 :100490006F1A7F0A29813A812E5F3F4F3A83298361
75 :1004A00032E0C30ED11C42E0E40EF11C0FB6F8940A 75 :1004A00032E0C30ED11C42E0E40EF11C0FB6F8940A
76 :1004B000DEBF0FBECDBF94E06916710409F020CFF6 76 :1004B000DEBF0FBECDBF94E06916710409F020CFF6
@@ -164,9 +164,9 @@ @@ -164,9 +164,9 @@
164 :100A3000080F111D0C151D0511F7C801DF91CF918D 164 :100A3000080F111D0C151D0511F7C801DF91CF918D
165 :100A40001F910F91FF90EF90DF90CF900895CF927C 165 :100A40001F910F91FF90EF90DF90CF900895CF927C
166 :100A5000DF92EF92FF920F931F93CF93DF93E82FD4 166 :100A5000DF92EF92FF920F931F93CF93DF93E82FD4
167 -:100A6000F0E0EE0FFF1FDF01A05DBC4F8D919C9168  
168 -:100A7000DA01A823B923EF01C05FDC4FE880F980D9  
169 -:100A8000CD018E0D9F1DE05EFC4FC081D181AD0177 167 +:100A6000F0E0EE0FFF1FDF01A057BC4F8D919C916E
  168 +:100A7000DA01A823B923EF01C059DC4FE880F980DF
  169 +:100A8000CD018E0D9F1DE058FC4FC081D181AD017D
170 :100A9000420F531FC417D50778F489016B01CA1B95 170 :100A9000420F531FC417D50778F489016B01CA1B95
171 :100AA000DB0BAE010E94D100A8014C1B5D0BB6010F 171 :100AA000DB0BAE010E94D100A8014C1B5D0BB6010F
172 :100AB0006C0F7D1FC70101C0A901DF91CF911F916C 172 :100AB0006C0F7D1FC70101C0A901DF91CF911F916C
@@ -181,9 +181,9 @@ @@ -181,9 +181,9 @@
181 :100B40000F90DF91CF911F910F91FF90EF90DF9069 181 :100B40000F90DF91CF911F910F91FF90EF90DF9069
182 :100B5000CF90BF909F908F900C949500AF92BF92D2 182 :100B5000CF90BF909F908F900C949500AF92BF92D2
183 :100B6000CF92DF92EF92FF920F931F93CF93DF9379 183 :100B6000CF92DF92EF92FF920F931F93CF93DF9379
184 -:100B7000DA01A901E82FF0E0EE0FFF1FEF01C85DD9  
185 -:100B8000DC4F888199816B01C822D922EF01C85FAF  
186 -:100B9000DC4FE880F980C6018E0D9F1DE85EFC4F9A 184 +:100B7000DA01A901E82FF0E0EE0FFF1FEF01C857DF
  185 +:100B8000DC4F888199816B01C822D922EF01C859B5
  186 +:100B9000DC4FE880F980C6018E0D9F1DE858FC4FA0
187 :100BA000C081D1819601240F351FC217D30780F46D 187 :100BA000C081D1819601240F351FC217D30780F46D
188 :100BB0008A015D01CC19DD09AE01BD010E94F90079 188 :100BB0008A015D01CC19DD09AE01BD010E94F90079
189 :100BC000A8014C1B5D0BB5016C0F7D1FC70101C057 189 :100BC000A8014C1B5D0BB5016C0F7D1FC70101C057
@@ -193,324 +193,356 @@ @@ -193,324 +193,356 @@
193 :100C0000982E6B017A01082F10E00C5F1F4F102FF8 193 :100C0000982E6B017A01082F10E00C5F1F4F102FF8
194 :100C10000027580188E2A80EB11CC5010E94B3004C 194 :100C10000027580188E2A80EB11CC5010E94B3004C
195 :100C2000C82FD0E0DC2FCC27075D1F4FC8010E94E2 195 :100C2000C82FD0E0DC2FCC27075D1F4FC8010E94E2
196 -:100C3000B300C80FD11DDF93CF9382E891E09F935B  
197 -:100C40008F930E940D0C9701A601BE01892D0E9471 196 +:100C3000B300C80FD11DDF93CF938DE791E09F9351
  197 +:100C40008F930E94E20C9701A601BE01892D0E949C
198 :100C5000AE05CE0DDF1D6D2FC5010E9495000F90D2 198 :100C5000AE05CE0DDF1D6D2FC5010E9495000F90D2
199 :100C60000F900F900F906C2FC801DF91CF911F91C3 199 :100C60000F900F900F906C2FC801DF91CF911F91C3
200 :100C70000F91FF90EF90DF90CF90BF90AF909F903B 200 :100C70000F91FF90EF90DF90CF90BF90AF909F903B
201 -:100C80000C9495000F931F93CF93DF93C82F8AE99D  
202 -:100C900091E00E94230CD0E02496DC2FCC278E011B 201 +:100C80000C9495000F931F93CF93DF93C82F85E9A2
  202 +:100C900091E00E94F80CD0E02496DC2FCC278E0146
203 :100CA0000F5F1F4F60E1C8010E949500C8010E94BC 203 :100CA0000F5F1F4F60E1C8010E949500C8010E94BC
204 :100CB000B3008111FBCF6FEFCE010296DF91CF9190 204 :100CB000B3008111FBCF6FEFCE010296DF91CF9190
205 :100CC0001F910F910C949500CF92DF92EF92FF92BB 205 :100CC0001F910F910C949500CF92DF92EF92FF92BB
206 :100CD0000F931F93CF93DF93C82FC62E8A01D22E76 206 :100CD0000F931F93CF93DF93C82FC62E8A01D22E76
207 -:100CE00083EA91E00E94230C8FEF8C0DEC2EF12C07 207 +:100CE0008EE991E00E94F80C8FEF8C0DEC2EF12C28
208 :100CF0008530D0F58C2F0E944206E7012496DC2F28 208 :100CF0008530D0F58C2F0E944206E7012496DC2F28
209 :100D0000CC276C2D6D29CE010E949500CE01049652 209 :100D0000CC276C2D6D29CE010E949500CE01049652
210 :100D10009E012B5F3F4F69010115110529F0612FDD 210 :100D10009E012B5F3F4F69010115110529F0612FDD
211 -:100D20000E949500602F0FC020913C0330913D033D  
212 -:100D30002F5F3F4F30933D0320933C03632F0E946E  
213 -:100D4000950060913C03C6010E9495008E010F5FE3 211 +:100D20000E949500602F0FC020919C0330919D037D
  212 +:100D30002F5F3F4F30939D0320939C03632F0E94AE
  213 +:100D4000950060919C03C6010E9495008E010F5F83
214 :100D50001F4F61E0C8010E949500C8010E94B300C6 214 :100D50001F4F61E0C8010E949500C8010E94B300C6
215 :100D60008111FBCF11E001C010E0E7012496DC2FD8 215 :100D60008111FBCF11E001C010E0E7012496DC2FD8
216 :100D7000CC27CE010E94B300082FCE0103960E941B 216 :100D7000CC27CE010E94B300082FCE0103960E941B
217 -:100D8000B3001F920F931F928F938DEA91E09F9370  
218 -:100D90008F930E940D0C0F900F900F900F900F905B 217 +:100D8000B3001F920F931F928F9388EA91E09F9375
  218 +:100D90008F930E94E20C0F900F900F900F900F9086
219 :100DA0000F90812FDF91CF911F910F91FF90EF90C6 219 :100DA0000F90812FDF91CF911F910F91FF90EF90C6
220 -:100DB000DF90CF900895CF93DF93C82F8EEC91E012  
221 -:100DC0000E94230CD0E02496DC2FCC27CE01039682  
222 -:100DD0000E94B300833161F4219662E0CE010E944B  
223 -:100DE0009500CE010E94B3008111FBCF81E005C0C8  
224 -:100DF00088ED91E00E94230C80E0DF91CF9108956F  
225 -:100E0000EF92FF920F931F93CF93DF93C82F8B0125  
226 -:100E10007A0182EF91E00E94230CF80160816F3F1C  
227 -:100E200051F481818F3F99F482818F3F81F48381D6  
228 -:100E30008F3F69F40FC061110AC0F80181818111EF  
229 -:100E400006C08281811103C08381882319F0E114D7  
230 -:100E5000F10431F488ED91E00E94230C80E02FC072  
231 -:100E6000D0E02496DC2FCC27CE010C960E94950072  
232 -:100E7000F8016181CE010D960E949500F801628112  
233 -:100E8000CE010E960E949500F8016381CE010F9667  
234 -:100E90000E9495006F2DCE0140960E9495006E2D08  
235 -:100EA000CE0141960E949500219664E0CE010E94F9  
236 -:100EB0009500CE010E94B3008111FBCF81E0DF914C  
237 -:100EC000CF911F910F91FF90EF900895CF93DF93F3  
238 -:100ED000C82F8FEE91E00E94230CD0E0DC2FCC27AE  
239 -:100EE000CF5FDB4F68E0CE010E949500CE010E94EB  
240 -:100EF000B3008111FBCFDF91CF9108955F926F9284  
241 -:100F00007F928F929F92AF92BF92CF92DF92EF9299  
242 -:100F1000FF920F931F93CF93DF93582E3B018A01CB  
243 -:100F200082EE92E00E94230C852D0E9468008017BB  
244 -:100F3000910720F4852D0E9468008C01C52CD12CCE  
245 -:100F4000E6012496DC2FCC275E0183E0A80EB11CBD  
246 -:100F50009DEF892E91E0992E852D0E94AF047C0192  
247 -:100F6000C5010E94B300873111F08C3191F4FF92DA  
248 -:100F7000EF92DF92CF929F928F920E940D0C0F9072  
249 -:100F80000F900F900F900F900F90E016F10620F346  
250 -:100F900002C000E010E0A801B301852D0E946705A2  
251 -:100FA0007E018FEFE81AF80A60E2C7010E949500FF  
252 -:100FB000C7010E94B3008111FBCF2296CE010E948F  
253 -:100FC000B30084FD0FC0C5010E94B3008111F6CFAC  
254 -:100FD00085E292E00E94230C852D0E94420680E06B  
255 -:100FE00090E005C060E1CE010E949500C801DF914C  
256 -:100FF000CF911F910F91FF90EF90DF90CF90BF9016  
257 -:10100000AF909F908F907F906F905F900895EF9238  
258 -:10101000FF920F931F93CF93DF9300D0CDB7DEB72E  
259 -:10102000F82E8A0183E392E069837A830E94230C7D  
260 -:1010300069817A8101151105A9F0A8018F2D0E94FF  
261 -:10104000F5058F2D90E0982F88279C012F5F3B4F4F  
262 -:10105000790160E4C9010E949500C7010E94B300B4  
263 -:101060008111FBCFC8010F900F90DF91CF911F919D  
264 -:101070000F91FF90EF9008958F929F92BF92CF9221  
265 -:10108000DF92EF92FF920F931F93CF93DF93B82ECF  
266 -:101090004B01EA0179018BE392E00E94230C8B2D36  
267 -:1010A0000E9468008C179D0728F48B2D0E94680011  
268 -:1010B0006C0101C06E01F7016081611109C081817D  
269 -:1010C000811106C08281811103C08381882331F0A0  
270 -:1010D0000115110519F0C114D10429F5DF93CF933F  
271 -:1010E0001F930F93F70183811F928F9382811F9229  
272 -:1010F0008F9381811F928F931F926F931F92BF9244  
273 -:1011000085E492E09F938F930E940D0C88ED91E00F  
274 -:101110000E94230C8DB79EB740960FB6F8949EBFE1  
275 -:101120000FBE8DBF49C0CB2DD0E02496DC2FCC273D  
276 -:10113000CE010C960E949500F7016181CE010D96BB  
277 -:101140000E949500F7016281CE010E960E949500E3  
278 -:10115000F7016381CE010F960E949500612FCE01A9  
279 -:1011600040960E949500602FCE0141960E94950006  
280 -:10117000A601B4018B2D0E9467058E010F5F1F4FE2  
281 -:1011800060E2C8010E949500C8010E94B30081116D  
282 -:10119000FBCF2296CE010E94B30084FD10C0CE0189  
283 -:1011A0000E94B30083FFF6CF8CEF92E00E94230CE5  
284 -:1011B00068E1CE010E94950080E090E005C060E10A  
285 -:1011C000CE010E949500C601DF91CF911F910F9132  
286 -:1011D000FF90EF90DF90CF90BF909F908F900895F9  
287 -:1011E0002F923F924F925F927F928F929F92AF92F7  
288 -:1011F000BF92CF92DF92EF92FF920F931F93CF9304  
289 -:10120000DF93CDB7DEB72A970FB6F894DEBF0FBED7  
290 -:10121000CDBF782E4B016A0179011A8709878DE6C7  
291 -:1012200092E00E94230CCD2809F40FC1472C512CC9  
292 -:1012300084E0480E511C542C4424520198E2A90E1B  
293 -:10124000B11CC5010E94B300082F10E0102F002729  
294 -:101250006201E9E2CE0ED11CC6010E94B300080F64  
295 -:10126000111D1F930F9382E891E09F938F930E942B  
296 -:101270000D0CC2010E94B3000F900F900F900F90C1  
297 -:101280008770833009F460C0843009F4A7C08230CD  
298 -:1012900009F0CCC028E030E0AE014F5F5F4FB801ED  
299 -:1012A000872D0E94AE051801F8E02F0E311C8981B0  
300 -:1012B000F70180838A8181838B8182838C81838300  
301 -:1012C0008D8190E0982F88272E81820F911DE985CE  
302 -:1012D000FA85918380830F8110E0102F0027888585  
303 -:1012E000080F111D89E792E00E94230CE985FA8519  
304 -:1012F00081818F9380818F938AE892E09F938F936F  
305 -:101300000E940D0CF70183811F928F9382811F929F  
306 -:101310008F9381811F928F9380811F928F938DE98C  
307 -:1013200092E09F938F930E940D0C9801A401B1014C  
308 -:10133000872D0E94AE057101E00EF11E6F2DC501D3  
309 -:101340000E9495006E2D41C026E030E0AE014F5F57  
310 -:101350005F4FB801872D0E94AE05180196E0290E57  
311 -:10136000311C8981F70180838A8181838B8182830B  
312 -:101370008C8183830D8110E0102F00278E81080F50  
313 -:10138000111D87EB92E00E94230CF70183811F92CD  
314 -:101390008F9382811F928F9381811F928F9380817F  
315 -:1013A0001F928F938DE992E09F938F930E940D0C73  
316 -:1013B0009801A401B101872D0E94AE05200E311EB7  
317 -:1013C000632DC5010E949500622DC6010E94950003  
318 -:1013D0000FB6F894DEBF0FBECDBF2AC022E030E0CA  
319 -:1013E000AE014F5F5F4FB801872D0E94AE057801B7  
320 -:1013F00092E0E90EF11C098110E0902F88270A8104  
321 -:1014000010E002501109080F191F9801A401B7013B  
322 -:10141000872D0E94AE05E00EF11E6F2DC5010E94C2  
323 -:1014200095006E2DC6010E94950002C000E010E0FC  
324 -:10143000EFEF4E1A5E0A60E4C2010E949500C201FD  
325 -:101440000E94B3008111FBCF02C000E010E08BECE2  
326 -:1014500092E00E94230CC8012A960FB6F894DEBFD2  
327 -:101460000FBECDBFDF91CF911F910F91FF90EF90F5  
328 -:10147000DF90CF90BF90AF909F908F907F905F90C4  
329 -:101480004F903F902F900895CF92DF92FF920F934D  
330 -:101490001F93CF93DF93F82E6B01EA018EED92E05C  
331 -:1014A0000E94230C8F2D0E9468008C179D0728F442  
332 -:1014B0008F2D0E9468008C0101C08E01011511055D  
333 -:1014C00089F41F921F92DF93CF938AEE92E09F934D  
334 -:1014D0008F930E940D0C0F900F900F900F900F9014  
335 -:1014E0000F9030C0A801B6018F2D0E946705CF2D47  
336 -:1014F000D0E02496DC2FCC276E018FEFC81AD80AD3  
337 -:1015000060E2C6010E949500C6010E94B3008111ED  
338 -:10151000FBCF6E0182E0C80ED11C2396C6010E944B  
339 -:10152000B30084FD12C0CE010E94B300C6010E9428  
340 -:10153000B30083FFF3CF88EF92E00E94230C8F2D3E  
341 -:101540000E94420680E090E005C060E1C6010E9472  
342 -:101550009500C801DF91CF911F910F91FF90DF900F  
343 -:10156000CF900895CF92DF92EF92FF920F931F9347  
344 -:10157000CF93DF936C017B018A01E9010E947E0217  
345 -:1015800065E585E50E942201C6010E94CD02C701E2  
346 -:101590000E94F002C8010E948102CE01DF91CF912A  
347 -:1015A0001F910F91FF90EF90DF90CF900C94B402B9  
348 -:1015B0008093BB0084E88093BC008091BC0087FFCF  
349 -:1015C000FCCF08951092B9008CE08093B80084E0BD  
350 -:1015D0008093BC000895CF9394EA9093BC009091BF  
351 -:1015E000BC0097FFFCCF9091B900987F983011F024  
352 -:1015F00080E015C0C62F880F0E94D80A8091B900DC  
353 -:10160000887F8831A9F78C2F0E94D80A8091B90071  
354 -:10161000887F883269F784E98093BC0081E0CF91AC  
355 -:101620000895CF93DF9394EA9093BC009091BC000F  
356 -:1016300097FFFCCF9091B900987F983011F080E02F  
357 -:101640001EC0C42FD62F880F0E94D80A8091B900DF  
358 -:10165000887F8831A1F78D2F0E94D80A8091B90028  
359 -:10166000887F883261F78C2F0E94D80A8091B90058  
360 -:10167000887F883221F784E98093BC0081E0DF9184  
361 -:10168000CF910895092E000CAA0BBB0B9C01AD0154  
362 -:1016900084E0220F331F441F551F8A95D1F760E065  
363 -:1016A00074E284EF90E00E94EB0B215031093093FB  
364 -:1016B000C5002093C40088E18093C10086E0809338  
365 -:1016C000C200E0ECF0E080818D7F808308959091EE  
366 -:1016D000C00095FFFCCF8093C6000895CF93C82F1C  
367 -:1016E0008A3019F48DE00E94670B8C2F0E94670BE3  
368 -:1016F00080E090E0CF9108958091C00087FFFCCFFB  
369 -:101700008091C600089580E895E20E94420B80E037  
370 -:1017100091E090934103809340030895CF93DF932A  
371 -:10172000CDB7DEB762970FB6F894DEBF0FBECDBF60  
372 -:1017300086E0EEE0F1E0DE01119601900D928A95CF  
373 -:10174000E1F72CEA2F879AE1988B81E9898B3DECB0  
374 -:101750003A8B2B879C878D878EEF8E878FEF8F83B9  
375 -:10176000888789871A860E94830B9E01295F3F4FD5  
376 -:10177000AE01455F5F4FBE01615F7F4FCE010196B5  
377 -:101780000E94B20A20E044EE57E061E081E00E944E  
378 -:1017900064068823A9F084E191E00E94230C81E093  
379 -:1017A0000E94DB068823B9F38BE191E00E94230CB1  
380 -:1017B00042E050E066E271E081E00E947E07EBCFFC  
381 -:1017C0008FEF9FEF62960FB6F894DEBF0FBECDBFCE  
382 -:1017D000DF91CF910895A1E21A2EAA1BBB1BFD0138  
383 -:1017E0000DC0AA1FBB1FEE1FFF1FA217B307E40700  
384 -:1017F000F50720F0A21BB30BE40BF50B661F771F58  
385 -:10180000881F991F1A9469F7609570958095909537  
386 -:101810009B01AC01BD01CF010895A0E0B0E0E3E180  
387 -:10182000FCE00C94E10EAE014B5F5F4FFA01619159  
388 -:101830007191AF0180914003909141030E94530C3C  
389 -:10184000E2E00C94FD0E0F931F93CF93DF93E09192  
390 -:101850004003F0914103238121FF1BC08C01D0E0A4  
391 -:10186000C0E0F80181918F016091400370914103C4  
392 -:10187000DB011896ED91FC911997882331F00995B9  
393 -:10188000892B79F3DFEFCFEFECCF8AE00995892B35  
394 -:1018900019F08FEF9FEF02C08D2F9C2FDF91CF911A  
395 -:1018A0001F910F910895ACE0B0E0E9E5FCE00C94E5  
396 -:1018B000D10E7C016B018A01FC01178216828381A3  
397 -:1018C00081FFBDC1CE0101964C01F7019381F60164  
398 -:1018D00093FD859193FF81916F01882309F4ABC13A  
399 -:1018E000853239F493FD859193FF81916F018532A3  
400 -:1018F00029F4B70190E00E943B0EE7CF512C312C28  
401 -:1019000020E02032A0F48B3269F030F4803259F0BC  
402 -:10191000833269F420612CC08D3239F0803339F480  
403 -:10192000216026C02260246023C0286021C027FDDA  
404 -:1019300027C030ED380F3A3078F426FF06C0FAE0C1  
405 -:101940005F9E300D1124532E13C08AE0389E300D57  
406 -:101950001124332E20620CC08E3221F426FD6BC17F  
407 -:10196000206406C08C3611F4206802C0883641F429  
408 -:10197000F60193FD859193FF81916F018111C1CF94  
409 -:10198000982F9F7D9554933028F40C5F1F4FFFE3F1  
410 -:10199000F9830DC0833631F0833771F0833509F058  
411 -:1019A0005BC022C0F801808189830E5F1F4F4424F1  
412 -:1019B0004394512C540115C03801F2E06F0E711C94  
413 -:1019C000F801A080B18026FF03C0652D70E002C041  
414 -:1019D0006FEF7FEFC5012C870E94300E2C01830131  
415 -:1019E0002C852F77222E17C03801F2E06F0E711C64  
416 -:1019F000F801A080B18026FF03C0652D70E002C011  
417 -:101A00006FEF7FEFC5012C870E94250E2C012C85DE  
418 -:101A10002068222E830123FC1BC0832D90E04816F2  
419 -:101A20005906B0F4B70180E290E00E943B0E3A9470  
420 -:101A3000F4CFF50127FC859127FE81915F01B70165  
421 -:101A400090E00E943B0E31103A94F1E04F1A510899  
422 -:101A50004114510471F7E5C0843611F0893639F527  
423 -:101A6000F80127FF07C060817181828193810C5F3B  
424 -:101A70001F4F08C060817181072E000C880B990BE5  
425 -:101A80000E5F1F4F2F76722E97FF09C0909580959D  
426 -:101A9000709561957F4F8F4F9F4F2068722E2AE07F  
427 -:101AA00030E0A4010E94730EA82EA81844C0853708  
428 -:101AB00029F42F7EB22E2AE030E025C0F22FF97FE4  
429 -:101AC000BF2E8F36C1F018F4883579F0B4C0803756  
430 -:101AD00019F0883721F0AFC02F2F2061B22EB4FE4D  
431 -:101AE0000DC08B2D8460B82E09C024FF0AC09F2F23  
432 -:101AF0009660B92E06C028E030E005C020E130E055  
433 -:101B000002C020E132E0F801B7FE07C060817181B8  
434 -:101B1000828193810C5F1F4F06C06081718180E0DC  
435 -:101B200090E00E5F1F4FA4010E94730EA82EA8180C  
436 -:101B3000FB2DFF777F2E76FE0BC0372D3E7FA51441  
437 -:101B400050F474FE0AC072FC08C0372D3E7E05C0FA  
438 -:101B5000BA2C372D03C0BA2C01C0B52C34FF0DC0F0  
439 -:101B6000FE01EA0DF11D8081803311F4397E09C038  
440 -:101B700032FF06C0B394B39404C0832F867809F073  
441 -:101B8000B39433FD13C030FF06C05A2CB31418F4BD  
442 -:101B9000530C5B18B32CB31468F4B70180E290E0E7  
443 -:101BA0003C870E943B0EB3943C85F5CFB31410F4F0  
444 -:101BB0003B1801C0312C34FF12C0B70180E390E024  
445 -:101BC0003C870E943B0E3C8532FF17C031FD03C0AD  
446 -:101BD00088E790E002C088E590E0B7010CC0832F51  
447 -:101BE000867859F031FF02C08BE201C080E237FDF8  
448 -:101BF0008DE2B70190E00E943B0EA51438F4B701C6  
449 -:101C000080E390E00E943B0E5A94F7CFAA94F4012F  
450 -:101C1000EA0DF11D8081B70190E00E943B0EA110FA  
451 -:101C2000F5CF332009F451CEB70180E290E00E9455  
452 -:101C30003B0E3A94F6CFF7018681978102C08FEF71  
453 -:101C40009FEF2C96E2E10C94ED0EFC0105906150A3  
454 -:101C500070400110D8F7809590958E0F9F1F0895C2  
455 -:101C6000FC016150704001900110D8F7809590956B  
456 -:101C70008E0F9F1F08950F931F93CF93DF93FB0148  
457 -:101C8000238121FD03C08FEF9FEF28C022FF16C0E4  
458 -:101C900046815781248135814217530744F4A0813E  
459 -:101CA000B1819D012F5F3F4F318320838C9326812B  
460 -:101CB00037812F5F3F4F3783268310C0EB01092FF9  
461 -:101CC000182F0084F185E02D0995892BE1F68E818E  
462 -:101CD0009F8101969F838E83812F902FDF91CF91DB  
463 -:101CE0001F910F910895FA01AA27283051F1203150  
464 -:101CF00081F1E8946F936E7F6E5F7F4F8F4F9F4FA0  
465 -:101D0000AF4FB1E03ED0B4E03CD0670F781F891FE1  
466 -:101D10009A1FA11D680F791F8A1F911DA11D6A0FAF  
467 -:101D2000711D811D911DA11D20D009F468943F9162  
468 -:101D30002AE0269F11243019305D3193DEF6CF0161  
469 -:101D40000895462F4770405D4193B3E00FD0C9F727  
470 -:101D5000F6CF462F4F70405D4A3318F0495D31FD94  
471 -:101D60004052419302D0A9F7EACFB4E0A6959795E7  
472 -:101D7000879577956795BA95C9F7009761057105BD  
473 -:101D800008959B01AC010A2E069457954795379507  
474 -:101D90002795BA95C9F7620F731F841F951FA01D61  
475 -:101DA00008952F923F924F925F926F927F928F92FF  
476 -:101DB0009F92AF92BF92CF92DF92EF92FF920F93DA  
477 -:101DC0001F93CF93DF93CDB7DEB7CA1BDB0B0FB6E4  
478 -:101DD000F894DEBF0FBECDBF09942A8839884888A1  
479 -:101DE0005F846E847D848C849B84AA84B984C88437  
480 -:101DF000DF80EE80FD800C811B81AA81B981CE0F2E  
481 -:101E0000D11D0FB6F894DEBF0FBECDBFED01089512  
482 -:041E1000F894FFCF74  
483 -:101E140000000002000000006E0B00000000A0BDE6  
484 -:101E2400CDDDEDFD424F55434C45006A652072659A  
485 -:101E3400706F6E64730049276D206F6B0073797344  
486 -:101E4400696E697428290D004368616E6E656C20A3  
487 -:101E54003A2053454E44204D454D2053495A452080  
488 -:101E64003A2052454356204D454D2053495A450D7D  
489 -:101E7400002564203A20252E3478203A20252E345B  
490 -:101E840078203A20252E3478203A20252E34780DD7  
491 -:101E94000A004953525F52583A2072645F70747258  
492 -:101EA400203A20252E34780D0A00636C6F73652860  
493 -:101EB400290D00736F636B657428290D00536E5FE1  
494 -:101EC4005352203D20252E3278202C2050726F74DE  
495 -:101ED4006F636F6C203D20252E32780D0A006C69EB  
496 -:101EE4007374656E28290D004661696C5B696E76B2  
497 -:101EF400616C69642069702C706F72745D0D00648C  
498 -:101F04006973636F6E6E65637428290D00736F6364  
499 -:101F14006B6574202564206672656573697A65282B  
500 -:101F240025642920656D707479206F722065727242  
501 -:101F34006F720D0A00534F434B5F434C4F5345445C  
502 -:101F44002E0D007265637628290D0073656E647426  
503 -:101F54006F28290D002564204661696C5B252E32AB  
504 -:101F6400782E252E32782E252E32782E252E327874  
505 -:101F74002C20252E642C2025645D0D0A00726563D7  
506 -:101F84007666726F6D28290D00554450206D736775  
507 -:101F940020617272697665640D00736F7572636592  
508 -:101FA40020506F7274203A2025640D0A00736F75F7  
509 -:101FB400726365204950203A2025642E25642E251D  
510 -:101FC400642E25640D0A00495020524157206D7338  
511 -:101FD4006720617272697665640D00726563766666  
512 -:101FE400726F6D282920656E64202E2E0D0069679E  
513 -:101FF4006D7073656E6428290D002564204661693F  
514 -:102004006C5B25645D0D0A0069676D7073656E64B1  
515 -:08201400206661696C2E0D00CD 220 +:100DB000DF90CF9008950F931F93CF93DF93C82FA9
  221 +:100DC00089EC91E00E94F80CD0E02496DC2FCC272F
  222 +:100DD0008E010D5F1F4FC8010E94B3008331D9F40B
  223 +:100DE000219662E0CE010E949500CE010E94B300E0
  224 +:100DF0008111FBCFC8010E94B3001F928F9383ED36
  225 +:100E000091E09F938F930E94E20C0F900F900F90B0
  226 +:100E10000F9081E005C081EE91E00E94F80C80E027
  227 +:100E2000DF91CF911F910F910895CF93DF93C82F3A
  228 +:100E300088EF91E00E94F80CD0E0DC2FCC27CD5F4A
  229 +:100E4000DB4FCE010E94B3008431B1F4CE010E9489
  230 +:100E5000B3008731D9F7CE010E94B3001F928F9360
  231 +:100E600083ED91E09F938F930E94E20C0F900F907F
  232 +:100E70000F900F9081E005C082E092E00E94F80C94
  233 +:100E800080E0DF91CF910895EF92FF920F931F932F
  234 +:100E9000CF93DF93C82F8B017A018AE192E00E9401
  235 +:100EA000F80CF80160816F3F51F481818F3F99F414
  236 +:100EB00082818F3F81F483818F3F69F40FC061117C
  237 +:100EC0000AC0F8018181811106C08281811103C0AD
  238 +:100ED0008381882319F0E114F10431F481EE91E06B
  239 +:100EE0000E94F80C80E02FC0D0E02496DC2FCC27A5
  240 +:100EF000CE010C960E949500F8016181CE010D96FD
  241 +:100F00000E949500F8016281CE010E960E94950024
  242 +:100F1000F8016381CE010F960E9495006F2DCE01DE
  243 +:100F200040960E9495006E2DCE0141960E9495003C
  244 +:100F3000219664E0CE010E949500CE010E94B3008C
  245 +:100F40008111FBCF81E0DF91CF911F910F91FF9035
  246 +:100F5000EF900895CF93DF93C82F87E192E00E942E
  247 +:100F6000F80CD0E0DC2FCC27CF5FDB4F68E0CE0160
  248 +:100F70000E949500CE010E94B3008111FBCFDF914A
  249 +:100F8000CF9108958F929F92AF92BF92CF92DF92AE
  250 +:100F9000EF92FF921F93CF93DF93182F4B017A01AB
  251 +:100FA00082E493E00E94F80C812F0E9468008E1565
  252 +:100FB0009F0520F4812F0E9468007C01C12FD0E0A2
  253 +:100FC0002496DC2FCC275E0183E0A80EB11C812F74
  254 +:100FD0000E94AF046C01C5010E94B3008731A9F0E3
  255 +:100FE0008C3199F0DF92CF921F921F9385E292E0AD
  256 +:100FF0009F938F930E94E20C0F900F900F900F9091
  257 +:101000000F900F90E12CF12C03C0CE14DF04F8F206
  258 +:10101000A701B401812F0E9467056E018FEFC81AE6
  259 +:10102000D80A60E2C6010E949500C6010E94B30082
  260 +:101030008111FBCF2296CE010E94B30084FD0FC028
  261 +:10104000C5010E94B3008111F6CF8DE492E00E94A9
  262 +:10105000F80C812F0E94420680E090E005C060E11C
  263 +:10106000CE010E949500C701DF91CF911F91FF90A3
  264 +:10107000EF90DF90CF90BF90AF909F908F900895AA
  265 +:10108000BF92CF92DF92EF92FF920F931F93CF9375
  266 +:10109000DF93B82E6B018A01C82FD0E02496DC2F95
  267 +:1010A000CC277E0183E0E80EF11CC7010E94B3004B
  268 +:1010B000873191F0C7010E94B3001F928F938BE597
  269 +:1010C00092E09F938F930E94E20C0F900F900F90ED
  270 +:1010D0000F908FEF9FEF26C080E00E94EB047C0111
  271 +:1010E00018161906ECF48EE692E00E94F80CE01651
  272 +:1010F000F10620F00115110589F001C08701A80152
  273 +:10110000B6018B2D0E94F505219660E4CE010E9468
  274 +:101110009500CE010E94B3008111FBCFC80102C02F
  275 +:1011200080E090E0DF91CF911F910F91FF90EF90C1
  276 +:10113000DF90CF90BF9008958F929F92BF92CF92F1
  277 +:10114000DF92EF92FF920F931F93CF93DF93B82E0E
  278 +:101150004B01EA01790186E792E00E94F80C8B2DA1
  279 +:101160000E9468008C179D0728F48B2D0E94680050
  280 +:101170006C0101C06E01F7016081611109C08181BC
  281 +:10118000811106C08281811103C08381882331F0DF
  282 +:101190000115110519F0C114D10429F5DF93CF937E
  283 +:1011A0001F930F93F70183811F928F9382811F9268
  284 +:1011B0008F9381811F928F931F926F931F92BF9283
  285 +:1011C00080E892E09F938F930E94E20C81EE91E081
  286 +:1011D0000E94F80C8DB79EB740960FB6F8949EBF4C
  287 +:1011E0000FBE8DBF49C0CB2DD0E02496DC2FCC277D
  288 +:1011F000CE010C960E949500F7016181CE010D96FB
  289 +:101200000E949500F7016281CE010E960E94950022
  290 +:10121000F7016381CE010F960E949500612FCE01E8
  291 +:1012200040960E949500602FCE0141960E94950045
  292 +:10123000A601B4018B2D0E9467058E010F5F1F4F21
  293 +:1012400060E2C8010E949500C8010E94B3008111AC
  294 +:10125000FBCF2296CE010E94B30084FD10C0CE01C8
  295 +:101260000E94B30083FFF6CF8CE593E00E94F80C58
  296 +:1012700068E1CE010E94950080E090E005C060E149
  297 +:10128000CE010E949500C601DF91CF911F910F9171
  298 +:10129000FF90EF90DF90CF90BF909F908F90089538
  299 +:1012A0002F923F924F925F926F927F928F929F9276
  300 +:1012B000AF92BF92CF92DF92EF92FF920F931F9364
  301 +:1012C000CF93DF93CDB7DEB72A970FB6F894DEBF82
  302 +:1012D0000FBECDBF782E4B016A0179011A870987AD
  303 +:1012E0000E94EB04892B09F42BC188EA92E00E944A
  304 +:1012F000F80C872D0E94EB04682E392ECD2809F4B6
  305 +:1013000017C1472C512C84E0480E511C542C442406
  306 +:10131000520198E2A90EB11CC5010E94B300082F2A
  307 +:1013200010E0102F00276201E9E2CE0ED11CC601A9
  308 +:101330000E94B300080F111D3F926F921F930F93ED
  309 +:1013400084EB92E09F938F930E94E20CC2010E9473
  310 +:10135000B3000F900F900F900F900F900F90877029
  311 +:10136000833009F464C0843009F4ABC0823009F0E2
  312 +:10137000D0C028E030E0AE014F5F5F4FB801872D4D
  313 +:101380000E94AE051801F8E02F0E311C8981F7018B
  314 +:1013900080838A8181838B8182838C8183838D8109
  315 +:1013A00090E0982F88272E81820F911DE985FA857C
  316 +:1013B000918380830F8110E0102F00278885080F0C
  317 +:1013C000111D1F930F9384ED92E09F938F930E94C2
  318 +:1013D000E20CE985FA8581818F9380818F938AEE73
  319 +:1013E00092E09F938F930E94E20CF70183811F92FA
  320 +:1013F0008F9382811F928F9381811F928F9380811F
  321 +:101400001F928F938DEF92E09F938F930E94E20C37
  322 +:101410009801A401B101872D0E94AE057101E00E73
  323 +:10142000F11E6F2DC5010E9495006E2D41C026E072
  324 +:1014300030E0AE014F5F5F4FB801872D0E94AE05CF
  325 +:10144000180196E0290E311C8981F70180838A8179
  326 +:1014500081838B8182838C8183830D8110E0102FA7
  327 +:1014600000278E81080F111D87E193E00E94F80C80
  328 +:10147000F70183811F928F9382811F928F938181C5
  329 +:101480001F928F9380811F928F938DEF92E09F9395
  330 +:101490008F930E94E20C9801A401B101872D0E9454
  331 +:1014A000AE05200E311E632DC5010E949500622DF0
  332 +:1014B000C6010E9495000FB6F894DEBF0FBECDBFE7
  333 +:1014C0002AC022E030E0AE014F5F5F4FB801872DA8
  334 +:1014D0000E94AE05780192E0E90EF11C098110E04E
  335 +:1014E000902F88270A8110E002501109080F191F58
  336 +:1014F0009801A401B701872D0E94AE05E00EF11EF0
  337 +:101500006F2DC5010E9495006E2DC6010E949500A9
  338 +:1015100002C000E010E0EFEF4E1A5E0A60E4C20184
  339 +:101520000E949500C2010E94B3008111FBCF02C04E
  340 +:1015300000E010E08BE293E00E94F80CC80102C0CA
  341 +:1015400080E090E02A960FB6F894DEBF0FBECDBFC4
  342 +:10155000DF91CF911F910F91FF90EF90DF90CF908F
  343 +:10156000BF90AF909F908F907F906F905F904F90C3
  344 +:101570003F902F900895CF92DF92FF920F931F9389
  345 +:10158000CF93DF93F82E6B01EA018EE393E00E9484
  346 +:10159000F80C8F2D0E9468008C179D0728F48F2D62
  347 +:1015A0000E9468008C0101C08E010115110589F4AB
  348 +:1015B0001F921F92DF93CF938AE493E09F938F93C0
  349 +:1015C0000E94E20C0F900F900F900F900F900F90D1
  350 +:1015D00030C0A801B6018F2D0E946705CF2DD0E045
  351 +:1015E0002496DC2FCC276E018FEFC81AD80A60E250
  352 +:1015F000C6010E949500C6010E94B3008111FBCF75
  353 +:101600006E0182E0C80ED11C2396C6010E94B30071
  354 +:1016100084FD12C0CE010E94B300C6010E94B30037
  355 +:1016200083FFF3CF88E593E00E94F80C8F2D0E9492
  356 +:10163000420680E090E005C060E1C6010E9495008E
  357 +:10164000C801DF91CF911F910F91FF90DF90CF9054
  358 +:101650000895CF92DF92EF92FF920F931F93CF9353
  359 +:10166000DF936C017B018A01E9010E947E0265E53E
  360 +:1016700085E50E942201C6010E94CD02C7010E9499
  361 +:10168000F002C8010E948102CE01DF91CF911F912B
  362 +:101690000F91FF90EF90DF90CF900C94B402809365
  363 +:1016A000BB0084E88093BC008091BC0087FFFCCF26
  364 +:1016B00008951092B9008CE08093B80084E0809384
  365 +:1016C000BC000895CF9394EA9093BC009091BC0025
  366 +:1016D00097FFFCCF9091B900987F983011F080E08F
  367 +:1016E00015C0C62F880F0E944F0B8091B900887FCC
  368 +:1016F0008831A9F78C2F0E944F0B8091B900887F09
  369 +:10170000883269F784E98093BC0081E0CF91089525
  370 +:10171000CF93DF9394EA9093BC009091BC0097FF25
  371 +:10172000FCCF9091B900987F983011F080E01EC0F6
  372 +:10173000C42FD62F880F0E944F0B8091B900887F4D
  373 +:101740008831A1F78D2F0E944F0B8091B900887FBF
  374 +:10175000883261F78C2F0E944F0B8091B900887FEF
  375 +:10176000883221F784E98093BC0081E0DF91CF913A
  376 +:101770000895092E000CAA0BBB0B9C01AD0184E05F
  377 +:10178000220F331F441F551F8A95D1F760E074E282
  378 +:1017900084EF90E00E94C00C215031093093C500C5
  379 +:1017A0002093C40088E18093C10086E08093C2004A
  380 +:1017B000E0ECF0E080818D7F808308959091C000FF
  381 +:1017C00095FFFCCF8093C6000895CF93C82F8A3031
  382 +:1017D00019F48DE00E94DE0B8C2F0E94DE0B80E05E
  383 +:1017E00090E0CF9108958091C00087FFFCCF809159
  384 +:1017F000C600089580E895E20E94B90B80E091E070
  385 +:101800009093A1038093A00308958F929F92AF922B
  386 +:10181000BF92CF92DF92EF92FF920F931F93CF93DD
  387 +:10182000DF93CDB7DEB7EA970FB6F894DEBF0FBEF1
  388 +:10183000CDBF86E0EEE0F1E0DE015F9601900D9213
  389 +:101840008A95E1F72CEA29AB9AE19AAB81E98BAB57
  390 +:101850003DEC3CAB2DA79EA78FA78EEF88AB8FEFFB
  391 +:1018600089A78AA78BA71CA60E94FA0B9E01275D59
  392 +:101870003F4FAE01435D5F4FBE016F5C7F4FCE01B6
  393 +:101880004F960E94290B20E044EE57E062E080E092
  394 +:101890000E946406882309F45EC020E044EE57E00D
  395 +:1018A00061E081E00E946406882309F454C04E017F
  396 +:1018B00085E3880E911C84E1A82E81E0B82E6E018C
  397 +:1018C00091E1C90ED11C9EE1E92E91E0F92E8E0125
  398 +:1018D000075C1F4F9E012B5D3F4F40E150E0BE0172
  399 +:1018E0006F5F7F4F80E00E945009419781F78981A7
  400 +:1018F0008DAB8A818EAB8B818FAB18AE8C81898B3F
  401 +:101900008D818A8B8E818B8B8F818C8B88858D8B43
  402 +:1019100089858E8B8A858F8B8B85888F8C85898F27
  403 +:101920008D858A8F8E858B8F8F858C8F88898D8F03
  404 +:101930001E8E9F928F92BF92AF920E94E20CDF9216
  405 +:10194000CF92FF92EF920E94E20C0FB6F894DEBFA6
  406 +:101950000FBECDBFBCCF8FEF9FEFEA960FB6F894C6
  407 +:10196000DEBF0FBECDBFDF91CF911F910F91FF90D2
  408 +:10197000EF90DF90CF90BF90AF909F908F900895A1
  409 +:10198000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F83
  410 +:10199000EE1FFF1FA217B307E407F50720F0A21BF5
  411 +:1019A000B30BE40BF50B661F771F881F991F1A9462
  412 +:1019B00069F760957095809590959B01AC01BD018C
  413 +:1019C000CF010895A0E0B0E0E8EEFCE00C94B60F83
  414 +:1019D000AE014B5F5F4FFA0161917191AF01809150
  415 +:1019E000A0039091A1030E94280DE2E00C94D20F75
  416 +:1019F0000F931F93CF93DF93E091A003F091A10386
  417 +:101A0000238121FF1BC08C01D0E0C0E0F80181914F
  418 +:101A10008F016091A0037091A103DB011896ED91F5
  419 +:101A2000FC911997882331F00995892B79F3DFEF21
  420 +:101A3000CFEFECCF8AE00995892B19F08FEF9FEF5C
  421 +:101A400002C08D2F9C2FDF91CF911F910F91089590
  422 +:101A5000ACE0B0E0EEE2FDE00C94A60F7C016B017F
  423 +:101A60008A01FC0117821682838181FFBDC1CE01EC
  424 +:101A700001964C01F7019381F60193FD859193FF47
  425 +:101A800081916F01882309F4ABC1853239F493FD4C
  426 +:101A9000859193FF81916F01853229F4B70190E020
  427 +:101AA0000E94100FE7CF512C312C20E02032A0F4FF
  428 +:101AB0008B3269F030F4803259F0833269F420615E
  429 +:101AC0002CC08D3239F0803339F4216026C0226079
  430 +:101AD000246023C0286021C027FD27C030ED380FC7
  431 +:101AE0003A3078F426FF06C0FAE05F9E300D1124EC
  432 +:101AF000532E13C08AE0389E300D1124332E2062FD
  433 +:101B00000CC08E3221F426FD6BC1206406C08C36D9
  434 +:101B100011F4206802C0883641F4F60193FD8591E6
  435 +:101B200093FF81916F018111C1CF982F9F7D9554B3
  436 +:101B3000933028F40C5F1F4FFFE3F9830DC0833609
  437 +:101B400031F0833771F0833509F05BC022C0F801B2
  438 +:101B5000808189830E5F1F4F44244394512C54018C
  439 +:101B600015C03801F2E06F0E711CF801A080B18041
  440 +:101B700026FF03C0652D70E002C06FEF7FEFC50147
  441 +:101B80002C870E94050F2C0183012C852F77222E94
  442 +:101B900017C03801F2E06F0E711CF801A080B1800F
  443 +:101BA00026FF03C0652D70E002C06FEF7FEFC50117
  444 +:101BB0002C870E94FA0E2C012C852068222E83018E
  445 +:101BC00023FC1BC0832D90E048165906B0F4B701E2
  446 +:101BD00080E290E00E94100F3A94F4CFF50127FCC8
  447 +:101BE000859127FE81915F01B70190E00E94100F5F
  448 +:101BF00031103A94F1E04F1A51084114510471F731
  449 +:101C0000E5C0843611F0893639F5F80127FF07C0A1
  450 +:101C100060817181828193810C5F1F4F08C0608158
  451 +:101C20007181072E000C880B990B0E5F1F4F2F76CA
  452 +:101C3000722E97FF09C090958095709561957F4FA2
  453 +:101C40008F4F9F4F2068722E2AE030E0A4010E943F
  454 +:101C5000480FA82EA81844C0853729F42F7EB22E2D
  455 +:101C60002AE030E025C0F22FF97FBF2E8F36C1F079
  456 +:101C700018F4883579F0B4C0803719F0883721F02E
  457 +:101C8000AFC02F2F2061B22EB4FE0DC08B2D84600B
  458 +:101C9000B82E09C024FF0AC09F2F9660B92E06C037
  459 +:101CA00028E030E005C020E130E002C020E132E071
  460 +:101CB000F801B7FE07C060817181828193810C5F5A
  461 +:101CC0001F4F06C06081718180E090E00E5F1F4F62
  462 +:101CD000A4010E94480FA82EA818FB2DFF777F2E85
  463 +:101CE00076FE0BC0372D3E7FA51450F474FE0AC05B
  464 +:101CF00072FC08C0372D3E7E05C0BA2C372D03C0BC
  465 +:101D0000BA2C01C0B52C34FF0DC0FE01EA0DF11D47
  466 +:101D10008081803311F4397E09C032FF06C0B3944C
  467 +:101D2000B39404C0832F867809F0B39433FD13C0B5
  468 +:101D300030FF06C05A2CB31418F4530C5B18B32CA4
  469 +:101D4000B31468F4B70180E290E03C870E94100F62
  470 +:101D5000B3943C85F5CFB31410F43B1801C0312C7B
  471 +:101D600034FF12C0B70180E390E03C870E94100F5F
  472 +:101D70003C8532FF17C031FD03C088E790E002C008
  473 +:101D800088E590E0B7010CC0832F867859F031FFC9
  474 +:101D900002C08BE201C080E237FD8DE2B70190E026
  475 +:101DA0000E94100FA51438F4B70180E390E00E9460
  476 +:101DB000100F5A94F7CFAA94F401EA0DF11D808117
  477 +:101DC000B70190E00E94100FA110F5CF332009F465
  478 +:101DD00051CEB70180E290E00E94100F3A94F6CF06
  479 +:101DE000F7018681978102C08FEF9FEF2C96E2E189
  480 +:101DF0000C94C20FFC010590615070400110D8F79F
  481 +:101E0000809590958E0F9F1F0895FC016150704042
  482 +:101E100001900110D8F7809590958E0F9F1F08951F
  483 +:101E20000F931F93CF93DF93FB01238121FD03C009
  484 +:101E30008FEF9FEF28C022FF16C046815781248173
  485 +:101E400035814217530744F4A081B1819D012F5F72
  486 +:101E50003F4F318320838C93268137812F5F3F4F03
  487 +:101E60003783268310C0EB01092F182F0084F185DA
  488 +:101E7000E02D0995892BE1F68E819F8101969F8344
  489 +:101E80008E83812F902FDF91CF911F910F91089515
  490 +:101E9000FA01AA27283051F1203181F1E8946F939B
  491 +:101EA0006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED041
  492 +:101EB000B4E03CD0670F781F891F9A1FA11D680FDF
  493 +:101EC000791F8A1F911DA11D6A0F711D811D911D12
  494 +:101ED000A11D20D009F468943F912AE0269F112487
  495 +:101EE0003019305D3193DEF6CF010895462F4770EB
  496 +:101EF000405D4193B3E00FD0C9F7F6CF462F4F7046
  497 +:101F0000405D4A3318F0495D31FD4052419302D0A3
  498 +:101F1000A9F7EACFB4E0A695979587957795679549
  499 +:101F2000BA95C9F700976105710508959B01AC0149
  500 +:101F30000A2E06945795479537952795BA95C9F770
  501 +:101F4000620F731F841F951FA01D08952F923F924B
  502 +:101F50004F925F926F927F928F929F92AF92BF92B9
  503 +:101F6000CF92DF92EF92FF920F931F93CF93DF9365
  504 +:101F7000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEC2
  505 +:101F8000CDBF09942A88398848885F846E847D840F
  506 +:101F90008C849B84AA84B984C884DF80EE80FD8011
  507 +:101FA0000C811B81AA81B981CE0FD11D0FB6F89487
  508 +:0E1FB000DEBF0FBECDBFED010895F894FFCF48
  509 +:101FBE000000000200000000E50B00000000A0BDC4
  510 +:101FCE00CDDDEDFD436F6D203A2025730A0050657F
  511 +:101FDE0072203A2025730A00737973696E6974282A
  512 +:101FEE00290D004368616E6E656C203A2053454E94
  513 +:101FFE0044204D454D2053495A45203A20524543E1
  514 +:10200E0056204D454D2053495A450D002564203A22
  515 +:10201E0020252E3478203A20252E3478203A20257B
  516 +:10202E002E3478203A20252E34780D0A004953524A
  517 +:10203E005F52583A2072645F707472203A20252ED7
  518 +:10204E0034780D0A00636C6F736528290D00736F69
  519 +:10205E00636B657428290D00536E5F5352203D202B
  520 +:10206E00252E3278202C2050726F746F636F6C2087
  521 +:10207E003D20252E32780D0A006C697374656E282A
  522 +:10208E00290D00737461747573203D2025780D0A37
  523 +:10209E00004661696C5B696E76616C69642069707B
  524 +:1020AE002C706F72745D0D00616363657074282906
  525 +:1020BE000D004661696C5B6E6F74206C697374659C
  526 +:1020CE006E696E675D0D00646973636F6E6E656336
  527 +:1020DE007428290D00736F636B6574202564206668
  528 +:1020EE0072656573697A652825642920656D70743B
  529 +:1020FE0079206F72206572726F720D0A00534F4312
  530 +:10210E004B5F434C4F5345442E0D00426164207388
  531 +:10211E007461747573203D20253032780A00726523
  532 +:10212E00637628290D0073656E64746F28290D007F
  533 +:10213E002564204661696C5B252E32782E252E3261
  534 +:10214E00782E252E32782E252E32782C20252E64B0
  535 +:10215E002C2025645D0D0A007265637666726F6DC4
  536 +:10216E0028290D004953525F52583A2072645F700D
  537 +:10217E007472203A20252E34782073697A653D25B5
  538 +:10218E00640D0A00554450206D736720232564208A
  539 +:10219E00617272697665640D0A00736F757263659C
  540 +:1021AE0020506F7274203A2025750D0A00736F75DA
  541 +:1021BE00726365204950203A2025642E25642E2511
  542 +:1021CE00642E25640D0A00495020524157206D732C
  543 +:1021DE006720617272697665640D0072656376665A
  544 +:1021EE00726F6D282920656E64202E2E0D00696792
  545 +:1021FE006D7073656E6428290D0025642046616933
  546 +:10220E006C5B25645D0D0A0069676D7073656E64A5
  547 +:08221E00206661696C2E0D00C1
516 :00000001FF 548 :00000001FF
Tangible/tangibleInterface.o
No preview for this file type
Tangible/w5100.c 100755 → 100644
Tangible/w5100.h 100755 → 100644