From 63ec1262ed3384dfda67b70bec9d5f077a7ba8f9 Mon Sep 17 00:00:00 2001 From: Florent Duchon Date: Wed, 13 Feb 2013 21:15:12 +0100 Subject: digital/zigbit/tests: add transfert rate test programs --- .../zigbit/tests/transfert_rate/master/Makefile | 42 +++ .../tests/transfert_rate/master/atmega1281.ld | 97 ++++++ .../tests/transfert_rate/master/configuration.h | 345 +++++++++++++++++++++ .../zigbit/tests/transfert_rate/master/debug_avr.c | 83 +++++ .../zigbit/tests/transfert_rate/master/debug_avr.h | 50 +++ digital/zigbit/tests/transfert_rate/master/led.c | 135 ++++++++ digital/zigbit/tests/transfert_rate/master/led.h | 54 ++++ .../zigbit/tests/transfert_rate/master/main_avr.c | 87 ++++++ .../tests/transfert_rate/master/network_specific.c | 122 ++++++++ .../tests/transfert_rate/master/network_specific.h | 42 +++ digital/zigbit/tests/transfert_rate/master/timer.c | 64 ++++ digital/zigbit/tests/transfert_rate/master/timer.h | 39 +++ digital/zigbit/tests/transfert_rate/slave/Makefile | 45 +++ .../tests/transfert_rate/slave/atmega1281.ld | 97 ++++++ .../tests/transfert_rate/slave/configuration.h | 345 +++++++++++++++++++++ .../zigbit/tests/transfert_rate/slave/debug_avr.c | 83 +++++ .../zigbit/tests/transfert_rate/slave/debug_avr.h | 50 +++ digital/zigbit/tests/transfert_rate/slave/led.c | 135 ++++++++ digital/zigbit/tests/transfert_rate/slave/led.h | 54 ++++ .../zigbit/tests/transfert_rate/slave/main_avr.c | 87 ++++++ .../tests/transfert_rate/slave/network_specific.c | 122 ++++++++ .../tests/transfert_rate/slave/network_specific.h | 42 +++ digital/zigbit/tests/transfert_rate/slave/timer.c | 64 ++++ digital/zigbit/tests/transfert_rate/slave/timer.h | 39 +++ 24 files changed, 2323 insertions(+) create mode 100644 digital/zigbit/tests/transfert_rate/master/Makefile create mode 100644 digital/zigbit/tests/transfert_rate/master/atmega1281.ld create mode 100644 digital/zigbit/tests/transfert_rate/master/configuration.h create mode 100644 digital/zigbit/tests/transfert_rate/master/debug_avr.c create mode 100644 digital/zigbit/tests/transfert_rate/master/debug_avr.h create mode 100644 digital/zigbit/tests/transfert_rate/master/led.c create mode 100644 digital/zigbit/tests/transfert_rate/master/led.h create mode 100644 digital/zigbit/tests/transfert_rate/master/main_avr.c create mode 100644 digital/zigbit/tests/transfert_rate/master/network_specific.c create mode 100644 digital/zigbit/tests/transfert_rate/master/network_specific.h create mode 100644 digital/zigbit/tests/transfert_rate/master/timer.c create mode 100644 digital/zigbit/tests/transfert_rate/master/timer.h create mode 100644 digital/zigbit/tests/transfert_rate/slave/Makefile create mode 100644 digital/zigbit/tests/transfert_rate/slave/atmega1281.ld create mode 100644 digital/zigbit/tests/transfert_rate/slave/configuration.h create mode 100644 digital/zigbit/tests/transfert_rate/slave/debug_avr.c create mode 100644 digital/zigbit/tests/transfert_rate/slave/debug_avr.h create mode 100644 digital/zigbit/tests/transfert_rate/slave/led.c create mode 100644 digital/zigbit/tests/transfert_rate/slave/led.h create mode 100644 digital/zigbit/tests/transfert_rate/slave/main_avr.c create mode 100644 digital/zigbit/tests/transfert_rate/slave/network_specific.c create mode 100644 digital/zigbit/tests/transfert_rate/slave/network_specific.h create mode 100644 digital/zigbit/tests/transfert_rate/slave/timer.c create mode 100644 digital/zigbit/tests/transfert_rate/slave/timer.h diff --git a/digital/zigbit/tests/transfert_rate/master/Makefile b/digital/zigbit/tests/transfert_rate/master/Makefile new file mode 100644 index 00000000..80fbb8a8 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/Makefile @@ -0,0 +1,42 @@ +ifndef APB_REPO_PATH +$(error Please set your environment variable APB_REPO_PATH with the path where is installed your APB repository) +endif + +# Simulator makefile part +BASE = $(APB_REPO_PATH)/digital/avr +# HOST_PROGS = beacon +# beacon_SOURCES = main_simu.c position.c formula.c recovery.c update.c trust.c +# MODULES = math/fixed utils +# AVR_MCU = atmega1281 +# OPTIMIZE = -O2 -lm -DSIMULATOR +# include $(BASE)/make/Makefile.gen + + +# Bitcloud makefile part +BITCLOUD_BASE = $(APB_REPO_PATH)/digital/zigbit/bitcloud +BITCLOUD_MAKEFILE = $(BITCLOUD_BASE)/makefiles +BITCLOUD_STACK = $(BITCLOUD_BASE)/stack +BITCLOUD_COMMON_SOURCES = $(APB_REPO_PATH)/digital/zigbit/common +PROJECT_BASE = $(APB_REPO_PATH)/digital/zigbit/tests/transfert_rate/master + +CONFIG_NAME = All_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +# CONFIG_NAME = Coordinator_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +# CONFIG_NAME = Router_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = All_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = Coordinator_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = Router_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc + +DEV2 := 0 + +avr: + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) clean BITCLOUD_PATH=$(BITCLOUD_STACK) + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) all APP_NAME=transfert_rate_master BITCLOUD_PATH=$(BITCLOUD_STACK) APB_AVR_PATH=$(BASE) PROJECT_BASE=$(PROJECT_BASE) BITCLOUD_COMMON_SOURCES=$(BITCLOUD_COMMON_SOURCES) + +flash: + make avr + $(APB_REPO_PATH)/digital/dev2/tools/dev2ctl.py -s 1 + avrdude -c stk500v2 -P /dev/ttyUSB1 -p atmega1281 -B3 -U flash:w:obj/transfert_rate_master.hex + +clean: + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) clean APP_NAME=transfert_rate_master PROJECT_BASE=$(PROJECT_BASE) BITCLOUD_PATH=$(BITCLOUD_STACK) + diff --git a/digital/zigbit/tests/transfert_rate/master/atmega1281.ld b/digital/zigbit/tests/transfert_rate/master/atmega1281.ld new file mode 100644 index 00000000..056e2cad --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/atmega1281.ld @@ -0,0 +1,97 @@ +OUTPUT_FORMAT("elf32-avr") +OUTPUT_ARCH(avr:5) + +MEMORY +{ + text (rx) : ORIGIN = 0x00000000, LENGTH = 128K + data (rw!x) : ORIGIN = 0x00800200, LENGTH = 8K - 500 /* leave 500 bytes for stack */ + eeprom (rw!x) : ORIGIN = 0x00810000, LENGTH = 4K +} + +SECTIONS +{ + .text : + { + PROVIDE(__text_start = .); + + *(.vectors) + KEEP(*(.vectors)) + + *(.progmem.gcc*) + *(.progmem*) + . = ALIGN(2); + + *(.trampolines*) + *(.jumptables*) + *(.lowtext*) + + *(.init0) + KEEP (*(.init0)) + *(.init1) + KEEP (*(.init1)) + *(.init2) + KEEP (*(.init2)) + *(.init3) + KEEP (*(.init3)) + *(.init4) + KEEP (*(.init4)) + *(.init5) + KEEP (*(.init5)) + *(.init6) + KEEP (*(.init6)) + *(.init7) + KEEP (*(.init7)) + *(.init8) + KEEP (*(.init8)) + + *(.text.main) + KEEP (*(.text.main)) + *(.text) + *(.text.*) + + PROVIDE(__text_end = .); + } > text + + .data : AT (ADDR(.text) + SIZEOF(.text)) + { + PROVIDE(__data_start = .); + *(.data*) + *(.rodata*) + *(.gnu.linkonce.d*) + . = ALIGN(2); + PROVIDE(__data_end = .); + } > data + + .bss __data_end : + { + PROVIDE(__bss_start = .); + *(.bss*) + *(COMMON) + PROVIDE(__bss_end = .); + } > data + + .noinit __bss_end : + { + *(.noinit*) + PROVIDE(__heap_start = .); + } > data + + __stack_start = .; + + __data_load_start = LOADADDR(.data); + __data_load_end = __data_load_start + SIZEOF(.data); + + .eeprom : + { + FILL(0xff) + BYTE(0xff) + . = . + LENGTH(eeprom)-1; + } > eeprom + + /DISCARD/ : + { + *(.init9) + *(.fini*) + } + +} diff --git a/digital/zigbit/tests/transfert_rate/master/configuration.h b/digital/zigbit/tests/transfert_rate/master/configuration.h new file mode 100644 index 00000000..155134ea --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/configuration.h @@ -0,0 +1,345 @@ +#ifndef _CONFIGURATION_H_ +#define _CONFIGURATION_H_ + +#include "apsCommon.h" +#include +#include + +/*----------------------------------------------- */ +/* Disables board-specific peripherals support */ +/*----------------------------------------------- */ +#define APP_DISABLE_BSP 1 + +#define AC_FREQ 8000000 + +/* ----------------------------------------------------------- */ +/* USART CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define APP_INTERFACE_USART 0x01 +#define APP_INTERFACE_VCP 0x02 +#define APP_INTERFACE_SPI 0x03 +#define APP_INTERFACE_UART 0x04 +#define APP_INTERFACE_USBFIFO 0x05 +#define APP_USART_RX_BUFFER_SIZE 10 /* Receive buffer size for USART. */ +#define APP_USART_TX_BUFFER_SIZE 300 /* Transmit buffer size for USART */ +#define APP_INTERFACE APP_INTERFACE_USART /* Defines primary serial interface type to be used by application */ +#define APP_USART_CHANNEL USART_CHANNEL_1 /* Defines USART interface name to be used by application.*/ + +/* ----------------------------------------------------------- */ +/* TWI CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define AC_BEACON_TWI_ADDRESS 10 /* TWI address */ +#define AC_TWI_DRIVER HARD /* Driver to implement TWI: HARD, SOFT, or USI. */ +#define AC_TWI_NO_INTERRUPT 0 /* Do not use interrupts. */ +#define AC_TWI_FREQ 100000 /* TWI frequency, should really be 100 kHz. */ +#define AC_TWI_SLAVE_ENABLE 1 /* Enable slave part. */ +#define AC_TWI_MASTER_ENABLE 0 /* Enable master part. */ +#define AC_TWI_SLAVE_POLLED 1 /* Use polled slave mode: received data is stored in a buffer which can be polled using twi_slave_poll. */ +#undef AC_TWI_SLAVE_RECV /* Slave reception callback to be defined by the user when not in polled mode. */ +#define AC_TWI_PULL_UP 0 /* Use internal pull up. */ +#define AC_TWI_SLAVE_RECV_BUFFER_SIZE 16 /* Slave reception buffer size. */ +#define AC_TWI_SLAVE_SEND_BUFFER_SIZE 32 /* Slave transmission buffer size. */ + + +/* ----------------------------------------------------------- */ +/* ZIGBEE CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define AT25F2048 0x01 +#define AT45DB041 0x02 +#define AT25DF041A 0x03 + + + +#define APP_FRAGMENTATION 0 /* Enables or disables APS Fragmentation support. */ +#define APP_DETECT_LINK_FAILURE 1 /* Enable or disable link failure detection */ +#define APP_ENDPOINT 1 /* Endpoint will be useed */ +#define APP_PROFILE_ID 1 /* Profile Id will be used */ +#define APP_CLUSTER_ID 1 /* Cluster Id will be used */ +#define APP_JOINING_INDICATION_PERIOD 500L /* Period of blinking during starting network */ + + +// 32-bit mask of channels to be scanned before network is started. Channels that +// should be used are marked with logical 1 at corresponding bit location. +// Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a +// Valid channel numbers for 900 MHz band are 0x00 - 0x0a +// +// Notes: +// 1. for small amount of enabled channels it is more convinient to specify list +// of channels in the form of '(1ul << 0x0b)' +// 2. For 900 MHz band you also need to specify channel page +// +// Value range: 32-bit values: +// Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a +// Valid channel numbers for 900 MHz band are 0x00 - 0x0a +// +// C-type: uint32_t +// Can be set: at any time before network start +// #define CS_CHANNEL_MASK (1L<<0x0f) +// #define CS_CHANNEL_MASK 0x3FFFC00L +#define CS_CHANNEL_MASK 0x00030000L + +// The parameter specifies the predefined extended PANID of the network to be +// formed (for the coordinator) or joined (for a router or an end device). For a +// router or an end device the parameter can equal 0 allowing them to join the +// first suitable network that they discover. +#define CS_EXT_PANID 0xAAAAAAAAAAAA1337LL + +// 64-bit Unique Identifier (UID) determining the device extended address. If this +// value is 0 stack will try to read hardware UID from external UID or EEPROM chip. +// at startup. Location of hardware UID is platform dependend and it may not be +// available on all platforms. If the latter case then UID value must be provided +// by user via this parameter. This parameter must be unique for each device in a +// network. +// Specifies short (network) address if CS_NWK_UNIQUE_ADDR equals 1 +// +// If static addressing is applied the stack uses the value of the parameter as a +// short address. Otherwise, the stack assigns the parameter to a randomly chosen +// value unique within the network. In both cases after the network start the +// parameter holds actual short address of the device. While the device is in the +// network its value must not be changed. + + +// The maximum number of direct children that a given device (the coordinator or a +// router) can have. +// +// The parameter is only enabled for routers and the coordinator. An end device +// can not have children. If an actual number of children reaches a parameter's +// value, the node will have not been able to accept any more children joining the +// network. The parameter can be set to 0 on a router thus preventing it from +// accepting any children and can be help form a desired network topology. For +// example, if the parameter is set to 0 on all routers, then the coordinator will +// be the only device that can have children and the network will have star +// topology. +#define CS_MAX_CHILDREN_AMOUNT 8 + +// The maximum number of routers among the direct children of the device +// +// The parameter determines how many routers the device can have as children. Note +// that the maximum number of end devices is equal to CS_MAX_CHILDREN_AMOUNT - +// CS_MAX_CHILDREN_ROUTER_AMOUNT. +#define CS_MAX_CHILDREN_ROUTER_AMOUNT 0 + +// Network depht limits amount of hops that packet may travel in the network. +// Actual maximum number of hops is network depth multiplied by 2. +// +// The parameter determines the maximum depth of a network tree formed by +// child-parent relationships between nodes. +// +// While joining the network the node receives beacon responses from potential +// parents containing their actual network depth and declines those which show +// values not less than the maximum network depth on the joining device. A +// potential parent will also reject a beacon from the joining device and will not +// sent a response if the joining device shows the network depth greater than it is +// allowed on the potential parent. This logic is enabled if the parameter value is +// not greater than 15. If its value is greater than 15, then device does not +// perform any checkings of the network depth, neither when joining a network nor +// when accepting other nodes as children. This allows forming long chains of +// devices across considerable distances. +#define CS_MAX_NETWORK_DEPTH 1 + +// Maximum amount of records in the Neighbor Table. +// +// The parameter determines the size of the neighbor table which is used to store +// beacon responses from nearby devices. The parameter puts an upper bound over the +// amount of child devices possible for the node. +#define CS_NEIB_TABLE_SIZE 10 + +// Maximum amount of records in the network Route Table. +// +// The parameter sets the maximum number of records that can be kept in the NWK +// route table. The table is used by NWK to store information about established +// routes. Each table entry specifies the next-hop short address for a route from +// the current node to a given destination node. The table is being filled +// automatically during route discovery. An entry is added when a route is +// discovered. +#define CS_ROUTE_TABLE_SIZE 8 + +// The parameter specifies the TX power of the transceiver device, is measured in +// dBm(s). After the node has entered the network the value can only be changed via +// the ZDO_SetTxPowerReq() function. +// +// Value range: depends on the hardware. Transmit power must be in the range from +// -17 to 3 dBm for AT86RF231, AT86RF230 and AT86RF230B. For AT86RF212 transmit +// power must be in the range from -11 to 11 dBm. +#define CS_RF_TX_POWER 3 + +//----------------------------------------------- +//STANDARD_SECURITY_MODE +//----------------------------------------------- +#ifdef STANDARD_SECURITY_MODE + // The parameter is used to determine the security type. + // + // Value range: 0,3 - for standard security; 1,2 - for high security. + // 0 - network key is preconfigured ; + // 1 - network join without master key, but with a trust center link key, which + // must be set via APS_SetLinkKey(); + // 2 - network join employs a master key, which must be set APS_SetMasterKey(); + // 3 - network key is no preconfigured, but rather received from the trust center + // in an unencrypted frame. (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) + #error APP_MAX_PACKET_SIZE must be less or equal to (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) + #endif +#else + #if APP_APS_PAYLOAD_SIZE > APS_MAX_ASDU_SIZE + #error APP_APS_PAYLOAD_SIZE must be less or equal to APS_MAX_ASDU_SIZE + #endif +#endif + + +// Common application state definition +typedef enum +{ + APP_INITIAL_STATE, // Initial state + APP_NETWORK_JOIN_REQUEST, + APP_NETWORK_JOINING_STATE, // Attempting join the network + APP_NETWORK_JOINED_STATE, // Successfully joined + APP_NETWORK_LEAVING_STATE, // Leaving from the network + APP_ERROR_STATE // Error state (runtime error occured) +} AppState_t; + +// Network data transmission state +typedef enum +{ + APP_DATA_TRANSMISSION_SENDING_STATE, // APS Data Request was not sent yet + APP_DATA_TRANSMISSION_BUSY_STATE, // APS Data Request was sent (confirm waiting) + APP_DATA_TRANSMISSION_WAIT_STATE, // Waiting a data block from USART + APP_DATA_TRANSMISSION_READY_STATE, // Ready to send new APS Data Request + APP_DATA_TRANSMISSION_STOP_STATE // Inter-frame delay +} AppDataTransmissionState_t; + + +#endif // _CONFIGURATION_H_ diff --git a/digital/zigbit/tests/transfert_rate/master/debug_avr.c b/digital/zigbit/tests/transfert_rate/master/debug_avr.c new file mode 100644 index 00000000..a7b213c0 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/debug_avr.c @@ -0,0 +1,83 @@ +/* debug_avr.c */ +/* Beacon debug interface. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include +#include + +#include "configuration.h" +#include "print.h" +#include "debug_avr.h" +#include "network.h" +#include "network_specific.h" +#include "reset.h" +#include "timer.h" + +HAL_UsartDescriptor_t appUsartDescriptor; // USART descriptor (required by stack) + +uint8_t usartRxBuffer[APP_USART_RX_BUFFER_SIZE]; // USART Rx buffer +uint8_t usartTxBuffer[APP_USART_TX_BUFFER_SIZE]; // USART Tx buffer + +/* This function initializes the USART interface for debugging on avr */ + void initSerialInterface(void) + { + appUsartDescriptor.tty = USART_CHANNEL; + appUsartDescriptor.mode = USART_MODE_ASYNC; + appUsartDescriptor.baudrate = USART_BAUDRATE_250000; + appUsartDescriptor.dataLength = USART_DATA8; + appUsartDescriptor.parity = USART_PARITY_EVEN; + appUsartDescriptor.stopbits = USART_STOPBIT_1; + appUsartDescriptor.rxBuffer = usartRxBuffer; + appUsartDescriptor.rxBufferLength = sizeof(usartRxBuffer); + appUsartDescriptor.txBuffer = NULL; // use callback mode + appUsartDescriptor.txBufferLength = 0; + appUsartDescriptor.rxCallback = usartRXCallback; + appUsartDescriptor.txCallback = usartTXCallback; + appUsartDescriptor.flowControl = USART_FLOW_CONTROL_NONE; + OPEN_USART(&appUsartDescriptor); + } + + uint8_t rxBuffer; + +/* RX USART Callback */ +void usartRXCallback(uint16_t bytesToRead) +{ + + /* Read RX buffer from HAL */ + READ_USART(&appUsartDescriptor,&rxBuffer,bytesToRead); + + switch(rxBuffer) + { + case 'r': + reset_avr(); + break; + case 'f': + timer_start(); + network_send_buffer_transfert_rate(usartRxBuffer,1024); + break; + /* Default */ + default : + uprintf(" ?? Unknown command ??\r\n"); + break; + } +} diff --git a/digital/zigbit/tests/transfert_rate/master/debug_avr.h b/digital/zigbit/tests/transfert_rate/master/debug_avr.h new file mode 100644 index 00000000..4d7a1720 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/debug_avr.h @@ -0,0 +1,50 @@ +/* debug_avr.h */ +/* Macro for debug traces for avr target. {{{ + * + * Copyright (C) 2011 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#ifndef _DEBUG_AVR_H +#define _DEBUG_AVR_H + +#include +#include "configuration.h" + +#define DEBUG_TASK_PERIOD 100L + +/* This function initializes the USART interface for debugging on avr */ +void initSerialInterface(void); + +/* RX USART Callback */ +void usartRXCallback(uint16_t bytesToRead); + +/* This function starts the debug task */ +void debug_start_stop_task(void); + +/* Debug task callback */ +void debug_task(void); + +void debug_set_TRmode(uint8_t value); + +uint8_t debug_get_TRmode(void); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/master/led.c b/digital/zigbit/tests/transfert_rate/master/led.c new file mode 100644 index 00000000..0f82ba78 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/led.c @@ -0,0 +1,135 @@ +/* led.c */ +/* Led management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include "led.h" + +static HAL_AppTimer_t delayTimer; + + +/* This function display a combination of led according the the given state */ +void led_display_state(int state) +{ + switch(state) + { + case APP_INITIAL_STATE: + case APP_NETWORK_JOINING_STATE: + led_on(1); + led_off(2); + break; + case APP_NETWORK_JOINED_STATE: + led_on(1); + led_on(2); + default: + break; + } +} + + +/* This function initializes the leds*/ +void init_led(void) +{ + /*D5/D6/D7 are configured in output */ + DDRD = 0xE0; +} + +/* This function activates a specific led */ +void led_on(int number) +{ + switch(number) + { + case 1: + PORTD|=0x20; + break; + case 2: + PORTD|=0x40; + break; + case 3: + PORTD|=0x80; + break; + default: + break; + } +} + +/* This function deactivates a specific led*/ +void led_off(int number) +{ + switch(number) + { + case 1: + PORTD&=0xDF; + break; + case 2: + PORTD&=0xBF; + break; + case 3: + PORTD&=0x7F; + break; + default: + break; + } +} + +/* This function inverse the state of a specific led*/ +void led_inverse(int number) +{ + switch(number) + { + case 1: + PORTD^=0x20; + break; + case 2: + PORTD^=0x40; + break; + case 3: + PORTD^=0x80; + break; + default: + break; + } +} + +/* This function enables the timer used by the network blink status led */ +void led_start_blink(void) +{ + delayTimer.interval = APP_JOINING_INDICATION_PERIOD; + delayTimer.mode = TIMER_REPEAT_MODE; + delayTimer.callback = led_network_status_blink_callback; + HAL_StartAppTimer(&delayTimer); +} + +/* This function disables the timer used by the network blink status led */ +void led_stop_blink(void) +{ + HAL_StopAppTimer(&delayTimer); + led_on(1); +} + +/* Led blink callback*/ +void led_network_status_blink_callback(void) +{ + led_inverse(1); +} diff --git a/digital/zigbit/tests/transfert_rate/master/led.h b/digital/zigbit/tests/transfert_rate/master/led.h new file mode 100644 index 00000000..d49196fe --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/led.h @@ -0,0 +1,54 @@ +/* led.h */ +/* Led management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#ifndef _LED_H +#define _LED_H + +#define APP_JOINING_INDICATION_PERIOD 500L // Period of blinking during starting network + +/* This function initializes the leds*/ +void init_led(void); + +/* This function activates a specific led */ +void led_on(int number); + +/* This function deactivates a specific led*/ +void led_off(int number); + +/* This function inverse the state of a specific led*/ +void led_inverse(int number); + +/* This function display a combination of led according the the given state */ +void led_display_state(int state); + +/* This function enables the timer used by the network blink status led */ +void led_start_blink(void); + +/* This function disables the timer used by the network blink status led */ +void led_stop_blink(void); + +/* Led blink callback*/ +void led_network_status_blink_callback(void); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/master/main_avr.c b/digital/zigbit/tests/transfert_rate/master/main_avr.c new file mode 100644 index 00000000..3b02334d --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/main_avr.c @@ -0,0 +1,87 @@ +/* main_avr.c */ +/* Beacon State Machine & Main. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include "configuration.h" +#include "debug_avr.h" +#include "network.h" +#include "led.h" +#include "uid.h" + +static uint8_t uid; + +void APL_TaskHandler(void) +{ + switch (network_get_state()) + { + case APP_INITIAL_STATE: + + /* Init Led */ + init_led(); + + /* Init Serial Interface for debug */ + initSerialInterface(); + + uid = get_uid(); + + /* Init network */ + uid = 0; + network_init(uid); + + network_set_state(APP_NETWORK_JOIN_REQUEST); + break; + case APP_NETWORK_JOIN_REQUEST: + + /* Activate the network status led blink */ + led_start_blink(); + + /* St art network */ + network_start(); + + network_set_state(APP_NETWORK_JOINING_STATE); + + case APP_NETWORK_JOINING_STATE: + break; + case APP_NETWORK_LEAVING_STATE: + break; + case APP_NETWORK_JOINED_STATE: + led_stop_blink(); + break; + default: + break; + } + SYS_PostTask(APL_TASK_ID); +} + +int main(void) +{ + SYS_SysInit(); + for(;;) + { + SYS_RunTask(); + } +} + + diff --git a/digital/zigbit/tests/transfert_rate/master/network_specific.c b/digital/zigbit/tests/transfert_rate/master/network_specific.c new file mode 100644 index 00000000..4a318b3b --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/network_specific.c @@ -0,0 +1,122 @@ +/* network.c */ +/* Beacon network management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include +#include + +#include "configuration.h" +#include "network.h" +#include "network_specific.h" +#include "print.h" +#include "timer.h" + +AppMessageBuffer_t zigbit_tx_buffer; + +extern APS_RegisterEndpointReq_t endpointParams; +extern APS_DataReq_t network_config; + + + + + +/* Specific callback after data packet sent */ +void network_specific_DataConfcallback(void) +{ + static uint16_t count = 0; + if(count < PACKET_NUMBER) + { + if(network_send_buffer_transfert_rate(NULL,0) == 1) + { + network_send_buffer_transfert_rate(NULL,0); + count++; + uprintf("."); + } + } + else + { + timer_stop(); + uprintf("\r\nTemps ecoule = %.2f s, Baudrate = %.2f ko/s\r\n",timer_get_value_s(),(float)1024*(float)PACKET_NUMBER/timer_get_value_s()/1000); + } +} + + +/* This function sends a specified buffer */ +uint8_t network_send_buffer_transfert_rate(uint8_t * buffer_in,uint16_t size) +{ + static uint8_t * buffer; + static uint16_t buffer_size; + static uint16_t offset; + uint8_t ASDUsize; + uint16_t delta; + + if((buffer_in != NULL) && (size != 0)) + { + buffer_size = size; + buffer = buffer_in; + offset = 0; + } + else + { + if(offset == buffer_size) + { + offset=0; + return 1; + } + } + + if(network_get_state() == APP_NETWORK_JOINED_STATE) + { + /* Configure the message structure */ + network_config.dstAddrMode = APS_SHORT_ADDRESS; // Short addressing mode + network_config.dstAddress.shortAddress = 0x00; // Destination address + network_config.profileId = APP_PROFILE_ID; // Profile ID + network_config.dstEndpoint = APP_ENDPOINT; // Desctination endpoint + network_config.clusterId = APP_CLUSTER_ID; // Desctination cluster ID + network_config.srcEndpoint = APP_ENDPOINT; // Source endpoint + network_config.asdu = (uint8_t*) &zigbit_tx_buffer.message; // application message pointer + network_config.txOptions.acknowledgedTransmission = 0; // Acknowledged transmission enabled + network_config.radius = 0; // Use maximal possible radius + network_config.APS_DataConf = APS_DataConf; // Confirm handler Z + + delta = buffer_size - offset; + + if(delta > APP_MAX_PACKET_SIZE) + ASDUsize = APP_MAX_PACKET_SIZE; + else + ASDUsize = delta; + + memcpy(zigbit_tx_buffer.message.data,buffer+offset,ASDUsize); + offset+=ASDUsize; + + /* Bitcloud sending request */ + network_set_transmission_state(APP_DATA_TRANSMISSION_WAIT_STATE); + network_config.asduLength = ASDUsize + sizeof(zigbit_tx_buffer.message.messageId); // actual application message length + + network_start_transmission(); + } + return 0; +} + diff --git a/digital/zigbit/tests/transfert_rate/master/network_specific.h b/digital/zigbit/tests/transfert_rate/master/network_specific.h new file mode 100644 index 00000000..c0cb5d6a --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/network_specific.h @@ -0,0 +1,42 @@ +/* network.h */ +/* Beacon network management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#ifndef _NETWORK_SPECIFIC_H +#define _NETWORK_SPECIFIC_H + +#include +#include "network.h" + +#define NETWORK_ACTIVITY_LED 2 +#define PACKET_NUMBER 200 + + +/* Specific callback after data packet sent */ +void network_specific_DataConfcallback(void); + +/* This function sends a specified buffer */ +uint8_t network_send_buffer_transfert_rate(uint8_t * buffer_in,uint16_t size); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/master/timer.c b/digital/zigbit/tests/transfert_rate/master/timer.c new file mode 100644 index 00000000..74706c52 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/timer.c @@ -0,0 +1,64 @@ +/* timer.c */ +/* Timer ms. {{{ + * + * Copyright (C) 2013 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include + +#include "timer.h" +#include "print.h" + +static HAL_AppTimer_t timerconf; + +uint16_t timer_value = 0; + +/* Timer callback called each 100 ms */ +void timer_callback(void) +{ + timer_value++; +} + +/* Timer start */ +void timer_start(void) +{ + timerconf.interval = COUNT_TIMER_GRANULARITY; + timerconf.mode = TIMER_REPEAT_MODE; + timerconf.callback = timer_callback; + timer_value = 0; + HAL_StartAppTimer(&timerconf); +} + +/* Timer stop */ +void timer_stop(void) +{ + HAL_StopAppTimer(&timerconf); +} + +/* This function returns the timer value in seconds */ +float timer_get_value_s(void) +{ + return (float)timer_value/(float)10; +} + + + diff --git a/digital/zigbit/tests/transfert_rate/master/timer.h b/digital/zigbit/tests/transfert_rate/master/timer.h new file mode 100644 index 00000000..ef21de7b --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/master/timer.h @@ -0,0 +1,39 @@ +/* timer.h */ +/* Timer ms. {{{ + * + * Copyright (C) 2013 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#define COUNT_TIMER_GRANULARITY 100L + +/* Timer callback called each 100 ms */ +void timer_callback(void); + +/* Timer start */ +void timer_start(void); + +/* Timer stop */ +void timer_stop(void); + +/* This function returns the timer value in seconds */ +float timer_get_value_s(void); diff --git a/digital/zigbit/tests/transfert_rate/slave/Makefile b/digital/zigbit/tests/transfert_rate/slave/Makefile new file mode 100644 index 00000000..7e1a47f1 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/Makefile @@ -0,0 +1,45 @@ +ifndef APB_REPO_PATH +$(error Please set your environment variable APB_REPO_PATH with the path where is installed your APB repository) +endif + +# Simulator makefile part +BASE = $(APB_REPO_PATH)/digital/avr +# HOST_PROGS = beacon +# beacon_SOURCES = main_simu.c position.c formula.c recovery.c update.c trust.c +# MODULES = math/fixed utils +# AVR_MCU = atmega1281 +# OPTIMIZE = -O2 -lm -DSIMULATOR +# include $(BASE)/make/Makefile.gen + + +# Bitcloud makefile part +BITCLOUD_BASE = $(APB_REPO_PATH)/digital/zigbit/bitcloud +BITCLOUD_MAKEFILE = $(BITCLOUD_BASE)/makefiles +BITCLOUD_STACK = $(BITCLOUD_BASE)/stack +BITCLOUD_COMMON_SOURCES = $(APB_REPO_PATH)/digital/zigbit/common +PROJECT_BASE = $(APB_REPO_PATH)/digital/zigbit/tests/transfert_rate/slave + +CONFIG_NAME = All_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +# CONFIG_NAME = Coordinator_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +# CONFIG_NAME = Router_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = All_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = Coordinator_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc +#CONFIG_NAME = Router_Sec_ZigBit_Atmega1281_Rf230_8Mhz_Gcc + +DEV2 := 0 + +simu:host + python simulator.py + +avr: + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) clean BITCLOUD_PATH=$(BITCLOUD_STACK) + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) all APP_NAME=transfert_rate_slave BITCLOUD_PATH=$(BITCLOUD_STACK) APB_AVR_PATH=$(BASE) PROJECT_BASE=$(PROJECT_BASE) BITCLOUD_COMMON_SOURCES=$(BITCLOUD_COMMON_SOURCES) + +flash: + make avr + $(APB_REPO_PATH)/digital/dev2/tools/dev2ctl.py -s 1 + avrdude -c stk500v2 -P /dev/ttyUSB1 -p atmega1281 -B3 -U flash:w:obj/transfert_rate_slave.hex + +clean: + $(MAKE) -C $(BITCLOUD_MAKEFILE) -f Makefile_$(CONFIG_NAME) clean APP_NAME=transfert_rate_slave PROJECT_BASE=$(PROJECT_BASE) BITCLOUD_PATH=$(BITCLOUD_STACK) + diff --git a/digital/zigbit/tests/transfert_rate/slave/atmega1281.ld b/digital/zigbit/tests/transfert_rate/slave/atmega1281.ld new file mode 100644 index 00000000..056e2cad --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/atmega1281.ld @@ -0,0 +1,97 @@ +OUTPUT_FORMAT("elf32-avr") +OUTPUT_ARCH(avr:5) + +MEMORY +{ + text (rx) : ORIGIN = 0x00000000, LENGTH = 128K + data (rw!x) : ORIGIN = 0x00800200, LENGTH = 8K - 500 /* leave 500 bytes for stack */ + eeprom (rw!x) : ORIGIN = 0x00810000, LENGTH = 4K +} + +SECTIONS +{ + .text : + { + PROVIDE(__text_start = .); + + *(.vectors) + KEEP(*(.vectors)) + + *(.progmem.gcc*) + *(.progmem*) + . = ALIGN(2); + + *(.trampolines*) + *(.jumptables*) + *(.lowtext*) + + *(.init0) + KEEP (*(.init0)) + *(.init1) + KEEP (*(.init1)) + *(.init2) + KEEP (*(.init2)) + *(.init3) + KEEP (*(.init3)) + *(.init4) + KEEP (*(.init4)) + *(.init5) + KEEP (*(.init5)) + *(.init6) + KEEP (*(.init6)) + *(.init7) + KEEP (*(.init7)) + *(.init8) + KEEP (*(.init8)) + + *(.text.main) + KEEP (*(.text.main)) + *(.text) + *(.text.*) + + PROVIDE(__text_end = .); + } > text + + .data : AT (ADDR(.text) + SIZEOF(.text)) + { + PROVIDE(__data_start = .); + *(.data*) + *(.rodata*) + *(.gnu.linkonce.d*) + . = ALIGN(2); + PROVIDE(__data_end = .); + } > data + + .bss __data_end : + { + PROVIDE(__bss_start = .); + *(.bss*) + *(COMMON) + PROVIDE(__bss_end = .); + } > data + + .noinit __bss_end : + { + *(.noinit*) + PROVIDE(__heap_start = .); + } > data + + __stack_start = .; + + __data_load_start = LOADADDR(.data); + __data_load_end = __data_load_start + SIZEOF(.data); + + .eeprom : + { + FILL(0xff) + BYTE(0xff) + . = . + LENGTH(eeprom)-1; + } > eeprom + + /DISCARD/ : + { + *(.init9) + *(.fini*) + } + +} diff --git a/digital/zigbit/tests/transfert_rate/slave/configuration.h b/digital/zigbit/tests/transfert_rate/slave/configuration.h new file mode 100644 index 00000000..155134ea --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/configuration.h @@ -0,0 +1,345 @@ +#ifndef _CONFIGURATION_H_ +#define _CONFIGURATION_H_ + +#include "apsCommon.h" +#include +#include + +/*----------------------------------------------- */ +/* Disables board-specific peripherals support */ +/*----------------------------------------------- */ +#define APP_DISABLE_BSP 1 + +#define AC_FREQ 8000000 + +/* ----------------------------------------------------------- */ +/* USART CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define APP_INTERFACE_USART 0x01 +#define APP_INTERFACE_VCP 0x02 +#define APP_INTERFACE_SPI 0x03 +#define APP_INTERFACE_UART 0x04 +#define APP_INTERFACE_USBFIFO 0x05 +#define APP_USART_RX_BUFFER_SIZE 10 /* Receive buffer size for USART. */ +#define APP_USART_TX_BUFFER_SIZE 300 /* Transmit buffer size for USART */ +#define APP_INTERFACE APP_INTERFACE_USART /* Defines primary serial interface type to be used by application */ +#define APP_USART_CHANNEL USART_CHANNEL_1 /* Defines USART interface name to be used by application.*/ + +/* ----------------------------------------------------------- */ +/* TWI CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define AC_BEACON_TWI_ADDRESS 10 /* TWI address */ +#define AC_TWI_DRIVER HARD /* Driver to implement TWI: HARD, SOFT, or USI. */ +#define AC_TWI_NO_INTERRUPT 0 /* Do not use interrupts. */ +#define AC_TWI_FREQ 100000 /* TWI frequency, should really be 100 kHz. */ +#define AC_TWI_SLAVE_ENABLE 1 /* Enable slave part. */ +#define AC_TWI_MASTER_ENABLE 0 /* Enable master part. */ +#define AC_TWI_SLAVE_POLLED 1 /* Use polled slave mode: received data is stored in a buffer which can be polled using twi_slave_poll. */ +#undef AC_TWI_SLAVE_RECV /* Slave reception callback to be defined by the user when not in polled mode. */ +#define AC_TWI_PULL_UP 0 /* Use internal pull up. */ +#define AC_TWI_SLAVE_RECV_BUFFER_SIZE 16 /* Slave reception buffer size. */ +#define AC_TWI_SLAVE_SEND_BUFFER_SIZE 32 /* Slave transmission buffer size. */ + + +/* ----------------------------------------------------------- */ +/* ZIGBEE CONFIGURATION */ +/* ----------------------------------------------------------- */ +#define AT25F2048 0x01 +#define AT45DB041 0x02 +#define AT25DF041A 0x03 + + + +#define APP_FRAGMENTATION 0 /* Enables or disables APS Fragmentation support. */ +#define APP_DETECT_LINK_FAILURE 1 /* Enable or disable link failure detection */ +#define APP_ENDPOINT 1 /* Endpoint will be useed */ +#define APP_PROFILE_ID 1 /* Profile Id will be used */ +#define APP_CLUSTER_ID 1 /* Cluster Id will be used */ +#define APP_JOINING_INDICATION_PERIOD 500L /* Period of blinking during starting network */ + + +// 32-bit mask of channels to be scanned before network is started. Channels that +// should be used are marked with logical 1 at corresponding bit location. +// Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a +// Valid channel numbers for 900 MHz band are 0x00 - 0x0a +// +// Notes: +// 1. for small amount of enabled channels it is more convinient to specify list +// of channels in the form of '(1ul << 0x0b)' +// 2. For 900 MHz band you also need to specify channel page +// +// Value range: 32-bit values: +// Valid channel numbers for 2.4 GHz band are 0x0b - 0x1a +// Valid channel numbers for 900 MHz band are 0x00 - 0x0a +// +// C-type: uint32_t +// Can be set: at any time before network start +// #define CS_CHANNEL_MASK (1L<<0x0f) +// #define CS_CHANNEL_MASK 0x3FFFC00L +#define CS_CHANNEL_MASK 0x00030000L + +// The parameter specifies the predefined extended PANID of the network to be +// formed (for the coordinator) or joined (for a router or an end device). For a +// router or an end device the parameter can equal 0 allowing them to join the +// first suitable network that they discover. +#define CS_EXT_PANID 0xAAAAAAAAAAAA1337LL + +// 64-bit Unique Identifier (UID) determining the device extended address. If this +// value is 0 stack will try to read hardware UID from external UID or EEPROM chip. +// at startup. Location of hardware UID is platform dependend and it may not be +// available on all platforms. If the latter case then UID value must be provided +// by user via this parameter. This parameter must be unique for each device in a +// network. +// Specifies short (network) address if CS_NWK_UNIQUE_ADDR equals 1 +// +// If static addressing is applied the stack uses the value of the parameter as a +// short address. Otherwise, the stack assigns the parameter to a randomly chosen +// value unique within the network. In both cases after the network start the +// parameter holds actual short address of the device. While the device is in the +// network its value must not be changed. + + +// The maximum number of direct children that a given device (the coordinator or a +// router) can have. +// +// The parameter is only enabled for routers and the coordinator. An end device +// can not have children. If an actual number of children reaches a parameter's +// value, the node will have not been able to accept any more children joining the +// network. The parameter can be set to 0 on a router thus preventing it from +// accepting any children and can be help form a desired network topology. For +// example, if the parameter is set to 0 on all routers, then the coordinator will +// be the only device that can have children and the network will have star +// topology. +#define CS_MAX_CHILDREN_AMOUNT 8 + +// The maximum number of routers among the direct children of the device +// +// The parameter determines how many routers the device can have as children. Note +// that the maximum number of end devices is equal to CS_MAX_CHILDREN_AMOUNT - +// CS_MAX_CHILDREN_ROUTER_AMOUNT. +#define CS_MAX_CHILDREN_ROUTER_AMOUNT 0 + +// Network depht limits amount of hops that packet may travel in the network. +// Actual maximum number of hops is network depth multiplied by 2. +// +// The parameter determines the maximum depth of a network tree formed by +// child-parent relationships between nodes. +// +// While joining the network the node receives beacon responses from potential +// parents containing their actual network depth and declines those which show +// values not less than the maximum network depth on the joining device. A +// potential parent will also reject a beacon from the joining device and will not +// sent a response if the joining device shows the network depth greater than it is +// allowed on the potential parent. This logic is enabled if the parameter value is +// not greater than 15. If its value is greater than 15, then device does not +// perform any checkings of the network depth, neither when joining a network nor +// when accepting other nodes as children. This allows forming long chains of +// devices across considerable distances. +#define CS_MAX_NETWORK_DEPTH 1 + +// Maximum amount of records in the Neighbor Table. +// +// The parameter determines the size of the neighbor table which is used to store +// beacon responses from nearby devices. The parameter puts an upper bound over the +// amount of child devices possible for the node. +#define CS_NEIB_TABLE_SIZE 10 + +// Maximum amount of records in the network Route Table. +// +// The parameter sets the maximum number of records that can be kept in the NWK +// route table. The table is used by NWK to store information about established +// routes. Each table entry specifies the next-hop short address for a route from +// the current node to a given destination node. The table is being filled +// automatically during route discovery. An entry is added when a route is +// discovered. +#define CS_ROUTE_TABLE_SIZE 8 + +// The parameter specifies the TX power of the transceiver device, is measured in +// dBm(s). After the node has entered the network the value can only be changed via +// the ZDO_SetTxPowerReq() function. +// +// Value range: depends on the hardware. Transmit power must be in the range from +// -17 to 3 dBm for AT86RF231, AT86RF230 and AT86RF230B. For AT86RF212 transmit +// power must be in the range from -11 to 11 dBm. +#define CS_RF_TX_POWER 3 + +//----------------------------------------------- +//STANDARD_SECURITY_MODE +//----------------------------------------------- +#ifdef STANDARD_SECURITY_MODE + // The parameter is used to determine the security type. + // + // Value range: 0,3 - for standard security; 1,2 - for high security. + // 0 - network key is preconfigured ; + // 1 - network join without master key, but with a trust center link key, which + // must be set via APS_SetLinkKey(); + // 2 - network join employs a master key, which must be set APS_SetMasterKey(); + // 3 - network key is no preconfigured, but rather received from the trust center + // in an unencrypted frame. (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) + #error APP_MAX_PACKET_SIZE must be less or equal to (CS_APS_MAX_BLOCKS_AMOUNT * APS_MAX_ASDU_SIZE) + #endif +#else + #if APP_APS_PAYLOAD_SIZE > APS_MAX_ASDU_SIZE + #error APP_APS_PAYLOAD_SIZE must be less or equal to APS_MAX_ASDU_SIZE + #endif +#endif + + +// Common application state definition +typedef enum +{ + APP_INITIAL_STATE, // Initial state + APP_NETWORK_JOIN_REQUEST, + APP_NETWORK_JOINING_STATE, // Attempting join the network + APP_NETWORK_JOINED_STATE, // Successfully joined + APP_NETWORK_LEAVING_STATE, // Leaving from the network + APP_ERROR_STATE // Error state (runtime error occured) +} AppState_t; + +// Network data transmission state +typedef enum +{ + APP_DATA_TRANSMISSION_SENDING_STATE, // APS Data Request was not sent yet + APP_DATA_TRANSMISSION_BUSY_STATE, // APS Data Request was sent (confirm waiting) + APP_DATA_TRANSMISSION_WAIT_STATE, // Waiting a data block from USART + APP_DATA_TRANSMISSION_READY_STATE, // Ready to send new APS Data Request + APP_DATA_TRANSMISSION_STOP_STATE // Inter-frame delay +} AppDataTransmissionState_t; + + +#endif // _CONFIGURATION_H_ diff --git a/digital/zigbit/tests/transfert_rate/slave/debug_avr.c b/digital/zigbit/tests/transfert_rate/slave/debug_avr.c new file mode 100644 index 00000000..a7b213c0 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/debug_avr.c @@ -0,0 +1,83 @@ +/* debug_avr.c */ +/* Beacon debug interface. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include +#include + +#include "configuration.h" +#include "print.h" +#include "debug_avr.h" +#include "network.h" +#include "network_specific.h" +#include "reset.h" +#include "timer.h" + +HAL_UsartDescriptor_t appUsartDescriptor; // USART descriptor (required by stack) + +uint8_t usartRxBuffer[APP_USART_RX_BUFFER_SIZE]; // USART Rx buffer +uint8_t usartTxBuffer[APP_USART_TX_BUFFER_SIZE]; // USART Tx buffer + +/* This function initializes the USART interface for debugging on avr */ + void initSerialInterface(void) + { + appUsartDescriptor.tty = USART_CHANNEL; + appUsartDescriptor.mode = USART_MODE_ASYNC; + appUsartDescriptor.baudrate = USART_BAUDRATE_250000; + appUsartDescriptor.dataLength = USART_DATA8; + appUsartDescriptor.parity = USART_PARITY_EVEN; + appUsartDescriptor.stopbits = USART_STOPBIT_1; + appUsartDescriptor.rxBuffer = usartRxBuffer; + appUsartDescriptor.rxBufferLength = sizeof(usartRxBuffer); + appUsartDescriptor.txBuffer = NULL; // use callback mode + appUsartDescriptor.txBufferLength = 0; + appUsartDescriptor.rxCallback = usartRXCallback; + appUsartDescriptor.txCallback = usartTXCallback; + appUsartDescriptor.flowControl = USART_FLOW_CONTROL_NONE; + OPEN_USART(&appUsartDescriptor); + } + + uint8_t rxBuffer; + +/* RX USART Callback */ +void usartRXCallback(uint16_t bytesToRead) +{ + + /* Read RX buffer from HAL */ + READ_USART(&appUsartDescriptor,&rxBuffer,bytesToRead); + + switch(rxBuffer) + { + case 'r': + reset_avr(); + break; + case 'f': + timer_start(); + network_send_buffer_transfert_rate(usartRxBuffer,1024); + break; + /* Default */ + default : + uprintf(" ?? Unknown command ??\r\n"); + break; + } +} diff --git a/digital/zigbit/tests/transfert_rate/slave/debug_avr.h b/digital/zigbit/tests/transfert_rate/slave/debug_avr.h new file mode 100644 index 00000000..4d7a1720 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/debug_avr.h @@ -0,0 +1,50 @@ +/* debug_avr.h */ +/* Macro for debug traces for avr target. {{{ + * + * Copyright (C) 2011 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#ifndef _DEBUG_AVR_H +#define _DEBUG_AVR_H + +#include +#include "configuration.h" + +#define DEBUG_TASK_PERIOD 100L + +/* This function initializes the USART interface for debugging on avr */ +void initSerialInterface(void); + +/* RX USART Callback */ +void usartRXCallback(uint16_t bytesToRead); + +/* This function starts the debug task */ +void debug_start_stop_task(void); + +/* Debug task callback */ +void debug_task(void); + +void debug_set_TRmode(uint8_t value); + +uint8_t debug_get_TRmode(void); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/slave/led.c b/digital/zigbit/tests/transfert_rate/slave/led.c new file mode 100644 index 00000000..0f82ba78 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/led.c @@ -0,0 +1,135 @@ +/* led.c */ +/* Led management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include "led.h" + +static HAL_AppTimer_t delayTimer; + + +/* This function display a combination of led according the the given state */ +void led_display_state(int state) +{ + switch(state) + { + case APP_INITIAL_STATE: + case APP_NETWORK_JOINING_STATE: + led_on(1); + led_off(2); + break; + case APP_NETWORK_JOINED_STATE: + led_on(1); + led_on(2); + default: + break; + } +} + + +/* This function initializes the leds*/ +void init_led(void) +{ + /*D5/D6/D7 are configured in output */ + DDRD = 0xE0; +} + +/* This function activates a specific led */ +void led_on(int number) +{ + switch(number) + { + case 1: + PORTD|=0x20; + break; + case 2: + PORTD|=0x40; + break; + case 3: + PORTD|=0x80; + break; + default: + break; + } +} + +/* This function deactivates a specific led*/ +void led_off(int number) +{ + switch(number) + { + case 1: + PORTD&=0xDF; + break; + case 2: + PORTD&=0xBF; + break; + case 3: + PORTD&=0x7F; + break; + default: + break; + } +} + +/* This function inverse the state of a specific led*/ +void led_inverse(int number) +{ + switch(number) + { + case 1: + PORTD^=0x20; + break; + case 2: + PORTD^=0x40; + break; + case 3: + PORTD^=0x80; + break; + default: + break; + } +} + +/* This function enables the timer used by the network blink status led */ +void led_start_blink(void) +{ + delayTimer.interval = APP_JOINING_INDICATION_PERIOD; + delayTimer.mode = TIMER_REPEAT_MODE; + delayTimer.callback = led_network_status_blink_callback; + HAL_StartAppTimer(&delayTimer); +} + +/* This function disables the timer used by the network blink status led */ +void led_stop_blink(void) +{ + HAL_StopAppTimer(&delayTimer); + led_on(1); +} + +/* Led blink callback*/ +void led_network_status_blink_callback(void) +{ + led_inverse(1); +} diff --git a/digital/zigbit/tests/transfert_rate/slave/led.h b/digital/zigbit/tests/transfert_rate/slave/led.h new file mode 100644 index 00000000..d49196fe --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/led.h @@ -0,0 +1,54 @@ +/* led.h */ +/* Led management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#ifndef _LED_H +#define _LED_H + +#define APP_JOINING_INDICATION_PERIOD 500L // Period of blinking during starting network + +/* This function initializes the leds*/ +void init_led(void); + +/* This function activates a specific led */ +void led_on(int number); + +/* This function deactivates a specific led*/ +void led_off(int number); + +/* This function inverse the state of a specific led*/ +void led_inverse(int number); + +/* This function display a combination of led according the the given state */ +void led_display_state(int state); + +/* This function enables the timer used by the network blink status led */ +void led_start_blink(void); + +/* This function disables the timer used by the network blink status led */ +void led_stop_blink(void); + +/* Led blink callback*/ +void led_network_status_blink_callback(void); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/slave/main_avr.c b/digital/zigbit/tests/transfert_rate/slave/main_avr.c new file mode 100644 index 00000000..693a8c33 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/main_avr.c @@ -0,0 +1,87 @@ +/* main_avr.c */ +/* Beacon State Machine & Main. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include "configuration.h" +#include "debug_avr.h" +#include "network.h" +#include "led.h" +#include "uid.h" + +static uint8_t uid; + +void APL_TaskHandler(void) +{ + switch (network_get_state()) + { + case APP_INITIAL_STATE: + + /* Init Led */ + init_led(); + + /* Init Serial Interface for debug */ + initSerialInterface(); + + uid = get_uid(); + + /* Init network */ + uid = 2; + network_init(uid); + + network_set_state(APP_NETWORK_JOIN_REQUEST); + break; + case APP_NETWORK_JOIN_REQUEST: + + /* Activate the network status led blink */ + led_start_blink(); + + /* St art network */ + network_start(); + + network_set_state(APP_NETWORK_JOINING_STATE); + + case APP_NETWORK_JOINING_STATE: + break; + case APP_NETWORK_LEAVING_STATE: + break; + case APP_NETWORK_JOINED_STATE: + led_stop_blink(); + break; + default: + break; + } + SYS_PostTask(APL_TASK_ID); +} + +int main(void) +{ + SYS_SysInit(); + for(;;) + { + SYS_RunTask(); + } +} + + diff --git a/digital/zigbit/tests/transfert_rate/slave/network_specific.c b/digital/zigbit/tests/transfert_rate/slave/network_specific.c new file mode 100644 index 00000000..4a318b3b --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/network_specific.c @@ -0,0 +1,122 @@ +/* network.c */ +/* Beacon network management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#include +#include + +#include "configuration.h" +#include "network.h" +#include "network_specific.h" +#include "print.h" +#include "timer.h" + +AppMessageBuffer_t zigbit_tx_buffer; + +extern APS_RegisterEndpointReq_t endpointParams; +extern APS_DataReq_t network_config; + + + + + +/* Specific callback after data packet sent */ +void network_specific_DataConfcallback(void) +{ + static uint16_t count = 0; + if(count < PACKET_NUMBER) + { + if(network_send_buffer_transfert_rate(NULL,0) == 1) + { + network_send_buffer_transfert_rate(NULL,0); + count++; + uprintf("."); + } + } + else + { + timer_stop(); + uprintf("\r\nTemps ecoule = %.2f s, Baudrate = %.2f ko/s\r\n",timer_get_value_s(),(float)1024*(float)PACKET_NUMBER/timer_get_value_s()/1000); + } +} + + +/* This function sends a specified buffer */ +uint8_t network_send_buffer_transfert_rate(uint8_t * buffer_in,uint16_t size) +{ + static uint8_t * buffer; + static uint16_t buffer_size; + static uint16_t offset; + uint8_t ASDUsize; + uint16_t delta; + + if((buffer_in != NULL) && (size != 0)) + { + buffer_size = size; + buffer = buffer_in; + offset = 0; + } + else + { + if(offset == buffer_size) + { + offset=0; + return 1; + } + } + + if(network_get_state() == APP_NETWORK_JOINED_STATE) + { + /* Configure the message structure */ + network_config.dstAddrMode = APS_SHORT_ADDRESS; // Short addressing mode + network_config.dstAddress.shortAddress = 0x00; // Destination address + network_config.profileId = APP_PROFILE_ID; // Profile ID + network_config.dstEndpoint = APP_ENDPOINT; // Desctination endpoint + network_config.clusterId = APP_CLUSTER_ID; // Desctination cluster ID + network_config.srcEndpoint = APP_ENDPOINT; // Source endpoint + network_config.asdu = (uint8_t*) &zigbit_tx_buffer.message; // application message pointer + network_config.txOptions.acknowledgedTransmission = 0; // Acknowledged transmission enabled + network_config.radius = 0; // Use maximal possible radius + network_config.APS_DataConf = APS_DataConf; // Confirm handler Z + + delta = buffer_size - offset; + + if(delta > APP_MAX_PACKET_SIZE) + ASDUsize = APP_MAX_PACKET_SIZE; + else + ASDUsize = delta; + + memcpy(zigbit_tx_buffer.message.data,buffer+offset,ASDUsize); + offset+=ASDUsize; + + /* Bitcloud sending request */ + network_set_transmission_state(APP_DATA_TRANSMISSION_WAIT_STATE); + network_config.asduLength = ASDUsize + sizeof(zigbit_tx_buffer.message.messageId); // actual application message length + + network_start_transmission(); + } + return 0; +} + diff --git a/digital/zigbit/tests/transfert_rate/slave/network_specific.h b/digital/zigbit/tests/transfert_rate/slave/network_specific.h new file mode 100644 index 00000000..c0cb5d6a --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/network_specific.h @@ -0,0 +1,42 @@ +/* network.h */ +/* Beacon network management. {{{ + * + * Copyright (C) 2012 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#ifndef _NETWORK_SPECIFIC_H +#define _NETWORK_SPECIFIC_H + +#include +#include "network.h" + +#define NETWORK_ACTIVITY_LED 2 +#define PACKET_NUMBER 200 + + +/* Specific callback after data packet sent */ +void network_specific_DataConfcallback(void); + +/* This function sends a specified buffer */ +uint8_t network_send_buffer_transfert_rate(uint8_t * buffer_in,uint16_t size); + +#endif diff --git a/digital/zigbit/tests/transfert_rate/slave/timer.c b/digital/zigbit/tests/transfert_rate/slave/timer.c new file mode 100644 index 00000000..74706c52 --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/timer.c @@ -0,0 +1,64 @@ +/* timer.c */ +/* Timer ms. {{{ + * + * Copyright (C) 2013 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include + +#include "timer.h" +#include "print.h" + +static HAL_AppTimer_t timerconf; + +uint16_t timer_value = 0; + +/* Timer callback called each 100 ms */ +void timer_callback(void) +{ + timer_value++; +} + +/* Timer start */ +void timer_start(void) +{ + timerconf.interval = COUNT_TIMER_GRANULARITY; + timerconf.mode = TIMER_REPEAT_MODE; + timerconf.callback = timer_callback; + timer_value = 0; + HAL_StartAppTimer(&timerconf); +} + +/* Timer stop */ +void timer_stop(void) +{ + HAL_StopAppTimer(&timerconf); +} + +/* This function returns the timer value in seconds */ +float timer_get_value_s(void) +{ + return (float)timer_value/(float)10; +} + + + diff --git a/digital/zigbit/tests/transfert_rate/slave/timer.h b/digital/zigbit/tests/transfert_rate/slave/timer.h new file mode 100644 index 00000000..ef21de7b --- /dev/null +++ b/digital/zigbit/tests/transfert_rate/slave/timer.h @@ -0,0 +1,39 @@ +/* timer.h */ +/* Timer ms. {{{ + * + * Copyright (C) 2013 Florent Duchon + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include +#define COUNT_TIMER_GRANULARITY 100L + +/* Timer callback called each 100 ms */ +void timer_callback(void); + +/* Timer start */ +void timer_start(void); + +/* Timer stop */ +void timer_stop(void); + +/* This function returns the timer value in seconds */ +float timer_get_value_s(void); -- cgit v1.2.3