#include "debug.h"
#include "leds.h"
+#include "reg51.h"
#include "netdev.h"
#include "eth.h"
#include "ip.h"
void main(void)
{
- // Apagamos todos los leds
- leds(0);
+ // Inicializamos leds
+ leds_init();
+
+ // Hacemos prueba simple de los leds
+ leds_test();
// Inicializamos dispositivo de red
if (!netdev_init())
{
- leds(0xFFFF);
- while(1); // Si falla init nos quedamos bobos
+ // Si hubo un error, quedan prendidos todos los leds
+ leds_write(0xFFFF);
+ return;
}
+ // Comienza a 'dibujar'
+ EA = 1; // Habilita interrupciones globalmente
+ TR2 = 1; // Pone a correr el 'dibujado'
+
// Inicializo IP
ip_addr_local[0] = 10;
ip_addr_local[1] = 10;
while (1) // Forever
{
- byte buf[64]; //XXX
byte i; //XXX
+ byte len;
- if (!netdev_recv_start()) // no recibimos nada (válido)
+ len = netdev_recv_start();
+ if (!len) // no recibimos nada (válido)
continue; // Probamos de nuevo
// Tenemos algo!
//printb(udp_dgram_len, 0x40);
// TODO
// Nuestro protocolo, por ahora un simple echo!
- netdev_read_start(udp_dgram_len-UDP_HEADER_SIZE);
- for (i = 0; i < udp_dgram_len-UDP_HEADER_SIZE; ++i)
- buf[i] = netdev_read_byte();
+ len = udp_dgram_len - UDP_HEADER_SIZE;
+ netdev_read_start(len);
+ leds_matrix_len = len;
+ for (i = 0; i < len; ++i)
+ leds_matrix[i] = udp_read_byte();
netdev_read_end();
+ if (!udp_checksum_ok())
+ goto drop;
netdev_recv_end();
// Respuesta
netdev_send_start();
eth_write_frame_header();
+ //udp_dgram_len = UDP_HEADER_SIZE+len;
+ //ip_packet_len = IP_HEADER_SIZE+udp_dgram_len;
ip_write_packet_header();
udp_write_dgram_header();
- netdev_write_start(udp_dgram_len-UDP_HEADER_SIZE);
- for (i = 0; i < udp_dgram_len-UDP_HEADER_SIZE; ++i)
- netdev_write_byte(buf[i]);
+ netdev_write_start(len);
+ for (i = 0; i < len; ++i)
+ udp_write_byte(leds_matrix[i]);
netdev_write_end();
+ udp_write_checksum(ETH_HEADER_SIZE+IP_HEADER_SIZE);
netdev_send_end(ETH_HEADER_SIZE+IP_HEADER_SIZE+udp_dgram_len);
}
}