Updated to match the new netstack api
This commit is contained in:
parent
01a3912864
commit
efe8f200af
|
@ -1,16 +1,17 @@
|
||||||
# $Id: Makefile.esb,v 1.14 2010/02/09 07:34:37 nifi Exp $
|
# $Id: Makefile.esb,v 1.15 2010/03/02 22:40:39 nifi Exp $
|
||||||
|
|
||||||
SENSORS = sensors.c irq.c button-sensor.c pir-sensor.c vib-sensor.c \
|
SENSORS = sensors.c irq.c button-sensor.c pir-sensor.c vib-sensor.c \
|
||||||
sound-sensor.c radio-sensor.c ctsrts-sensor.c battery-sensor.c \
|
sound-sensor.c radio-sensor.c ctsrts-sensor.c battery-sensor.c \
|
||||||
temperature-sensor.c
|
temperature-sensor.c
|
||||||
ESB = ir.c beep.c ds1629.c tr1001-uip.c tr1001-gcr.c gcr.c \
|
ESB = ir.c beep.c ds1629.c tr1001-gcr.c gcr.c \
|
||||||
esb-sensors.c node-id.c eeprom.c
|
esb-sensors.c node-id.c eeprom.c \
|
||||||
|
uip-driver.c uip-ipchksum.c
|
||||||
CFS_EEPROM = cfs-eeprom.c
|
CFS_EEPROM = cfs-eeprom.c
|
||||||
CFS_COFFEE = cfs-coffee.c cfs-coffee-arch.c
|
CFS_COFFEE = cfs-coffee.c cfs-coffee-arch.c
|
||||||
|
|
||||||
CONTIKI_TARGET_DIRS = . dev apps net loader
|
CONTIKI_TARGET_DIRS = . dev apps net loader
|
||||||
ifndef CONTIKI_TARGET_MAIN
|
ifndef CONTIKI_TARGET_MAIN
|
||||||
CONTIKI_TARGET_MAIN = contiki-esb-main.c
|
CONTIKI_TARGET_MAIN = contiki-esb-main.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CONTIKI_TARGET_SOURCEFILES += $(SENSORS) $(ESB) \
|
CONTIKI_TARGET_SOURCEFILES += $(SENSORS) $(ESB) \
|
||||||
|
@ -19,33 +20,26 @@ CONTIKI_TARGET_SOURCEFILES += $(SENSORS) $(ESB) \
|
||||||
rs232.c rs232-putchar.c fader.c $(CONTIKI_TARGET_MAIN)
|
rs232.c rs232-putchar.c fader.c $(CONTIKI_TARGET_MAIN)
|
||||||
|
|
||||||
ifdef WITH_CODEPROP
|
ifdef WITH_CODEPROP
|
||||||
CONTIKI_TARGET_DIRS += ../../apps/codeprop
|
CONTIKI_TARGET_DIRS += ../../apps/codeprop
|
||||||
CONTIKI_TARGET_SOURCEFILES += codeprop-tmp.c
|
CONTIKI_TARGET_SOURCEFILES += codeprop-tmp.c
|
||||||
ifndef NETSTACK
|
WITH_UIP=1
|
||||||
NETSTACK = uip
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(NETSTACK),uip)
|
ifdef WITH_UIP
|
||||||
CONTIKI_TARGET_SOURCEFILES += contiki-esb-init-net-uip.c uip-ipchksum.c
|
ifndef WITH_SLIP
|
||||||
else
|
WITH_SLIP=1
|
||||||
ifeq ($(NETSTACK),uip-noslip)
|
endif
|
||||||
CONTIKI_TARGET_SOURCEFILES += contiki-esb-init-net-uip-noslip.c uip-ipchksum.c
|
CFLAGS += -DWITH_UIP=1 -DWITH_SLIP=${WITH_SLIP}
|
||||||
else
|
|
||||||
CONTIKI_TARGET_SOURCEFILES += contiki-esb-default-init-net.c
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CFS),coffee)
|
ifeq ($(CFS),coffee)
|
||||||
CONTIKI_TARGET_SOURCEFILES += $(CFS_COFFEE)
|
CONTIKI_TARGET_SOURCEFILES += $(CFS_COFFEE)
|
||||||
else
|
else
|
||||||
CONTIKI_TARGET_SOURCEFILES += $(CFS_EEPROM)
|
CONTIKI_TARGET_SOURCEFILES += $(CFS_EEPROM)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(CONTIKI)/platform/$(TARGET)/apps/Makefile.apps
|
include $(CONTIKI)/platform/$(TARGET)/apps/Makefile.apps
|
||||||
|
|
||||||
#PROJECT_OBJECTFILES += $(OBJECTDIR)/contiki-esb-main.o
|
|
||||||
|
|
||||||
MCU=msp430x149
|
MCU=msp430x149
|
||||||
include $(CONTIKI)/cpu/msp430/Makefile.msp430
|
include $(CONTIKI)/cpu/msp430/Makefile.msp430
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,10 @@
|
||||||
#ifndef __CONTIKI_CONF_H__
|
#ifndef __CONTIKI_CONF_H__
|
||||||
#define __CONTIKI_CONF_H__
|
#define __CONTIKI_CONF_H__
|
||||||
|
|
||||||
#define NETSTACK_CONF_RADIO tr1001_driver
|
|
||||||
|
|
||||||
/* DCO speed resynchronization for more robust UART, etc. */
|
/* DCO speed resynchronization for more robust UART, etc. */
|
||||||
#define DCOSYNCH_CONF_ENABLED 1
|
#define DCOSYNCH_CONF_ENABLED 1
|
||||||
#define DCOSYNCH_CONF_PERIOD 30
|
#define DCOSYNCH_CONF_PERIOD 30
|
||||||
|
|
||||||
/* Specifies the default MAC driver */
|
|
||||||
#define MAC_CONF_DRIVER nullmac_driver
|
|
||||||
|
|
||||||
#define PACKETBUF_CONF_ATTRS_INLINE 1
|
|
||||||
#define QUEUEBUF_CONF_NUM 1
|
|
||||||
#define QUEUEBUF_CONF_REF_NUM 1
|
|
||||||
#define ROUTE_CONF_ENTRIES 4
|
|
||||||
|
|
||||||
#define SERIAL_LINE_CONF_BUFSIZE 64
|
#define SERIAL_LINE_CONF_BUFSIZE 64
|
||||||
|
|
||||||
#define TIMESYNCH_CONF_ENABLED 0
|
#define TIMESYNCH_CONF_ENABLED 0
|
||||||
|
@ -53,6 +43,36 @@ void clock_wait(int ms10);
|
||||||
|
|
||||||
#define LOG_CONF_ENABLED 0
|
#define LOG_CONF_ENABLED 0
|
||||||
|
|
||||||
|
#define PACKETBUF_CONF_ATTRS_INLINE 1
|
||||||
|
#define NETSTACK_CONF_RADIO tr1001_driver
|
||||||
|
|
||||||
|
#if WITH_UIP
|
||||||
|
/* Network setup for IPv4 */
|
||||||
|
|
||||||
|
#define NETSTACK_CONF_NETWORK uip_driver
|
||||||
|
#define NETSTACK_CONF_MAC nullmac_driver
|
||||||
|
#define NETSTACK_CONF_RDC nullrdc_driver
|
||||||
|
#define NETSTACK_CONF_FRAMER framer_nullmac
|
||||||
|
|
||||||
|
#define QUEUEBUF_CONF_NUM 0
|
||||||
|
#define QUEUEBUF_CONF_REF_NUM 0
|
||||||
|
#define ROUTE_CONF_ENTRIES 0
|
||||||
|
|
||||||
|
#else /* WITH_UIP */
|
||||||
|
|
||||||
|
/* Network setup for non-IPv4 (rime). */
|
||||||
|
|
||||||
|
#define NETSTACK_CONF_NETWORK rime_driver
|
||||||
|
#define NETSTACK_CONF_MAC nullmac_driver
|
||||||
|
#define NETSTACK_CONF_RDC nullrdc_framer_driver
|
||||||
|
#define NETSTACK_CONF_FRAMER framer_nullmac
|
||||||
|
|
||||||
|
#define QUEUEBUF_CONF_NUM 1
|
||||||
|
#define QUEUEBUF_CONF_REF_NUM 1
|
||||||
|
#define ROUTE_CONF_ENTRIES 4
|
||||||
|
|
||||||
|
#endif /* WITH_UIP */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The statistics data type.
|
* The statistics data type.
|
||||||
*
|
*
|
||||||
|
@ -69,8 +89,8 @@ typedef unsigned short uip_stats_t;
|
||||||
#define UIP_CONF_BUFFER_SIZE 110
|
#define UIP_CONF_BUFFER_SIZE 110
|
||||||
#define UIP_CONF_RECEIVE_WINDOW (UIP_CONF_BUFFER_SIZE - 40)
|
#define UIP_CONF_RECEIVE_WINDOW (UIP_CONF_BUFFER_SIZE - 40)
|
||||||
#define UIP_CONF_MAX_CONNECTIONS 4
|
#define UIP_CONF_MAX_CONNECTIONS 4
|
||||||
#define UIP_CONF_MAX_LISTENPORTS 8
|
#define UIP_CONF_MAX_LISTENPORTS 4
|
||||||
#define UIP_CONF_UDP_CONNS 6
|
#define UIP_CONF_UDP_CONNS 3
|
||||||
#define UIP_CONF_FWCACHE_SIZE 1
|
#define UIP_CONF_FWCACHE_SIZE 1
|
||||||
#define UIP_CONF_BROADCAST 1
|
#define UIP_CONF_BROADCAST 1
|
||||||
#define UIP_ARCH_IPCHKSUM 1
|
#define UIP_ARCH_IPCHKSUM 1
|
||||||
|
@ -87,6 +107,8 @@ typedef unsigned short uip_stats_t;
|
||||||
#define ELFLOADER_CONF_DATAMEMORY_SIZE 100
|
#define ELFLOADER_CONF_DATAMEMORY_SIZE 100
|
||||||
#define ELFLOADER_CONF_TEXTMEMORY_SIZE 0x1000
|
#define ELFLOADER_CONF_TEXTMEMORY_SIZE 0x1000
|
||||||
|
|
||||||
|
#define WEBSERVER_CONF_CGI_CONNS 1
|
||||||
|
|
||||||
/* LEDs ports. */
|
/* LEDs ports. */
|
||||||
#define LEDS_PxDIR P2DIR
|
#define LEDS_PxDIR P2DIR
|
||||||
#define LEDS_PxOUT P2OUT
|
#define LEDS_PxOUT P2OUT
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2005, 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: contiki-esb-default-init-net.c,v 1.14 2010/02/18 23:19:03 adamdunkels Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki-conf.h"
|
|
||||||
#include "dev/tr1001.h"
|
|
||||||
#include "dev/rs232.h"
|
|
||||||
#include "dev/serial-line.h"
|
|
||||||
#include "net/rime.h"
|
|
||||||
#include "node-id.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#ifndef MAC_DRIVER
|
|
||||||
#ifdef MAC_CONF_DRIVER
|
|
||||||
#define MAC_DRIVER MAC_CONF_DRIVER
|
|
||||||
#else
|
|
||||||
#define MAC_DRIVER nullmac_driver
|
|
||||||
#endif /* MAC_CONF_DRIVER */
|
|
||||||
#endif /* MAC_DRIVER */
|
|
||||||
|
|
||||||
extern const struct mac_driver MAC_DRIVER;
|
|
||||||
|
|
||||||
void
|
|
||||||
init_net(void)
|
|
||||||
{
|
|
||||||
rimeaddr_t rimeaddr;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
netstack_init();
|
|
||||||
|
|
||||||
rimeaddr.u8[0] = node_id & 0xff;
|
|
||||||
rimeaddr.u8[1] = node_id >> 8;
|
|
||||||
rimeaddr_set_node_addr(&rimeaddr);
|
|
||||||
|
|
||||||
printf("Rime started with address ");
|
|
||||||
for(i = 0; i < sizeof(rimeaddr.u8) - 1; i++) {
|
|
||||||
printf("%u.", rimeaddr.u8[i]);
|
|
||||||
}
|
|
||||||
printf("%u (%s)\n", rimeaddr.u8[i], MAC_DRIVER.name);
|
|
||||||
|
|
||||||
rs232_set_input(serial_line_input_byte);
|
|
||||||
serial_line_init();
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2007, 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: contiki-esb-init-net-uip-noslip.c,v 1.2 2007/08/07 11:17:54 nifi Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki-esb.h"
|
|
||||||
|
|
||||||
static struct uip_fw_netif tr1001if =
|
|
||||||
{UIP_FW_NETIF(0,0,0,0, 0,0,0,0, tr1001_uip_send)};
|
|
||||||
|
|
||||||
#define NODE_ID (node_id & 0xFF)
|
|
||||||
|
|
||||||
void
|
|
||||||
init_net(void)
|
|
||||||
{
|
|
||||||
uip_ipaddr_t hostaddr;
|
|
||||||
|
|
||||||
uip_init();
|
|
||||||
uip_fw_init();
|
|
||||||
|
|
||||||
process_start(&tcpip_process, NULL);
|
|
||||||
process_start(&uip_fw_process, NULL);
|
|
||||||
|
|
||||||
tr1001_uip_init();
|
|
||||||
|
|
||||||
if (NODE_ID > 0) {
|
|
||||||
/* node id is set, construct an ip address based on the node id */
|
|
||||||
uip_ipaddr(&hostaddr, 172, 16, 1, NODE_ID);
|
|
||||||
uip_sethostaddr(&hostaddr);
|
|
||||||
}
|
|
||||||
uip_fw_default(&tr1001if);
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2007, 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.
|
|
||||||
*
|
|
||||||
* $Id: contiki-esb-init-net-uip.c,v 1.2 2007/08/07 11:17:54 nifi Exp $
|
|
||||||
*
|
|
||||||
* -----------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Author : Adam Dunkels, Joakim Eriksson, Niclas Finne
|
|
||||||
* Created : 2007-04-03
|
|
||||||
* Updated : $Date: 2007/08/07 11:17:54 $
|
|
||||||
* $Revision: 1.2 $
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki-esb.h"
|
|
||||||
|
|
||||||
static struct uip_fw_netif tr1001if =
|
|
||||||
{UIP_FW_NETIF(0,0,0,0, 0,0,0,0, tr1001_uip_send)};
|
|
||||||
|
|
||||||
static struct uip_fw_netif slipif =
|
|
||||||
{UIP_FW_NETIF(172,16,0,0, 255,255,255,0, slip_send)};
|
|
||||||
|
|
||||||
#define NODE_ID (node_id & 0xFF)
|
|
||||||
|
|
||||||
void
|
|
||||||
init_net(void)
|
|
||||||
{
|
|
||||||
uip_ipaddr_t hostaddr;
|
|
||||||
|
|
||||||
uip_init();
|
|
||||||
uip_fw_init();
|
|
||||||
|
|
||||||
rs232_set_input(slip_input_byte);
|
|
||||||
|
|
||||||
process_start(&tcpip_process, NULL);
|
|
||||||
process_start(&slip_process, NULL);
|
|
||||||
process_start(&uip_fw_process, NULL);
|
|
||||||
|
|
||||||
tr1001_uip_init();
|
|
||||||
|
|
||||||
if (NODE_ID > 0) {
|
|
||||||
/* node id is set, construct an ip address based on the node id */
|
|
||||||
uip_ipaddr(&hostaddr, 172, 16, 1, NODE_ID);
|
|
||||||
uip_sethostaddr(&hostaddr);
|
|
||||||
}
|
|
||||||
uip_fw_register(&slipif);
|
|
||||||
uip_fw_default(&tr1001if);
|
|
||||||
}
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: contiki-esb-main.c,v 1.17 2010/02/03 13:59:55 nifi Exp $
|
* @(#)$Id: contiki-esb-main.c,v 1.18 2010/03/02 22:40:39 nifi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
@ -37,10 +37,24 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
|
#include "contiki-esb.h"
|
||||||
|
|
||||||
#include "dev/watchdog.h"
|
#include "dev/watchdog.h"
|
||||||
#include "sys/autostart.h"
|
#include "sys/autostart.h"
|
||||||
#include "contiki-esb.h"
|
#include "net/uip-driver.h"
|
||||||
|
#include "net/netstack.h"
|
||||||
|
|
||||||
|
#if WITH_UIP
|
||||||
|
|
||||||
|
static struct uip_fw_netif tr1001if =
|
||||||
|
{UIP_FW_NETIF(0,0,0,0, 0,0,0,0, uip_driver_send)};
|
||||||
|
|
||||||
|
#if WITH_SLIP
|
||||||
|
static struct uip_fw_netif slipif =
|
||||||
|
{UIP_FW_NETIF(172,16,0,0, 255,255,255,0, slip_send)};
|
||||||
|
#endif /* WITH_SLIP */
|
||||||
|
|
||||||
|
#endif /* WITH_UIP */
|
||||||
|
|
||||||
#ifdef DCOSYNCH_CONF_PERIOD
|
#ifdef DCOSYNCH_CONF_PERIOD
|
||||||
#define DCOSYNCH_PERIOD DCOSYNCH_CONF_PERIOD
|
#define DCOSYNCH_PERIOD DCOSYNCH_CONF_PERIOD
|
||||||
|
@ -62,6 +76,53 @@ SENSORS(&button_sensor, &sound_sensor, &vib_sensor,
|
||||||
&pir_sensor, &radio_sensor, &battery_sensor, &ctsrts_sensor,
|
&pir_sensor, &radio_sensor, &battery_sensor, &ctsrts_sensor,
|
||||||
&temperature_sensor);
|
&temperature_sensor);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static void
|
||||||
|
set_rime_addr(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
rimeaddr_t rimeaddr;
|
||||||
|
|
||||||
|
rimeaddr.u8[0] = node_id & 0xff;
|
||||||
|
rimeaddr.u8[1] = node_id >> 8;
|
||||||
|
rimeaddr_set_node_addr(&rimeaddr);
|
||||||
|
|
||||||
|
printf("Rime started with address ");
|
||||||
|
for(i = 0; i < sizeof(rimeaddr.u8) - 1; i++) {
|
||||||
|
printf("%u.", rimeaddr.u8[i]);
|
||||||
|
}
|
||||||
|
printf("%u\n", rimeaddr.u8[i]);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
#if WITH_UIP
|
||||||
|
static void
|
||||||
|
init_uip_net(void)
|
||||||
|
{
|
||||||
|
uip_ipaddr_t hostaddr;
|
||||||
|
|
||||||
|
uip_init();
|
||||||
|
uip_fw_init();
|
||||||
|
|
||||||
|
process_start(&tcpip_process, NULL);
|
||||||
|
#if WITH_SLIP
|
||||||
|
process_start(&slip_process, NULL);
|
||||||
|
rs232_set_input(slip_input_byte);
|
||||||
|
#endif /* WITH_SLIP */
|
||||||
|
process_start(&uip_fw_process, NULL);
|
||||||
|
|
||||||
|
if (node_id > 0) {
|
||||||
|
/* node id is set, construct an ip address based on the node id */
|
||||||
|
uip_ipaddr(&hostaddr, 172, 16, 1, node_id & 0xff);
|
||||||
|
uip_sethostaddr(&hostaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if WITH_SLIP
|
||||||
|
uip_fw_register(&slipif);
|
||||||
|
#endif /* WITH_SLIP */
|
||||||
|
|
||||||
|
uip_fw_default(&tr1001if);
|
||||||
|
}
|
||||||
|
#endif /* WITH_UIP */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static void
|
static void
|
||||||
print_processes(struct process * const processes[])
|
print_processes(struct process * const processes[])
|
||||||
|
@ -135,14 +196,7 @@ main(void)
|
||||||
|
|
||||||
ctimer_init();
|
ctimer_init();
|
||||||
|
|
||||||
#if PROFILE_CONF_ON
|
set_rime_addr();
|
||||||
profile_init();
|
|
||||||
#endif /* PROFILE_CONF_ON */
|
|
||||||
|
|
||||||
#if ENERGEST_CONF_ON
|
|
||||||
energest_init();
|
|
||||||
ENERGEST_ON(ENERGEST_TYPE_CPU);
|
|
||||||
#endif /* ENERGEST_CONF_ON */
|
|
||||||
|
|
||||||
printf(CONTIKI_VERSION_STRING " started. ");
|
printf(CONTIKI_VERSION_STRING " started. ");
|
||||||
if(node_id > 0) {
|
if(node_id > 0) {
|
||||||
|
@ -151,13 +205,36 @@ main(void)
|
||||||
printf("Node id is not set.\n");
|
printf("Node id is not set.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
init_net();
|
netstack_init();
|
||||||
|
|
||||||
|
printf("%s %s, channel check rate %u Hz\n",
|
||||||
|
NETSTACK_MAC.name, NETSTACK_RDC.name,
|
||||||
|
CLOCK_SECOND / (NETSTACK_RDC.channel_check_interval() == 0 ? 1:
|
||||||
|
NETSTACK_RDC.channel_check_interval()));
|
||||||
|
|
||||||
beep_spinup();
|
beep_spinup();
|
||||||
leds_on(LEDS_RED);
|
leds_on(LEDS_RED);
|
||||||
clock_delay(100);
|
clock_delay(100);
|
||||||
leds_off(LEDS_RED);
|
leds_off(LEDS_RED);
|
||||||
|
|
||||||
|
#if !WITH_SLIP
|
||||||
|
rs232_set_input(serial_line_input_byte);
|
||||||
|
serial_line_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if WITH_UIP
|
||||||
|
init_uip_net();
|
||||||
|
#endif /* WITH_UIP */
|
||||||
|
|
||||||
|
#if PROFILE_CONF_ON
|
||||||
|
profile_init();
|
||||||
|
#endif /* PROFILE_CONF_ON */
|
||||||
|
|
||||||
|
#if ENERGEST_CONF_ON
|
||||||
|
energest_init();
|
||||||
|
ENERGEST_ON(ENERGEST_TYPE_CPU);
|
||||||
|
#endif /* ENERGEST_CONF_ON */
|
||||||
|
|
||||||
init_apps();
|
init_apps();
|
||||||
print_processes(autostart_processes);
|
print_processes(autostart_processes);
|
||||||
autostart_start(autostart_processes);
|
autostart_start(autostart_processes);
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: contiki-esb.h,v 1.5 2009/03/17 20:19:11 adamdunkels Exp $
|
* @(#)$Id: contiki-esb.h,v 1.6 2010/03/02 22:40:39 nifi Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef __CONTIKI_ESB_H__
|
#ifndef __CONTIKI_ESB_H__
|
||||||
#define __CONTIKI_ESB_H__
|
#define __CONTIKI_ESB_H__
|
||||||
|
@ -46,8 +46,6 @@
|
||||||
|
|
||||||
#include "dev/serial-line.h"
|
#include "dev/serial-line.h"
|
||||||
#include "dev/slip.h"
|
#include "dev/slip.h"
|
||||||
#include "dev/tr1001.h"
|
|
||||||
#include "net/tr1001-uip.h"
|
|
||||||
|
|
||||||
#include "node-id.h"
|
#include "node-id.h"
|
||||||
|
|
||||||
|
@ -71,7 +69,5 @@
|
||||||
void msp430_cpu_init(void);
|
void msp430_cpu_init(void);
|
||||||
void init_lowlevel(void);
|
void init_lowlevel(void);
|
||||||
void init_apps(void);
|
void init_apps(void);
|
||||||
void init_net(void);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __CONTIKI_ESB_H__ */
|
#endif /* __CONTIKI_ESB_H__ */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: tr1001-gcr.c,v 1.14 2009/11/19 18:04:02 nifi Exp $
|
* @(#)$Id: tr1001-gcr.c,v 1.15 2010/03/02 22:40:39 nifi Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \addtogroup esb
|
* \addtogroup esb
|
||||||
|
@ -56,6 +56,7 @@
|
||||||
#include "dev/radio-sensor.h"
|
#include "dev/radio-sensor.h"
|
||||||
#include "lib/gcr.h"
|
#include "lib/gcr.h"
|
||||||
#include "lib/crc16.h"
|
#include "lib/crc16.h"
|
||||||
|
#include "net/netstack.h"
|
||||||
#include "net/rime/rimestats.h"
|
#include "net/rime/rimestats.h"
|
||||||
|
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
@ -88,6 +89,11 @@
|
||||||
#define RXBUFSIZE PACKETBUF_SIZE
|
#define RXBUFSIZE PACKETBUF_SIZE
|
||||||
#endif /* TR1001_CONF_BUFFER_SIZE */
|
#endif /* TR1001_CONF_BUFFER_SIZE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pending data to send when using prepare/transmit functions.
|
||||||
|
*/
|
||||||
|
static const void *pending_data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The buffer which holds incoming data.
|
* The buffer which holds incoming data.
|
||||||
*/
|
*/
|
||||||
|
@ -140,7 +146,6 @@ static unsigned short tmp_sstrength, sstrength;
|
||||||
static unsigned short tmp_count;
|
static unsigned short tmp_count;
|
||||||
|
|
||||||
#define DEBUG 0
|
#define DEBUG 0
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#define LOG(...) printf(__VA_ARGS__)
|
#define LOG(...) printf(__VA_ARGS__)
|
||||||
|
@ -154,16 +159,23 @@ static unsigned short tmp_count;
|
||||||
PROCESS(tr1001_process, "TR1001 driver");
|
PROCESS(tr1001_process, "TR1001 driver");
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void (* receiver_callback)(const struct radio_driver *);
|
static int prepare_packet(const void *data, unsigned short len);
|
||||||
|
static int transmit_packet(unsigned short len);
|
||||||
static void tr1001_set_receiver(void (* recv)(const struct radio_driver *));
|
static int receiving_packet(void);
|
||||||
|
static int pending_packet(void);
|
||||||
|
static int channel_clear(void);
|
||||||
static int tr1001_on(void);
|
static int tr1001_on(void);
|
||||||
static int tr1001_off(void);
|
static int tr1001_off(void);
|
||||||
|
|
||||||
const struct radio_driver tr1001_driver = {
|
const struct radio_driver tr1001_driver = {
|
||||||
|
tr1001_init,
|
||||||
|
prepare_packet,
|
||||||
|
transmit_packet,
|
||||||
tr1001_send,
|
tr1001_send,
|
||||||
tr1001_read,
|
tr1001_read,
|
||||||
tr1001_set_receiver,
|
channel_clear,
|
||||||
|
receiving_packet,
|
||||||
|
pending_packet,
|
||||||
tr1001_on,
|
tr1001_on,
|
||||||
tr1001_off
|
tr1001_off
|
||||||
};
|
};
|
||||||
|
@ -312,7 +324,6 @@ sendx_crc16(unsigned char b, uint16_t crcacc)
|
||||||
}
|
}
|
||||||
return crcacc;
|
return crcacc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
tr1001_set_txpower(unsigned char p)
|
tr1001_set_txpower(unsigned char p)
|
||||||
|
@ -344,13 +355,7 @@ tr1001_set_txpower(unsigned char p)
|
||||||
P2OUT |= 0x40; /* P26 = 1 (chipselect off) */
|
P2OUT |= 0x40; /* P26 = 1 (chipselect off) */
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static void
|
int
|
||||||
tr1001_set_receiver(void (* recv)(const struct radio_driver *))
|
|
||||||
{
|
|
||||||
receiver_callback = recv;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
tr1001_init(void)
|
tr1001_init(void)
|
||||||
{
|
{
|
||||||
PT_INIT(&rxhandler_pt);
|
PT_INIT(&rxhandler_pt);
|
||||||
|
@ -377,6 +382,8 @@ tr1001_init(void)
|
||||||
rxclear();
|
rxclear();
|
||||||
|
|
||||||
process_start(&tr1001_process, NULL);
|
process_start(&tr1001_process, NULL);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
interrupt (UART0RX_VECTOR)
|
interrupt (UART0RX_VECTOR)
|
||||||
|
@ -552,22 +559,44 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
|
||||||
PT_END(&rxhandler_pt);
|
PT_END(&rxhandler_pt);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
static int
|
||||||
* Prepare a transmission.
|
prepare_packet(const void *data, unsigned short len)
|
||||||
*
|
{
|
||||||
* This function does the necessary setup before a packet can be sent
|
pending_data = data;
|
||||||
* out.
|
return 0;
|
||||||
*/
|
}
|
||||||
static void
|
/*---------------------------------------------------------------------------*/
|
||||||
prepare_transmission(int synchbytes)
|
static int
|
||||||
|
transmit_packet(unsigned short len)
|
||||||
|
{
|
||||||
|
int ret = RADIO_TX_ERR;
|
||||||
|
if(pending_data != NULL) {
|
||||||
|
ret = tr1001_send(pending_data, len);
|
||||||
|
pending_data = NULL;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
int
|
||||||
|
tr1001_send(const void *packet, unsigned short len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
uint16_t crc16;
|
||||||
|
|
||||||
|
LOG("tr1001_send: sending %d bytes\n", len);
|
||||||
|
|
||||||
|
if(onoroff == ON) {
|
||||||
|
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
||||||
|
}
|
||||||
|
ENERGEST_ON(ENERGEST_TYPE_TRANSMIT);
|
||||||
|
|
||||||
|
/* Prepare the transmission. */
|
||||||
|
|
||||||
/* Delay the transmission for a short random duration. */
|
/* Delay the transmission for a short random duration. */
|
||||||
clock_delay(random_rand() & 0x3ff);
|
clock_delay(random_rand() & 0x3ff);
|
||||||
|
|
||||||
|
|
||||||
/* Check that we don't currently are receiveing a packet, and if so
|
/* Check that we don't currently are receiving a packet, and if so
|
||||||
we wait until the reception has been completed. Reception is done
|
we wait until the reception has been completed. Reception is done
|
||||||
with interrupts so it is OK for us to wait in a while() loop. */
|
with interrupts so it is OK for us to wait in a while() loop. */
|
||||||
|
|
||||||
|
@ -588,8 +617,6 @@ prepare_transmission(int synchbytes)
|
||||||
|
|
||||||
|
|
||||||
/* Transmit preamble and synch bytes. */
|
/* Transmit preamble and synch bytes. */
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < 20; ++i) {
|
for(i = 0; i < 20; ++i) {
|
||||||
send(0xaa);
|
send(0xaa);
|
||||||
}
|
}
|
||||||
|
@ -597,29 +624,11 @@ prepare_transmission(int synchbytes)
|
||||||
send(0xaa);*/
|
send(0xaa);*/
|
||||||
send(0xff);
|
send(0xff);
|
||||||
|
|
||||||
for(i = 0; i < synchbytes; ++i) {
|
for(i = 0; i < NUM_SYNCHBYTES; ++i) {
|
||||||
send(SYNCH1);
|
send(SYNCH1);
|
||||||
}
|
}
|
||||||
send(SYNCH2);
|
send(SYNCH2);
|
||||||
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
int
|
|
||||||
tr1001_send(const void *packet, unsigned short len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
uint16_t crc16;
|
|
||||||
|
|
||||||
LOG("tr1001_send: sending %d bytes\n", len);
|
|
||||||
|
|
||||||
if(onoroff == ON) {
|
|
||||||
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
|
||||||
}
|
|
||||||
ENERGEST_ON(ENERGEST_TYPE_TRANSMIT);
|
|
||||||
|
|
||||||
/* Prepare the transmission. */
|
|
||||||
prepare_transmission(NUM_SYNCHBYTES);
|
|
||||||
|
|
||||||
crc16 = 0xffff;
|
crc16 = 0xffff;
|
||||||
|
|
||||||
gcr_init();
|
gcr_init();
|
||||||
|
@ -702,8 +711,29 @@ tr1001_read(void *buf, unsigned short bufsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
receiving_packet(void)
|
||||||
|
{
|
||||||
|
return tr1001_rxstate == RXSTATE_RECEIVING &&
|
||||||
|
!timer_expired(&rxtimer);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
pending_packet(void)
|
||||||
|
{
|
||||||
|
return tr1001_rxstate == RXSTATE_FULL;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
channel_clear(void)
|
||||||
|
{
|
||||||
|
/* TODO add CCA functionality */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
PROCESS_THREAD(tr1001_process, ev, data)
|
PROCESS_THREAD(tr1001_process, ev, data)
|
||||||
{
|
{
|
||||||
|
int len;
|
||||||
PROCESS_BEGIN();
|
PROCESS_BEGIN();
|
||||||
|
|
||||||
/* Reset reception state now that the process is ready to receive data. */
|
/* Reset reception state now that the process is ready to receive data. */
|
||||||
|
@ -711,13 +741,11 @@ PROCESS_THREAD(tr1001_process, ev, data)
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
|
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
|
||||||
if(receiver_callback != NULL) {
|
packetbuf_clear();
|
||||||
receiver_callback(&tr1001_driver);
|
len = tr1001_read(packetbuf_dataptr(), PACKETBUF_SIZE);
|
||||||
} else {
|
if(len > 0) {
|
||||||
LOG("tr1001 has no receive function\n");
|
packetbuf_set_datalen(len);
|
||||||
|
NETSTACK_RDC.input();
|
||||||
/* Perform a dummy read to drop the message. */
|
|
||||||
tr1001_read((uint8_t *)&data, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -756,6 +784,6 @@ tr1001_sstrength(void)
|
||||||
{
|
{
|
||||||
return sstrength;
|
return sstrength;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @} */
|
/** @} */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: tr1001.c,v 1.12 2009/11/19 18:04:02 nifi Exp $
|
* @(#)$Id: tr1001.c,v 1.13 2010/03/02 22:40:39 nifi Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \addtogroup esb
|
* \addtogroup esb
|
||||||
|
@ -56,6 +56,7 @@
|
||||||
#include "dev/radio-sensor.h"
|
#include "dev/radio-sensor.h"
|
||||||
#include "lib/me.h"
|
#include "lib/me.h"
|
||||||
#include "lib/crc16.h"
|
#include "lib/crc16.h"
|
||||||
|
#include "net/netstack.h"
|
||||||
#include "net/rime/rimestats.h"
|
#include "net/rime/rimestats.h"
|
||||||
|
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
@ -88,6 +89,11 @@
|
||||||
#define RXBUFSIZE PACKETBUF_SIZE
|
#define RXBUFSIZE PACKETBUF_SIZE
|
||||||
#endif /* TR1001_CONF_BUFFER_SIZE */
|
#endif /* TR1001_CONF_BUFFER_SIZE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pending data to send when using prepare/transmit functions.
|
||||||
|
*/
|
||||||
|
static const void *pending_data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The buffer which holds incoming data.
|
* The buffer which holds incoming data.
|
||||||
*/
|
*/
|
||||||
|
@ -151,16 +157,23 @@ static unsigned short tmp_count;
|
||||||
PROCESS(tr1001_process, "TR1001 driver");
|
PROCESS(tr1001_process, "TR1001 driver");
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static void (* receiver_callback)(const struct radio_driver *);
|
static int prepare_packet(const void *data, unsigned short len);
|
||||||
|
static int transmit_packet(unsigned short len);
|
||||||
static void tr1001_set_receiver(void (* recv)(const struct radio_driver *));
|
static int receiving_packet(void);
|
||||||
|
static int pending_packet(void);
|
||||||
|
static int channel_clear(void);
|
||||||
static int tr1001_on(void);
|
static int tr1001_on(void);
|
||||||
static int tr1001_off(void);
|
static int tr1001_off(void);
|
||||||
|
|
||||||
const struct radio_driver tr1001_driver = {
|
const struct radio_driver tr1001_driver = {
|
||||||
|
tr1001_init,
|
||||||
|
prepare_packet,
|
||||||
|
transmit_packet,
|
||||||
tr1001_send,
|
tr1001_send,
|
||||||
tr1001_read,
|
tr1001_read,
|
||||||
tr1001_set_receiver,
|
channel_clear,
|
||||||
|
receiving_packet,
|
||||||
|
pending_packet,
|
||||||
tr1001_on,
|
tr1001_on,
|
||||||
tr1001_off
|
tr1001_off
|
||||||
};
|
};
|
||||||
|
@ -333,16 +346,9 @@ tr1001_set_txpower(unsigned char p)
|
||||||
P2OUT |= 0x40; /* P26 = 1 (chipselect off) */
|
P2OUT |= 0x40; /* P26 = 1 (chipselect off) */
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static void
|
int
|
||||||
tr1001_set_receiver(void (* recv)(const struct radio_driver *))
|
|
||||||
{
|
|
||||||
receiver_callback = recv;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
tr1001_init(void)
|
tr1001_init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
PT_INIT(&rxhandler_pt);
|
PT_INIT(&rxhandler_pt);
|
||||||
|
|
||||||
onoroff = OFF;
|
onoroff = OFF;
|
||||||
|
@ -367,6 +373,8 @@ tr1001_init(void)
|
||||||
rxclear();
|
rxclear();
|
||||||
|
|
||||||
process_start(&tr1001_process, NULL);
|
process_start(&tr1001_process, NULL);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
interrupt (UART0RX_VECTOR)
|
interrupt (UART0RX_VECTOR)
|
||||||
|
@ -548,22 +556,44 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
|
||||||
PT_END(&rxhandler_pt);
|
PT_END(&rxhandler_pt);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
static int
|
||||||
* Prepare a transmission.
|
prepare_packet(const void *data, unsigned short len)
|
||||||
*
|
{
|
||||||
* This function does the necessary setup before a packet can be sent
|
pending_data = data;
|
||||||
* out.
|
return 0;
|
||||||
*/
|
}
|
||||||
static void
|
/*---------------------------------------------------------------------------*/
|
||||||
prepare_transmission(int synchbytes)
|
static int
|
||||||
|
transmit_packet(unsigned short len)
|
||||||
|
{
|
||||||
|
int ret = RADIO_TX_ERR;
|
||||||
|
if(pending_data != NULL) {
|
||||||
|
ret = tr1001_send(pending_data, len);
|
||||||
|
pending_data = NULL;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
int
|
||||||
|
tr1001_send(const void *packet, unsigned short len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
uint16_t crc16;
|
||||||
|
|
||||||
|
LOG("tr1001_send: sending %d bytes\n", len);
|
||||||
|
|
||||||
|
if(onoroff == ON) {
|
||||||
|
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
||||||
|
}
|
||||||
|
ENERGEST_ON(ENERGEST_TYPE_TRANSMIT);
|
||||||
|
|
||||||
|
/* Prepare the transmission. */
|
||||||
|
|
||||||
/* Delay the transmission for a short random duration. */
|
/* Delay the transmission for a short random duration. */
|
||||||
clock_delay(random_rand() & 0x3ff);
|
clock_delay(random_rand() & 0x3ff);
|
||||||
|
|
||||||
|
|
||||||
/* Check that we don't currently are receiveing a packet, and if so
|
/* Check that we don't currently are receiving a packet, and if so
|
||||||
we wait until the reception has been completed. Reception is done
|
we wait until the reception has been completed. Reception is done
|
||||||
with interrupts so it is OK for us to wait in a while() loop. */
|
with interrupts so it is OK for us to wait in a while() loop. */
|
||||||
|
|
||||||
|
@ -584,8 +614,6 @@ prepare_transmission(int synchbytes)
|
||||||
|
|
||||||
|
|
||||||
/* Transmit preamble and synch bytes. */
|
/* Transmit preamble and synch bytes. */
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < 20; ++i) {
|
for(i = 0; i < 20; ++i) {
|
||||||
send(0xaa);
|
send(0xaa);
|
||||||
}
|
}
|
||||||
|
@ -593,29 +621,11 @@ prepare_transmission(int synchbytes)
|
||||||
send(0xaa);*/
|
send(0xaa);*/
|
||||||
send(0xff);
|
send(0xff);
|
||||||
|
|
||||||
for(i = 0; i < synchbytes; ++i) {
|
for(i = 0; i < NUM_SYNCHBYTES; ++i) {
|
||||||
send(SYNCH1);
|
send(SYNCH1);
|
||||||
}
|
}
|
||||||
send(SYNCH2);
|
send(SYNCH2);
|
||||||
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
int
|
|
||||||
tr1001_send(const void *packet, unsigned short len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
uint16_t crc16;
|
|
||||||
|
|
||||||
LOG("tr1001_send: sending %d bytes\n", len);
|
|
||||||
|
|
||||||
if(onoroff == ON) {
|
|
||||||
ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
|
|
||||||
}
|
|
||||||
ENERGEST_ON(ENERGEST_TYPE_TRANSMIT);
|
|
||||||
|
|
||||||
/* Prepare the transmission. */
|
|
||||||
prepare_transmission(NUM_SYNCHBYTES);
|
|
||||||
|
|
||||||
crc16 = 0xffff;
|
crc16 = 0xffff;
|
||||||
|
|
||||||
/* Send packet header. */
|
/* Send packet header. */
|
||||||
|
@ -687,8 +697,29 @@ tr1001_read(void *buf, unsigned short bufsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
receiving_packet(void)
|
||||||
|
{
|
||||||
|
return tr1001_rxstate == RXSTATE_RECEIVING &&
|
||||||
|
!timer_expired(&rxtimer);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
pending_packet(void)
|
||||||
|
{
|
||||||
|
return tr1001_rxstate == RXSTATE_FULL;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static int
|
||||||
|
channel_clear(void)
|
||||||
|
{
|
||||||
|
/* TODO add CCA functionality */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
PROCESS_THREAD(tr1001_process, ev, data)
|
PROCESS_THREAD(tr1001_process, ev, data)
|
||||||
{
|
{
|
||||||
|
int len;
|
||||||
PROCESS_BEGIN();
|
PROCESS_BEGIN();
|
||||||
|
|
||||||
/* Reset reception state now that the process is ready to receive data. */
|
/* Reset reception state now that the process is ready to receive data. */
|
||||||
|
@ -696,13 +727,11 @@ PROCESS_THREAD(tr1001_process, ev, data)
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
|
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
|
||||||
if(receiver_callback != NULL) {
|
packetbuf_clear();
|
||||||
receiver_callback(&tr1001_driver);
|
len = tr1001_read(packetbuf_dataptr(), PACKETBUF_SIZE);
|
||||||
} else {
|
if(len > 0) {
|
||||||
LOG("tr1001 has no receive function\n");
|
packetbuf_set_datalen(len);
|
||||||
|
NETSTACK_RDC.input();
|
||||||
/* Perform a dummy read to drop the message. */
|
|
||||||
tr1001_read(&data, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* @(#)$Id: tr1001.h,v 1.8 2008/07/09 20:45:06 nifi Exp $
|
* @(#)$Id: tr1001.h,v 1.9 2010/03/02 22:40:39 nifi Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef __TR1001_H__
|
#ifndef __TR1001_H__
|
||||||
#define __TR1001_H__
|
#define __TR1001_H__
|
||||||
|
@ -49,7 +49,7 @@ extern const struct radio_driver tr1001_driver;
|
||||||
* Turns on reception of bytes and installs the receive interrupt
|
* Turns on reception of bytes and installs the receive interrupt
|
||||||
* handler.
|
* handler.
|
||||||
*/
|
*/
|
||||||
void tr1001_init(void);
|
int tr1001_init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the speed of the TR1001 radio device.
|
* Set the speed of the TR1001 radio device.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Swedish Institute of Computer Science
|
* Copyright (c) 2010, Swedish Institute of Computer Science.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -26,40 +26,62 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* $Id: uip-driver.c,v 1.1 2010/03/02 22:40:39 nifi Exp $
|
||||||
*
|
|
||||||
* @(#)$Id: tr1001-uip.c,v 1.2 2007/08/07 11:14:39 nifi Exp $
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "contiki-esb.h"
|
/**
|
||||||
#include "net/hc.h"
|
* \file
|
||||||
|
* A brief description of what this file is
|
||||||
|
* \author
|
||||||
|
* Niclas Finne <nfi@sics.se>
|
||||||
|
* Joakim Eriksson <joakime@sics.se>
|
||||||
|
*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
#include "net/netstack.h"
|
||||||
|
#include "net/uip.h"
|
||||||
|
#include "net/tcpip.h"
|
||||||
|
#include "net/hc.h"
|
||||||
|
#include "net/rime/packetbuf.h"
|
||||||
|
#include "net/uip-driver.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
static void
|
static void
|
||||||
tr1001_uip_callback(const struct radio_driver *driver)
|
init(void)
|
||||||
{
|
{
|
||||||
uip_len = driver->read(&uip_buf[UIP_LLH_LEN], UIP_BUFSIZE - UIP_LLH_LEN);
|
/*
|
||||||
if(uip_len > 0) {
|
* Set out output function as the function to be called from uIP to
|
||||||
uip_len = hc_inflate(&uip_buf[UIP_LLH_LEN], uip_len);
|
* send a packet.
|
||||||
|
*/
|
||||||
|
tcpip_set_outputfunc(uip_driver_send);
|
||||||
|
}
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
static void
|
||||||
|
input(void)
|
||||||
|
{
|
||||||
|
if(packetbuf_datalen() > 0 &&
|
||||||
|
packetbuf_datalen() <= UIP_BUFSIZE - UIP_LLH_LEN) {
|
||||||
|
memcpy(&uip_buf[UIP_LLH_LEN], packetbuf_dataptr(), packetbuf_datalen());
|
||||||
|
uip_len = hc_inflate(&uip_buf[UIP_LLH_LEN], packetbuf_datalen());
|
||||||
tcpip_input();
|
tcpip_input();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------*/
|
||||||
void
|
uint8_t
|
||||||
tr1001_uip_init()
|
uip_driver_send(void)
|
||||||
{
|
|
||||||
tr1001_init();
|
|
||||||
tr1001_driver.set_receive_function(tr1001_uip_callback);
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
u8_t
|
|
||||||
tr1001_uip_send(void)
|
|
||||||
{
|
{
|
||||||
uip_len = hc_compress(&uip_buf[UIP_LLH_LEN], uip_len);
|
uip_len = hc_compress(&uip_buf[UIP_LLH_LEN], uip_len);
|
||||||
if (tr1001_driver.send(&uip_buf[UIP_LLH_LEN], uip_len) == 0) {
|
packetbuf_copyfrom(&uip_buf[UIP_LLH_LEN], uip_len);
|
||||||
return UIP_FW_OK;
|
|
||||||
} else {
|
/* XXX we should provide a callback function that is called when the
|
||||||
return UIP_FW_DROPPED;
|
packet is sent. For now, we just supply a NULL pointer. */
|
||||||
}
|
NETSTACK_MAC.send(NULL, NULL);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------*/
|
||||||
|
const struct network_driver uip_driver = {
|
||||||
|
"uip",
|
||||||
|
init,
|
||||||
|
input
|
||||||
|
};
|
||||||
|
/*--------------------------------------------------------------------*/
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Swedish Institute of Computer Science
|
* Copyright (c) 2010, Swedish Institute of Computer Science.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -26,14 +26,24 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* $Id: uip-driver.h,v 1.1 2010/03/02 22:40:39 nifi Exp $
|
||||||
*
|
|
||||||
* @(#)$Id: tr1001-uip.h,v 1.2 2007/08/07 11:14:39 nifi Exp $
|
|
||||||
*/
|
*/
|
||||||
#ifndef __TR1001_UIP_H__
|
|
||||||
#define __TR1001_UIP_H__
|
|
||||||
|
|
||||||
void tr1001_uip_init();
|
/**
|
||||||
u8_t tr1001_uip_send(void);
|
* \file
|
||||||
|
* A brief description of what this file is
|
||||||
|
* \author
|
||||||
|
* Niclas Finne <nfi@sics.se>
|
||||||
|
* Joakim Eriksson <joakime@sics.se>
|
||||||
|
*/
|
||||||
|
|
||||||
#endif /* __TR1001_UIP_H__ */
|
#ifndef __UIP_DRIVER_H__
|
||||||
|
#define __UIP_DRIVER_H__
|
||||||
|
|
||||||
|
#include "net/netstack.h"
|
||||||
|
|
||||||
|
uint8_t uip_driver_send(void);
|
||||||
|
|
||||||
|
extern const struct network_driver uip_driver;
|
||||||
|
|
||||||
|
#endif /* __UIP_DRIVER_H__ */
|
Loading…
Reference in a new issue