From 17f13e38e8f6358ed8933ce6ec99ee510b0884cf Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Sun, 24 Feb 2008 21:33:57 +0000 Subject: [PATCH] TCP/IP-networking examples for the Tmote Sky platform --- examples/sky-ip/Makefile | 47 ++++++++++++++ examples/sky-ip/telnet-webserver.c | 100 +++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 examples/sky-ip/Makefile create mode 100644 examples/sky-ip/telnet-webserver.c diff --git a/examples/sky-ip/Makefile b/examples/sky-ip/Makefile new file mode 100644 index 000000000..3ed7a69e7 --- /dev/null +++ b/examples/sky-ip/Makefile @@ -0,0 +1,47 @@ +all: telnet-webserver +APPS=telnetd webserver +DEFAULT_TARGET=sky +CFLAGS=-DWITH_UIP=1 #-DWITH_NULLMAC=1 + +# The webserver application normally contains a built-in file system and support +# for server-side includes. +# +# This webserver example supports building the alternative webserver application +# which serves files from an cfs file system. To build the alternative webserver +# run make with the parameter HTTPD-CFS=1. + +ifeq ($(HTTPD-CFS),1) +override webserver_src = webserver-nogui.c http-strings.c psock.c memb.c \ + httpd-cfs.c +endif + +CONTIKI = ../.. +include $(CONTIKI)/Makefile.include + +# Intentionally httpd.c and httpd-cfs.c implement the same interface. When +# switching from one webserver alternative to the other with an existent +# Contiki library then both files end up in the library making the linker +# use whichever it finds first :-( +# +# The most straightforward way to make sure this doesn't happen is to delete +# the Contiki library. But it would be undesirable to do that on every build +# so the existence of the "wrong" object file is used to detect a switch and +# trigger deletion of the Contiki library - and the trigger file of course. + +ifeq ($(HTTPD-CFS),1) + ifneq (${wildcard $(OBJECTDIR)/httpd.o},) + DUMMY := ${shell rm -f contiki-$(TARGET).a $(OBJECTDIR)/httpd.o} + endif +else + ifneq (${wildcard $(OBJECTDIR)/httpd-cfs.o},) + DUMMY := ${shell rm -f contiki-$(TARGET).a $(OBJECTDIR)/httpd-cfs.o} + endif +endif + +slip: +ifdef INTERFACE + $(CONTIKI)/tools/wpcapslip/wpcapslip -s /dev/com$(firstword $(CMOTES)) $(INTERFACE) 172.16.0.0 255.255.0.0 +else + @echo "Usage: \"$(MAKE) $@ INTERFACE=\"" + @echo "Use the \"ipconfig\" command to find out the IP addresses of the local interfaces" +endif diff --git a/examples/sky-ip/telnet-webserver.c b/examples/sky-ip/telnet-webserver.c new file mode 100644 index 000000000..a9abe9f74 --- /dev/null +++ b/examples/sky-ip/telnet-webserver.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * $Id: telnet-webserver.c,v 1.1 2008/02/24 21:33:57 adamdunkels Exp $ + */ + +/** + * \file + * Multi-hop telnetd for the Tmote Sky + * \author + * Adam Dunkels + */ + +#include "webserver-nogui.h" +#include "telnetd.h" +#include "shell.h" + +#include "contiki.h" +#include "contiki-net.h" +#include "net/rime.h" +#include + +/*---------------------------------------------------------------------------*/ +PROCESS(sky_telnetd_process, "Sky telnet process"); +AUTOSTART_PROCESSES(&telnetd_process, &sky_telnetd_process, &webserver_nogui_process); +/*---------------------------------------------------------------------------*/ +PROCESS(shell_id_process, "id"); +SHELL_COMMAND(id_command, + "id", + "id: print the identity of the node", + &shell_id_process); +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(shell_id_process, ev, data) +{ + char buf[40]; + PROCESS_BEGIN(); + snprintf(buf, sizeof(buf), "%d.%d.%d.%d", uip_ipaddr_to_quad(&uip_hostaddr)); + shell_output_str(&id_command, "IP address: ", buf); + snprintf(buf, sizeof(buf), "%d.%d", + rimeaddr_node_addr.u8[0], rimeaddr_node_addr.u8[1]); + shell_output_str(&id_command, "Rime address: ", buf); + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(sky_telnetd_process, ev, data) +{ + PROCESS_BEGIN(); + + PROCESS_PAUSE(); + + shell_blink_init(); + /* shell_file_init(); + shell_netfile_init();*/ + shell_ps_init(); + /* shell_reboot_init();*/ + shell_rime_init(); + shell_rime_ping_init(); + shell_rime_netcmd_init(); + shell_rime_sniff_init(); + /*shell_sky_init();*/ + /* shell_text_init(); + shell_time_init();*/ + + shell_register_command(&id_command); + + while(1) { + PROCESS_WAIT_EVENT(); + } + + PROCESS_END(); + +} +/*---------------------------------------------------------------------------*/