From 1fa4caab2da5558efddd4a5dc892da5dea28921b Mon Sep 17 00:00:00 2001 From: Florent Duchon Date: Tue, 3 Apr 2012 18:33:33 +0200 Subject: digital/beacon: import debug and led management files --- digital/beacon/src/debug.c | 78 ++++++++++++++++++++++++++ digital/beacon/src/led.c | 137 +++++++++++++++++++++++++++++++++++++++++++++ digital/beacon/src/led.h | 54 ++++++++++++++++++ 3 files changed, 269 insertions(+) create mode 100644 digital/beacon/src/debug.c create mode 100644 digital/beacon/src/led.c create mode 100644 digital/beacon/src/led.h diff --git a/digital/beacon/src/debug.c b/digital/beacon/src/debug.c new file mode 100644 index 00000000..4b8b8c0b --- /dev/null +++ b/digital/beacon/src/debug.c @@ -0,0 +1,78 @@ +/* debug.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 "configuration.h" +#include "debug.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_38400; + 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 = NULL; + appUsartDescriptor.flowControl = USART_FLOW_CONTROL_NONE; + OPEN_USART(&appUsartDescriptor); + } + + +/* RX USART Callback */ +void usartRXCallback(uint16_t bytesToRead) +{ + uint8_t rxBuffer; + READ_USART(&appUsartDescriptor,&rxBuffer,1); + + switch(rxBuffer) + { + case 'o': + break; + /* Default */ + default : + uprintf(" ?? Unknown command ??\r\n"); + } +} +#include +/* This function sends data string via the USART interface */ +void uprintf(char *format, ...) +{ + va_list args; + va_start(args,format); + vsprintf(usartTxBuffer,format,args); + WRITE_USART(&appUsartDescriptor,usartTxBuffer,strlen(usartTxBuffer)); + va_end(args); +} diff --git a/digital/beacon/src/led.c b/digital/beacon/src/led.c new file mode 100644 index 00000000..8c4b765e --- /dev/null +++ b/digital/beacon/src/led.c @@ -0,0 +1,137 @@ +/* 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" + +// Timer indicating starting network during network joining. +// Also used as a delay timer between APS_DataConf and APS_DataReq. +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/beacon/src/led.h b/digital/beacon/src/led.h new file mode 100644 index 00000000..d49196fe --- /dev/null +++ b/digital/beacon/src/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 -- cgit v1.2.3