MCU driver/HAL for the Picocell Gateway concentrator board. The firmware implements either a USB CDC protocol or a UART protocol to bridge commands coming from host to the SX1308 SPI interface.

Committer:
dgabino
Date:
Wed Apr 11 14:42:47 2018 +0000
Revision:
0:c76361bd82e8
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dgabino 0:c76361bd82e8 1 /*
dgabino 0:c76361bd82e8 2 / ____) _ | |
dgabino 0:c76361bd82e8 3 ( (____ _____ ____ _| |_ _____ ____| |__
dgabino 0:c76361bd82e8 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
dgabino 0:c76361bd82e8 5 _____) ) ____| | | || |_| ____( (___| | | |
dgabino 0:c76361bd82e8 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
dgabino 0:c76361bd82e8 7 (C)2017 Semtech
dgabino 0:c76361bd82e8 8
dgabino 0:c76361bd82e8 9 */
dgabino 0:c76361bd82e8 10
dgabino 0:c76361bd82e8 11 #include "mbed.h"
dgabino 0:c76361bd82e8 12 #include "usb_device.h"
dgabino 0:c76361bd82e8 13 #include "usbd_cdc_if.h"
dgabino 0:c76361bd82e8 14 #include "string.h"
dgabino 0:c76361bd82e8 15 #include "CmdUSB.h"
dgabino 0:c76361bd82e8 16 #include "board.h"
dgabino 0:c76361bd82e8 17
dgabino 0:c76361bd82e8 18 #include "loragw_reg.h"
dgabino 0:c76361bd82e8 19
dgabino 0:c76361bd82e8 20 CMDMANAGER CmdManager(PA_9, PA_10);
dgabino 0:c76361bd82e8 21
dgabino 0:c76361bd82e8 22 void Error_Handler(void);
dgabino 0:c76361bd82e8 23
dgabino 0:c76361bd82e8 24 #if DEBUG_MAIN == 1
dgabino 0:c76361bd82e8 25 #define DEBUG_MSG(str) pc.printf(str)
dgabino 0:c76361bd82e8 26 #define DEBUG_PRINTF(fmt, args...) pc.printf("%s:%d: "fmt, __FUNCTION__, __LINE__, args)
dgabino 0:c76361bd82e8 27 #define DEBUG_ARRAY(a,b,c) for(a=0;a!=0;){}
dgabino 0:c76361bd82e8 28 #define CHECK_NULL(a) if(a==NULL){return LGW_HAL_ERROR;}
dgabino 0:c76361bd82e8 29 #else
dgabino 0:c76361bd82e8 30 #define DEBUG_MSG(str)
dgabino 0:c76361bd82e8 31 #define DEBUG_PRINTF(fmt, args...)
dgabino 0:c76361bd82e8 32 #define DEBUG_ARRAY(a,b,c) for(a=0;a!=0;){}
dgabino 0:c76361bd82e8 33 #define CHECK_NULL(a) if(a==NULL){return LGW_HAL_ERROR;}
dgabino 0:c76361bd82e8 34 #endif
dgabino 0:c76361bd82e8 35
dgabino 0:c76361bd82e8 36 void Error_Handler(void) {
dgabino 0:c76361bd82e8 37 DEBUG_MSG("error\n");
dgabino 0:c76361bd82e8 38 }
dgabino 0:c76361bd82e8 39
dgabino 0:c76361bd82e8 40 int main(void) {
dgabino 0:c76361bd82e8 41
dgabino 0:c76361bd82e8 42 uint8_t dataflash;
dgabino 0:c76361bd82e8 43
dgabino 0:c76361bd82e8 44 /* Check if it is requested to jump to the bootloader (for reflashing...) */
dgabino 0:c76361bd82e8 45 dataflash = *(uint8_t *)DATA_EEPROM_BASE;
dgabino 0:c76361bd82e8 46 if (dataflash == GOTO_BOOTLOADER) {
dgabino 0:c76361bd82e8 47 FLASH_Prog(DATA_EEPROM_BASE, 0xFF);
dgabino 0:c76361bd82e8 48 ((void (*)(void)) * ((uint32_t*) BOOTLOADER_ADDR))();
dgabino 0:c76361bd82e8 49 }
dgabino 0:c76361bd82e8 50
dgabino 0:c76361bd82e8 51 /* Initialize the concentrator */
dgabino 0:c76361bd82e8 52 lgw_connect();
dgabino 0:c76361bd82e8 53 CmdManager.Init();
dgabino 0:c76361bd82e8 54
dgabino 0:c76361bd82e8 55 /* Wait for commands coming from host */
dgabino 0:c76361bd82e8 56 while (1) {
dgabino 0:c76361bd82e8 57 CmdManager.ReceiveCmd();
dgabino 0:c76361bd82e8 58 if (CmdManager.DecodeCmd()) {
dgabino 0:c76361bd82e8 59 CmdManager.TransmitCmd();
dgabino 0:c76361bd82e8 60 }
dgabino 0:c76361bd82e8 61 }
dgabino 0:c76361bd82e8 62 }