/** * \file main.c * * \brief LORAWAN Parser Application * * * Copyright (c) 2018 Microchip Technology Inc. and its subsidiaries. * * \asf_license_start * * \page License * * Subject to your compliance with these terms, you may use Microchip * software and any derivatives exclusively with Microchip products. * It is your responsibility to comply with third party license terms applicable * to your use of third party software (including open source software) that * may accompany Microchip software. * * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. * * \asf_license_stop * */ /****************************** NOTES **************************************/ //Guidance for design, build, and use of this firmware is available: //https://www.github.com/MicrochipTech/atsamr34_lorawan_rn_parser/tree/master/01_quick_start_guide/ //https://www.github.com/MicrochipTech/atsamr34_lorawan_rn_parser/tree/master/02_command_guide/ /****************************** INCLUDES **************************************/ #include "system_assert.h" #include "sw_timer.h" #include "system_low_power.h" #include "radio_interface.h" #include "radio_driver_hal.h" #include "lorawan.h" #include "sys.h" #include "sio2host.h" #include "parser.h" #include "parser_tsp.h" #include "parser_system.h" #include "system_init.h" #include "aes_engine.h" #ifdef CONF_PMM_ENABLE #include "sleep_timer.h" #endif /* CONF_PMM_ENABLE */ #if (ENABLE_PDS == 1) #include "pds_interface.h" #endif #include "sal.h" #include "edbg_eui.h" /************************** macro definition ***********************************/ /************************** Global variables ***********************************/ /****************************** PROTOTYPES *************************************/ SYSTEM_TaskStatus_t APP_TaskHandler(void); #if (_DEBUG_ == 1) static void assertHandler(SystemAssertLevel_t level, uint16_t code); #endif /****************************** FUNCTIONS *************************************/ static void print_reset_causes(void) { enum system_reset_cause rcause = system_get_reset_cause(); printf("\r\nLast reset cause: "); if(rcause & (1 << 6)) { printf("System Reset Request\r\n"); } if(rcause & (1 << 5)) { printf("Watchdog Reset\r\n"); } if(rcause & (1 << 4)) { printf("External Reset\r\n"); } if(rcause & (1 << 2)) { printf("Brown Out 33 Detector Reset\r\n"); } if(rcause & (1 << 1)) { printf("Brown Out 12 Detector Reset\r\n"); } if(rcause & (1 << 0)) { printf("Power-On Reset\r\n"); } } #if (_DEBUG_ == 1) static void assertHandler(SystemAssertLevel_t level, uint16_t code) { printf("\r\n%04x\r\n", code); (void)level; } #endif /* #if (_DEBUG_ == 1) */ /** * \mainpage * \section preface Preface * This is the reference manual for the LORAWAN Parser Application of EU Band */ int main(void) { system_init(); delay_init(); board_init(); INTERRUPT_GlobalInterruptEnable(); sio2host_init(); print_reset_causes(); #if (_DEBUG_ == 1) SYSTEM_AssertSubscribe(assertHandler); #endif /* Configure board button as external interrupt pin */ configure_extint(); /* Register External Interrupt callback */ configure_eic_callback(); printf("LoRaWAN Stack UP\r\n"); HAL_RadioInit(); // Initialize AES only (crypto is on-demand) SAL_Init(false) ; // Read edbg eui only once and store in ram edbg_eui_read() ; // Initialize Timers SystemTimerInit(); #ifdef CONF_PMM_ENABLE SleepTimerInit(); #endif /* CONF_PMM_ENABLE */ #if (ENABLE_PDS == 1) PDS_Init(); #endif Stack_Init(); Parser_Init(); Parser_SetConfiguredJoinParameters(0x01); Parser_GetSwVersion(aParserData); Parser_TxAddReply((char *)aParserData, (uint16_t)strlen((char *)aParserData)); while (1) { parser_serial_data_handler(); SYSTEM_RunTasks(); } } SYSTEM_TaskStatus_t APP_TaskHandler(void) { Parser_Main(); return SYSTEM_TASK_SUCCESS; } /** End of File */