wayne roberts / Mbed OS LoRaWAN_singlechannel_endnode

Dependencies:   SX127x sx12xx_hal TSL2561

Committer:
dudmuck
Date:
Mon Jun 12 19:43:20 2017 +0000
Revision:
9:08692264148b
Parent:
7:e238827f0e47
Child:
10:00997daeb0c0
remove TYPE_ABZ preprocessor directive, instead use TARGET_DISCO_L072CZ_LRWAN1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 0:8f0d0ae0a077 1 /*
dudmuck 0:8f0d0ae0a077 2 / _____) _ | |
dudmuck 0:8f0d0ae0a077 3 ( (____ _____ ____ _| |_ _____ ____| |__
dudmuck 0:8f0d0ae0a077 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
dudmuck 0:8f0d0ae0a077 5 _____) ) ____| | | || |_| ____( (___| | | |
dudmuck 0:8f0d0ae0a077 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
dudmuck 0:8f0d0ae0a077 7 (C)2015 Semtech
dudmuck 0:8f0d0ae0a077 8
dudmuck 0:8f0d0ae0a077 9 Description: Target board general functions implementation
dudmuck 0:8f0d0ae0a077 10
dudmuck 0:8f0d0ae0a077 11 License: Revised BSD License, see LICENSE.TXT file include in the project
dudmuck 0:8f0d0ae0a077 12
dudmuck 0:8f0d0ae0a077 13 Maintainer: Miguel Luis and Gregory Cristian
dudmuck 0:8f0d0ae0a077 14 */
dudmuck 0:8f0d0ae0a077 15 #include "mbed.h"
dudmuck 0:8f0d0ae0a077 16 #include "board.h"
dudmuck 0:8f0d0ae0a077 17
dudmuck 3:aead8f8fdc1f 18 #if defined(ENABLE_SX1272)
dudmuck 3:aead8f8fdc1f 19 SX1272MB2xAS Radio( NULL );
dudmuck 3:aead8f8fdc1f 20 #elif defined(ENABLE_SX1276)
dudmuck 3:aead8f8fdc1f 21 SX1276MB1xAS Radio( NULL );
dudmuck 3:aead8f8fdc1f 22 #endif
dudmuck 0:8f0d0ae0a077 23
dudmuck 0:8f0d0ae0a077 24 /*!
dudmuck 0:8f0d0ae0a077 25 * Nested interrupt counter.
dudmuck 0:8f0d0ae0a077 26 *
dudmuck 0:8f0d0ae0a077 27 * \remark Interrupt should only be fully disabled once the value is 0
dudmuck 0:8f0d0ae0a077 28 */
dudmuck 0:8f0d0ae0a077 29 static uint8_t IrqNestLevel = 0;
dudmuck 0:8f0d0ae0a077 30
dudmuck 0:8f0d0ae0a077 31 void BoardDisableIrq( void )
dudmuck 0:8f0d0ae0a077 32 {
dudmuck 0:8f0d0ae0a077 33 __disable_irq( );
dudmuck 0:8f0d0ae0a077 34 IrqNestLevel++;
dudmuck 0:8f0d0ae0a077 35 }
dudmuck 0:8f0d0ae0a077 36
dudmuck 0:8f0d0ae0a077 37 void BoardEnableIrq( void )
dudmuck 0:8f0d0ae0a077 38 {
dudmuck 0:8f0d0ae0a077 39 IrqNestLevel--;
dudmuck 0:8f0d0ae0a077 40 if( IrqNestLevel == 0 )
dudmuck 0:8f0d0ae0a077 41 {
dudmuck 0:8f0d0ae0a077 42 __enable_irq( );
dudmuck 0:8f0d0ae0a077 43 }
dudmuck 0:8f0d0ae0a077 44 }
dudmuck 0:8f0d0ae0a077 45
dudmuck 0:8f0d0ae0a077 46 void BoardInit( void )
dudmuck 0:8f0d0ae0a077 47 {
dudmuck 0:8f0d0ae0a077 48 }
dudmuck 0:8f0d0ae0a077 49
dudmuck 0:8f0d0ae0a077 50 uint8_t BoardGetBatteryLevel( void )
dudmuck 0:8f0d0ae0a077 51 {
dudmuck 0:8f0d0ae0a077 52 return 0xFE;
dudmuck 0:8f0d0ae0a077 53 }
dudmuck 0:8f0d0ae0a077 54
dudmuck 0:8f0d0ae0a077 55 #ifdef TARGET_STM32L1 /* TARGET_NUCLEO_L152RE */
dudmuck 0:8f0d0ae0a077 56 #define ID1 ( 0x1ff800d0 )
dudmuck 0:8f0d0ae0a077 57 #define ID2 ( 0x1ff800d4 )
dudmuck 0:8f0d0ae0a077 58 #define ID3 ( 0x1ff800d4 )
dudmuck 0:8f0d0ae0a077 59 DigitalOut rx_debug_pin(PC_3);
dudmuck 0:8f0d0ae0a077 60 #elif defined(TARGET_STM32L0) /* TARGET_NUCLEO_L073RZ */
dudmuck 0:8f0d0ae0a077 61 #define ID1 ( 0x1ff80050 )
dudmuck 0:8f0d0ae0a077 62 #define ID2 ( 0x1ff80054 )
dudmuck 0:8f0d0ae0a077 63 #define ID3 ( 0x1ff80064 )
dudmuck 9:08692264148b 64 #ifdef TARGET_DISCO_L072CZ_LRWAN1
dudmuck 1:53c30224eda8 65 DigitalOut rx_debug_pin(PA_0);
dudmuck 1:53c30224eda8 66 #else
dudmuck 1:53c30224eda8 67 DigitalOut rx_debug_pin(PC_3);
dudmuck 1:53c30224eda8 68 #endif
dudmuck 0:8f0d0ae0a077 69 #else
dudmuck 0:8f0d0ae0a077 70 #error "provide signature address for target"
dudmuck 0:8f0d0ae0a077 71 #endif
dudmuck 0:8f0d0ae0a077 72
dudmuck 0:8f0d0ae0a077 73 void BoardGetUniqueId( uint8_t *id )
dudmuck 0:8f0d0ae0a077 74 {
dudmuck 0:8f0d0ae0a077 75 id[7] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 24;
dudmuck 0:8f0d0ae0a077 76 id[6] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 16;
dudmuck 0:8f0d0ae0a077 77 id[5] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 8;
dudmuck 0:8f0d0ae0a077 78 id[4] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) );
dudmuck 0:8f0d0ae0a077 79 id[3] = ( ( *( uint32_t* )ID2 ) ) >> 24;
dudmuck 0:8f0d0ae0a077 80 id[2] = ( ( *( uint32_t* )ID2 ) ) >> 16;
dudmuck 0:8f0d0ae0a077 81 id[1] = ( ( *( uint32_t* )ID2 ) ) >> 8;
dudmuck 0:8f0d0ae0a077 82 id[0] = ( ( *( uint32_t* )ID2 ) );
dudmuck 0:8f0d0ae0a077 83 }
dudmuck 0:8f0d0ae0a077 84
dudmuck 1:53c30224eda8 85 #define UART_TX_BUF_SIZE 256
dudmuck 1:53c30224eda8 86 char uart_tx_buf[UART_TX_BUF_SIZE];
dudmuck 1:53c30224eda8 87 unsigned uart_tx_buf_in, uart_tx_buf_out;
dudmuck 1:53c30224eda8 88 unsigned filled;
dudmuck 0:8f0d0ae0a077 89
dudmuck 1:53c30224eda8 90
dudmuck 1:53c30224eda8 91 #define PRINT_BUF_SIZE 96
dudmuck 1:53c30224eda8 92 int
dudmuck 1:53c30224eda8 93 isr_printf( const char* format, ... )
dudmuck 1:53c30224eda8 94 {
dudmuck 1:53c30224eda8 95 va_list arg;
dudmuck 1:53c30224eda8 96 char print_buf[PRINT_BUF_SIZE];
dudmuck 1:53c30224eda8 97 unsigned int i, printed_length;
dudmuck 1:53c30224eda8 98
dudmuck 1:53c30224eda8 99 va_start(arg, format);
dudmuck 1:53c30224eda8 100 printed_length = vsnprintf(print_buf, PRINT_BUF_SIZE, format, arg);
dudmuck 1:53c30224eda8 101 va_end(arg);
dudmuck 1:53c30224eda8 102
dudmuck 1:53c30224eda8 103 for (i = 0; i < printed_length; i ++) {
dudmuck 1:53c30224eda8 104 if (++filled >= UART_TX_BUF_SIZE) {
dudmuck 1:53c30224eda8 105 for (;;) __NOP();
dudmuck 1:53c30224eda8 106 }
dudmuck 1:53c30224eda8 107 uart_tx_buf[uart_tx_buf_in] = print_buf[i];
dudmuck 1:53c30224eda8 108 if (++uart_tx_buf_in == UART_TX_BUF_SIZE)
dudmuck 1:53c30224eda8 109 uart_tx_buf_in = 0;
dudmuck 1:53c30224eda8 110 }
dudmuck 1:53c30224eda8 111
dudmuck 1:53c30224eda8 112 return i;
dudmuck 1:53c30224eda8 113 }
dudmuck 1:53c30224eda8 114
dudmuck 7:e238827f0e47 115 RawSerial pc( USBTX, USBRX );
dudmuck 7:e238827f0e47 116
dudmuck 1:53c30224eda8 117 void bottom_half()
dudmuck 1:53c30224eda8 118 {
dudmuck 1:53c30224eda8 119 while (uart_tx_buf_in != uart_tx_buf_out) {
dudmuck 1:53c30224eda8 120 if (filled == 0) {
dudmuck 1:53c30224eda8 121 for (;;) __NOP();
dudmuck 1:53c30224eda8 122 } else
dudmuck 1:53c30224eda8 123 filled--;
dudmuck 1:53c30224eda8 124
dudmuck 1:53c30224eda8 125 pc.putc(uart_tx_buf[uart_tx_buf_out]);
dudmuck 1:53c30224eda8 126 if (++uart_tx_buf_out == UART_TX_BUF_SIZE)
dudmuck 1:53c30224eda8 127 uart_tx_buf_out = 0;
dudmuck 1:53c30224eda8 128 }
dudmuck 1:53c30224eda8 129 }