Merge branch 'develop' into contrib/update-cooja
This commit is contained in:
commit
b7dd8b8709
@ -2,6 +2,9 @@
|
|||||||
# See https://github.com/travis-ci/travis-ci/issues/6928#issuecomment-264227708
|
# See https://github.com/travis-ci/travis-ci/issues/6928#issuecomment-264227708
|
||||||
group: deprecated
|
group: deprecated
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
language: c #NOTE: this will set CC=gcc which might cause trouble
|
language: c #NOTE: this will set CC=gcc which might cause trouble
|
||||||
@ -106,3 +109,5 @@ env:
|
|||||||
- BUILD_TYPE='base' BUILD_CATEGORY='sim'
|
- BUILD_TYPE='base' BUILD_CATEGORY='sim'
|
||||||
- BUILD_TYPE='ieee802154' BUILD_CATEGORY='sim'
|
- BUILD_TYPE='ieee802154' BUILD_CATEGORY='sim'
|
||||||
- BUILD_TYPE='6tisch' BUILD_CATEGORY='sim'
|
- BUILD_TYPE='6tisch' BUILD_CATEGORY='sim'
|
||||||
|
- BUILD_TYPE='rpl-border-router' BUILD_CATEGORY='sim'
|
||||||
|
- BUILD_TYPE='native-networking' BUILD_CATEGORY='sim'
|
||||||
|
@ -1,281 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
|
|
||||||
* 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 copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* \addtogroup arm-cm-mtarch
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* \file
|
|
||||||
* Implmentation of the ARM Cortex-M support for Contiki multi-threading.
|
|
||||||
*/
|
|
||||||
#include CMSIS_DEV_HDR
|
|
||||||
#include "sys/mt.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define EXC_RETURN_PROCESS_THREAD_BASIC_FRAME 0xfffffffd
|
|
||||||
|
|
||||||
/* Check whether EXC_RETURN[3:0] in LR indicates a preempted process thread. */
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
#define PREEMPTED_PROCESS_THREAD() \
|
|
||||||
"and r0, lr, #0xf\n\t" \
|
|
||||||
"cmp r0, #0xd\n\t"
|
|
||||||
#elif __ARM_ARCH == 6
|
|
||||||
#define PREEMPTED_PROCESS_THREAD() \
|
|
||||||
"mov r0, lr\n\t" \
|
|
||||||
"movs r1, #0xf\n\t" \
|
|
||||||
"and r0, r1\n\t" \
|
|
||||||
"cmp r0, #0xd\n\t"
|
|
||||||
#else
|
|
||||||
#error Unsupported ARM architecture
|
|
||||||
#endif
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* \brief SVCall system handler
|
|
||||||
*
|
|
||||||
* This exception handler executes the action requested by the corresponding
|
|
||||||
* \c svc instruction, which is a task switch from the main Contiki thread to an
|
|
||||||
* mt thread or the other way around.
|
|
||||||
*/
|
|
||||||
__attribute__ ((__naked__))
|
|
||||||
void
|
|
||||||
svcall_handler(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Decide whether to switch to the main thread or to a process thread,
|
|
||||||
* depending on the type of the thread preempted by SVCall.
|
|
||||||
*/
|
|
||||||
__asm__ (PREEMPTED_PROCESS_THREAD()
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
"it eq\n\t"
|
|
||||||
#endif
|
|
||||||
"beq switch_to_main_thread\n\t"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* - Retrieve from the main stack the PSP passed to SVCall through R0. Note
|
|
||||||
* that it cannot be retrieved directly from R0 on exception entry because
|
|
||||||
* this register may have been overwritten by other exceptions on SVCall
|
|
||||||
* entry.
|
|
||||||
* - Save the main thread context to the main stack.
|
|
||||||
* - Restore the process thread context from the process stack.
|
|
||||||
* - Return to Thread mode, resuming the process thread.
|
|
||||||
*/
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
"ldr r0, [sp]\n\t"
|
|
||||||
"push {r4-r11, lr}\n\t"
|
|
||||||
"add r1, r0, #9 * 4\n\t"
|
|
||||||
"msr psp, r1\n\t"
|
|
||||||
"ldmia r0, {r4-r11, pc}");
|
|
||||||
#elif __ARM_ARCH == 6
|
|
||||||
"mov r0, r8\n\t"
|
|
||||||
"mov r1, r9\n\t"
|
|
||||||
"mov r2, r10\n\t"
|
|
||||||
"mov r3, r11\n\t"
|
|
||||||
"push {r0-r7, lr}\n\t"
|
|
||||||
"ldr r0, [sp, #9 * 4]\n\t"
|
|
||||||
"ldmia r0!, {r4-r7}\n\t"
|
|
||||||
"mov r8, r4\n\t"
|
|
||||||
"mov r9, r5\n\t"
|
|
||||||
"mov r10, r6\n\t"
|
|
||||||
"mov r11, r7\n\t"
|
|
||||||
"ldmia r0!, {r3-r7}\n\t"
|
|
||||||
"msr psp, r0\n\t"
|
|
||||||
"bx r3");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* \brief PendSV system handler
|
|
||||||
*
|
|
||||||
* This exception handler executes following a call to mtarch_pstart() from
|
|
||||||
* another exception handler. It performs a task switch to the main Contiki
|
|
||||||
* thread if it is not already running.
|
|
||||||
*/
|
|
||||||
__attribute__ ((__naked__))
|
|
||||||
void
|
|
||||||
pendsv_handler(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Return without doing anything if PendSV has not preempted a process thread.
|
|
||||||
* This can occur either because PendSV has preempted the main thread, in
|
|
||||||
* which case there is nothing to do, or because mtarch_pstart() has been
|
|
||||||
* called from an exception handler without having called mt_init() first, in
|
|
||||||
* which case PendSV may have preempted an exception handler and nothing must
|
|
||||||
* be done because mt is not active.
|
|
||||||
*/
|
|
||||||
__asm__ ( PREEMPTED_PROCESS_THREAD()
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
"it ne\n\t"
|
|
||||||
"bxne lr\n"
|
|
||||||
#elif __ARM_ARCH == 6
|
|
||||||
"beq switch_to_main_thread\n\t"
|
|
||||||
"bx lr\n"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* - Save the process thread context to the process stack.
|
|
||||||
* - Place into the main stack the updated PSP that SVCall must return through
|
|
||||||
* R0.
|
|
||||||
* - Restore the main thread context from the main stack.
|
|
||||||
* - Return to Thread mode, resuming the main thread.
|
|
||||||
*/
|
|
||||||
"switch_to_main_thread:\n\t"
|
|
||||||
"mrs r0, psp\n\t"
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
"stmdb r0!, {r4-r11, lr}\n\t"
|
|
||||||
"str r0, [sp, #9 * 4]\n\t"
|
|
||||||
"pop {r4-r11, pc}");
|
|
||||||
#elif __ARM_ARCH == 6
|
|
||||||
"mov r3, lr\n\t"
|
|
||||||
"sub r0, #5 * 4\n\t"
|
|
||||||
"stmia r0!, {r3-r7}\n\t"
|
|
||||||
"mov r4, r8\n\t"
|
|
||||||
"mov r5, r9\n\t"
|
|
||||||
"sub r0, #9 * 4\n\t"
|
|
||||||
"mov r6, r10\n\t"
|
|
||||||
"mov r7, r11\n\t"
|
|
||||||
"stmia r0!, {r4-r7}\n\t"
|
|
||||||
"pop {r4-r7}\n\t"
|
|
||||||
"sub r0, #4 * 4\n\t"
|
|
||||||
"mov r8, r4\n\t"
|
|
||||||
"mov r9, r5\n\t"
|
|
||||||
"str r0, [sp, #5 * 4]\n\t"
|
|
||||||
"mov r10, r6\n\t"
|
|
||||||
"mov r11, r7\n\t"
|
|
||||||
"pop {r4-r7, pc}");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_init(void)
|
|
||||||
{
|
|
||||||
SCB->CCR = (SCB->CCR
|
|
||||||
#ifdef SCB_CCR_NONBASETHRDENA_Msk
|
|
||||||
/*
|
|
||||||
* Make sure that any attempt to enter Thread mode with exceptions
|
|
||||||
* active faults.
|
|
||||||
*
|
|
||||||
* Only SVCall and PendSV are allowed to forcibly enter Thread
|
|
||||||
* mode, and they are configured with the same, lowest exception
|
|
||||||
* priority, so no other exceptions may be active.
|
|
||||||
*/
|
|
||||||
& ~SCB_CCR_NONBASETHRDENA_Msk
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Force 8-byte stack pointer alignment on exception entry in order
|
|
||||||
* to be able to use AAPCS-conforming functions as exception
|
|
||||||
* handlers.
|
|
||||||
*/
|
|
||||||
) | SCB_CCR_STKALIGN_Msk;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure SVCall and PendSV with the same, lowest exception priority.
|
|
||||||
*
|
|
||||||
* This makes sure that they cannot preempt each other, and that the processor
|
|
||||||
* executes them after having handled all other exceptions. If both are
|
|
||||||
* pending at the same time, then SVCall takes precedence because of its lower
|
|
||||||
* exception number. In addition, the associated exception handlers do not
|
|
||||||
* have to check whether they are returning to Thread mode, because they
|
|
||||||
* cannot preempt any other exception.
|
|
||||||
*/
|
|
||||||
NVIC_SetPriority(SVCall_IRQn, (1 << __NVIC_PRIO_BITS) - 1);
|
|
||||||
NVIC_SetPriority(PendSV_IRQn, (1 << __NVIC_PRIO_BITS) - 1);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Force the preceding configurations to take effect before further
|
|
||||||
* operations.
|
|
||||||
*/
|
|
||||||
__DSB();
|
|
||||||
__ISB();
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_start(struct mtarch_thread *thread,
|
|
||||||
void (*function)(void *data), void *data)
|
|
||||||
{
|
|
||||||
struct mtarch_thread_context *context = &thread->start_stack.context;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the thread context with the appropriate values to call
|
|
||||||
* function() with data and to make function() return to mt_exit() without
|
|
||||||
* having to call it explicitly.
|
|
||||||
*/
|
|
||||||
context->exc_return = EXC_RETURN_PROCESS_THREAD_BASIC_FRAME;
|
|
||||||
context->r0 = (uint32_t)data;
|
|
||||||
context->lr = (uint32_t)mt_exit;
|
|
||||||
context->pc = (uint32_t)function;
|
|
||||||
context->xpsr = xPSR_T_Msk;
|
|
||||||
thread->psp = (uint32_t)context;
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_exec(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
/* Pass the PSP to SVCall, and get the updated PSP as its return value. */
|
|
||||||
register uint32_t psp __asm__ ("r0") = thread->psp;
|
|
||||||
__asm__ volatile ("svc #0"
|
|
||||||
: "+r" (psp)
|
|
||||||
:: "memory");
|
|
||||||
thread->psp = psp;
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
__attribute__ ((__naked__))
|
|
||||||
void
|
|
||||||
mtarch_yield(void)
|
|
||||||
{
|
|
||||||
/* Invoke SVCall. */
|
|
||||||
__asm__ ("svc #0\n\t"
|
|
||||||
"bx lr");
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_stop(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstart(void)
|
|
||||||
{
|
|
||||||
/* Trigger PendSV. */
|
|
||||||
SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstop(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_remove(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/** @} */
|
|
@ -1,119 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
|
|
||||||
* 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 copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* \addtogroup arm
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* \defgroup arm-cm-mtarch ARM Cortex-M support for Contiki multi-threading
|
|
||||||
*
|
|
||||||
* All the Cortex-M devices supported by CMSIS-CORE are supported.
|
|
||||||
*
|
|
||||||
* An exception handler can decide to make the main Contiki thread preempt any
|
|
||||||
* running mt thread by calling mtarch_pstart() (e.g. to perform urgent
|
|
||||||
* operations that have been triggered by some event or that had been
|
|
||||||
* scheduled). If the running thread is already the main Contiki thread, then
|
|
||||||
* nothing happens. The corresponding task switch takes place when leaving
|
|
||||||
* Handler mode. The main Contiki thread then resumes after the call to
|
|
||||||
* mt_exec() that yielded to the preempted mt thread.
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* \file
|
|
||||||
* Header file for the ARM Cortex-M support for Contiki multi-threading.
|
|
||||||
*/
|
|
||||||
#ifndef MTARCH_H_
|
|
||||||
#define MTARCH_H_
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "sys/cc.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#ifndef MTARCH_CONF_STACKSIZE
|
|
||||||
/** Thread stack size configuration, expressed as a number of 32-bit words. */
|
|
||||||
#define MTARCH_CONF_STACKSIZE 256
|
|
||||||
#endif
|
|
||||||
/** Actual stack size, with minimum size and alignment requirements enforced. */
|
|
||||||
#define MTARCH_STACKSIZE ((MAX(MTARCH_CONF_STACKSIZE, \
|
|
||||||
sizeof(struct mtarch_thread_context) / \
|
|
||||||
sizeof(uint32_t)) + 1) & ~1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure of a saved thread context.
|
|
||||||
*
|
|
||||||
* <tt>xpsr..r0</tt> are managed by the processor (except in mtarch_start()),
|
|
||||||
* while the other register values are handled by the software.
|
|
||||||
*/
|
|
||||||
struct mtarch_thread_context {
|
|
||||||
#if __ARM_ARCH == 7
|
|
||||||
uint32_t r4;
|
|
||||||
uint32_t r5;
|
|
||||||
uint32_t r6;
|
|
||||||
uint32_t r7;
|
|
||||||
#endif
|
|
||||||
uint32_t r8;
|
|
||||||
uint32_t r9;
|
|
||||||
uint32_t r10;
|
|
||||||
uint32_t r11;
|
|
||||||
uint32_t exc_return;
|
|
||||||
#if __ARM_ARCH == 6
|
|
||||||
uint32_t r4;
|
|
||||||
uint32_t r5;
|
|
||||||
uint32_t r6;
|
|
||||||
uint32_t r7;
|
|
||||||
#endif
|
|
||||||
uint32_t r0;
|
|
||||||
uint32_t r1;
|
|
||||||
uint32_t r2;
|
|
||||||
uint32_t r3;
|
|
||||||
uint32_t r12;
|
|
||||||
uint32_t lr;
|
|
||||||
uint32_t pc;
|
|
||||||
uint32_t xpsr;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
uint32_t psp;
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
uint32_t free[MTARCH_STACKSIZE -
|
|
||||||
sizeof(struct mtarch_thread_context) / sizeof(uint32_t)];
|
|
||||||
struct mtarch_thread_context context;
|
|
||||||
} start_stack;
|
|
||||||
uint32_t stack[MTARCH_STACKSIZE];
|
|
||||||
} CC_ALIGN(8);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* MTARCH_H_ */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
* @}
|
|
||||||
*/
|
|
@ -52,8 +52,6 @@ void nmi_handler(void);
|
|||||||
void default_handler(void);
|
void default_handler(void);
|
||||||
|
|
||||||
/* System Handler and ISR prototypes implemented elsewhere */
|
/* System Handler and ISR prototypes implemented elsewhere */
|
||||||
void svcall_handler(void); /* See mtarch.c */
|
|
||||||
void pendsv_handler(void); /* See mtarch.c */
|
|
||||||
void clock_isr(void); /* SysTick Handler */
|
void clock_isr(void); /* SysTick Handler */
|
||||||
void gpio_port_a_isr(void);
|
void gpio_port_a_isr(void);
|
||||||
void gpio_port_b_isr(void);
|
void gpio_port_b_isr(void);
|
||||||
@ -121,10 +119,10 @@ void(*const vectors[])(void) =
|
|||||||
0, /* 8 Reserved */
|
0, /* 8 Reserved */
|
||||||
0, /* 9 Reserved */
|
0, /* 9 Reserved */
|
||||||
0, /* 10 Reserved */
|
0, /* 10 Reserved */
|
||||||
svcall_handler, /* 11 SVCall handler */
|
default_handler, /* 11 SVCall handler */
|
||||||
default_handler, /* 12 Debug monitor handler */
|
default_handler, /* 12 Debug monitor handler */
|
||||||
0, /* 13 Reserved */
|
0, /* 13 Reserved */
|
||||||
pendsv_handler, /* 14 The PendSV handler */
|
default_handler, /* 14 The PendSV handler */
|
||||||
clock_isr, /* 15 The SysTick handler */
|
clock_isr, /* 15 The SysTick handler */
|
||||||
gpio_port_a_isr, /* 16 GPIO Port A */
|
gpio_port_a_isr, /* 16 GPIO Port A */
|
||||||
gpio_port_b_isr, /* 17 GPIO Port B */
|
gpio_port_b_isr, /* 17 GPIO Port B */
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010, Loughborough University - 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. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Stub header file for multi-threading. It doesn't do anything, it
|
|
||||||
* just exists so that mt.c can compile cleanly.
|
|
||||||
*
|
|
||||||
* This is based on the original mtarch.h for z80 by Takahide Matsutsuka
|
|
||||||
*
|
|
||||||
* \author
|
|
||||||
* George Oikonomou - <oikonomou@users.sourceforge.net>
|
|
||||||
*/
|
|
||||||
#ifndef __MTARCH_H__
|
|
||||||
#define __MTARCH_H__
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
unsigned char *sp;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __MTARCH_H__ */
|
|
@ -40,13 +40,6 @@ MSP430 = msp430.c flash.c clock.c leds.c leds-arch.c \
|
|||||||
watchdog.c lpm.c rtimer-arch.c
|
watchdog.c lpm.c rtimer-arch.c
|
||||||
UIPDRIVERS = slip.c crc16.c
|
UIPDRIVERS = slip.c crc16.c
|
||||||
|
|
||||||
ifndef CPU_HAS_MSP430X
|
|
||||||
# include mtarch.c only in the non-large memory model case, because
|
|
||||||
# the current implementation assumes 16-bit addresses (function pointers
|
|
||||||
# stored as "unsigned short").
|
|
||||||
MSP430 += mtarch.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
CONTIKI_TARGET_SOURCEFILES += $(MSP430) \
|
CONTIKI_TARGET_SOURCEFILES += $(MSP430) \
|
||||||
$(SYSAPPS) \
|
$(SYSAPPS) \
|
||||||
$(UIPDRIVERS)
|
$(UIPDRIVERS)
|
||||||
|
@ -1,177 +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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "sys/mt.h"
|
|
||||||
|
|
||||||
#ifdef __IAR_SYSTEMS_ICC__
|
|
||||||
#define __asm__ asm
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static unsigned short *sptmp;
|
|
||||||
static struct mtarch_thread *running;
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
static void
|
|
||||||
mtarch_wrapper(void)
|
|
||||||
{
|
|
||||||
/* Call thread function with argument */
|
|
||||||
((void (*)(void *))running->function)((void*)running->data);
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_start(struct mtarch_thread *t,
|
|
||||||
void (*function)(void *), void *data)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i = 0; i < MTARCH_STACKSIZE; ++i) {
|
|
||||||
t->stack[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
t->sp = &t->stack[MTARCH_STACKSIZE - 1];
|
|
||||||
|
|
||||||
*t->sp = (unsigned short)mt_exit;
|
|
||||||
--t->sp;
|
|
||||||
|
|
||||||
*t->sp = (unsigned short)mtarch_wrapper;
|
|
||||||
--t->sp;
|
|
||||||
|
|
||||||
/* Space for registers. */
|
|
||||||
t->sp -= 11;
|
|
||||||
|
|
||||||
/* Store function and argument (used in mtarch_wrapper) */
|
|
||||||
t->data = data;
|
|
||||||
t->function = function;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static void
|
|
||||||
sw(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
sptmp = running->sp;
|
|
||||||
|
|
||||||
__asm__("push r4");
|
|
||||||
__asm__("push r5");
|
|
||||||
__asm__("push r6");
|
|
||||||
__asm__("push r7");
|
|
||||||
__asm__("push r8");
|
|
||||||
__asm__("push r9");
|
|
||||||
__asm__("push r10");
|
|
||||||
__asm__("push r11");
|
|
||||||
__asm__("push r12");
|
|
||||||
__asm__("push r13");
|
|
||||||
__asm__("push r14");
|
|
||||||
__asm__("push r15");
|
|
||||||
|
|
||||||
#ifdef __IAR_SYSTEMS_ICC__
|
|
||||||
/* use IAR intrinsic functions */
|
|
||||||
running->sp = (unsigned short *) __get_SP_register();
|
|
||||||
__set_SP_register((unsigned short) sptmp);
|
|
||||||
#else
|
|
||||||
__asm__("mov.w r1,%0" : "=r" (running->sp));
|
|
||||||
__asm__("mov.w %0,r1" : : "m" (sptmp));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__asm__("pop r15");
|
|
||||||
__asm__("pop r14");
|
|
||||||
__asm__("pop r13");
|
|
||||||
__asm__("pop r12");
|
|
||||||
__asm__("pop r11");
|
|
||||||
__asm__("pop r10");
|
|
||||||
__asm__("pop r9");
|
|
||||||
__asm__("pop r8");
|
|
||||||
__asm__("pop r7");
|
|
||||||
__asm__("pop r6");
|
|
||||||
__asm__("pop r5");
|
|
||||||
__asm__("pop r4");
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_exec(struct mtarch_thread *t)
|
|
||||||
{
|
|
||||||
running = t;
|
|
||||||
sw();
|
|
||||||
running = NULL;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_remove(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_yield(void)
|
|
||||||
{
|
|
||||||
sw();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstop(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstart(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_stop(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
int
|
|
||||||
mtarch_stack_usage(struct mt_thread *t)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i = 0; i < MTARCH_STACKSIZE; ++i) {
|
|
||||||
if(t->thread.stack[i] != (unsigned short)i) {
|
|
||||||
return MTARCH_STACKSIZE - i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return MTARCH_STACKSIZE;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
@ -1,51 +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.
|
|
||||||
*/
|
|
||||||
#ifndef MTARCH_H_
|
|
||||||
#define MTARCH_H_
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
|
|
||||||
#ifndef MTARCH_STACKSIZE
|
|
||||||
#define MTARCH_STACKSIZE 128
|
|
||||||
#endif /* MTARCH_STACKSIZE */
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
unsigned short stack[MTARCH_STACKSIZE];
|
|
||||||
unsigned short *sp;
|
|
||||||
void *data;
|
|
||||||
void (* function)(void *);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mt_thread;
|
|
||||||
|
|
||||||
int mtarch_stack_usage(struct mt_thread *t);
|
|
||||||
|
|
||||||
#endif /* MTARCH_H_ */
|
|
@ -1,6 +1,6 @@
|
|||||||
CONTIKI_CPU_DIRS = . net dev
|
CONTIKI_CPU_DIRS = . net dev
|
||||||
|
|
||||||
CONTIKI_SOURCEFILES += mtarch.c rtimer-arch.c watchdog.c eeprom.c
|
CONTIKI_SOURCEFILES += rtimer-arch.c watchdog.c eeprom.c
|
||||||
|
|
||||||
### Compiler definitions
|
### Compiler definitions
|
||||||
CC ?= gcc
|
CC ?= gcc
|
||||||
|
@ -1,181 +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.
|
|
||||||
*
|
|
||||||
* Author: Oliver Schmidt <ol.sc@web.de>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sys/mt.h"
|
|
||||||
|
|
||||||
#ifndef MTARCH_STACKSIZE
|
|
||||||
#define MTARCH_STACKSIZE 4096
|
|
||||||
#endif /* MTARCH_STACKSIZE */
|
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
static void *main_fiber;
|
|
||||||
|
|
||||||
#elif defined(__linux)
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <ucontext.h>
|
|
||||||
|
|
||||||
struct mtarch_t {
|
|
||||||
char stack[MTARCH_STACKSIZE];
|
|
||||||
ucontext_t context;
|
|
||||||
};
|
|
||||||
|
|
||||||
static ucontext_t main_context;
|
|
||||||
static ucontext_t *running_context;
|
|
||||||
#elif defined(__APPLE)
|
|
||||||
/* No support for OS-X at the moment as swapcontext, etc are deprecated */
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ || __linux */
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_init(void)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
main_fiber = ConvertThreadToFiber(NULL);
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_remove(void)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
ConvertFiberToThread();
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_start(struct mtarch_thread *thread,
|
|
||||||
void (* function)(void *data),
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
thread->mt_thread = CreateFiber(0, (LPFIBER_START_ROUTINE)function, data);
|
|
||||||
|
|
||||||
#elif defined(__linux)
|
|
||||||
|
|
||||||
thread->mt_thread = malloc(sizeof(struct mtarch_t));
|
|
||||||
|
|
||||||
getcontext(&((struct mtarch_t *)thread->mt_thread)->context);
|
|
||||||
|
|
||||||
((struct mtarch_t *)thread->mt_thread)->context.uc_link = NULL;
|
|
||||||
((struct mtarch_t *)thread->mt_thread)->context.uc_stack.ss_sp =
|
|
||||||
((struct mtarch_t *)thread->mt_thread)->stack;
|
|
||||||
((struct mtarch_t *)thread->mt_thread)->context.uc_stack.ss_size =
|
|
||||||
sizeof(((struct mtarch_t *)thread->mt_thread)->stack);
|
|
||||||
|
|
||||||
/* Some notes:
|
|
||||||
- If a CPU needs stronger alignment for the stack than malloc()
|
|
||||||
guarantees (like i.e. IA64) then makecontext() is supposed to
|
|
||||||
add that alignment internally.
|
|
||||||
- According to POSIX the arguments to function() are of type int
|
|
||||||
and there are in fact 64-bit implementations which support only
|
|
||||||
32 bits per argument meaning that a pointer argument has to be
|
|
||||||
splitted into two arguments.
|
|
||||||
- Most implementations interpret context.uc_stack.ss_sp on entry
|
|
||||||
as the lowest stack address even if the CPU stack actually grows
|
|
||||||
downwards. Although this means that ss_sp does NOT represent the
|
|
||||||
CPU stack pointer this behaviour makes perfectly sense as it is
|
|
||||||
the only way to stay independent from the CPU architecture. But
|
|
||||||
Solaris prior to release 10 interprets ss_sp as highest stack
|
|
||||||
address thus requiring special handling. */
|
|
||||||
makecontext(&((struct mtarch_t *)thread->mt_thread)->context,
|
|
||||||
(void (*)(void))function, 1, data);
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ || __linux */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_yield(void)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
SwitchToFiber(main_fiber);
|
|
||||||
|
|
||||||
#elif defined(__linux)
|
|
||||||
|
|
||||||
swapcontext(running_context, &main_context);
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ || __linux */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_exec(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
SwitchToFiber(thread->mt_thread);
|
|
||||||
|
|
||||||
#elif defined(__linux)
|
|
||||||
running_context = &((struct mtarch_t *)thread->mt_thread)->context;
|
|
||||||
swapcontext(&main_context, running_context);
|
|
||||||
running_context = NULL;
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ || __linux */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_stop(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
|
|
||||||
DeleteFiber(thread->mt_thread);
|
|
||||||
|
|
||||||
#elif defined(linux) || defined(__linux)
|
|
||||||
free(thread->mt_thread);
|
|
||||||
|
|
||||||
#endif /* _WIN32 || __CYGWIN__ || __linux */
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstart(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstop(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
@ -1,42 +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.
|
|
||||||
*
|
|
||||||
* Author: Oliver Schmidt <ol.sc@web.de>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MTARCH_H_
|
|
||||||
#define MTARCH_H_
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
void *mt_thread;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* MTARCH_H_ */
|
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010, Loughborough University - 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. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Stub header file for multi-threading. It doesn't do anything, it
|
|
||||||
* just exists so that mt.c can compile cleanly.
|
|
||||||
*
|
|
||||||
* This is based on the original mtarch.h for z80 by Takahide Matsutsuka
|
|
||||||
*
|
|
||||||
* \author
|
|
||||||
* George Oikonomou - <oikonomou@users.sourceforge.net>
|
|
||||||
*/
|
|
||||||
#ifndef __MTARCH_H__
|
|
||||||
#define __MTARCH_H__
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
unsigned char *sp;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __MTARCH_H__ */
|
|
@ -46,18 +46,6 @@
|
|||||||
|
|
||||||
static struct cooja_mt_thread *current;
|
static struct cooja_mt_thread *current;
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mt_init(void)
|
|
||||||
{
|
|
||||||
cooja_mtarch_init();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mt_remove(void)
|
|
||||||
{
|
|
||||||
cooja_mtarch_remove();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
cooja_mt_start(struct cooja_mt_thread *thread, void (* function)(void *), void *data)
|
cooja_mt_start(struct cooja_mt_thread *thread, void (* function)(void *), void *data)
|
||||||
@ -82,14 +70,6 @@ cooja_mt_exec(struct cooja_mt_thread *thread)
|
|||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
cooja_mt_exit(void)
|
|
||||||
{
|
|
||||||
current->state = MT_STATE_EXITED;
|
|
||||||
current = NULL;
|
|
||||||
cooja_mtarch_yield();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mt_yield(void)
|
cooja_mt_yield(void)
|
||||||
{
|
{
|
||||||
current->state = MT_STATE_READY;
|
current->state = MT_STATE_READY;
|
||||||
|
@ -49,25 +49,6 @@
|
|||||||
*/
|
*/
|
||||||
struct cooja_mtarch_thread;
|
struct cooja_mtarch_thread;
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the architecture specific support functions for the
|
|
||||||
* multi-thread library.
|
|
||||||
*
|
|
||||||
* This function is implemented by the architecture specific functions
|
|
||||||
* for the multi-thread library and is called by the mt_init()
|
|
||||||
* function as part of the initialization of the library. The
|
|
||||||
* mtarch_init() function can be used for, e.g., starting preemtion
|
|
||||||
* timers or other architecture specific mechanisms required for the
|
|
||||||
* operation of the library.
|
|
||||||
*/
|
|
||||||
void cooja_mtarch_init(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uninstall library and clean up.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void cooja_mtarch_remove(void);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the stack frame for a thread that is being started.
|
* Setup the stack frame for a thread that is being started.
|
||||||
*
|
*
|
||||||
@ -128,19 +109,6 @@ struct cooja_mt_thread {
|
|||||||
*/
|
*/
|
||||||
#define MT_OK 1
|
#define MT_OK 1
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the multithreading library.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void cooja_mt_init(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uninstalls library and cleans up.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void cooja_mt_remove(void);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts a multithreading thread.
|
* Starts a multithreading thread.
|
||||||
*
|
*
|
||||||
@ -201,51 +169,6 @@ void cooja_mt_exec(struct cooja_mt_thread *thread);
|
|||||||
*/
|
*/
|
||||||
void cooja_mt_yield(void);
|
void cooja_mt_yield(void);
|
||||||
|
|
||||||
/**
|
|
||||||
* Post an event to another process.
|
|
||||||
*
|
|
||||||
* This function is called by a running thread and will emit a signal
|
|
||||||
* to another Contiki process. This will cause the currently executing
|
|
||||||
* thread to yield.
|
|
||||||
*
|
|
||||||
* \param p The process receiving the signal, or PROCESS_BROADCAST
|
|
||||||
* for a broadcast event.
|
|
||||||
*
|
|
||||||
* \param ev The event to be posted.
|
|
||||||
*
|
|
||||||
* \param data A pointer to a message that is to be delivered together
|
|
||||||
* with the signal.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*void mt_post(struct process *p, process_event_t ev, process_data_t data);*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Block and wait for an event to occur.
|
|
||||||
*
|
|
||||||
* This function can be called by a running thread in order to block
|
|
||||||
* and wait for an event. The function returns when an event has
|
|
||||||
* occured. The event number and the associated data are placed in the
|
|
||||||
* variables pointed to by the function arguments.
|
|
||||||
*
|
|
||||||
* \param ev A pointer to a process_event_t variable. The variable
|
|
||||||
* will be filled with the number event that woke the thread.
|
|
||||||
*
|
|
||||||
* \param data A pointer to a process_data_t variable. The variable
|
|
||||||
* will be filled with the data associated with the event that woke
|
|
||||||
* the thread.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*void mt_wait(process_event_t *ev, process_data_t *data);*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exit a thread.
|
|
||||||
*
|
|
||||||
* This function is called from within an executing thread in order to
|
|
||||||
* exit the thread. The function never returns.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void cooja_mt_exit(void);
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
/** @} */
|
/** @} */
|
||||||
#endif /* MT_H_ */
|
#endif /* MT_H_ */
|
||||||
|
@ -72,11 +72,7 @@ struct frame {
|
|||||||
unsigned long retaddr2;
|
unsigned long retaddr2;
|
||||||
unsigned long data;
|
unsigned long data;
|
||||||
};
|
};
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mtarch_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
cooja_mtarch_start(struct cooja_mtarch_thread *t,
|
cooja_mtarch_start(struct cooja_mtarch_thread *t,
|
||||||
@ -187,35 +183,8 @@ cooja_mtarch_exec(struct cooja_mtarch_thread *t)
|
|||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
cooja_mtarch_remove(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mtarch_yield(void)
|
cooja_mtarch_yield(void)
|
||||||
{
|
{
|
||||||
cooja_sw();
|
cooja_sw();
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
void
|
|
||||||
cooja_mtarch_pstop(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
cooja_mtarch_pstart(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
int
|
|
||||||
cooja_mtarch_stack_usage(struct cooja_mt_thread *t)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < COOJA_MTARCH_STACKSIZE; ++i) {
|
|
||||||
if(t->thread.stack[i] != i) {
|
|
||||||
return COOJA_MTARCH_STACKSIZE - i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
|
@ -46,7 +46,4 @@ struct cooja_mtarch_thread {
|
|||||||
|
|
||||||
struct cooja_mt_thread;
|
struct cooja_mt_thread;
|
||||||
|
|
||||||
int cooja_mtarch_stack_usage(struct cooja_mt_thread *t);
|
|
||||||
|
|
||||||
#endif /* COOJA_MTARCH_H_ */
|
#endif /* COOJA_MTARCH_H_ */
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ OBJDUMP:=$(CROSS_COMPILE)-objdump
|
|||||||
|
|
||||||
ARCH = jn516x-ccm-star.c exceptions.c rtimer-arch.c rtimer-arch-slow.c \
|
ARCH = jn516x-ccm-star.c exceptions.c rtimer-arch.c rtimer-arch-slow.c \
|
||||||
slip_uart0.c clock.c micromac-radio.c \
|
slip_uart0.c clock.c micromac-radio.c \
|
||||||
mtarch.c node-id.c watchdog.c slip.c sprintf.c
|
node-id.c watchdog.c slip.c sprintf.c
|
||||||
# Default uart0 for printf and slip
|
# Default uart0 for printf and slip
|
||||||
TARGET_WITH_UART0 ?= 1
|
TARGET_WITH_UART0 ?= 1
|
||||||
TARGET_WITH_UART1 ?= 0
|
TARGET_WITH_UART1 ?= 0
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2008
|
|
||||||
* Telecooperation Office (TecO), Universitaet Karlsruhe (TH), Germany.
|
|
||||||
* 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 Universitaet Karlsruhe (TH) 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 COPYRIGHT HOLDERS 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 COPYRIGHT
|
|
||||||
* OWNER 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.
|
|
||||||
*
|
|
||||||
* Author(s): Philipp Scholl <scholl@teco.edu>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Copied from Philipp Scholl's (BSD) Contiki port to Jennic */
|
|
||||||
|
|
||||||
#include "mtarch.h"
|
|
||||||
|
|
||||||
void
|
|
||||||
mtarch_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_remove(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_start(struct mtarch_thread *thread,
|
|
||||||
void (*function)(void *data),
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_yield(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_exec(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_stop(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_pstart(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
void
|
|
||||||
mtarch_pstop(void)
|
|
||||||
{
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2008
|
|
||||||
* Telecooperation Office (TecO), Universitaet Karlsruhe (TH), Germany.
|
|
||||||
* 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 Universitaet Karlsruhe (TH) 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 COPYRIGHT HOLDERS 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 COPYRIGHT
|
|
||||||
* OWNER 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.
|
|
||||||
*
|
|
||||||
* Author(s): Philipp Scholl <scholl@teco.edu>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Copied from Philipp Scholl's (BSD) Contiki port to Jennic */
|
|
||||||
|
|
||||||
#ifndef __MTARCH_H__
|
|
||||||
#define __MTARCH_H__
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
void *mt_thread;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __MTARCH_H__ */
|
|
@ -101,12 +101,6 @@
|
|||||||
|
|
||||||
#define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_6LORH
|
#define SICSLOWPAN_CONF_COMPRESSION SICSLOWPAN_COMPRESSION_6LORH
|
||||||
|
|
||||||
/*******************************************************/
|
|
||||||
/********* Enable RPL non-storing mode *****************/
|
|
||||||
/*******************************************************/
|
|
||||||
|
|
||||||
#define RPL_CONF_MOP RPL_MOP_NON_STORING /* Mode of operation*/
|
|
||||||
|
|
||||||
/*******************************************************/
|
/*******************************************************/
|
||||||
/************* Other system configuration **************/
|
/************* Other system configuration **************/
|
||||||
/*******************************************************/
|
/*******************************************************/
|
||||||
|
@ -40,12 +40,6 @@
|
|||||||
#define WITH_SECURITY 0
|
#define WITH_SECURITY 0
|
||||||
#endif /* WITH_SECURITY */
|
#endif /* WITH_SECURITY */
|
||||||
|
|
||||||
/*******************************************************/
|
|
||||||
/********* Enable RPL non-storing mode *****************/
|
|
||||||
/*******************************************************/
|
|
||||||
|
|
||||||
#define RPL_CONF_MOP RPL_MOP_NON_STORING /* Mode of operation*/
|
|
||||||
|
|
||||||
/* USB serial takes space, free more space elsewhere */
|
/* USB serial takes space, free more space elsewhere */
|
||||||
#define SICSLOWPAN_CONF_FRAG 0
|
#define SICSLOWPAN_CONF_FRAG 0
|
||||||
#define UIP_CONF_BUFFER_SIZE 160
|
#define UIP_CONF_BUFFER_SIZE 160
|
||||||
|
@ -36,12 +36,6 @@
|
|||||||
#define WITH_SECURITY 0
|
#define WITH_SECURITY 0
|
||||||
#endif /* WITH_SECURITY */
|
#endif /* WITH_SECURITY */
|
||||||
|
|
||||||
/*******************************************************/
|
|
||||||
/********* Enable RPL non-storing mode *****************/
|
|
||||||
/*******************************************************/
|
|
||||||
#define UIP_CONF_MAX_ROUTES 0 /* No need for routes */
|
|
||||||
#define RPL_CONF_MOP RPL_MOP_NON_STORING /* Mode of operation*/
|
|
||||||
|
|
||||||
/*******************************************************/
|
/*******************************************************/
|
||||||
/********************* Enable TSCH *********************/
|
/********************* Enable TSCH *********************/
|
||||||
/*******************************************************/
|
/*******************************************************/
|
||||||
|
@ -1230,7 +1230,7 @@ uip_process(uint8_t flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
UIP_IP_BUF->ttl = UIP_IP_BUF->ttl - 1;
|
UIP_IP_BUF->ttl = UIP_IP_BUF->ttl - 1;
|
||||||
LOG_INFO("Forwarding packet to ");
|
LOG_INFO("Forwarding packet towards ");
|
||||||
LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr);
|
LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr);
|
||||||
LOG_INFO_("\n");
|
LOG_INFO_("\n");
|
||||||
UIP_STAT(++uip_stat.ip.forwarded);
|
UIP_STAT(++uip_stat.ip.forwarded);
|
||||||
@ -1364,6 +1364,31 @@ uip_process(uint8_t flag)
|
|||||||
if(UIP_ROUTING_BUF->seg_left > 0) {
|
if(UIP_ROUTING_BUF->seg_left > 0) {
|
||||||
#if UIP_CONF_IPV6_RPL && RPL_WITH_NON_STORING
|
#if UIP_CONF_IPV6_RPL && RPL_WITH_NON_STORING
|
||||||
if(rpl_ext_header_srh_update()) {
|
if(rpl_ext_header_srh_update()) {
|
||||||
|
|
||||||
|
/* With routing header, the detination address is us and will
|
||||||
|
* be swapped later to the next hop. Because of this, the MTU
|
||||||
|
* and TTL were not checked and updated yet. Do this now. */
|
||||||
|
|
||||||
|
/* Check MTU */
|
||||||
|
if(uip_len > UIP_LINK_MTU) {
|
||||||
|
uip_icmp6_error_output(ICMP6_PACKET_TOO_BIG, 0, UIP_LINK_MTU);
|
||||||
|
UIP_STAT(++uip_stat.ip.drop);
|
||||||
|
goto send;
|
||||||
|
}
|
||||||
|
/* Check Hop Limit */
|
||||||
|
if(UIP_IP_BUF->ttl <= 1) {
|
||||||
|
uip_icmp6_error_output(ICMP6_TIME_EXCEEDED,
|
||||||
|
ICMP6_TIME_EXCEED_TRANSIT, 0);
|
||||||
|
UIP_STAT(++uip_stat.ip.drop);
|
||||||
|
goto send;
|
||||||
|
}
|
||||||
|
UIP_IP_BUF->ttl = UIP_IP_BUF->ttl - 1;
|
||||||
|
|
||||||
|
LOG_INFO("Forwarding packet to next hop ");
|
||||||
|
LOG_INFO_6ADDR(&UIP_IP_BUF->destipaddr);
|
||||||
|
LOG_INFO_("\n");
|
||||||
|
UIP_STAT(++uip_stat.ip.forwarded);
|
||||||
|
|
||||||
goto send; /* Proceed to forwarding */
|
goto send; /* Proceed to forwarding */
|
||||||
}
|
}
|
||||||
#endif /* UIP_CONF_IPV6_RPL && RPL_WITH_NON_STORING */
|
#endif /* UIP_CONF_IPV6_RPL && RPL_WITH_NON_STORING */
|
||||||
|
@ -203,15 +203,11 @@ void
|
|||||||
rpl_ns_periodic(void)
|
rpl_ns_periodic(void)
|
||||||
{
|
{
|
||||||
rpl_ns_node_t *l;
|
rpl_ns_node_t *l;
|
||||||
/* First pass, decrement lifetime for all nodes with non-infinite lifetime */
|
rpl_ns_node_t *next;
|
||||||
for(l = list_head(nodelist); l != NULL; l = list_item_next(l)) {
|
|
||||||
/* Don't touch infinite lifetime nodes */
|
/* First pass, for all expired nodes, deallocate them iff no child points to them */
|
||||||
if(l->lifetime != 0xffffffff && l->lifetime > 0) {
|
for(l = list_head(nodelist); l != NULL; l = next) {
|
||||||
l->lifetime--;
|
next = list_item_next(l);
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Second pass, for all expired nodes, deallocate them iff no child points to them */
|
|
||||||
for(l = list_head(nodelist); l != NULL; l = list_item_next(l)) {
|
|
||||||
if(l->lifetime == 0) {
|
if(l->lifetime == 0) {
|
||||||
rpl_ns_node_t *l2;
|
rpl_ns_node_t *l2;
|
||||||
for(l2 = list_head(nodelist); l2 != NULL; l2 = list_item_next(l2)) {
|
for(l2 = list_head(nodelist); l2 != NULL; l2 = list_item_next(l2)) {
|
||||||
@ -223,6 +219,9 @@ rpl_ns_periodic(void)
|
|||||||
list_remove(nodelist, l);
|
list_remove(nodelist, l);
|
||||||
memb_free(&nodememb, l);
|
memb_free(&nodememb, l);
|
||||||
num_nodes--;
|
num_nodes--;
|
||||||
|
} else if(l->lifetime != 0xffffffff) {
|
||||||
|
/* Decrement lifetime for all nodes with non-infinite lifetime */
|
||||||
|
l->lifetime--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,14 +207,8 @@ rpl_ns_periodic(unsigned seconds)
|
|||||||
{
|
{
|
||||||
rpl_ns_node_t *l;
|
rpl_ns_node_t *l;
|
||||||
rpl_ns_node_t *next;
|
rpl_ns_node_t *next;
|
||||||
/* First pass, decrement lifetime for all nodes with non-infinite lifetime */
|
|
||||||
for(l = list_head(nodelist); l != NULL; l = list_item_next(l)) {
|
/* First pass, for all expired nodes, deallocate them iff no child points to them */
|
||||||
/* Don't touch infinite lifetime nodes */
|
|
||||||
if(l->lifetime != RPL_ROUTE_INFINITE_LIFETIME) {
|
|
||||||
l->lifetime = l->lifetime > seconds ? l->lifetime - seconds : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Second pass, for all expired nodes, deallocate them iff no child points to them */
|
|
||||||
for(l = list_head(nodelist); l != NULL; l = next) {
|
for(l = list_head(nodelist); l != NULL; l = next) {
|
||||||
next = list_item_next(l);
|
next = list_item_next(l);
|
||||||
if(l->lifetime == 0) {
|
if(l->lifetime == 0) {
|
||||||
@ -235,6 +229,8 @@ rpl_ns_periodic(unsigned seconds)
|
|||||||
list_remove(nodelist, l);
|
list_remove(nodelist, l);
|
||||||
memb_free(&nodememb, l);
|
memb_free(&nodememb, l);
|
||||||
num_nodes--;
|
num_nodes--;
|
||||||
|
} else if(l->lifetime != RPL_ROUTE_INFINITE_LIFETIME) {
|
||||||
|
l->lifetime = l->lifetime > seconds ? l->lifetime - seconds : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
109
os/sys/mt.c
109
os/sys/mt.c
@ -1,109 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \file
|
|
||||||
* Implementation of the archtecture agnostic parts of the preemptive
|
|
||||||
* multithreading library for Contiki.
|
|
||||||
*
|
|
||||||
* \author
|
|
||||||
* Adam Dunkels <adam@sics.se>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "sys/mt.h"
|
|
||||||
#include "sys/cc.h"
|
|
||||||
|
|
||||||
static struct mt_thread *current;
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_init(void)
|
|
||||||
{
|
|
||||||
mtarch_init();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_remove(void)
|
|
||||||
{
|
|
||||||
mtarch_remove();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_start(struct mt_thread *thread, void (* function)(void *), void *data)
|
|
||||||
{
|
|
||||||
/* Call the architecture dependant function to set up the processor
|
|
||||||
stack with the correct parameters. */
|
|
||||||
mtarch_start(&thread->thread, function, data);
|
|
||||||
|
|
||||||
thread->state = MT_STATE_STARTED;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_exec(struct mt_thread *thread)
|
|
||||||
{
|
|
||||||
if(thread->state == MT_STATE_STARTED) {
|
|
||||||
current = thread;
|
|
||||||
/* Switch context to the thread. The function call will not return
|
|
||||||
until the the thread has yielded, or is preempted. */
|
|
||||||
mtarch_exec(&thread->thread);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_yield(void)
|
|
||||||
{
|
|
||||||
mtarch_pstop();
|
|
||||||
/* This function is called from the running thread, and we call the
|
|
||||||
switch function in order to switch the thread to the main Contiki
|
|
||||||
program instead. For us, the switch function will not return
|
|
||||||
until the next time we are scheduled to run. */
|
|
||||||
mtarch_yield();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_exit(void)
|
|
||||||
{
|
|
||||||
mtarch_pstop();
|
|
||||||
current->state = MT_STATE_EXITED;
|
|
||||||
mtarch_yield();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mt_stop(struct mt_thread *thread)
|
|
||||||
{
|
|
||||||
mtarch_stop(&thread->thread);
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
256
os/sys/mt.h
256
os/sys/mt.h
@ -1,256 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2004, 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.
|
|
||||||
*
|
|
||||||
* Author: Adam Dunkels <adam@sics.se>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \addtogroup threads
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \defgroup mt Multi-threading library
|
|
||||||
*
|
|
||||||
* The event driven Contiki kernel does not provide multi-threading
|
|
||||||
* by itself - instead, preemptive multi-threading is implemented
|
|
||||||
* as a library that optionally can be linked with applications. This
|
|
||||||
* library consists of two parts: a platform independent part, which is
|
|
||||||
* the same for all platforms on which Contiki runs, and a platform
|
|
||||||
* specific part, which must be implemented specifically for the
|
|
||||||
* platform that the multi-threading library should run.
|
|
||||||
* @{
|
|
||||||
*
|
|
||||||
* The Contiki multi-threading library requires some architecture
|
|
||||||
* specific support for setting up and switching stacks. This support
|
|
||||||
* requires four stack manipulation functions to be implemented:
|
|
||||||
* mtarch_start(), which sets up the stack frame for a new thread,
|
|
||||||
* mtarch_exec(), which switches in the stack of a thread,
|
|
||||||
* mtarch_yield(), which restores the kernel stack from a thread's
|
|
||||||
* stack and mtarch_stop(), which cleans up the stack of a thread.
|
|
||||||
* Additionally, two functions for controlling the preemption
|
|
||||||
* (if any) must be implemented: mtarch_pstart() and mtarch_pstop().
|
|
||||||
* If no preemption is used, these functions can be implemented as
|
|
||||||
* empty functions. Finally, the function mtarch_init() is called by
|
|
||||||
* mt_init(), and can be used for initialization of timer interrupts,
|
|
||||||
* or any other mechanisms required for correct operation of the
|
|
||||||
* architecture specific support functions while mtarch_remove() is
|
|
||||||
* called by mt_remove() to clean up those resources.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \file
|
|
||||||
* Header file for the preemptive multitasking library for Contiki.
|
|
||||||
* \author
|
|
||||||
* Adam Dunkels <adam@sics.se>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef MT_H_
|
|
||||||
#define MT_H_
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
|
|
||||||
#define MT_STATE_STARTED 1
|
|
||||||
#define MT_STATE_EXITED 2
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An opaque structure that is used for holding the state of a thread.
|
|
||||||
*
|
|
||||||
* The structure should be defined in the "mtarch.h" file. This
|
|
||||||
* structure typically holds the entire stack for the thread.
|
|
||||||
*/
|
|
||||||
struct mtarch_thread;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the architecture specific support functions for the
|
|
||||||
* multi-thread library.
|
|
||||||
*
|
|
||||||
* This function is implemented by the architecture specific functions
|
|
||||||
* for the multi-thread library and is called by the mt_init()
|
|
||||||
* function as part of the initialization of the library. The
|
|
||||||
* mtarch_init() function can be used for, e.g., starting preemption
|
|
||||||
* timers or other architecture specific mechanisms required for the
|
|
||||||
* operation of the library.
|
|
||||||
*/
|
|
||||||
void mtarch_init(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uninstall library and clean up.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mtarch_remove(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup the stack frame for a thread that is being started.
|
|
||||||
*
|
|
||||||
* This function is called by the mt_start() function in order to set
|
|
||||||
* up the architecture specific stack of the thread to be started.
|
|
||||||
*
|
|
||||||
* \param thread A pointer to a struct mtarch_thread for the thread to
|
|
||||||
* be started.
|
|
||||||
*
|
|
||||||
* \param function A pointer to the function that the thread will
|
|
||||||
* start executing the first time it is scheduled to run.
|
|
||||||
*
|
|
||||||
* \param data A pointer to the argument that the function should be
|
|
||||||
* passed.
|
|
||||||
*/
|
|
||||||
void mtarch_start(struct mtarch_thread *thread,
|
|
||||||
void (* function)(void *data),
|
|
||||||
void *data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start executing a thread.
|
|
||||||
*
|
|
||||||
* This function is called from mt_exec() and the purpose of the
|
|
||||||
* function is to start execution of the thread. The function should
|
|
||||||
* switch in the stack of the thread, and does not return until the
|
|
||||||
* thread has explicitly yielded (using mt_yield()) or until it is
|
|
||||||
* preempted.
|
|
||||||
*
|
|
||||||
* \param thread A pointer to a struct mtarch_thread for the thread to
|
|
||||||
* be executed.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mtarch_exec(struct mtarch_thread *thread);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Yield the processor.
|
|
||||||
*
|
|
||||||
* This function is called by the mt_yield() function, which is called
|
|
||||||
* from the running thread in order to give up the processor.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mtarch_yield(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean up the stack of a thread.
|
|
||||||
*
|
|
||||||
* This function is called by the mt_stop() function in order to clean
|
|
||||||
* up the architecture specific stack of the thread to be stopped.
|
|
||||||
*
|
|
||||||
* \note If the stack is wholly contained in struct mtarch_thread this
|
|
||||||
* function may very well be empty.
|
|
||||||
*
|
|
||||||
* \param thread A pointer to a struct mtarch_thread for the thread to
|
|
||||||
* be stopped.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mtarch_stop(struct mtarch_thread *thread);
|
|
||||||
|
|
||||||
void mtarch_pstart(void);
|
|
||||||
void mtarch_pstop(void);
|
|
||||||
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
|
|
||||||
#include "mtarch.h"
|
|
||||||
|
|
||||||
struct mt_thread {
|
|
||||||
int state;
|
|
||||||
struct mtarch_thread thread;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the multithreading library.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_init(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uninstalls library and cleans up.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_remove(void);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts a multithreading thread.
|
|
||||||
*
|
|
||||||
* \param thread Pointer to an mt_thread struct that must have been
|
|
||||||
* previously allocated by the caller.
|
|
||||||
*
|
|
||||||
* \param function A pointer to the entry function of the thread that is
|
|
||||||
* to be set up.
|
|
||||||
*
|
|
||||||
* \param data A pointer that will be passed to the entry function.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_start(struct mt_thread *thread, void (* function)(void *), void *data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute parts of a thread.
|
|
||||||
*
|
|
||||||
* This function is called by a Contiki process and runs a
|
|
||||||
* thread. The function does not return until the thread has yielded,
|
|
||||||
* or is preempted.
|
|
||||||
*
|
|
||||||
* \note The thread library must first be initialized with the mt_init()
|
|
||||||
* function.
|
|
||||||
*
|
|
||||||
* \param thread A pointer to a struct mt_thread block that must be
|
|
||||||
* allocated by the caller.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_exec(struct mt_thread *thread);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Voluntarily give up the processor.
|
|
||||||
*
|
|
||||||
* This function is called by a running thread in order to give up
|
|
||||||
* control of the CPU.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_yield(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exit a thread.
|
|
||||||
*
|
|
||||||
* This function is called from within an executing thread in order to
|
|
||||||
* exit the thread. The function never returns.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_exit(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stop a thread.
|
|
||||||
*
|
|
||||||
* This function is called by a Contiki process in order to clean up a
|
|
||||||
* thread. The struct mt_thread block may then be discarded by the caller.
|
|
||||||
*
|
|
||||||
* \param thread A pointer to a struct mt_thread block that must be
|
|
||||||
* allocated by the caller.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void mt_stop(struct mt_thread *thread);
|
|
||||||
|
|
||||||
/** @} */
|
|
||||||
#endif /* MT_H_ */
|
|
@ -544,7 +544,7 @@ make receiver-node.cooja TARGET=cooja</commands>
|
|||||||
}
|
}
|
||||||

|

|
||||||
function getRandom(min, max) {
|
function getRandom(min, max) {
|
||||||
return Math.random() * (max - min) + min;
|
return r.nextFloat() * (max - min) + min;
|
||||||
}
|
}
|
||||||

|

|
||||||
// From: http://bost.ocks.org/mike/shuffle/
|
// From: http://bost.ocks.org/mike/shuffle/
|
||||||
@ -555,7 +555,7 @@ function shuffle(array) {
|
|||||||
while (m) {
|
while (m) {
|
||||||

|

|
||||||
// Pick a remaining element…
|
// Pick a remaining element…
|
||||||
i = Math.floor(Math.random() * m--);
|
i = Math.floor(r.nextFloat() * m--);
|
||||||

|

|
||||||
// And swap it with the current element.
|
// And swap it with the current element.
|
||||||
t = array[m];
|
t = array[m];
|
||||||
@ -571,6 +571,7 @@ GENERATE_MSG(1200000, 'randomize-nodes');
|
|||||||
GENERATE_MSG(2400000, 'randomize-nodes');
|
GENERATE_MSG(2400000, 'randomize-nodes');
|
||||||
GENERATE_MSG(3600000, 'randomize-nodes');
|
GENERATE_MSG(3600000, 'randomize-nodes');
|
||||||

|

|
||||||
|
var r = new java.util.Random(sim.getRandomSeed());
|
||||||
var numForwarders = 20;
|
var numForwarders = 20;
|
||||||
var forwardIDStart = 4;
|
var forwardIDStart = 4;
|
||||||
packetsReceived = [];
|
packetsReceived = [];
|
||||||
|
@ -27,5 +27,3 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#define TCPIP_CONF_ANNOTATE_TRANSMISSIONS 1
|
#define TCPIP_CONF_ANNOTATE_TRANSMISSIONS 1
|
||||||
|
|
||||||
#define RPL_CONF_MOP RPL_MOP_NON_STORING
|
|
||||||
|
@ -544,7 +544,7 @@ make receiver-node.cooja TARGET=cooja</commands>
|
|||||||
}
|
}
|
||||||

|

|
||||||
function getRandom(min, max) {
|
function getRandom(min, max) {
|
||||||
return Math.random() * (max - min) + min;
|
return r.nextFloat() * (max - min) + min;
|
||||||
}
|
}
|
||||||

|

|
||||||
// From: http://bost.ocks.org/mike/shuffle/
|
// From: http://bost.ocks.org/mike/shuffle/
|
||||||
@ -555,7 +555,7 @@ function shuffle(array) {
|
|||||||
while (m) {
|
while (m) {
|
||||||

|

|
||||||
// Pick a remaining element…
|
// Pick a remaining element…
|
||||||
i = Math.floor(Math.random() * m--);
|
i = Math.floor(r.nextFloat() * m--);
|
||||||

|

|
||||||
// And swap it with the current element.
|
// And swap it with the current element.
|
||||||
t = array[m];
|
t = array[m];
|
||||||
@ -571,6 +571,7 @@ GENERATE_MSG(1200000, 'randomize-nodes');
|
|||||||
GENERATE_MSG(2400000, 'randomize-nodes');
|
GENERATE_MSG(2400000, 'randomize-nodes');
|
||||||
GENERATE_MSG(3600000, 'randomize-nodes');
|
GENERATE_MSG(3600000, 'randomize-nodes');
|
||||||

|

|
||||||
|
var r = new java.util.Random(sim.getRandomSeed());
|
||||||
var numForwarders = 20;
|
var numForwarders = 20;
|
||||||
var forwardIDStart = 4;
|
var forwardIDStart = 4;
|
||||||
packetsReceived = [];
|
packetsReceived = [];
|
||||||
|
252
tests/17-rpl-border-router/01-border-router-cooja.csc
Normal file
252
tests/17-rpl-border-router/01-border-router-cooja.csc
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simconf>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mrm</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mspsim</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/avrora</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/serial_socket</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/collect-view</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/powertracker</project>
|
||||||
|
<simulation>
|
||||||
|
<title>My simulation</title>
|
||||||
|
<speedlimit>1.0</speedlimit>
|
||||||
|
<randomseed>123456</randomseed>
|
||||||
|
<motedelay_us>1000000</motedelay_us>
|
||||||
|
<radiomedium>
|
||||||
|
org.contikios.cooja.radiomediums.UDGM
|
||||||
|
<transmitting_range>50.0</transmitting_range>
|
||||||
|
<interference_range>100.0</interference_range>
|
||||||
|
<success_ratio_tx>1.0</success_ratio_tx>
|
||||||
|
<success_ratio_rx>1.0</success_ratio_rx>
|
||||||
|
</radiomedium>
|
||||||
|
<events>
|
||||||
|
<logoutput>40000</logoutput>
|
||||||
|
</events>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype295</identifier>
|
||||||
|
<description>Cooja Mote Type #1</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/rpl-border-router/border-router.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make border-router.cooja TARGET=cooja</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype686</identifier>
|
||||||
|
<description>Cooja Mote Type #2</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/hello-world/hello-world.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make hello-world.cooja TARGET=cooja</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>54.36775767371176</x>
|
||||||
|
<y>24.409055040864118</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>1</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype295</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>83.54989222799365</x>
|
||||||
|
<y>52.63050856506214</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>2</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>108.91767775240822</x>
|
||||||
|
<y>78.59778809170032</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>3</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>139.91021061864723</x>
|
||||||
|
<y>98.34190023350419</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>4</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
</simulation>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.SimControl
|
||||||
|
<width>280</width>
|
||||||
|
<z>1</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Visualizer
|
||||||
|
<plugin_config>
|
||||||
|
<moterelations>true</moterelations>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.UDGMVisualizerSkin</skin>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||||
|
<viewport>1.9798610460263038 0.0 0.0 1.9798610460263038 -61.112037797038525 -1.2848438586294648</viewport>
|
||||||
|
</plugin_config>
|
||||||
|
<width>400</width>
|
||||||
|
<z>4</z>
|
||||||
|
<height>400</height>
|
||||||
|
<location_x>1</location_x>
|
||||||
|
<location_y>1</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.LogListener
|
||||||
|
<plugin_config>
|
||||||
|
<filter>ID:4</filter>
|
||||||
|
<formatted_time />
|
||||||
|
<coloring />
|
||||||
|
</plugin_config>
|
||||||
|
<width>1404</width>
|
||||||
|
<z>2</z>
|
||||||
|
<height>240</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>160</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.TimeLine
|
||||||
|
<plugin_config>
|
||||||
|
<mote>0</mote>
|
||||||
|
<mote>1</mote>
|
||||||
|
<mote>2</mote>
|
||||||
|
<mote>3</mote>
|
||||||
|
<showRadioRXTX />
|
||||||
|
<showRadioHW />
|
||||||
|
<showLEDs />
|
||||||
|
<zoomfactor>500.0</zoomfactor>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1804</width>
|
||||||
|
<z>6</z>
|
||||||
|
<height>166</height>
|
||||||
|
<location_x>0</location_x>
|
||||||
|
<location_y>753</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Notes
|
||||||
|
<plugin_config>
|
||||||
|
<notes>Enter notes here</notes>
|
||||||
|
<decorations>true</decorations>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1124</width>
|
||||||
|
<z>5</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>680</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.serialsocket.SerialSocketServer
|
||||||
|
<mote_arg>0</mote_arg>
|
||||||
|
<plugin_config>
|
||||||
|
<port>60001</port>
|
||||||
|
<bound>true</bound>
|
||||||
|
</plugin_config>
|
||||||
|
<width>362</width>
|
||||||
|
<z>3</z>
|
||||||
|
<height>116</height>
|
||||||
|
<location_x>13</location_x>
|
||||||
|
<location_y>414</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.ScriptRunner
|
||||||
|
<plugin_config>
|
||||||
|
<script>TIMEOUT(10000000000); /* milliseconds. no action at timeout */
|
||||||
|
</script>
|
||||||
|
<active>true</active>
|
||||||
|
</plugin_config>
|
||||||
|
<width>600</width>
|
||||||
|
<z>0</z>
|
||||||
|
<height>700</height>
|
||||||
|
<location_x>1037</location_x>
|
||||||
|
<location_y>40</location_y>
|
||||||
|
</plugin>
|
||||||
|
</simconf>
|
9
tests/17-rpl-border-router/01-border-router-cooja.sh
Executable file
9
tests/17-rpl-border-router/01-border-router-cooja.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
|
||||||
|
# Simulation file
|
||||||
|
BASENAME=01-border-router-cooja
|
||||||
|
|
||||||
|
bash test-border-router.sh $CONTIKI $BASENAME fd00::204:4:4:4
|
252
tests/17-rpl-border-router/02-border-router-cooja-tsch.csc
Normal file
252
tests/17-rpl-border-router/02-border-router-cooja-tsch.csc
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simconf>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mrm</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mspsim</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/avrora</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/serial_socket</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/collect-view</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/powertracker</project>
|
||||||
|
<simulation>
|
||||||
|
<title>My simulation</title>
|
||||||
|
<speedlimit>1.0</speedlimit>
|
||||||
|
<randomseed>123456</randomseed>
|
||||||
|
<motedelay_us>1000000</motedelay_us>
|
||||||
|
<radiomedium>
|
||||||
|
org.contikios.cooja.radiomediums.UDGM
|
||||||
|
<transmitting_range>50.0</transmitting_range>
|
||||||
|
<interference_range>100.0</interference_range>
|
||||||
|
<success_ratio_tx>1.0</success_ratio_tx>
|
||||||
|
<success_ratio_rx>1.0</success_ratio_rx>
|
||||||
|
</radiomedium>
|
||||||
|
<events>
|
||||||
|
<logoutput>40000</logoutput>
|
||||||
|
</events>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype295</identifier>
|
||||||
|
<description>Cooja Mote Type #1</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/rpl-border-router/border-router.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make border-router.cooja TARGET=cooja MAKE_MAC=MAKE_MAC_TSCH</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype686</identifier>
|
||||||
|
<description>Cooja Mote Type #2</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/hello-world/hello-world.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make hello-world.cooja TARGET=cooja MAKE_MAC=MAKE_MAC_TSCH</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>54.36775767371176</x>
|
||||||
|
<y>24.409055040864118</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>1</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype295</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>83.54989222799365</x>
|
||||||
|
<y>52.63050856506214</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>2</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>108.91767775240822</x>
|
||||||
|
<y>78.59778809170032</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>3</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>139.91021061864723</x>
|
||||||
|
<y>98.34190023350419</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>4</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
</simulation>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.SimControl
|
||||||
|
<width>280</width>
|
||||||
|
<z>1</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Visualizer
|
||||||
|
<plugin_config>
|
||||||
|
<moterelations>true</moterelations>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.UDGMVisualizerSkin</skin>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||||
|
<viewport>1.9798610460263038 0.0 0.0 1.9798610460263038 -61.112037797038525 -1.2848438586294648</viewport>
|
||||||
|
</plugin_config>
|
||||||
|
<width>400</width>
|
||||||
|
<z>4</z>
|
||||||
|
<height>400</height>
|
||||||
|
<location_x>1</location_x>
|
||||||
|
<location_y>1</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.LogListener
|
||||||
|
<plugin_config>
|
||||||
|
<filter>ID:4</filter>
|
||||||
|
<formatted_time />
|
||||||
|
<coloring />
|
||||||
|
</plugin_config>
|
||||||
|
<width>1404</width>
|
||||||
|
<z>2</z>
|
||||||
|
<height>240</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>160</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.TimeLine
|
||||||
|
<plugin_config>
|
||||||
|
<mote>0</mote>
|
||||||
|
<mote>1</mote>
|
||||||
|
<mote>2</mote>
|
||||||
|
<mote>3</mote>
|
||||||
|
<showRadioRXTX />
|
||||||
|
<showRadioHW />
|
||||||
|
<showLEDs />
|
||||||
|
<zoomfactor>500.0</zoomfactor>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1804</width>
|
||||||
|
<z>6</z>
|
||||||
|
<height>166</height>
|
||||||
|
<location_x>0</location_x>
|
||||||
|
<location_y>753</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Notes
|
||||||
|
<plugin_config>
|
||||||
|
<notes>Enter notes here</notes>
|
||||||
|
<decorations>true</decorations>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1124</width>
|
||||||
|
<z>5</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>680</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.serialsocket.SerialSocketServer
|
||||||
|
<mote_arg>0</mote_arg>
|
||||||
|
<plugin_config>
|
||||||
|
<port>60001</port>
|
||||||
|
<bound>true</bound>
|
||||||
|
</plugin_config>
|
||||||
|
<width>362</width>
|
||||||
|
<z>3</z>
|
||||||
|
<height>116</height>
|
||||||
|
<location_x>13</location_x>
|
||||||
|
<location_y>414</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.ScriptRunner
|
||||||
|
<plugin_config>
|
||||||
|
<script>TIMEOUT(10000000000); /* milliseconds. no action at timeout */
|
||||||
|
</script>
|
||||||
|
<active>true</active>
|
||||||
|
</plugin_config>
|
||||||
|
<width>600</width>
|
||||||
|
<z>0</z>
|
||||||
|
<height>700</height>
|
||||||
|
<location_x>1037</location_x>
|
||||||
|
<location_y>40</location_y>
|
||||||
|
</plugin>
|
||||||
|
</simconf>
|
9
tests/17-rpl-border-router/02-border-router-cooja-tsch.sh
Executable file
9
tests/17-rpl-border-router/02-border-router-cooja-tsch.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
|
||||||
|
# Simulation file
|
||||||
|
BASENAME=02-border-router-cooja-tsch
|
||||||
|
|
||||||
|
bash test-border-router.sh $CONTIKI $BASENAME fd00::204:4:4:4
|
236
tests/17-rpl-border-router/03-border-router-sky.csc
Normal file
236
tests/17-rpl-border-router/03-border-router-sky.csc
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simconf>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mrm</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mspsim</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/avrora</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/serial_socket</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/collect-view</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/powertracker</project>
|
||||||
|
<simulation>
|
||||||
|
<title>My simulation</title>
|
||||||
|
<speedlimit>1.0</speedlimit>
|
||||||
|
<randomseed>123456</randomseed>
|
||||||
|
<motedelay_us>1000000</motedelay_us>
|
||||||
|
<radiomedium>
|
||||||
|
org.contikios.cooja.radiomediums.UDGM
|
||||||
|
<transmitting_range>50.0</transmitting_range>
|
||||||
|
<interference_range>100.0</interference_range>
|
||||||
|
<success_ratio_tx>1.0</success_ratio_tx>
|
||||||
|
<success_ratio_rx>1.0</success_ratio_rx>
|
||||||
|
</radiomedium>
|
||||||
|
<events>
|
||||||
|
<logoutput>40000</logoutput>
|
||||||
|
</events>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.mspmote.SkyMoteType
|
||||||
|
<identifier>sky1</identifier>
|
||||||
|
<description>Sky Mote Type #sky1</description>
|
||||||
|
<source EXPORT="discard">[CONTIKI_DIR]/examples/rpl-border-router/border-router.c</source>
|
||||||
|
<commands EXPORT="discard">make clean TARGET=sky
|
||||||
|
make border-router.sky TARGET=sky</commands>
|
||||||
|
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/rpl-border-router/border-router.sky</firmware>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||||
|
</motetype>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.mspmote.SkyMoteType
|
||||||
|
<identifier>sky2</identifier>
|
||||||
|
<description>Sky Mote Type #sky2</description>
|
||||||
|
<source EXPORT="discard">[CONTIKI_DIR]/examples/hello-world/hello-world.c</source>
|
||||||
|
<commands EXPORT="discard">make clean TARGET=sky
|
||||||
|
make hello-world.sky TARGET=sky</commands>
|
||||||
|
<firmware EXPORT="copy">[CONTIKI_DIR]/examples/hello-world/hello-world.sky</firmware>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.IPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyFlash</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyCoffeeFilesystem</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.Msp802154Radio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspSerial</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.MspDebugOutput</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.mspmote.interfaces.SkyTemperature</moteinterface>
|
||||||
|
</motetype>
|
||||||
|
<mote>
|
||||||
|
<breakpoints />
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>-24.750327773354453</x>
|
||||||
|
<y>17.688901393447438</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspClock
|
||||||
|
<deviation>1.0</deviation>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||||
|
<id>1</id>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>sky1</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<breakpoints />
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>1.091493067677618</x>
|
||||||
|
<y>40.943504236660225</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspClock
|
||||||
|
<deviation>1.0</deviation>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||||
|
<id>2</id>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>sky2</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<breakpoints />
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>22.647678967805337</x>
|
||||||
|
<y>61.6365018442491</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspClock
|
||||||
|
<deviation>1.0</deviation>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||||
|
<id>3</id>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>sky2</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<breakpoints />
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>44.02005813888037</x>
|
||||||
|
<y>93.02398317771755</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspClock
|
||||||
|
<deviation>1.0</deviation>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.mspmote.interfaces.MspMoteID
|
||||||
|
<id>4</id>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>sky2</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
</simulation>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.SimControl
|
||||||
|
<width>280</width>
|
||||||
|
<z>1</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Visualizer
|
||||||
|
<plugin_config>
|
||||||
|
<moterelations>true</moterelations>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.UDGMVisualizerSkin</skin>
|
||||||
|
<viewport>2.3610941331949244 0.0 0.0 2.3610941331949244 119.38219749746548 -4.52452305190821</viewport>
|
||||||
|
</plugin_config>
|
||||||
|
<width>400</width>
|
||||||
|
<z>3</z>
|
||||||
|
<height>400</height>
|
||||||
|
<location_x>1</location_x>
|
||||||
|
<location_y>1</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.LogListener
|
||||||
|
<plugin_config>
|
||||||
|
<filter />
|
||||||
|
<formatted_time />
|
||||||
|
<coloring />
|
||||||
|
</plugin_config>
|
||||||
|
<width>1404</width>
|
||||||
|
<z>6</z>
|
||||||
|
<height>240</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>160</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.TimeLine
|
||||||
|
<plugin_config>
|
||||||
|
<mote>0</mote>
|
||||||
|
<mote>1</mote>
|
||||||
|
<mote>2</mote>
|
||||||
|
<mote>3</mote>
|
||||||
|
<showRadioRXTX />
|
||||||
|
<showRadioHW />
|
||||||
|
<showLEDs />
|
||||||
|
<zoomfactor>500.0</zoomfactor>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1804</width>
|
||||||
|
<z>5</z>
|
||||||
|
<height>166</height>
|
||||||
|
<location_x>0</location_x>
|
||||||
|
<location_y>742</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Notes
|
||||||
|
<plugin_config>
|
||||||
|
<notes>Enter notes here</notes>
|
||||||
|
<decorations>true</decorations>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1124</width>
|
||||||
|
<z>4</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>680</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.serialsocket.SerialSocketServer
|
||||||
|
<mote_arg>0</mote_arg>
|
||||||
|
<plugin_config>
|
||||||
|
<port>60001</port>
|
||||||
|
<bound>true</bound>
|
||||||
|
</plugin_config>
|
||||||
|
<width>362</width>
|
||||||
|
<z>2</z>
|
||||||
|
<height>116</height>
|
||||||
|
<location_x>30</location_x>
|
||||||
|
<location_y>403</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.ScriptRunner
|
||||||
|
<plugin_config>
|
||||||
|
<script>TIMEOUT(10000000000); /* milliseconds. no action at timeout */</script>
|
||||||
|
<active>true</active>
|
||||||
|
</plugin_config>
|
||||||
|
<width>600</width>
|
||||||
|
<z>0</z>
|
||||||
|
<height>700</height>
|
||||||
|
<location_x>850</location_x>
|
||||||
|
<location_y>13</location_y>
|
||||||
|
</plugin>
|
||||||
|
</simconf>
|
||||||
|
|
9
tests/17-rpl-border-router/03-border-router-sky.sh
Executable file
9
tests/17-rpl-border-router/03-border-router-sky.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
|
||||||
|
# Simulation file
|
||||||
|
BASENAME=03-border-router-sky
|
||||||
|
|
||||||
|
bash test-border-router.sh $CONTIKI $BASENAME fd00::0212:7404:0004:0404
|
252
tests/17-rpl-border-router/04-border-router-traceroute.csc
Normal file
252
tests/17-rpl-border-router/04-border-router-traceroute.csc
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<simconf>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mrm</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/mspsim</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/avrora</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/serial_socket</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/collect-view</project>
|
||||||
|
<project EXPORT="discard">[APPS_DIR]/powertracker</project>
|
||||||
|
<simulation>
|
||||||
|
<title>My simulation</title>
|
||||||
|
<speedlimit>1.0</speedlimit>
|
||||||
|
<randomseed>123456</randomseed>
|
||||||
|
<motedelay_us>1000000</motedelay_us>
|
||||||
|
<radiomedium>
|
||||||
|
org.contikios.cooja.radiomediums.UDGM
|
||||||
|
<transmitting_range>50.0</transmitting_range>
|
||||||
|
<interference_range>100.0</interference_range>
|
||||||
|
<success_ratio_tx>1.0</success_ratio_tx>
|
||||||
|
<success_ratio_rx>1.0</success_ratio_rx>
|
||||||
|
</radiomedium>
|
||||||
|
<events>
|
||||||
|
<logoutput>40000</logoutput>
|
||||||
|
</events>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype295</identifier>
|
||||||
|
<description>Cooja Mote Type #1</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/rpl-border-router/border-router.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make border-router.cooja TARGET=cooja</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<motetype>
|
||||||
|
org.contikios.cooja.contikimote.ContikiMoteType
|
||||||
|
<identifier>mtype686</identifier>
|
||||||
|
<description>Cooja Mote Type #2</description>
|
||||||
|
<source>[CONTIKI_DIR]/examples/hello-world/hello-world.c</source>
|
||||||
|
<commands>make TARGET=cooja clean
|
||||||
|
make hello-world.cooja TARGET=cooja</commands>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Position</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Battery</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiVib</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiMoteID</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRS232</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiBeeper</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.RimeAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiIPAddress</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiRadio</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiButton</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiPIR</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiClock</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiLED</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiCFS</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.contikimote.interfaces.ContikiEEPROM</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.Mote2MoteRelations</moteinterface>
|
||||||
|
<moteinterface>org.contikios.cooja.interfaces.MoteAttributes</moteinterface>
|
||||||
|
<symbols>false</symbols>
|
||||||
|
</motetype>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>54.36775767371176</x>
|
||||||
|
<y>24.409055040864118</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>1</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype295</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>83.54989222799365</x>
|
||||||
|
<y>52.63050856506214</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>2</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>108.91767775240822</x>
|
||||||
|
<y>78.59778809170032</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>3</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
<mote>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.interfaces.Position
|
||||||
|
<x>139.91021061864723</x>
|
||||||
|
<y>98.34190023350419</y>
|
||||||
|
<z>0.0</z>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiMoteID
|
||||||
|
<id>4</id>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiRadio
|
||||||
|
<bitrate>250.0</bitrate>
|
||||||
|
</interface_config>
|
||||||
|
<interface_config>
|
||||||
|
org.contikios.cooja.contikimote.interfaces.ContikiEEPROM
|
||||||
|
<eeprom>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</eeprom>
|
||||||
|
</interface_config>
|
||||||
|
<motetype_identifier>mtype686</motetype_identifier>
|
||||||
|
</mote>
|
||||||
|
</simulation>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.SimControl
|
||||||
|
<width>280</width>
|
||||||
|
<z>1</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Visualizer
|
||||||
|
<plugin_config>
|
||||||
|
<moterelations>true</moterelations>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.UDGMVisualizerSkin</skin>
|
||||||
|
<skin>org.contikios.cooja.plugins.skins.IDVisualizerSkin</skin>
|
||||||
|
<viewport>1.9798610460263038 0.0 0.0 1.9798610460263038 -61.112037797038525 -1.2848438586294648</viewport>
|
||||||
|
</plugin_config>
|
||||||
|
<width>400</width>
|
||||||
|
<z>4</z>
|
||||||
|
<height>400</height>
|
||||||
|
<location_x>1</location_x>
|
||||||
|
<location_y>1</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.LogListener
|
||||||
|
<plugin_config>
|
||||||
|
<filter>ID:4</filter>
|
||||||
|
<formatted_time />
|
||||||
|
<coloring />
|
||||||
|
</plugin_config>
|
||||||
|
<width>1404</width>
|
||||||
|
<z>2</z>
|
||||||
|
<height>240</height>
|
||||||
|
<location_x>400</location_x>
|
||||||
|
<location_y>160</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.TimeLine
|
||||||
|
<plugin_config>
|
||||||
|
<mote>0</mote>
|
||||||
|
<mote>1</mote>
|
||||||
|
<mote>2</mote>
|
||||||
|
<mote>3</mote>
|
||||||
|
<showRadioRXTX />
|
||||||
|
<showRadioHW />
|
||||||
|
<showLEDs />
|
||||||
|
<zoomfactor>500.0</zoomfactor>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1804</width>
|
||||||
|
<z>6</z>
|
||||||
|
<height>166</height>
|
||||||
|
<location_x>0</location_x>
|
||||||
|
<location_y>753</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.Notes
|
||||||
|
<plugin_config>
|
||||||
|
<notes>Enter notes here</notes>
|
||||||
|
<decorations>true</decorations>
|
||||||
|
</plugin_config>
|
||||||
|
<width>1124</width>
|
||||||
|
<z>5</z>
|
||||||
|
<height>160</height>
|
||||||
|
<location_x>680</location_x>
|
||||||
|
<location_y>0</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.serialsocket.SerialSocketServer
|
||||||
|
<mote_arg>0</mote_arg>
|
||||||
|
<plugin_config>
|
||||||
|
<port>60001</port>
|
||||||
|
<bound>true</bound>
|
||||||
|
</plugin_config>
|
||||||
|
<width>362</width>
|
||||||
|
<z>3</z>
|
||||||
|
<height>116</height>
|
||||||
|
<location_x>13</location_x>
|
||||||
|
<location_y>414</location_y>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
org.contikios.cooja.plugins.ScriptRunner
|
||||||
|
<plugin_config>
|
||||||
|
<script>TIMEOUT(10000000000); /* milliseconds. no action at timeout */
|
||||||
|
</script>
|
||||||
|
<active>true</active>
|
||||||
|
</plugin_config>
|
||||||
|
<width>600</width>
|
||||||
|
<z>0</z>
|
||||||
|
<height>700</height>
|
||||||
|
<location_x>1037</location_x>
|
||||||
|
<location_y>40</location_y>
|
||||||
|
</plugin>
|
||||||
|
</simconf>
|
61
tests/17-rpl-border-router/04-border-router-traceroute.sh
Executable file
61
tests/17-rpl-border-router/04-border-router-traceroute.sh
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
|
||||||
|
# Simulation file
|
||||||
|
BASENAME=04-border-router-traceroute
|
||||||
|
|
||||||
|
# Destination IPv6
|
||||||
|
IPADDR=fd00::204:4:4:4
|
||||||
|
# The expected hop count
|
||||||
|
TARGETHOPS=4
|
||||||
|
|
||||||
|
# Start simulation
|
||||||
|
echo "Starting Cooja simulation $BASENAME.csc"
|
||||||
|
java -Xshare:on -jar $CONTIKI/tools/cooja/dist/cooja.jar -nogui=$BASENAME.csc -contiki=$CONTIKI > $BASENAME.coojalog &
|
||||||
|
JPID=$!
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
# Connect to the simlation
|
||||||
|
echo "Starting tunslip6"
|
||||||
|
make -C $CONTIKI/tools tunslip6
|
||||||
|
make -C $CONTIKI/examples/rpl-border-router/ connect-router-cooja TARGET=zoul >> $BASENAME.tunsliplog 2>&1 &
|
||||||
|
MPID=$!
|
||||||
|
echo "Waiting for network formation"
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Do ping
|
||||||
|
echo "Running Traceroute"
|
||||||
|
traceroute6 $IPADDR -m 5 | tee $BASENAME.scriptlog
|
||||||
|
# Fetch traceroute6 status code (not $? because this is piped)
|
||||||
|
STATUS=${PIPESTATUS[0]}
|
||||||
|
HOPS=`wc $BASENAME.scriptlog -l | cut -f 1 -d ' '`
|
||||||
|
|
||||||
|
echo "Closing simulation and tunslip6"
|
||||||
|
sleep 1
|
||||||
|
kill -9 $JPID
|
||||||
|
kill -9 $MPID
|
||||||
|
sleep 1
|
||||||
|
rm COOJA.testlog
|
||||||
|
rm COOJA.log
|
||||||
|
|
||||||
|
if [ $STATUS -eq 0 ] && [ $HOPS -eq $TARGETHOPS ] ; then
|
||||||
|
printf "%-32s TEST OK\n" "$BASENAME" | tee $BASENAME.testlog;
|
||||||
|
else
|
||||||
|
# Verbose output when using CI
|
||||||
|
if [ "$CI" = "true" ]; then
|
||||||
|
echo "==== $BASENAME.coojalog ====" ; cat $BASENAME.coojalog;
|
||||||
|
echo "==== $BASENAME.tunsliplog ====" ; cat $BASENAME.tunsliplog;
|
||||||
|
echo "==== $BASENAME.scriptlog ====" ; cat $BASENAME.scriptlog;
|
||||||
|
else
|
||||||
|
echo "==== Check $BASENAME.coojalog, $BASENAME.tunsliplog, and $BASENAME.scriptlog for details ====";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
printf "%-32s TEST FAIL\n" "$BASENAME" | tee $BASENAME.testlog;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We do not want Make to stop -> Return 0
|
||||||
|
# The Makefile will check if a log contains FAIL at the end
|
||||||
|
|
||||||
|
exit 0
|
1
tests/17-rpl-border-router/Makefile
Normal file
1
tests/17-rpl-border-router/Makefile
Normal file
@ -0,0 +1 @@
|
|||||||
|
include ../Makefile.script-test
|
58
tests/17-rpl-border-router/test-border-router.sh
Executable file
58
tests/17-rpl-border-router/test-border-router.sh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
|
||||||
|
# Simulation file
|
||||||
|
BASENAME=$2
|
||||||
|
|
||||||
|
# Destination IPv6
|
||||||
|
IPADDR=$3
|
||||||
|
|
||||||
|
# Start simulation
|
||||||
|
echo "Starting Cooja simulation $BASENAME.csc"
|
||||||
|
java -Xshare:on -jar $CONTIKI/tools/cooja/dist/cooja.jar -nogui=$BASENAME.csc -contiki=$CONTIKI > $BASENAME.coojalog &
|
||||||
|
JPID=$!
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
# Connect to the simlation
|
||||||
|
echo "Starting tunslip6"
|
||||||
|
make -C $CONTIKI/tools tunslip6
|
||||||
|
make -C $CONTIKI/examples/rpl-border-router/ connect-router-cooja TARGET=zoul >> $BASENAME.tunsliplog 2>&1 &
|
||||||
|
MPID=$!
|
||||||
|
echo "Waiting for network formation"
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Do ping
|
||||||
|
echo "Pinging"
|
||||||
|
ping6 $IPADDR -c 5 | tee $BASENAME.scriptlog
|
||||||
|
# Fetch ping6 status code (not $? because this is piped)
|
||||||
|
STATUS=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
echo "Closing simulation and tunslip6"
|
||||||
|
sleep 1
|
||||||
|
kill -9 $JPID
|
||||||
|
kill -9 $MPID
|
||||||
|
sleep 1
|
||||||
|
rm COOJA.testlog
|
||||||
|
rm COOJA.log
|
||||||
|
|
||||||
|
if [ $STATUS -eq 0 ] ; then
|
||||||
|
printf "%-32s TEST OK\n" "$BASENAME" | tee $BASENAME.testlog;
|
||||||
|
else
|
||||||
|
# Verbose output when using CI
|
||||||
|
if [ "$CI" = "true" ]; then
|
||||||
|
echo "==== $BASENAME.coojalog ====" ; cat $BASENAME.coojalog;
|
||||||
|
echo "==== $BASENAME.tunsliplog ====" ; cat $BASENAME.tunsliplog;
|
||||||
|
echo "==== $BASENAME.scriptlog ====" ; cat $BASENAME.scriptlog;
|
||||||
|
else
|
||||||
|
echo "==== Check $BASENAME.coojalog, $BASENAME.tunsliplog, and $BASENAME.scriptlog for details ====";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
printf "%-32s TEST FAIL\n" "$BASENAME" | tee $BASENAME.testlog;
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We do not want Make to stop -> Return 0
|
||||||
|
# The Makefile will check if a log contains FAIL at the end
|
||||||
|
|
||||||
|
exit 0
|
50
tests/18-native-networking/01-native-ping.sh
Executable file
50
tests/18-native-networking/01-native-ping.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Contiki directory
|
||||||
|
CONTIKI=$1
|
||||||
|
# Test basename
|
||||||
|
BASENAME=01-native-ping
|
||||||
|
|
||||||
|
IPADDR=fd00::302:304:506:708
|
||||||
|
|
||||||
|
# Starting Contiki-NG native node
|
||||||
|
echo "Starting native node"
|
||||||
|
make -C $CONTIKI/examples/hello-world
|
||||||
|
sudo $CONTIKI/examples/hello-world/hello-world.native > node.log 2> node.err &
|
||||||
|
CPID=$!
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Do ping
|
||||||
|
echo "Pinging"
|
||||||
|
ping6 $IPADDR -c 5 | tee $BASENAME.log
|
||||||
|
# Fetch ping6 status code (not $? because this is piped)
|
||||||
|
STATUS=${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
echo "Closing native node"
|
||||||
|
sleep 2
|
||||||
|
pgrep hello-world | sudo xargs kill -9
|
||||||
|
|
||||||
|
if [ $STATUS -eq 0 ] ; then
|
||||||
|
cp $BASENAME.log $BASENAME.testlog
|
||||||
|
printf "%-32s TEST OK\n" "$BASENAME" | tee -a $BASENAME.testlog;
|
||||||
|
else
|
||||||
|
mv $BASENAME.log $BASENAME.faillog
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "---- node.log"
|
||||||
|
cat node.log
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "---- node.err"
|
||||||
|
cat node.err
|
||||||
|
|
||||||
|
cp $BASENAME.log $BASENAME.faillog
|
||||||
|
printf "%-32s TEST FAIL\n" "$BASENAME" | tee -a $BASENAME.testlog;
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm node.log
|
||||||
|
rm node.err
|
||||||
|
|
||||||
|
# We do not want Make to stop -> Return 0
|
||||||
|
# The Makefile will check if a log contains FAIL at the end
|
||||||
|
exit 0
|
1
tests/18-native-networking/Makefile
Normal file
1
tests/18-native-networking/Makefile
Normal file
@ -0,0 +1 @@
|
|||||||
|
include ../Makefile.script-test
|
25
tests/Makefile.script-test
Normal file
25
tests/Makefile.script-test
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
TESTS=$(wildcard ??-*.sh)
|
||||||
|
TESTLOGS=$(sort $(patsubst %.sh,%.testlog,$(TESTS)))
|
||||||
|
|
||||||
|
CONTIKI=../..
|
||||||
|
|
||||||
|
tests: $(TESTLOGS)
|
||||||
|
|
||||||
|
summary: clean tests
|
||||||
|
ifeq ($(TESTS),)
|
||||||
|
@echo No tests > $@
|
||||||
|
else
|
||||||
|
@cat $(TESTLOGS) > $@
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: cooja clean tests
|
||||||
|
|
||||||
|
%.testlog: %.sh cooja
|
||||||
|
@bash "$(basename $@).sh" "$(CONTIKI)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f *.*log report summary
|
||||||
|
|
||||||
|
cooja: $(CONTIKI)/tools/cooja/dist/cooja.jar
|
||||||
|
$(CONTIKI)/tools/cooja/dist/cooja.jar:
|
||||||
|
(cd $(CONTIKI)/tools/cooja; ant jar)
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
@sky = ( "battery-sensor", "button-sensor", "cfs-xmem", "clock",
|
@sky = ( "battery-sensor", "button-sensor", "cfs-xmem", "clock",
|
||||||
"contiki-sky-main", "ds2411", "flash", "msp430",
|
"contiki-sky-main", "ds2411", "flash", "msp430",
|
||||||
"mtarch",
|
|
||||||
"i2c", "leds-arch", "light", "radio-sensor", "sht11",
|
"i2c", "leds-arch", "light", "radio-sensor", "sht11",
|
||||||
"simple-cc2420-arch", "simple-cc2420", "spi", "slip",
|
"simple-cc2420-arch", "simple-cc2420", "spi", "slip",
|
||||||
"uart1", "watchdog", "xmem", "rtimer-arch" );
|
"uart1", "watchdog", "xmem", "rtimer-arch" );
|
||||||
|
Loading…
Reference in New Issue
Block a user