Commit b34a6f004da5ff4cde09d16c14403dc2aa05c3b9

Authored by pifou
1 parent 47ebd24d

modif socket .h .c

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 + /* ------- */
  141 + ret = 1;
  142 +#ifdef __DEF_IINCHIP_DBG__
  143 + printf("status = %x\r\n",IINCHIP_READ(Sn_SR(s)));
  144 +#endif
  145 + }
  146 + else
  147 + {
  148 + ret = 0;
  149 +#ifdef __DEF_IINCHIP_DBG__
  150 + printf("Fail[not listening]\r\n");
  151 +#endif
  152 + }
  153 + return ret;
  154 +}
  155 +
  156 +
  157 +/**
  158 +@brief This function established the connection for the channel in Active (client) mode.
  159 + This function waits for the until the connection is established.
  160 +
  161 +@return 1 for success else 0.
  162 +*/
  163 +uint8 connect(SOCKET s, uint8 * addr, uint16 port)
  164 +{
  165 + uint8 ret;
  166 +#ifdef __DEF_IINCHIP_DBG__
  167 + printf("connect()\r\n");
  168 +#endif
  169 + if
  170 + (
  171 + ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
  172 + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
  173 + (port == 0x00)
  174 + )
  175 + {
  176 + ret = 0;
  177 +#ifdef __DEF_IINCHIP_DBG__
  178 + printf("Fail[invalid ip,port]\r\n");
  179 +#endif
  180 + }
  181 + else
  182 + {
  183 + ret = 1;
  184 + // set destination IP
  185 + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
  186 + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
  187 + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
  188 + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
  189 + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
  190 + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));
  191 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_CONNECT);
  192 + /* m2008.01 [bj] : wait for completion */
  193 + while ( IINCHIP_READ(Sn_CR(s)) ) ;
  194 +
  195 + }
  196 +
  197 + return ret;
  198 +}
  199 +
  200 +
  201 +
  202 +/**
  203 +@brief This function used for disconnect the socket and parameter is "s" which represent the socket number
  204 +@return 1 for success else 0.
  205 +*/
  206 +void disconnect(SOCKET s)
  207 +{
  208 +#ifdef __DEF_IINCHIP_DBG__
  209 + printf("disconnect()\r\n");
  210 +#endif
  211 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_DISCON);
  212 +
  213 + /* +20071122[chungs]:wait to process the command... */
  214 + while( IINCHIP_READ(Sn_CR(s)) )
  215 + ;
  216 + /* ------- */
  217 +}
  218 +
  219 +
  220 +/**
  221 +@brief This function used to send the data in TCP mode
  222 +@return 1 for success else 0.
  223 +*/
  224 +uint16 send(
  225 + SOCKET s, /**< the socket index */
  226 + const uint8 * buf, /**< a pointer to data */
  227 + uint16 len /**< the data size to be send */
  228 + )
  229 +{
  230 + uint8 status=0;
  231 + uint16 ret=0;
  232 + uint16 freesize=0;
  233 +#ifdef __DEF_IINCHIP_DBG__
  234 + printf("send()\r\n");
  235 +#endif
  236 +
  237 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  238 + else ret = len;
  239 +
  240 + // if freebuf is available, start.
  241 + do
  242 + {
  243 + freesize = getSn_TX_FSR(s);
  244 + status = IINCHIP_READ(Sn_SR(s));
  245 + if ((status != SOCK_ESTABLISHED) && (status != SOCK_CLOSE_WAIT))
  246 + {
  247 +#ifdef __DEF_IINCHIP_DBG__
  248 + printf("socket %d freesize(%d) empty or error\r\n", s, freesize);
  249 +#endif
  250 + ret = 0;
  251 + break;
  252 + }
  253 + } while (freesize < ret);
  254 +
  255 + // copy data
  256 + send_data_processing(s, (uint8 *)buf, ret);
  257 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  258 +
  259 + /* +20071122[chungs]:wait to process the command... */
  260 + while( IINCHIP_READ(Sn_CR(s)) )
  261 + ;
  262 + /* ------- */
  263 +
  264 +/* +2008.01 bj */
  265 +#ifdef __DEF_IINCHIP_INT__
  266 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  267 +#else
  268 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  269 +#endif
  270 + {
  271 + /* m2008.01 [bj] : reduce code */
  272 + if ( IINCHIP_READ(Sn_SR(s)) == SOCK_CLOSED )
  273 + {
  274 +#ifdef __DEF_IINCHIP_DBG__
  275 + printf("SOCK_CLOSED.\r\n");
  276 +#endif
  277 + close(s);
  278 + return 0;
  279 + }
  280 + }
  281 +/* +2008.01 bj */
  282 +#ifdef __DEF_IINCHIP_INT__
  283 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  284 +#else
  285 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  286 +#endif
  287 + return ret;
  288 +}
  289 +
  290 +
  291 +/**
  292 +@brief This function is an application I/F function which is used to receive the data in TCP mode.
  293 + It continues to wait for data as much as the application wants to receive.
  294 +
  295 +@return received data size for success else -1.
  296 +*/
  297 +int16 recv(
  298 + SOCKET s, /**< socket index */
  299 + uint8 * buf, /**< a pointer to copy the data to be received */
  300 + uint16 len /**< the data size to be read */
  301 + )
  302 +{
  303 + uint16 ret=0;
  304 + if( IINCHIP_READ(Sn_SR(s)) != SOCK_ESTABLISHED ){
  305 + printf("Bad status = %02x\n",IINCHIP_READ(Sn_SR(s)));
  306 + return -1;
  307 + }
  308 + int plen = getSn_RX_RSR(0);
  309 + if( plen <= 0 ) return 0;
  310 +
  311 +#ifdef __DEF_IINCHIP_DBG__
  312 + printf("recv()\r\n");
  313 +#endif
  314 +
  315 + if( plen < len ) len=plen;
  316 + if ( len > 0 )
  317 + {
  318 + recv_data_processing(s, buf, len);
  319 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);
  320 +
  321 + /* +20071122[chungs]:wait to process the command... */
  322 + while( IINCHIP_READ(Sn_CR(s)) )
  323 + ;
  324 + /* ------- */
  325 + ret = len;
  326 + }
  327 + return ret;
  328 +}
  329 +
  330 +
  331 +/**
  332 +@brief This function is an application I/F function which is used to send the data for other then TCP mode.
  333 + Unlike TCP transmission, The peer's destination address and the port is needed.
  334 +
  335 +@return This function return send data size for success else -1.
  336 +*/
  337 +uint16 sendto(
  338 + SOCKET s, /**< socket index */
  339 + const uint8 * buf, /**< a pointer to the data */
  340 + uint16 len, /**< the data size to send */
  341 + uint8 * addr, /**< the peer's Destination IP address */
  342 + uint16 port /**< the peer's destination port number */
  343 + )
  344 +{
  345 +// uint8 status=0;
  346 +// uint8 isr=0;
  347 + uint16 ret=0;
  348 +
  349 +#ifdef __DEF_IINCHIP_DBG__
  350 + printf("sendto()\r\n");
  351 +#endif
  352 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  353 + else ret = len;
  354 +
  355 + if
  356 + (
  357 + ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
  358 + ((port == 0x00)) ||(ret == 0)
  359 + )
  360 + {
  361 + /* +2008.01 [bj] : added return value */
  362 + ret = 0;
  363 +#ifdef __DEF_IINCHIP_DBG__
  364 + printf("%d Fail[%.2x.%.2x.%.2x.%.2x, %.d, %d]\r\n",s, addr[0], addr[1], addr[2], addr[3] , port, len);
  365 + printf("Fail[invalid ip,port]\r\n");
  366 +#endif
  367 + }
  368 + else
  369 + {
  370 + IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
  371 + IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
  372 + IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
  373 + IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
  374 + IINCHIP_WRITE(Sn_DPORT0(s),(uint8)((port & 0xff00) >> 8));
  375 + IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8)(port & 0x00ff));
  376 +
  377 + // copy data
  378 + send_data_processing(s, (uint8 *)buf, ret);
  379 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  380 +
  381 + /* +20071122[chungs]:wait to process the command... */
  382 + while( IINCHIP_READ(Sn_CR(s)) )
  383 + ;
  384 + /* ------- */
  385 +
  386 +/* +2008.01 bj */
  387 +#ifdef __DEF_IINCHIP_INT__
  388 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  389 +#else
  390 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  391 +#endif
  392 + {
  393 +#ifdef __DEF_IINCHIP_INT__
  394 + if (getISR(s) & Sn_IR_TIMEOUT)
  395 +#else
  396 + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)
  397 +#endif
  398 + {
  399 +#ifdef __DEF_IINCHIP_DBG__
  400 + printf("send fail.\r\n");
  401 +#endif
  402 +/* +2008.01 [bj]: clear interrupt */
  403 +#ifdef __DEF_IINCHIP_INT__
  404 + putISR(s, getISR(s) & ~(Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
  405 +#else
  406 + IINCHIP_WRITE(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
  407 +#endif
  408 + return 0;
  409 + }
  410 + }
  411 +
  412 +/* +2008.01 bj */
  413 +#ifdef __DEF_IINCHIP_INT__
  414 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  415 +#else
  416 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  417 +#endif
  418 +
  419 + }
  420 + return ret;
  421 +}
  422 +
  423 +
  424 +/**
  425 +@brief This function is an application I/F function which is used to receive the data in other then
  426 + TCP mode. This function is used to receive UDP, IP_RAW and MAC_RAW mode, and handle the header as well.
  427 +
  428 +@return This function return received data size for success else -1.
  429 +*/
  430 +uint16 recvfrom(
  431 + SOCKET s, /**< the socket number */
  432 + uint8 * buf, /**< a pointer to copy the data to be received */
  433 + uint16 len, /**< the data size to read */
  434 + uint8 * addr, /**< a pointer to store the peer's IP address */
  435 + uint16 *port /**< a pointer to store the peer's port number. */
  436 + )
  437 +{
  438 + uint8 head[8];
  439 + uint16 data_len=0;
  440 + uint16 plen = getSn_RX_RSR(s);
  441 + uint16 ptr=0;
  442 +
  443 + if(plen <=0 ) return 0;
  444 +
  445 +#ifdef __DEF_IINCHIP_DBG__
  446 + printf("recvfrom()\r\n");
  447 +#endif
  448 +
  449 + plen = getSn_RX_RSR(s);
  450 + if ( len > 0 )
  451 + {
  452 + ptr = IINCHIP_READ(Sn_RX_RD0(s));
  453 + ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_RX_RD0(s) + 1);
  454 +
  455 +#ifdef __DEF_IINCHIP_DBG__
  456 + printf("ISR_RX: rd_ptr : %.4x size=%d\r\n", ptr, plen);
  457 +#endif
  458 + switch (IINCHIP_READ(Sn_MR(s)) & 0x07)
  459 + {
  460 + case Sn_MR_UDP :
  461 + read_data(s, (uint8 *)ptr, head, 0x08);
  462 + ptr += 8;
  463 + // read peer's IP address, port number.
  464 + addr[0] = head[0];
  465 + addr[1] = head[1];
  466 + addr[2] = head[2];
  467 + addr[3] = head[3];
  468 + *port = head[4];
  469 + *port = (*port << 8) + head[5];
  470 + data_len = head[6];
  471 + data_len = (data_len << 8) + head[7];
  472 +
  473 +#ifdef __DEF_IINCHIP_DBG__
  474 + printf("UDP msg #%d arrived\r\n",data_len);
  475 + printf("source Port : %u\r\n", *port);
  476 + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);
  477 +#endif
  478 +
  479 + read_data(s, (uint8 *)ptr, buf, data_len); // data copy.
  480 + ptr += data_len;
  481 +
  482 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  483 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  484 + break;
  485 +
  486 + case Sn_MR_IPRAW :
  487 + read_data(s, (uint8 *)ptr, head, 0x06);
  488 + ptr += 6;
  489 +
  490 + addr[0] = head[0];
  491 + addr[1] = head[1];
  492 + addr[2] = head[2];
  493 + addr[3] = head[3];
  494 + data_len = head[4];
  495 + data_len = (data_len << 8) + head[5];
  496 +
  497 +#ifdef __DEF_IINCHIP_DBG__
  498 + printf("IP RAW msg arrived\r\n");
  499 + printf("source IP : %d.%d.%d.%d\r\n", addr[0], addr[1], addr[2], addr[3]);
  500 +#endif
  501 + read_data(s, (uint8 *)ptr, buf, data_len); // data copy.
  502 + ptr += data_len;
  503 +
  504 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  505 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  506 + break;
  507 + case Sn_MR_MACRAW :
  508 + read_data(s,(uint8*)ptr,head,2);
  509 + ptr+=2;
  510 + data_len = head[0];
  511 + data_len = (data_len<<8) + head[1] - 2;
  512 +
  513 + read_data(s,(uint8*) ptr,buf,data_len);
  514 + ptr += data_len;
  515 + IINCHIP_WRITE(Sn_RX_RD0(s),(uint8)((ptr & 0xff00) >> 8));
  516 + IINCHIP_WRITE((Sn_RX_RD0(s) + 1),(uint8)(ptr & 0x00ff));
  517 +
  518 +#ifdef __DEF_IINCHIP_DGB__
  519 + printf("MAC RAW msg arrived\r\n");
  520 + printf("dest mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
  521 + printf("src mac=%.2X.%.2X.%.2X.%.2X.%.2X.%.2X\r\n",buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]);
  522 + printf("type =%.2X%.2X\r\n",buf[12],buf[13]);
  523 +#endif
  524 + break;
  525 +
  526 + default :
  527 + break;
  528 + }
  529 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_RECV);
  530 +
  531 + /* +20071122[chungs]:wait to process the command... */
  532 + while( IINCHIP_READ(Sn_CR(s)) )
  533 + ;
  534 + /* ------- */
  535 + }
  536 +#ifdef __DEF_IINCHIP_DBG__
  537 + printf("recvfrom() end ..\r\n");
  538 +#endif
  539 + return data_len;
  540 +}
  541 +
  542 +
  543 +uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len)
  544 +{
  545 + uint8 status=0;
  546 +// uint8 isr=0;
  547 + uint16 ret=0;
  548 +
  549 +#ifdef __DEF_IINCHIP_DBG__
  550 + printf("igmpsend()\r\n");
  551 +#endif
  552 + if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
  553 + else ret = len;
  554 +
  555 + if (ret == 0)
  556 + {
  557 + ;
  558 +#ifdef __DEF_IINCHIP_DBG__
  559 + printf("%d Fail[%d]\r\n",len,ret);
  560 +#endif
  561 + }
  562 + else
  563 + {
  564 + // copy data
  565 + send_data_processing(s, (uint8 *)buf, ret);
  566 + IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND);
  567 +/* +2008.01 bj */
  568 + while( IINCHIP_READ(Sn_CR(s)) )
  569 + ;
  570 +/* ------- */
  571 +
  572 +/* +2008.01 bj */
  573 +#ifdef __DEF_IINCHIP_INT__
  574 + while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  575 +#else
  576 + while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
  577 +#endif
  578 + {
  579 + status = IINCHIP_READ(Sn_SR(s));
  580 +#ifdef __DEF_IINCHIP_INT__
  581 + if (getISR(s) & Sn_IR_TIMEOUT)
  582 +#else
  583 + if (IINCHIP_READ(Sn_IR(s)) & Sn_IR_TIMEOUT)
  584 +#endif
  585 + {
  586 +#ifdef __DEF_IINCHIP_DBG__
  587 + printf("igmpsend fail.\r\n");
  588 +#endif
  589 + /* in case of igmp, if send fails, then socket closed */
  590 + /* if you want change, remove this code. */
  591 + close(s);
  592 + /* ----- */
  593 +
  594 + return 0;
  595 + }
  596 + }
  597 +
  598 +/* +2008.01 bj */
  599 +#ifdef __DEF_IINCHIP_INT__
  600 + putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
  601 +#else
  602 + IINCHIP_WRITE(Sn_IR(s), Sn_IR_SEND_OK);
  603 +#endif
  604 + }
  605 + return ret;
  606 +}
  607 +
... ...
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_ */
... ...
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,38 +12,74 @@
12 12  
13 13 int main(void)
14 14 {
15   - uint8_t little_mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
  15 + uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
16 16 uint8_t ip[IPV4_SIZE] = {172,26,145,205};
17   - uint8_t gateway[IPV4_SIZE] = {172,26,145,254};
18   - uint8_t mask[IPV4_SIZE] = {255,255,255,0};
  17 + uint8_t gateway[4] = {172,26,145,254};
  18 + uint8_t mask[4] = {255,255,255,0};
  19 +
  20 + const char answer [16] = "I'm ok";
  21 +
  22 + uint8 buf[16];
  23 + uint8_t addr[IPV4_SIZE];
  24 + uint16_t port;
  25 +
  26 + uint8_t addrpifou[IPV4_SIZE]={172,26,145,35};
19 27 uint16 size;
20   - const char answer [15]= "I'M OK";
21   - uint8 buf[16]; // Message à stocker.
22   - uint8_t addr[IPV4_SIZE]; // Adresse source du message reçu.
23   - uint8_t addr2[IPV4_SIZE]={172,26,145,35};
24   - uint16_t port; // Port source du message reçu.
25 28 SOCKET sUDP=0;
26 29 SOCKET sTCP=1;
27   - int test = 0;
28   - init_printf();
29   - ethernet_init(little_mac,ip,gateway,mask);
30   - test = socket(sUDP,Sn_MR_UDP,2020,0);
31   - while(test)
  30 + init_printf();
  31 + ethernet_init(mac,ip,gateway,mask);
  32 + if (!socket(sUDP,Sn_MR_UDP,2020,0))
  33 + {
  34 + return -1;
  35 + }
  36 + if (!socket(sTCP,Sn_MR_TCP,2020,0))
  37 + {
  38 + return -1;
  39 + }
  40 +
  41 + while(1)
32 42 {
33   - //sendto(sUDP,answer,sizeof(answer),addr2,2020);
34   - recvfrom(sUDP,buf,sizeof(buf),addr,&port);
  43 + if (listen(sTCP))
  44 + {
  45 + if (accept(sTCP))
  46 + {
  47 + printf("test\n");
  48 + /* if(recv(sTCP, buf,(uint16)sizeof(buf))!=-1) */
  49 + /* { */
  50 + send(sTCP,(uint8*)answer, (uint16)sizeof(answer));
  51 + /* } */
  52 + }
  53 + else
  54 + {
  55 + close(sTCP);
  56 + if (!socket(sTCP,Sn_MR_TCP,2020,0))
  57 + {
  58 + return -1;
  59 + }
  60 + }
  61 + }
  62 + else
  63 + {
  64 + close(sTCP);
  65 + if (!socket(sTCP,Sn_MR_TCP,2020,0))
  66 + {
  67 + return -1;
  68 + }
  69 +
  70 + }
35 71 }
36   - printf("Sortie boucle\n");
  72 + close(sTCP);
  73 + close(sUDP);
37 74 return 0;
38 75 }
  76 +
39 77  
40 78  
41 79  
42   -/* if(listen(sTCP)) //Repondre je vais bien à un client */
43   -/* { */
44   -/* send(sTCP,(uint8 *)answer,sizeof(answer)); */
45   -/* } */
46   - /* if (!socket(sTCP,Sn_MR_TCP,2020,0)) */
47   - /* { */
48   - /* return -1; */
49   - /* } */
  80 +//sendto(sUDP,(uint8*)answer,(uint16)sizeof(answer), addrpifou, 2020);
  81 + /* if (recvfrom(sUDP,buf,sizeof(buf),addr,&port) !=0 ) */
  82 + /* { */
  83 + /* printf("Size : %d \n",size); */
  84 + /* } */
  85 +
... ...
Tangible/tangibleInterface.hex
... ... @@ -5,18 +5,18 @@
5 5 :100040000C9451000C9451000C9451000C945100EC
6 6 :100050000C9451000C9451000C9451000C945100DC
7 7 :100060000C9451000C94510011241FBECFEFD8E026
8   -:10007000DEBFCDBF12E0A0E0B1E0ECE1FEE102C0E6
9   -:1000800005900D92AE3FB107D9F723E0AEEFB2E095
10   -:1000900001C01D92AA33B207E1F70E948E0B0C94A7
11   -:1000A0000C0F0C940000E82FF0E0E25DFC4F808123
12   -:1000B0000895E82FF0E0E25DFC4F60830895E82F9B
13   -:1000C000F0E0EE0FFF1FE25FFC4F80819181089509
14   -:1000D000E82FF0E0EE0FFF1FEA5EFC4F8081918178
15   -:1000E0000895E82FF0E0EE0FFF1FE25EFC4F8081E5
16   -:1000F00091810895E82FF0E0EE0FFF1FEA5DFC4FBD
17   -:10010000808191810895E82FF0E0EE0FFF1FE2500B
18   -:10011000FD4F808191810895E82FF0E0EE0FFF1FE1
19   -:10012000EA5FFC4F80819181089524B12C6224B94B
  8 +:10007000DEBFCDBF13E0A0E0B1E0E0E4FFE102C0ED
  9 +:1000800005900D92AA36B107D9F723E0AAE6B3E0AE
  10 +:1000900001C01D92A63AB207E1F70E94050C0C942C
  11 +:1000A0009E0F0C940000E82FF0E0E656FC4F808194
  12 +:1000B0000895E82FF0E0E656FC4F60830895E82F9E
  13 +:1000C000F0E0EE0FFF1FE658FC4F8081918108950C
  14 +:1000D000E82FF0E0EE0FFF1FEE57FC4F808191817B
  15 +:1000E0000895E82FF0E0EE0FFF1FE657FC4F8081E8
  16 +:1000F00091810895E82FF0E0EE0FFF1FEE56FC4FC0
  17 +:10010000808191810895E82FF0E0EE0FFF1FE659FE
  18 +:10011000FC4F808191810895E82FF0E0EE0FFF1FE2
  19 +:10012000EE58FC4F80819181089524B12C6224B94E
20 20 :100130002A9A25B1277D25B920E52CBD2A9820EFE4
21 21 :100140002EBD0DB407FEFDCF9EBD0DB407FEFDCF45
22 22 :100150008EBD0DB407FEFDCF6EBD0DB407FEFDCF05
... ... @@ -37,13 +37,13 @@
37 37 :10024000CA0108952F923F924F925F926F927F92D0
38 38 :100250008F929F92AF92BF92CF92DF92EF92FF92D6
39 39 :100260000F931F93CF93DF93CDB7DEB728970FB6C9
40   -:10027000F894DEBF0FBECDBF282E362E82E291E06D
41   -:100280000E94270C622D8BE190E00E949500632D67
42   -:100290008AE190E00E94950080E090E4909307034B
43   -:1002A0008093060380E090E69093FF028093FE0225
44   -:1002B0008DE291E00E94270C8EEF882E82E0982E2E
45   -:1002C00096E0A92E93E0B92E26E133E038872F83FC
46   -:1002D0000EE013E02EE1C22E23E0D22E36E2E32E12
  40 +:10027000F894DEBF0FBECDBF282E362E89E291E066
  41 +:100280000E94B90C622D8BE190E00E949500632DD5
  42 +:100290008AE190E00E94950080E090E490937303DF
  43 +:1002A0008093720380E090E690936B0380936A03DF
  44 +:1002B00084E391E00E94B90C8AE6882E83E0982EB0
  45 +:1002C00092E7A92E93E0B92E22E833E038872F83F6
  46 +:1002D0000AE713E02AE8C22E23E0D22E32E9E32E09
47 47 :1002E00033E0F32E1A821982412C512C1C821B827E
48 48 :1002F000612C712C222D30E03E832D83232C312C58
49 49 :10030000AF81B88511961C921E92F801118210825D
... ... @@ -70,7 +70,7 @@
70 70 :100450004D935C93F40160817181F2E08F0E911CE9
71 71 :10046000D5014C9111965C91B2E0AB0EB11C3F935B
72 72 :100470002F939F938F937F936F935F934F937F926D
73   -:100480006F92A6E5B1E0BF93AF930E94110CFFEF0E
  73 +:100480006F92ADE5B1E0BF93AF930E94A30CFFEF75
74 74 :100490006F1A7F0A29813A812E5F3F4F3A83298361
75 75 :1004A00032E0C30ED11C42E0E40EF11C0FB6F8940A
76 76 :1004B000DEBF0FBECDBF94E06916710409F020CFF6
... ... @@ -164,9 +164,9 @@
164 164 :100A3000080F111D0C151D0511F7C801DF91CF918D
165 165 :100A40001F910F91FF90EF90DF90CF900895CF927C
166 166 :100A5000DF92EF92FF920F931F93CF93DF93E82FD4
167   -:100A6000F0E0EE0FFF1FDF01AA5DBC4F8D919C915E
168   -:100A7000DA01A823B923EF01CA5FDC4FE880F980CF
169   -:100A8000CD018E0D9F1DEA5EFC4FC081D181AD016D
  167 +:100A6000F0E0EE0FFF1FDF01AE56BC4F8D919C9161
  168 +:100A7000DA01A823B923EF01CE58DC4FE880F980D2
  169 +:100A8000CD018E0D9F1DEE57FC4FC081D181AD0170
170 170 :100A9000420F531FC417D50778F489016B01CA1B95
171 171 :100AA000DB0BAE010E94D100A8014C1B5D0BB6010F
172 172 :100AB0006C0F7D1FC70101C0A901DF91CF911F916C
... ... @@ -181,9 +181,9 @@
181 181 :100B40000F90DF91CF911F910F91FF90EF90DF9069
182 182 :100B5000CF90BF909F908F900C949500AF92BF92D2
183 183 :100B6000CF92DF92EF92FF920F931F93CF93DF9379
184   -:100B7000DA01A901E82FF0E0EE0FFF1FEF01C25EDE
185   -:100B8000DC4F888199816B01C822D922EF01C250C4
186   -:100B9000DD4FE880F980C6018E0D9F1DE25FFC4F9E
  184 +:100B7000DA01A901E82FF0E0EE0FFF1FEF01C657E1
  185 +:100B8000DC4F888199816B01C822D922EF01C659B7
  186 +:100B9000DC4FE880F980C6018E0D9F1DE658FC4FA2
187 187 :100BA000C081D1819601240F351FC217D30780F46D
188 188 :100BB0008A015D01CC19DD09AE01BD010E94F90079
189 189 :100BC000A8014C1B5D0BB5016C0F7D1FC70101C057
... ... @@ -193,323 +193,348 @@
193 193 :100C0000982E6B017A01082F10E00C5F1F4F102FF8
194 194 :100C10000027580188E2A80EB11CC5010E94B3004C
195 195 :100C2000C82FD0E0DC2FCC27075D1F4FC8010E94E2
196   -:100C3000B300C80FD11DDF93CF9387E791E09F9357
197   -:100C40008F930E94110C9701A601BE01892D0E946D
  196 +:100C3000B300C80FD11DDF93CF938EE791E09F9350
  197 +:100C40008F930E94A30C9701A601BE01892D0E94DB
198 198 :100C5000AE05CE0DDF1D6D2FC5010E9495000F90D2
199 199 :100C60000F900F900F906C2FC801DF91CF911F91C3
200 200 :100C70000F91FF90EF90DF90CF90BF90AF909F903B
201   -:100C80000C9495000F931F93CF93DF93C82F8FE899
202   -:100C900091E00E94270CD0E02496DC2FCC278E0117
  201 +:100C80000C9495000F931F93CF93DF93C82F86E9A1
  202 +:100C900091E00E94B90CD0E02496DC2FCC278E0185
203 203 :100CA0000F5F1F4F60E1C8010E949500C8010E94BC
204 204 :100CB000B3008111FBCF6FEFCE010296DF91CF9190
205 205 :100CC0001F910F910C949500CF92DF92EF92FF92BB
206 206 :100CD0000F931F93CF93DF93C82FC62E8A01D22E76
207   -:100CE00088E991E00E94270C8FEF8C0DEC2EF12CFF
  207 +:100CE0008FE991E00E94B90C8FEF8C0DEC2EF12C66
208 208 :100CF0008530D0F58C2F0E944206E7012496DC2F28
209 209 :100D0000CC276C2D6D29CE010E949500CE01049652
210 210 :100D10009E012B5F3F4F69010115110529F0612FDD
211   -:100D20000E949500602F0FC0209132033091330351
212   -:100D30002F5F3F4F3093330320933203632F0E9482
213   -:100D4000950060913203C6010E9495008E010F5FED
  211 +:100D20000E949500602F0FC020919E0330919F0379
  212 +:100D30002F5F3F4F30939F0320939E03632F0E94AA
  213 +:100D4000950060919E03C6010E9495008E010F5F81
214 214 :100D50001F4F61E0C8010E949500C8010E94B300C6
215 215 :100D60008111FBCF11E001C010E0E7012496DC2FD8
216 216 :100D7000CC27CE010E94B300082FCE0103960E941B
217   -:100D8000B3001F920F931F928F9382EA91E09F937B
218   -:100D90008F930E94110C0F900F900F900F900F9057
  217 +:100D8000B3001F920F931F928F9389EA91E09F9374
  218 +:100D90008F930E94A30C0F900F900F900F900F90C5
219 219 :100DA0000F90812FDF91CF911F910F91FF90EF90C6
220   -:100DB000DF90CF900895CF93DF93C82F83EC91E01D
221   -:100DC0000E94270CD0E02496DC2FCC27CE0103967E
222   -:100DD0000E94B300833161F4219662E0CE010E944B
223   -:100DE0009500CE010E94B3008111FBCF81E005C0C8
224   -:100DF0008DEC91E00E94270C80E0DF91CF91089567
225   -:100E0000EF92FF920F931F93CF93DF93C82F8B0125
226   -:100E10007A0187EE91E00E94270CF80160816F3F14
227   -:100E200051F481818F3F99F482818F3F81F48381D6
228   -:100E30008F3F69F40FC061110AC0F80181818111EF
229   -:100E400006C08281811103C08381882319F0E114D7
230   -:100E5000F10431F48DEC91E00E94270C80E02FC06A
231   -:100E6000D0E02496DC2FCC27CE010C960E94950072
232   -:100E7000F8016181CE010D960E949500F801628112
233   -:100E8000CE010E960E949500F8016381CE010F9667
234   -:100E90000E9495006F2DCE0140960E9495006E2D08
235   -:100EA000CE0141960E949500219664E0CE010E94F9
236   -:100EB0009500CE010E94B3008111FBCF81E0DF914C
237   -:100EC000CF911F910F91FF90EF900895CF93DF93F3
238   -:100ED000C82F84EE91E00E94270CD0E0DC2FCC27B5
239   -:100EE000CF5FDB4F68E0CE010E949500CE010E94EB
240   -:100EF000B3008111FBCFDF91CF9108955F926F9284
241   -:100F00007F928F929F92AF92BF92CF92DF92EF9299
242   -:100F1000FF920F931F93CF93DF93582E3B018A01CB
243   -:100F200087ED92E00E94270C852D0E9468008017B3
244   -:100F3000910720F4852D0E9468008C01C52CD12CCE
245   -:100F4000E6012496DC2FCC275E0183E0A80EB11CBD
246   -:100F500092EF892E91E0992E852D0E94AF047C019D
247   -:100F6000C5010E94B300873111F08C3191F4FF92DA
248   -:100F7000EF92DF92CF929F928F920E94110C0F906E
249   -:100F80000F900F900F900F900F90E016F10620F346
250   -:100F900002C000E010E0A801B301852D0E946705A2
251   -:100FA0007E018FEFE81AF80A60E2C7010E949500FF
252   -:100FB000C7010E94B3008111FBCF2296CE010E948F
253   -:100FC000B30084FD0FC0C5010E94B3008111F6CFAC
254   -:100FD0008AE192E00E94270C852D0E94420680E063
255   -:100FE00090E005C060E1CE010E949500C801DF914C
256   -:100FF000CF911F910F91FF90EF90DF90CF90BF9016
257   -:10100000AF909F908F907F906F905F900895EF9238
258   -:10101000FF920F931F93CF93DF9300D0CDB7DEB72E
259   -:10102000F82E8A0188E292E069837A830E94270C75
260   -:1010300069817A8101151105A9F0A8018F2D0E94FF
261   -:10104000F5058F2D90E0982F88279C012F5F3B4F4F
262   -:10105000790160E4C9010E949500C7010E94B300B4
263   -:101060008111FBCFC8010F900F90DF91CF911F919D
264   -:101070000F91FF90EF9008958F929F92BF92CF9221
265   -:10108000DF92EF92FF920F931F93CF93DF93B82ECF
266   -:101090004B01EA01790180E392E00E94270C8B2D3D
267   -:1010A0000E9468008C179D0728F48B2D0E94680011
268   -:1010B0006C0101C06E01F7016081611109C081817D
269   -:1010C000811106C08281811103C08381882331F0A0
270   -:1010D0000115110519F0C114D10429F5DF93CF933F
271   -:1010E0001F930F93F70183811F928F9382811F9229
272   -:1010F0008F9381811F928F931F926F931F92BF9244
273   -:101100008AE392E09F938F930E94110C8DEC91E003
274   -:101110000E94270C8DB79EB740960FB6F8949EBFDD
275   -:101120000FBE8DBF49C0CB2DD0E02496DC2FCC273D
276   -:10113000CE010C960E949500F7016181CE010D96BB
277   -:101140000E949500F7016281CE010E960E949500E3
278   -:10115000F7016381CE010F960E949500612FCE01A9
279   -:1011600040960E949500602FCE0141960E94950006
280   -:10117000A601B4018B2D0E9467058E010F5F1F4FE2
281   -:1011800060E2C8010E949500C8010E94B30081116D
282   -:10119000FBCF2296CE010E94B30084FD10C0CE0189
283   -:1011A0000E94B30083FFF6CF81EF92E00E94270CEC
284   -:1011B00068E1CE010E94950080E090E005C060E10A
285   -:1011C000CE010E949500C601DF91CF911F910F9132
286   -:1011D000FF90EF90DF90CF90BF909F908F900895F9
287   -:1011E0002F923F924F925F927F928F929F92AF92F7
288   -:1011F000BF92CF92DF92EF92FF920F931F93CF9304
289   -:10120000DF93CDB7DEB72A970FB6F894DEBF0FBED7
290   -:10121000CDBF782E4B016A0179011A87098782E6D2
291   -:1012200092E00E94270CCD2809F40FC1472C512CC5
292   -:1012300084E0480E511C542C4424520198E2A90E1B
293   -:10124000B11CC5010E94B300082F10E0102F002729
294   -:101250006201E9E2CE0ED11CC6010E94B300080F64
295   -:10126000111D1F930F9387E791E09F938F930E9427
296   -:10127000110CC2010E94B3000F900F900F900F90BD
297   -:101280008770833009F460C0843009F4A7C08230CD
298   -:1012900009F0CCC028E030E0AE014F5F5F4FB801ED
299   -:1012A000872D0E94AE051801F8E02F0E311C8981B0
300   -:1012B000F70180838A8181838B8182838C81838300
301   -:1012C0008D8190E0982F88272E81820F911DE985CE
302   -:1012D000FA85918380830F8110E0102F0027888585
303   -:1012E000080F111D8EE692E00E94270CE985FA8511
304   -:1012F00081818F9380818F938FE792E09F938F936B
305   -:101300000E94110CF70183811F928F9382811F929B
306   -:101310008F9381811F928F9380811F928F9382E997
307   -:1013200092E09F938F930E94110C9801A401B10148
308   -:10133000872D0E94AE057101E00EF11E6F2DC501D3
309   -:101340000E9495006E2D41C026E030E0AE014F5F57
310   -:101350005F4FB801872D0E94AE05180196E0290E57
311   -:10136000311C8981F70180838A8181838B8182830B
312   -:101370008C8183830D8110E0102F00278E81080F50
313   -:10138000111D8CEA92E00E94270CF70183811F92C5
314   -:101390008F9382811F928F9381811F928F9380817F
315   -:1013A0001F928F9382E992E09F938F930E94110C7A
316   -:1013B0009801A401B101872D0E94AE05200E311EB7
317   -:1013C000632DC5010E949500622DC6010E94950003
318   -:1013D0000FB6F894DEBF0FBECDBF2AC022E030E0CA
319   -:1013E000AE014F5F5F4FB801872D0E94AE057801B7
320   -:1013F00092E0E90EF11C098110E0902F88270A8104
321   -:1014000010E002501109080F191F9801A401B7013B
322   -:10141000872D0E94AE05E00EF11E6F2DC5010E94C2
323   -:1014200095006E2DC6010E94950002C000E010E0FC
324   -:10143000EFEF4E1A5E0A60E4C2010E949500C201FD
325   -:101440000E94B3008111FBCF02C000E010E080ECED
326   -:1014500092E00E94270CC8012A960FB6F894DEBFCE
327   -:101460000FBECDBFDF91CF911F910F91FF90EF90F5
328   -:10147000DF90CF90BF90AF909F908F907F905F90C4
329   -:101480004F903F902F900895CF92DF92FF920F934D
330   -:101490001F93CF93DF93F82E6B01EA0183ED92E067
331   -:1014A0000E94270C8F2D0E9468008C179D0728F43E
332   -:1014B0008F2D0E9468008C0101C08E01011511055D
333   -:1014C00089F41F921F92DF93CF938FED92E09F9349
334   -:1014D0008F930E94110C0F900F900F900F900F9010
335   -:1014E0000F9030C0A801B6018F2D0E946705CF2D47
336   -:1014F000D0E02496DC2FCC276E018FEFC81AD80AD3
337   -:1015000060E2C6010E949500C6010E94B3008111ED
338   -:10151000FBCF6E0182E0C80ED11C2396C6010E944B
339   -:10152000B30084FD12C0CE010E94B300C6010E9428
340   -:10153000B30083FFF3CF8DEE92E00E94270C8F2D36
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   -:1016A00074E284EF90E00E94EF0B215031093093F7
364   -:1016B000C5002093C40088E18093C10086E0809338
365   -:1016C000C200E0ECF0E080818D7F808308959091EE
366   -:1016D000C00095FFFCCF8093C6000895CF93C82F1C
367   -:1016E0008A3019F48DE00E94670B8C2F0E94670BE3
368   -:1016F00080E090E0CF9108958091C00087FFFCCFFB
369   -:101700008091C600089580E895E20E94420B80E037
370   -:1017100091E090933703809336030895FF920F93DF
371   -:101720001F93CF93DF93CDB7DEB7A4970FB6F8948E
372   -:10173000DEBF0FBECDBF86E0EEE0F1E0DE015196E8
373   -:1017400001900D928A95E1F72CEA2F8F9AE198A3E8
374   -:1017500081E989A33DEC3AA32B8F9C8F8D8F8EEF6F
375   -:101760008E8F8FEF8F8B888F898F1A8E0E94830BBD
376   -:101770009E01295E3F4FAE01455E5F4FBE01615E37
377   -:101780007F4FCE0141960E94B20A20E044EE57E01E
378   -:1017900062E080E00E946406F82EFF2071F08E0166
379   -:1017A0000D5D1F4F20E030E040E150E0BE016F5F73
380   -:1017B0007F4F80E00E94F008F0CF84E191E00E942A
381   -:1017C000270C80E090E0A4960FB6F894DEBF0FBE21
382   -:1017D000CDBFDF91CF911F910F91FF900895A1E2AE
383   -:1017E0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F9B
384   -:1017F000FF1FA217B307E407F50720F0A21BB30BE6
385   -:10180000E40BF50B661F771F881F991F1A9469F761
386   -:1018100060957095809590959B01AC01BD01CF01BD
387   -:101820000895A0E0B0E0E7E1FCE00C94E50EAE0125
388   -:101830004B5F5F4FFA0161917191AF018091360367
389   -:10184000909137030E94570CE2E00C94010F0F9324
390   -:101850001F93CF93DF93E0913603F09137032381F9
391   -:1018600021FF1BC08C01D0E0C0E0F80181918F0105
392   -:101870006091360370913703DB011896ED91FC916E
393   -:101880001997882331F00995892B79F3DFEFCFEF92
394   -:10189000ECCF8AE00995892B19F08FEF9FEF02C0FA
395   -:1018A0008D2F9C2FDF91CF911F910F910895ACE068
396   -:1018B000B0E0EDE5FCE00C94D50E7C016B018A01F3
397   -:1018C000FC0117821682838181FFBDC1CE01019682
398   -:1018D0004C01F7019381F60193FD859193FF81916E
399   -:1018E0006F01882309F4ABC1853239F493FD8591EA
400   -:1018F00093FF81916F01853229F4B70190E00E9436
401   -:101900003F0EE7CF512C312C20E02032A0F48B3257
402   -:1019100069F030F4803259F0833269F420612CC0D0
403   -:101920008D3239F0803339F4216026C02260246082
404   -:1019300023C0286021C027FD27C030ED380F3A3082
405   -:1019400078F426FF06C0FAE05F9E300D1124532E76
406   -:1019500013C08AE0389E300D1124332E20620CC053
407   -:101960008E3221F426FD6BC1206406C08C3611F442
408   -:10197000206802C0883641F4F60193FD859193FFFB
409   -:1019800081916F018111C1CF982F9F7D9554933024
410   -:1019900028F40C5F1F4FFFE3F9830DC0833631F04D
411   -:1019A000833771F0833509F05BC022C0F801808174
412   -:1019B00089830E5F1F4F44244394512C540115C05A
413   -:1019C0003801F2E06F0E711CF801A080B18026FF93
414   -:1019D00003C0652D70E002C06FEF7FEFC5012C875B
415   -:1019E0000E94340E2C0183012C852F77222E17C0E4
416   -:1019F0003801F2E06F0E711CF801A080B18026FF63
417   -:101A000003C0652D70E002C06FEF7FEFC5012C872A
418   -:101A10000E94290E2C012C852068222E830123FC94
419   -:101A20001BC0832D90E048165906B0F4B70180E240
420   -:101A300090E00E943F0E3A94F4CFF50127FC859187
421   -:101A400027FE81915F01B70190E00E943F0E3110A7
422   -:101A50003A94F1E04F1A51084114510471F7E5C06E
423   -:101A6000843611F0893639F5F80127FF07C0608107
424   -:101A70007181828193810C5F1F4F08C060817181E9
425   -:101A8000072E000C880B990B0E5F1F4F2F76722EBE
426   -:101A900097FF09C090958095709561957F4F8F4F06
427   -:101AA0009F4F2068722E2AE030E0A4010E94770E3A
428   -:101AB000A82EA81844C0853729F42F7EB22E2AE01C
429   -:101AC00030E025C0F22FF97FBF2E8F36C1F018F419
430   -:101AD000883579F0B4C0803719F0883721F0AFC06D
431   -:101AE0002F2F2061B22EB4FE0DC08B2D8460B82E36
432   -:101AF00009C024FF0AC09F2F9660B92E06C028E0B7
433   -:101B000030E005C020E130E002C020E132E0F80121
434   -:101B1000B7FE07C060817181828193810C5F1F4F86
435   -:101B200006C06081718180E090E00E5F1F4FA401CC
436   -:101B30000E94770EA82EA818FB2DFF777F2E76FE29
437   -:101B40000BC0372D3E7FA51450F474FE0AC072FC02
438   -:101B500008C0372D3E7E05C0BA2C372D03C0BA2CE5
439   -:101B600001C0B52C34FF0DC0FE01EA0DF11D8081CE
440   -:101B7000803311F4397E09C032FF06C0B394B394A8
441   -:101B800004C0832F867809F0B39433FD13C030FF6F
442   -:101B900006C05A2CB31418F4530C5B18B32CB314AE
443   -:101BA00068F4B70180E290E03C870E943F0EB39456
444   -:101BB0003C85F5CFB31410F43B1801C0312C34FF31
445   -:101BC00012C0B70180E390E03C870E943F0E3C8545
446   -:101BD00032FF17C031FD03C088E790E002C088E5FE
447   -:101BE00090E0B7010CC0832F867859F031FF02C016
448   -:101BF0008BE201C080E237FD8DE2B70190E00E94E8
449   -:101C00003F0EA51438F4B70180E390E00E943F0E28
450   -:101C10005A94F7CFAA94F401EA0DF11D8081B7011F
451   -:101C200090E00E943F0EA110F5CF332009F451CE71
452   -:101C3000B70180E290E00E943F0E3A94F6CFF701A0
453   -:101C40008681978102C08FEF9FEF2C96E2E10C9482
454   -:101C5000F10EFC010590615070400110D8F780959D
455   -:101C600090958E0F9F1F0895FC0161507040019068
456   -:101C70000110D8F7809590958E0F9F1F08950F93B0
457   -:101C80001F93CF93DF93FB01238121FD03C08FEFCF
458   -:101C90009FEF28C022FF16C04681578124813581DD
459   -:101CA0004217530744F4A081B1819D012F5F3F4F3C
460   -:101CB000318320838C93268137812F5F3F4F378379
461   -:101CC000268310C0EB01092F182F0084F185E02D29
462   -:101CD0000995892BE1F68E819F8101969F838E83E2
463   -:101CE000812F902FDF91CF911F910F910895FA01CD
464   -:101CF000AA27283051F1203181F1E8946F936E7F4B
465   -:101D00006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E03B
466   -:101D10003CD0670F781F891F9A1FA11D680F791F7C
467   -:101D20008A1F911DA11D6A0F711D811D911DA11D8D
468   -:101D300020D009F468943F912AE0269F112430199D
469   -:101D4000305D3193DEF6CF010895462F4770405D38
470   -:101D50004193B3E00FD0C9F7F6CF462F4F70405DE7
471   -:101D60004A3318F0495D31FD4052419302D0A9F742
472   -:101D7000EACFB4E0A6959795879577956795BA953C
473   -:101D8000C9F700976105710508959B01AC010A2E02
474   -:101D900006945795479537952795BA95C9F7620FD9
475   -:101DA000731F841F951FA01D08952F923F924F927D
476   -:101DB0005F926F927F928F929F92AF92BF92CF92DB
477   -:101DC000DF92EF92FF920F931F93CF93DF93CDB7E4
478   -:101DD000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF5C
479   -:101DE00009942A88398848885F846E847D848C842D
480   -:101DF0009B84AA84B984C884DF80EE80FD800C8136
481   -:101E00001B81AA81B981CE0FD11D0FB6F894DEBF18
482   -:0C1E10000FBECDBFED010895F894FFCF88
483   -:101E1C0000000002000000006E0B00000000A0BDDE
484   -:101E2C00CDDDEDFD536F7274696520626F75636C67
485   -:101E3C006500737973696E697428290D00436861B4
486   -:101E4C006E6E656C203A2053454E44204D454D2016
487   -:101E5C0053495A45203A2052454356204D454D2072
488   -:101E6C0053495A450D002564203A20252E347820FC
489   -:101E7C003A20252E3478203A20252E3478203A200A
490   -:101E8C00252E34780D0A004953525F52583A20726D
491   -:101E9C00645F707472203A20252E34780D0A00632A
492   -:101EAC006C6F736528290D00736F636B657428293B
493   -:101EBC000D00536E5F5352203D20252E3278202C7E
494   -:101ECC002050726F746F636F6C203D20252E32781A
495   -:101EDC000D0A006C697374656E28290D00466169E2
496   -:101EEC006C5B696E76616C69642069702C706F72C2
497   -:101EFC00745D0D00646973636F6E6E65637428297D
498   -:101F0C000D00736F636B65742025642066726565C4
499   -:101F1C0073697A652825642920656D707479206F42
500   -:101F2C0072206572726F720D0A00534F434B5F4300
501   -:101F3C004C4F5345442E0D007265637628290D00D5
502   -:101F4C0073656E64746F28290D00256420466169E1
503   -:101F5C006C5B252E32782E252E32782E252E32785B
504   -:101F6C002E252E32782C20252E642C2025645D0DF8
505   -:101F7C000A007265637666726F6D28290D005544F0
506   -:101F8C0050206D736720617272697665640D007301
507   -:101F9C006F7572636520506F7274203A2025640D42
508   -:101FAC000A00736F75726365204950203A202564CE
509   -:101FBC002E25642E25642E25640D0A0049502052CE
510   -:101FCC004157206D736720617272697665640D00EC
511   -:101FDC007265637666726F6D282920656E64202E9B
512   -:101FEC002E0D0069676D7073656E6428290D0025D0
513   -:101FFC0064204661696C5B25645D0D0A0069676D40
514   -:0E200C007073656E64206661696C2E0D0000B5
  220 +:100DB000DF90CF9008950F931F93CF93DF93C82FA9
  221 +:100DC0008AEC91E00E94B90CD0E02496DC2FCC276D
  222 +:100DD0008E010D5F1F4FC8010E94B3008331D9F40B
  223 +:100DE000219662E0CE010E949500CE010E94B300E0
  224 +:100DF0008111FBCFC8010E94B3001F928F9384ED35
  225 +:100E000091E09F938F930E94A30C0F900F900F90EF
  226 +:100E10000F9081E005C082EE91E00E94B90C80E065
  227 +:100E2000DF91CF911F910F910895CF93DF93C82F3A
  228 +:100E300089EF91E00E94B90CD0E0DC2FCC27CD5F88
  229 +:100E4000DB4FCE010E94B3008431B1F4CE010E9489
  230 +:100E5000B3008731D9F7CE010E94B3001F928F9360
  231 +:100E600084ED91E09F938F930E94A30C0F900F90BD
  232 +:100E70000F900F9081E005C083E092E00E94B90CD2
  233 +:100E800080E0DF91CF910895EF92FF920F931F932F
  234 +:100E9000CF93DF93C82F8B017A018BE192E00E9400
  235 +:100EA000B90CF80160816F3F51F481818F3F99F453
  236 +:100EB00082818F3F81F483818F3F69F40FC061117C
  237 +:100EC0000AC0F8018181811106C08281811103C0AD
  238 +:100ED0008381882319F0E114F10431F482EE91E06A
  239 +:100EE0000E94B90C80E02FC0D0E02496DC2FCC27E4
  240 +:100EF000CE010C960E949500F8016181CE010D96FD
  241 +:100F00000E949500F8016281CE010E960E94950024
  242 +:100F1000F8016381CE010F960E9495006F2DCE01DE
  243 +:100F200040960E9495006E2DCE0141960E9495003C
  244 +:100F3000219664E0CE010E949500CE010E94B3008C
  245 +:100F40008111FBCF81E0DF91CF911F910F91FF9035
  246 +:100F5000EF900895CF93DF93C82F88E192E00E942D
  247 +:100F6000B90CD0E0DC2FCC27CF5FDB4F68E0CE019F
  248 +:100F70000E949500CE010E94B3008111FBCFDF914A
  249 +:100F8000CF9108958F929F92AF92BF92CF92DF92AE
  250 +:100F9000EF92FF921F93CF93DF93182F4B017A01AB
  251 +:100FA00083E493E00E94B90C812F0E9468008E15A3
  252 +:100FB0009F0520F4812F0E9468007C01C12FD0E0A2
  253 +:100FC0002496DC2FCC275E0183E0A80EB11C812F74
  254 +:100FD0000E94AF046C01C5010E94B3008731A9F0E3
  255 +:100FE0008C3199F0DF92CF921F921F9386E292E0AC
  256 +:100FF0009F938F930E94A30C0F900F900F900F90D0
  257 +:101000000F900F90E12CF12C03C0CE14DF04F8F206
  258 +:10101000A701B401812F0E9467056E018FEFC81AE6
  259 +:10102000D80A60E2C6010E949500C6010E94B30082
  260 +:101030008111FBCF2296CE010E94B30084FD0FC028
  261 +:10104000C5010E94B3008111F6CF8EE492E00E94A8
  262 +:10105000B90C812F0E94420680E090E005C060E15B
  263 +:10106000CE010E949500C701DF91CF911F91FF90A3
  264 +:10107000EF90DF90CF90BF90AF909F908F900895AA
  265 +:10108000BF92CF92DF92EF92FF920F931F93CF9375
  266 +:10109000DF93B82E6B018A01C82FD0E02496DC2F95
  267 +:1010A000CC277E0183E0E80EF11CC7010E94B3004B
  268 +:1010B000873191F0C7010E94B3001F928F938CE596
  269 +:1010C00092E09F938F930E94A30C0F900F900F902C
  270 +:1010D0000F908FEF9FEF26C080E00E94EB047C0111
  271 +:1010E00018161906ECF48FE692E00E94B90CE0168F
  272 +:1010F000F10620F00115110589F001C08701A80152
  273 +:10110000B6018B2D0E94F505219660E4CE010E9468
  274 +:101110009500CE010E94B3008111FBCFC80102C02F
  275 +:1011200080E090E0DF91CF911F910F91FF90EF90C1
  276 +:10113000DF90CF90BF9008958F929F92BF92CF92F1
  277 +:10114000DF92EF92FF920F931F93CF93DF93B82E0E
  278 +:101150004B01EA01790187E792E00E94B90C8B2DDF
  279 +:101160000E9468008C179D0728F48B2D0E94680050
  280 +:101170006C0101C06E01F7016081611109C08181BC
  281 +:10118000811106C08281811103C08381882331F0DF
  282 +:101190000115110519F0C114D10429F5DF93CF937E
  283 +:1011A0001F930F93F70183811F928F9382811F9268
  284 +:1011B0008F9381811F928F931F926F931F92BF9283
  285 +:1011C00081E892E09F938F930E94A30C82EE91E0BE
  286 +:1011D0000E94B90C8DB79EB740960FB6F8949EBF8B
  287 +:1011E0000FBE8DBF49C0CB2DD0E02496DC2FCC277D
  288 +:1011F000CE010C960E949500F7016181CE010D96FB
  289 +:101200000E949500F7016281CE010E960E94950022
  290 +:10121000F7016381CE010F960E949500612FCE01E8
  291 +:1012200040960E949500602FCE0141960E94950045
  292 +:10123000A601B4018B2D0E9467058E010F5F1F4F21
  293 +:1012400060E2C8010E949500C8010E94B3008111AC
  294 +:10125000FBCF2296CE010E94B30084FD10C0CE01C8
  295 +:101260000E94B30083FFF6CF8DE593E00E94B90C96
  296 +:1012700068E1CE010E94950080E090E005C060E149
  297 +:10128000CE010E949500C601DF91CF911F910F9171
  298 +:10129000FF90EF90DF90CF90BF909F908F90089538
  299 +:1012A0002F923F924F925F926F927F928F929F9276
  300 +:1012B000AF92BF92CF92DF92EF92FF920F931F9364
  301 +:1012C000CF93DF93CDB7DEB72A970FB6F894DEBF82
  302 +:1012D0000FBECDBF782E4B016A0179011A870987AD
  303 +:1012E0000E94EB04892B09F42BC189EA92E00E9449
  304 +:1012F000B90C872D0E94EB04682E392ECD2809F4F5
  305 +:1013000017C1472C512C84E0480E511C542C442406
  306 +:10131000520198E2A90EB11CC5010E94B300082F2A
  307 +:1013200010E0102F00276201E9E2CE0ED11CC601A9
  308 +:101330000E94B300080F111D3F926F921F930F93ED
  309 +:1013400085EB92E09F938F930E94A30CC2010E94B1
  310 +:10135000B3000F900F900F900F900F900F90877029
  311 +:10136000833009F464C0843009F4ABC0823009F0E2
  312 +:10137000D0C028E030E0AE014F5F5F4FB801872D4D
  313 +:101380000E94AE051801F8E02F0E311C8981F7018B
  314 +:1013900080838A8181838B8182838C8183838D8109
  315 +:1013A00090E0982F88272E81820F911DE985FA857C
  316 +:1013B000918380830F8110E0102F00278885080F0C
  317 +:1013C000111D1F930F9385ED92E09F938F930E94C1
  318 +:1013D000A30CE985FA8581818F9380818F938BEEB1
  319 +:1013E00092E09F938F930E94A30CF70183811F9239
  320 +:1013F0008F9382811F928F9381811F928F9380811F
  321 +:101400001F928F938EEF92E09F938F930E94A30C75
  322 +:101410009801A401B101872D0E94AE057101E00E73
  323 +:10142000F11E6F2DC5010E9495006E2D41C026E072
  324 +:1014300030E0AE014F5F5F4FB801872D0E94AE05CF
  325 +:10144000180196E0290E311C8981F70180838A8179
  326 +:1014500081838B8182838C8183830D8110E0102FA7
  327 +:1014600000278E81080F111D88E193E00E94B90CBE
  328 +:10147000F70183811F928F9382811F928F938181C5
  329 +:101480001F928F9380811F928F938EEF92E09F9394
  330 +:101490008F930E94A30C9801A401B101872D0E9493
  331 +:1014A000AE05200E311E632DC5010E949500622DF0
  332 +:1014B000C6010E9495000FB6F894DEBF0FBECDBFE7
  333 +:1014C0002AC022E030E0AE014F5F5F4FB801872DA8
  334 +:1014D0000E94AE05780192E0E90EF11C098110E04E
  335 +:1014E000902F88270A8110E002501109080F191F58
  336 +:1014F0009801A401B701872D0E94AE05E00EF11EF0
  337 +:101500006F2DC5010E9495006E2DC6010E949500A9
  338 +:1015100002C000E010E0EFEF4E1A5E0A60E4C20184
  339 +:101520000E949500C2010E94B3008111FBCF02C04E
  340 +:1015300000E010E08CE293E00E94B90CC80102C008
  341 +:1015400080E090E02A960FB6F894DEBF0FBECDBFC4
  342 +:10155000DF91CF911F910F91FF90EF90DF90CF908F
  343 +:10156000BF90AF909F908F907F906F905F904F90C3
  344 +:101570003F902F900895CF92DF92FF920F931F9389
  345 +:10158000CF93DF93F82E6B01EA018FE393E00E9483
  346 +:10159000B90C8F2D0E9468008C179D0728F48F2DA1
  347 +:1015A0000E9468008C0101C08E010115110589F4AB
  348 +:1015B0001F921F92DF93CF938BE493E09F938F93BF
  349 +:1015C0000E94A30C0F900F900F900F900F900F9010
  350 +:1015D00030C0A801B6018F2D0E946705CF2DD0E045
  351 +:1015E0002496DC2FCC276E018FEFC81AD80A60E250
  352 +:1015F000C6010E949500C6010E94B3008111FBCF75
  353 +:101600006E0182E0C80ED11C2396C6010E94B30071
  354 +:1016100084FD12C0CE010E94B300C6010E94B30037
  355 +:1016200083FFF3CF89E593E00E94B90C8F2D0E94D0
  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 +:1017900084EF90E00E94810C215031093093C50004
  379 +:1017A0002093C40088E18093C10086E08093C2004A
  380 +:1017B000E0ECF0E080818D7F808308959091C000FF
  381 +:1017C00095FFFCCF8093C6000895CF93C82F8A3031
  382 +:1017D00019F48DE00E94DE0B8C2F0E94DE0B80E05E
  383 +:1017E00090E0CF9108958091C00087FFFCCF809159
  384 +:1017F000C600089580E895E20E94B90B80E091E070
  385 +:101800009093A3038093A2030895CF93DF93CDB762
  386 +:10181000DEB7A2970FB6F894DEBF0FBECDBF86E04D
  387 +:10182000EEE0F1E0DE01519601900D928A95E1F72C
  388 +:101830002CEA2F8F9AE198A381E989A33DEC3AA382
  389 +:101840002B8F9C8F8D8F8EEF8E8F8FEF8F8B888F4E
  390 +:10185000898F1A8E87E0E4E1F1E0DE0111960190B4
  391 +:101860000D928A95E1F7FE01389689E0DF011D921D
  392 +:101870008A95E9F70E94FA0B9E01295E3F4FAE015F
  393 +:10188000455E5F4FBE01615E7F4FCE0141960E9473
  394 +:10189000290B20E044EE57E062E080E00E946406FD
  395 +:1018A000882321F120E044EE57E061E081E00E94CE
  396 +:1018B00064068823D9F081E00E94DB06882391F03A
  397 +:1018C00081E00E941507882369F084E291E00E947C
  398 +:1018D000B90C40E150E0BE016F5F7F4F81E00E9494
  399 +:1018E000C207E9CF81E00E944206DCCF8FEF9FEF75
  400 +:1018F000A2960FB6F894DEBF0FBECDBFDF91CF9199
  401 +:101900000895A1E21A2EAA1BBB1BFD010DC0AA1F40
  402 +:10191000BB1FEE1FFF1FA217B307E407F50720F058
  403 +:10192000A21BB30BE40BF50B661F771F881F991FD3
  404 +:101930001A9469F760957095809590959B01AC011C
  405 +:10194000BD01CF010895A0E0B0E0E9EAFCE00C940D
  406 +:10195000770FAE014B5F5F4FFA0161917191AF015B
  407 +:101960008091A2039091A3030E94E90CE2E00C9401
  408 +:10197000930F0F931F93CF93DF93E091A203F09106
  409 +:10198000A303238121FF1BC08C01D0E0C0E0F8013C
  410 +:1019900081918F016091A2037091A303DB011896DE
  411 +:1019A000ED91FC911997882331F00995892B79F3F2
  412 +:1019B000DFEFCFEFECCF8AE00995892B19F08FEF9D
  413 +:1019C0009FEF02C08D2F9C2FDF91CF911F910F9120
  414 +:1019D0000895ACE0B0E0EFEEFCE00C94670F7C0102
  415 +:1019E0006B018A01FC0117821682838181FFBDC1D0
  416 +:1019F000CE0101964C01F7019381F60193FD85918B
  417 +:101A000093FF81916F01882309F4ABC1853239F4CA
  418 +:101A100093FD859193FF81916F01853229F4B70180
  419 +:101A200090E00E94D10EE7CF512C312C20E02032E3
  420 +:101A3000A0F48B3269F030F4803259F0833269F4CB
  421 +:101A400020612CC08D3239F0803339F4216026C0FA
  422 +:101A50002260246023C0286021C027FD27C030ED0C
  423 +:101A6000380F3A3078F426FF06C0FAE05F9E300D5A
  424 +:101A70001124532E13C08AE0389E300D1124332ECA
  425 +:101A800020620CC08E3221F426FD6BC1206406C09A
  426 +:101A90008C3611F4206802C0883641F4F60193FDBB
  427 +:101AA000859193FF81916F018111C1CF982F9F7D07
  428 +:101AB0009554933028F40C5F1F4FFFE3F9830DC05A
  429 +:101AC000833631F0833771F0833509F05BC022C073
  430 +:101AD000F801808189830E5F1F4F44244394512C69
  431 +:101AE000540115C03801F2E06F0E711CF801A0809E
  432 +:101AF000B18026FF03C0652D70E002C06FEF7FEF5D
  433 +:101B0000C5012C870E94C60E2C0183012C852F77DE
  434 +:101B1000222E17C03801F2E06F0E711CF801A08070
  435 +:101B2000B18026FF03C0652D70E002C06FEF7FEF2C
  436 +:101B3000C5012C870E94BB0E2C012C852068222E0B
  437 +:101B4000830123FC1BC0832D90E048165906B0F496
  438 +:101B5000B70180E290E00E94D10E3A94F4CFF501F3
  439 +:101B600027FC859127FE81915F01B70190E00E94DB
  440 +:101B7000D10E31103A94F1E04F1A5108411451043A
  441 +:101B800071F7E5C0843611F0893639F5F80127FF81
  442 +:101B900007C060817181828193810C5F1F4F08C0F3
  443 +:101BA00060817181072E000C880B990B0E5F1F4F0F
  444 +:101BB0002F76722E97FF09C090958095709561954C
  445 +:101BC0007F4F8F4F9F4F2068722E2AE030E0A40194
  446 +:101BD0000E94090FA82EA81844C0853729F42F7E2B
  447 +:101BE000B22E2AE030E025C0F22FF97FBF2E8F36CB
  448 +:101BF000C1F018F4883579F0B4C0803719F088370F
  449 +:101C000021F0AFC02F2F2061B22EB4FE0DC08B2D5E
  450 +:101C10008460B82E09C024FF0AC09F2F9660B92E99
  451 +:101C200006C028E030E005C020E130E002C020E13D
  452 +:101C300032E0F801B7FE07C0608171818281938133
  453 +:101C40000C5F1F4F06C06081718180E090E00E5FE5
  454 +:101C50001F4FA4010E94090FA82EA818FB2DFF7783
  455 +:101C60007F2E76FE0BC0372D3E7FA51450F474FEF8
  456 +:101C70000AC072FC08C0372D3E7E05C0BA2C372D35
  457 +:101C800003C0BA2C01C0B52C34FF0DC0FE01EA0D13
  458 +:101C9000F11D8081803311F4397E09C032FF06C006
  459 +:101CA000B394B39404C0832F867809F0B39433FDC2
  460 +:101CB00013C030FF06C05A2CB31418F4530C5B1831
  461 +:101CC000B32CB31468F4B70180E290E03C870E9423
  462 +:101CD000D10EB3943C85F5CFB31410F43B1801C07A
  463 +:101CE000312C34FF12C0B70180E390E03C870E94A2
  464 +:101CF000D10E3C8532FF17C031FD03C088E790E06C
  465 +:101D000002C088E590E0B7010CC0832F867859F0B7
  466 +:101D100031FF02C08BE201C080E237FD8DE2B701E6
  467 +:101D200090E00E94D10EA51438F4B70180E390E052
  468 +:101D30000E94D10E5A94F7CFAA94F401EA0DF11D36
  469 +:101D40008081B70190E00E94D10EA110F5CF332021
  470 +:101D500009F451CEB70180E290E00E94D10E3A948E
  471 +:101D6000F6CFF7018681978102C08FEF9FEF2C9607
  472 +:101D7000E2E10C94830FFC0105906150704001106A
  473 +:101D8000D8F7809590958E0F9F1F0895FC016150A4
  474 +:101D9000704001900110D8F7809590958E0F9F1F8D
  475 +:101DA00008950F931F93CF93DF93FB01238121FDB0
  476 +:101DB00003C08FEF9FEF28C022FF16C046815781D6
  477 +:101DC000248135814217530744F4A081B1819D01DC
  478 +:101DD0002F5F3F4F318320838C93268137812F5F84
  479 +:101DE0003F4F3783268310C0EB01092F182F008443
  480 +:101DF000F185E02D0995892BE1F68E819F81019671
  481 +:101E00009F838E83812F902FDF91CF911F910F9110
  482 +:101E10000895FA01AA27283051F1203181F1E89480
  483 +:101E20006F936E7F6E5F7F4F8F4F9F4FAF4FB1E0CD
  484 +:101E30003ED0B4E03CD0670F781F891F9A1FA11DC8
  485 +:101E4000680F791F8A1F911DA11D6A0F711D811DC9
  486 +:101E5000911DA11D20D009F468943F912AE0269F8E
  487 +:101E600011243019305D3193DEF6CF010895462FED
  488 +:101E70004770405D4193B3E00FD0C9F7F6CF462FCE
  489 +:101E80004F70405D4A3318F0495D31FD4052419337
  490 +:101E900002D0A9F7EACFB4E0A695979587957795F4
  491 +:101EA0006795BA95C9F700976105710508959B017B
  492 +:101EB000AC010A2E06945795479537952795BA9504
  493 +:101EC000C9F7620F731F841F951FA01D08952F92DD
  494 +:101ED0003F924F925F926F927F928F929F92AF92BA
  495 +:101EE000BF92CF92DF92EF92FF920F931F93CF9307
  496 +:101EF000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF9E
  497 +:101F00000FBECDBF09942A88398848885F846E84C3
  498 +:101F10007D848C849B84AA84B984C884DF80EE800D
  499 +:101F2000FD800C811B81AA81B981CE0FD11D0FB616
  500 +:101F3000F894DEBF0FBECDBFED010895F894FFCF3A
  501 +:101F40000000000200000000E50B00000000A0BD42
  502 +:101F5000CDDDEDFD49276D206F6B00000000000016
  503 +:101F6000000000007465737400737973696E69749E
  504 +:101F700028290D004368616E6E656C203A20534538
  505 +:101F80004E44204D454D2053495A45203A20524554
  506 +:101F90004356204D454D2053495A450D0025642098
  507 +:101FA0003A20252E3478203A20252E3478203A20E5
  508 +:101FB000252E3478203A20252E34780D0A004953F6
  509 +:101FC000525F52583A2072645F707472203A202532
  510 +:101FD0002E34780D0A00636C6F736528290D007329
  511 +:101FE0006F636B657428290D00536E5F5352203D5B
  512 +:101FF00020252E3278202C2050726F746F636F6C06
  513 +:10200000203D20252E32780D0A006C697374656EB0
  514 +:1020100028290D00737461747573203D2025780D97
  515 +:102020000A004661696C5B696E76616C696420695F
  516 +:10203000702C706F72745D0D00616363657074283D
  517 +:10204000290D004661696C5B6E6F74206C69737456
  518 +:10205000656E696E675D0D00646973636F6E6E65B2
  519 +:10206000637428290D00736F636B657420256420E9
  520 +:102070006672656573697A652825642920656D70C7
  521 +:102080007479206F72206572726F720D0A00534F5F
  522 +:10209000434B5F434C4F5345442E0D004261642037
  523 +:1020A000737461747573203D20253032780A007294
  524 +:1020B00065637628290D0073656E64746F28290D99
  525 +:1020C000002564204661696C5B252E32782E252E12
  526 +:1020D00032782E252E32782E252E32782C20252E61
  527 +:1020E000642C2025645D0D0A007265637666726F4C
  528 +:1020F0006D28290D004953525F52583A2072645F8F
  529 +:10210000707472203A20252E34782073697A653DE8
  530 +:1021100025640D0A00554450206D73672023256403
  531 +:1021200020617272697665640D0A00736F7572635F
  532 +:102130006520506F7274203A2025750D0A00736F68
  533 +:1021400075726365204950203A2025642E25642E3F
  534 +:1021500025642E25640D0A00495020524157206DF8
  535 +:10216000736720617272697665640D0072656376CB
  536 +:1021700066726F6D282920656E64202E2E0D006911
  537 +:10218000676D7073656E6428290D002564204661B3
  538 +:10219000696C5B25645D0D0A0069676D7073656E1F
  539 +:0A21A00064206661696C2E0D0000DA
515 540 :00000001FF
... ...
Tangible/tangibleInterface.o
No preview for this file type
Tangible/w5100.c 100755 → 100644
Tangible/w5100.h 100755 → 100644