1 // vim: set et sw=4 sts=4 :
16 // Hacemos prueba simple de los leds
19 // Inicializamos dispositivo de red
22 // Si hubo un error, quedan prendidos todos los leds
27 // Comienza a 'dibujar'
28 EA = 1; // Habilita interrupciones globalmente
29 TR2 = 1; // Pone a correr el 'dibujado'
32 ip_addr_local[0] = 10;
33 ip_addr_local[1] = 10;
34 ip_addr_local[2] = 10;
35 ip_addr_local[3] = 100;
37 // Inicializo puerto UDP
38 udp_port_local = 9876;
45 len = netdev_recv_start();
46 if (!len) // no recibimos nada (válido)
47 continue; // Probamos de nuevo
52 // Parseamos cabecera ethernet
53 if (!eth_read_frame_header()) // No es un buen header
54 goto drop; // Tiramos el paquete
57 // Vemos que protocolo transporta
60 case ETH_ARP: // TODO: implementar ARP!
61 goto drop; // Tiramos el paquete
65 // Parseamos cabecera IP
66 if (!ip_read_packet_header()) // No es un buen header
67 goto drop; // Tiramos el paquete
70 // Vemos que protocolo transporta
73 case IP_ICMP: // TODO: implementar ICMP!
74 goto drop; // Tiramos el paquete
78 // Parseamos cabecera UDP
79 if (!udp_read_dgram_header()) // No es un buen header
80 goto drop; // Tiramos el paquete
82 //printb(udp_dgram_len, 0x40);
84 // Nuestro protocolo, por ahora un simple echo!
85 len = udp_dgram_len - UDP_HEADER_SIZE;
86 netdev_read_start(len);
87 leds_matrix_len = len;
88 for (i = 0; i < len; ++i)
89 leds_matrix[i] = udp_read_byte();
91 if (!udp_checksum_ok())
97 eth_write_frame_header();
98 //udp_dgram_len = UDP_HEADER_SIZE+len;
99 //ip_packet_len = IP_HEADER_SIZE+udp_dgram_len;
100 ip_write_packet_header();
101 udp_write_dgram_header();
102 netdev_write_start(len);
103 for (i = 0; i < len; ++i)
104 udp_write_byte(leds_matrix[i]);
106 udp_write_checksum(ETH_HEADER_SIZE+IP_HEADER_SIZE);
107 netdev_send_end(ETH_HEADER_SIZE+IP_HEADER_SIZE+udp_dgram_len);