aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-05-27 13:26:10 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-05-27 13:26:10 +0000
commit16e097d23edef273e73f64d9f7ea51ecc0636e77 (patch)
tree67dd4c6971abf7a8f03b298accb210aeef0bba19
parentd8e1d5a103aa5cd43e4d7e2437448327aa06ff08 (diff)
downloadChibiOS-16e097d23edef273e73f64d9f7ea51ecc0636e77.tar.gz
ChibiOS-16e097d23edef273e73f64d9f7ea51ecc0636e77.tar.bz2
ChibiOS-16e097d23edef273e73f64d9f7ea51ecc0636e77.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@311 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARM7-AT91SAM7X-WEB-GCC/Makefile1
-rw-r--r--demos/ARM7-AT91SAM7X-WEB-GCC/web/webthread.c121
2 files changed, 65 insertions, 57 deletions
diff --git a/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile b/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile
index 0f9806151..a1ebaba71 100644
--- a/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile
+++ b/demos/ARM7-AT91SAM7X-WEB-GCC/Makefile
@@ -74,7 +74,6 @@ KSRC = ../../src/chinit.c ../../src/chdebug.c \
# List of the required uIP source files.
USRC = ../../ext/uip-1.0/uip/uip_arp.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/apps/webserver/httpd.c \
../../ext/uip-1.0/apps/webserver/http-strings.c \
diff --git a/demos/ARM7-AT91SAM7X-WEB-GCC/web/webthread.c b/demos/ARM7-AT91SAM7X-WEB-GCC/web/webthread.c
index 425a6366d..825ff1eff 100644
--- a/demos/ARM7-AT91SAM7X-WEB-GCC/web/webthread.c
+++ b/demos/ARM7-AT91SAM7X-WEB-GCC/web/webthread.c
@@ -26,7 +26,6 @@
#include <uip.h>
#include <uip_arp.h>
#include <httpd.h>
-#include <timer.h>
#include <clock-arch.h>
//#define IPADDR0 192
@@ -45,9 +44,6 @@ static const struct uip_eth_addr macaddr = {
{0xC2, 0xAF, 0x51, 0x03, 0xCF, 0x46}
};
-static EvTimer evt;
-struct EventListener el0, el1;
-
#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 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 TimerHandler(eventid_t id) {
+static void ARPTimerHandler(eventid_t id) {
+ uip_arp_timer();
(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) {
- static const evhandler_t evhndl[] = {
- TimerHandler,
- NULL
- };
+ EvTimer evt1, evt2;
+ EventListener el0, el1, el2;
uip_ipaddr_t ipaddr;
- struct timer periodic_timer, arp_timer;
EMACSetAddress(&macaddr.addr[0]);
+ (void)EMACGetLinkStatus();
/*
* Event sources setup.
*/
- evtInit(&evt, 1000); /* Initializes an event timer object. */
- evtStart(&evt); /* Starts the event timer. */
- chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */
- chEvtRegister(&EMACFrameReceived, &el1, 1);
+ chEvtRegister(&EMACFrameReceived, &el0, FRAME_RECEIVED_ID);
- /*
+ 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.
*/
- timer_set(&periodic_timer, CLOCK_SECOND / 2);
- timer_set(&arp_timer, CLOCK_SECOND * 10);
uip_init();
uip_setethaddr(macaddr);
uip_ipaddr(ipaddr, IPADDR0, IPADDR1, IPADDR2, IPADDR3);
uip_sethostaddr(ipaddr);
httpd_init();
- while (TRUE) {
- uip_len = network_device_read();
- 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);
- }
- }
- }
+ while (TRUE)
+ chEvtWait(ALL_EVENTS, evhndl);
return 0;
}