git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@311 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
d8e1d5a103
commit
16e097d23e
|
@ -74,7 +74,6 @@ KSRC = ../../src/chinit.c ../../src/chdebug.c \
|
||||||
# List of the required uIP source files.
|
# List of the required uIP source files.
|
||||||
USRC = ../../ext/uip-1.0/uip/uip_arp.c \
|
USRC = ../../ext/uip-1.0/uip/uip_arp.c \
|
||||||
../../ext/uip-1.0/uip/psock.c \
|
../../ext/uip-1.0/uip/psock.c \
|
||||||
../../ext/uip-1.0/uip/timer.c \
|
|
||||||
../../ext/uip-1.0/uip/uip.c \
|
../../ext/uip-1.0/uip/uip.c \
|
||||||
../../ext/uip-1.0/apps/webserver/httpd.c \
|
../../ext/uip-1.0/apps/webserver/httpd.c \
|
||||||
../../ext/uip-1.0/apps/webserver/http-strings.c \
|
../../ext/uip-1.0/apps/webserver/http-strings.c \
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include <uip.h>
|
#include <uip.h>
|
||||||
#include <uip_arp.h>
|
#include <uip_arp.h>
|
||||||
#include <httpd.h>
|
#include <httpd.h>
|
||||||
#include <timer.h>
|
|
||||||
#include <clock-arch.h>
|
#include <clock-arch.h>
|
||||||
|
|
||||||
//#define IPADDR0 192
|
//#define IPADDR0 192
|
||||||
|
@ -45,9 +44,6 @@ static const struct uip_eth_addr macaddr = {
|
||||||
{0xC2, 0xAF, 0x51, 0x03, 0xCF, 0x46}
|
{0xC2, 0xAF, 0x51, 0x03, 0xCF, 0x46}
|
||||||
};
|
};
|
||||||
|
|
||||||
static EvTimer evt;
|
|
||||||
struct EventListener el0, el1;
|
|
||||||
|
|
||||||
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
|
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -95,79 +91,92 @@ clock_time_t clock_time( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ethernet link status monitor.
|
* TCP/IP periodic timer.
|
||||||
*/
|
*/
|
||||||
static void TimerHandler(eventid_t id) {
|
static void PeriodicTimerHandler(eventid_t id) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < UIP_CONNS; i++) {
|
||||||
|
uip_periodic(i);
|
||||||
|
if (uip_len > 0) {
|
||||||
|
uip_arp_out();
|
||||||
|
network_device_send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ARP periodic timer.
|
||||||
|
*/
|
||||||
|
static void ARPTimerHandler(eventid_t id) {
|
||||||
|
|
||||||
|
uip_arp_timer();
|
||||||
(void)EMACGetLinkStatus();
|
(void)EMACGetLinkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ethernet frame received.
|
||||||
|
*/
|
||||||
|
static void FrameReceivedHandler(eventid_t id) {
|
||||||
|
|
||||||
|
while ((uip_len = network_device_read()) > 0) {
|
||||||
|
if (BUF->type == HTONS(UIP_ETHTYPE_IP)) {
|
||||||
|
uip_arp_ipin();
|
||||||
|
uip_input();
|
||||||
|
if (uip_len > 0) {
|
||||||
|
uip_arp_out();
|
||||||
|
network_device_send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
|
||||||
|
uip_arp_arpin();
|
||||||
|
if (uip_len > 0)
|
||||||
|
network_device_send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define FRAME_RECEIVED_ID 0
|
||||||
|
#define PERIODIC_TIMER_ID 1
|
||||||
|
#define ARP_TIMER_ID 2
|
||||||
|
|
||||||
|
static const evhandler_t evhndl[] = {
|
||||||
|
FrameReceivedHandler,
|
||||||
|
PeriodicTimerHandler,
|
||||||
|
ARPTimerHandler
|
||||||
|
};
|
||||||
|
|
||||||
msg_t WebThread(void *p) {
|
msg_t WebThread(void *p) {
|
||||||
static const evhandler_t evhndl[] = {
|
EvTimer evt1, evt2;
|
||||||
TimerHandler,
|
EventListener el0, el1, el2;
|
||||||
NULL
|
|
||||||
};
|
|
||||||
uip_ipaddr_t ipaddr;
|
uip_ipaddr_t ipaddr;
|
||||||
struct timer periodic_timer, arp_timer;
|
|
||||||
|
|
||||||
EMACSetAddress(&macaddr.addr[0]);
|
EMACSetAddress(&macaddr.addr[0]);
|
||||||
|
(void)EMACGetLinkStatus();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Event sources setup.
|
* Event sources setup.
|
||||||
*/
|
*/
|
||||||
evtInit(&evt, 1000); /* Initializes an event timer object. */
|
chEvtRegister(&EMACFrameReceived, &el0, FRAME_RECEIVED_ID);
|
||||||
evtStart(&evt); /* Starts the event timer. */
|
|
||||||
chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */
|
|
||||||
chEvtRegister(&EMACFrameReceived, &el1, 1);
|
|
||||||
|
|
||||||
/*
|
evtInit(&evt1, CH_FREQUENCY / 2);
|
||||||
|
evtStart(&evt1);
|
||||||
|
chEvtRegister(&evt1.et_es, &el1, PERIODIC_TIMER_ID);
|
||||||
|
|
||||||
|
evtInit(&evt2, CH_FREQUENCY * 10);
|
||||||
|
evtStart(&evt2);
|
||||||
|
chEvtRegister(&evt2.et_es, &el2, ARP_TIMER_ID);
|
||||||
|
|
||||||
|
/*
|
||||||
* uIP initialization.
|
* uIP initialization.
|
||||||
*/
|
*/
|
||||||
timer_set(&periodic_timer, CLOCK_SECOND / 2);
|
|
||||||
timer_set(&arp_timer, CLOCK_SECOND * 10);
|
|
||||||
uip_init();
|
uip_init();
|
||||||
uip_setethaddr(macaddr);
|
uip_setethaddr(macaddr);
|
||||||
uip_ipaddr(ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3);
|
uip_ipaddr(ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3);
|
||||||
uip_sethostaddr(ipaddr);
|
uip_sethostaddr(ipaddr);
|
||||||
httpd_init();
|
httpd_init();
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE)
|
||||||
uip_len = network_device_read();
|
chEvtWait(ALL_EVENTS, evhndl);
|
||||||
if (uip_len > 0) {
|
|
||||||
if (BUF->type == HTONS(UIP_ETHTYPE_IP)) {
|
|
||||||
uip_arp_ipin();
|
|
||||||
uip_input();
|
|
||||||
if (uip_len > 0) {
|
|
||||||
uip_arp_out();
|
|
||||||
network_device_send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (BUF->type == HTONS(UIP_ETHTYPE_ARP)) {
|
|
||||||
uip_arp_arpin();
|
|
||||||
if (uip_len > 0)
|
|
||||||
network_device_send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (timer_expired(&periodic_timer)) {
|
|
||||||
int i;
|
|
||||||
timer_reset(&periodic_timer);
|
|
||||||
for (i = 0; i < UIP_CONNS; i++) {
|
|
||||||
uip_periodic(i);
|
|
||||||
if (uip_len > 0) {
|
|
||||||
uip_arp_out();
|
|
||||||
network_device_send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (timer_expired(&arp_timer)) {
|
|
||||||
timer_reset(&arp_timer);
|
|
||||||
uip_arp_timer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
chEvtWait(ALL_EVENTS, evhndl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue