blob: f1c81f9e3665216aeb8a2120c066c5cb123ff8e5 [file] [log] [blame]
adamdunkels3023dee2003-07-04 10:54:51 +00001/*
2 * Copyright (c) 2002, Adam Dunkels.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following
12 * disclaimer in the documentation and/or other materials provided
13 * with the distribution.
adamdunkelsd311bf12004-07-04 20:17:37 +000014 * 3. The name of the author may not be used to endorse or promote
adamdunkels3023dee2003-07-04 10:54:51 +000015 * products derived from this software without specific prior
16 * written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
19 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
24 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * This file is part of the Contiki desktop environment
31 *
adamdunkelsc1a28662004-09-13 23:23:16 +000032 * $Id: contiki-main.c,v 1.6 2004/09/13 23:23:16 adamdunkels Exp $
adamdunkels3023dee2003-07-04 10:54:51 +000033 *
34 */
35
36#include "ctk.h"
37#include "ctk-draw.h"
38#include "ctk-vncserver.h"
adamdunkelsb5bee0d2004-08-09 22:22:03 +000039#include "ctk-termtelnet.h"
adamdunkelsd311bf12004-07-04 20:17:37 +000040#include "ek.h"
adamdunkels3023dee2003-07-04 10:54:51 +000041
adamdunkelsd311bf12004-07-04 20:17:37 +000042#include "uiplib.h"
adamdunkels3023dee2003-07-04 10:54:51 +000043#include "uip.h"
44#include "uip_arp.h"
45#include "rtl8019-drv.h"
46#include "resolv.h"
47
adamdunkelsd311bf12004-07-04 20:17:37 +000048#include "clock.h"
49
adamdunkels3023dee2003-07-04 10:54:51 +000050#include "webserver.h"
51#include "program-handler.h"
52#include "about-dsc.h"
adamdunkelsc1a28662004-09-13 23:23:16 +000053#include "irc-dsc.h"
adamdunkels3023dee2003-07-04 10:54:51 +000054#include "netconf-dsc.h"
55#include "processes-dsc.h"
56#include "calc-dsc.h"
57#include "www-dsc.h"
58#include "webserver-dsc.h"
59/*#include "directory-dsc.h"*/
60#include "weblinks-dsc.h"
61
adamdunkelsd311bf12004-07-04 20:17:37 +000062#include "telnetd-dsc.h"
63
adamdunkels3023dee2003-07-04 10:54:51 +000064#include "debug.h"
65#include "uip.h"
66#include "uip_arp.h"
67#include "compiler.h"
68#include "rtl8019dev.h"
69
70
71#include "avr/pgmspace.h"
72
73
adamdunkelsd311bf12004-07-04 20:17:37 +000074static const struct uip_eth_addr ethaddr = {{0x00,0x06,0x98,0x01,0x02,0x29}};
adamdunkels3023dee2003-07-04 10:54:51 +000075
76
77static u16_t addr[2];
78
79/*-----------------------------------------------------------------------------------*/
80static void setup_xram(void) __attribute__ ((naked)) \
81 __attribute__ ((section (".init1")));
82
83static void
84setup_xram(void)
85{
86 outp(BV(SRE) | BV(SRW), MCUCR);
87}
88/*-----------------------------------------------------------------------------------*/
89static unsigned short count;
90
91static void init_timer(void)
92{
93 /* timer overflows every 32.8ms (with 8MHz clock) */
94 /* timer0 prescale 1/1024 (5) */
95 outp(5, TCCR0);
96
97 /* interrupt on overflow */
98 sbi(TIMSK, TOIE0);
99
100 count = 0;
101}
102
103SIGNAL(SIG_OVERFLOW0)
104{
105 ++count;
106}
107
adamdunkelsd311bf12004-07-04 20:17:37 +0000108clock_time_t
109clock_time(void)
adamdunkels3023dee2003-07-04 10:54:51 +0000110{
111 return count;
112}
113/*-----------------------------------------------------------------------------------*/
114int
115main(int argc, char **argv)
116{
117
118 /* Setup stack pointer so that it does not interfere with the rest
119 of the RAM. */
120 /* asm("ldi r28,lo8(0x00807fff)");
121 asm("ldi r29,hi8(0x00807fff)");
122 asm("out 0x3e, r29");
123 asm("out 0x3d, r28");*/
124
125 /* Fiddle with RS232 settings of the AVR: */
126 /* Enable transmit. */
127 UCSR0B = _BV(TXEN);
128 /* Set baud rate (23 =~ 38400) */
129 UBRR0H = 0;
130 UBRR0L = 23;
131 UDR0 = '\n';
132
133
134 outp(BV(SRE) | BV(SRW), MCUCR);
135
136
137 /* end RS232 fiddling. */
138
139 init_timer();
140 sei();
adamdunkelsd311bf12004-07-04 20:17:37 +0000141
142 ek_init();
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000143
144 uip_init();
adamdunkelsd311bf12004-07-04 20:17:37 +0000145 tcpip_init(NULL);
adamdunkels3023dee2003-07-04 10:54:51 +0000146
adamdunkelsd311bf12004-07-04 20:17:37 +0000147 resolv_init(NULL);
adamdunkels3023dee2003-07-04 10:54:51 +0000148
149
150 debug_print8(1);
151
152
153 uip_setethaddr(ethaddr);
154
155
156
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000157#if 1
adamdunkels3023dee2003-07-04 10:54:51 +0000158 uip_ipaddr(addr, 193,10,67,152);
159 uip_sethostaddr(addr);
160
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000161 uip_ipaddr(addr, 193,10,64,1);
adamdunkels3023dee2003-07-04 10:54:51 +0000162 uip_setdraddr(addr);
163
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000164 uip_ipaddr(addr, 255,255,252,0);
adamdunkels3023dee2003-07-04 10:54:51 +0000165 uip_setnetmask(addr);
166
167 uip_ipaddr(addr, 193,10,66,195);
168 resolv_conf(addr);
169
170#else
171
adamdunkelsd311bf12004-07-04 20:17:37 +0000172 uip_ipaddr(addr, 192,168,27,2);
adamdunkels3023dee2003-07-04 10:54:51 +0000173 uip_sethostaddr(addr);
174
adamdunkelsd311bf12004-07-04 20:17:37 +0000175 uip_ipaddr(addr, 192,168,27,1);
adamdunkels3023dee2003-07-04 10:54:51 +0000176 uip_setdraddr(addr);
177
178 uip_ipaddr(addr, 255,255,255,0);
179 uip_setnetmask(addr);
180
181 uip_ipaddr(addr, 195,54,122,204);
182 resolv_conf(addr);
183#endif
184
adamdunkelsd311bf12004-07-04 20:17:37 +0000185
adamdunkels3023dee2003-07-04 10:54:51 +0000186
adamdunkels3023dee2003-07-04 10:54:51 +0000187 ctk_init();
188
adamdunkels3023dee2003-07-04 10:54:51 +0000189 rtl8019_drv_init();
190
adamdunkelseb4ecc62003-08-25 12:42:41 +0000191 ctk_vncserver_init(NULL);
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000192 /* ctk_termtelnet_init(NULL);*/
adamdunkels3023dee2003-07-04 10:54:51 +0000193
adamdunkels3023dee2003-07-04 10:54:51 +0000194 program_handler_init();
195
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000196 webserver_init(NULL);
adamdunkels3023dee2003-07-04 10:54:51 +0000197
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000198 /* program_handler_add(&netconf_dsc, "Network config", 1);*/
adamdunkelsc1a28662004-09-13 23:23:16 +0000199
adamdunkels3023dee2003-07-04 10:54:51 +0000200
adamdunkelsc1a28662004-09-13 23:23:16 +0000201 /*program_handler_add(&irc_dsc, "IRC client", 1);*/
202
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000203
adamdunkelsc1a28662004-09-13 23:23:16 +0000204
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000205 program_handler_add(&calc_dsc, "Calculator", 0);
adamdunkels3023dee2003-07-04 10:54:51 +0000206 program_handler_add(&weblinks_dsc, "Web links", 1);
207
adamdunkelsb5bee0d2004-08-09 22:22:03 +0000208 program_handler_add(&www_dsc, "Web browser", 1);
209 program_handler_add(&webserver_dsc, "Web server", 1);
210 program_handler_add(&processes_dsc, "Processes", 1);
211 program_handler_add(&about_dsc, "About", 1);
212
213
214
adamdunkelsd311bf12004-07-04 20:17:37 +0000215
adamdunkels3023dee2003-07-04 10:54:51 +0000216
217 debug_print8(64);
adamdunkelsd311bf12004-07-04 20:17:37 +0000218
219 while(1) {
220 ek_run();
221 }
adamdunkels3023dee2003-07-04 10:54:51 +0000222
223
224 return 0;
225
226 argv = argv;
227 argc = argc;
228}
229/*-----------------------------------------------------------------------------------*/
adamdunkelsd311bf12004-07-04 20:17:37 +0000230char *shell_prompt_text = "contiki-ethernut> ";
231
232unsigned char
233uip_fw_forward(void)
234{
235 return 0;
236}
237void
238uip_fw_periodic(void)
239{
240
241}