|
- /**
- * \file main.c
- *
- * \brief Serial Provisioning of LoRaWAN Demo Application
- *
- * Copyright (c) 2020 Europalab Devices ApS
- *
- * \asf_license_start
- *
- * \page License
- *
- * This file is part of Sendcomm.
- *
- * Sendcomm 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 3 of the License, or
- * (at your option) any later version.
- *
- * Sendcomm 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 Sendcomm. If not, see <https://www.gnu.org/licenses/>.
- *
- * \asf_license_stop
- *
- */
-
- /****************************** INCLUDES **************************************/
- #include "system_low_power.h"
- #include "radio_driver_hal.h"
- #include "lorawan.h"
- #include "sys.h"
- #include "system_init.h"
- #include "system_assert.h"
- #include "aes_engine.h"
- #include "enddevice_demo.h"
- #include "sio2host.h"
- #include "extint.h"
- #include "conf_app.h"
- #include "sw_timer.h"
- #ifdef CONF_PMM_ENABLE
- #include "pmm.h"
- #include "conf_pmm.h"
- #include "sleep_timer.h"
- #include "sleep.h"
- #endif
- #include "conf_sio2host.h"
- #if (ENABLE_PDS == 1)
- #include "pds_interface.h"
- #endif
- #if (CERT_APP == 1)
- #include "conf_certification.h"
- #include "enddevice_cert.h"
- #endif
- /************************** Macro definition ***********************************/
- /* Button debounce time in ms */
- #define APP_DEBOUNCE_TIME 50
- /************************** Global variables ***********************************/
- bool button_pressed = false;
- bool factory_reset = false;
- bool bandSelected = false;
- uint32_t longPress = 0;
- uint8_t demoTimerId = 0xFF;
- uint8_t lTimerId = 0xFF;
- extern bool certAppEnabled;
- #ifdef CONF_PMM_ENABLE
- bool deviceResetsForWakeup = false;
- #endif
- /************************** Extern variables ***********************************/
-
- /************************** Function Prototypes ********************************/
- static void driver_init(void);
-
- #if (_DEBUG_ == 1)
- static void assertHandler(SystemAssertLevel_t level, uint16_t code);
- #endif /* #if (_DEBUG_ == 1) */
-
- /*********************************************************************//**
- \brief Uninitializes app resources before going to low power mode
- *************************************************************************/
- #ifdef CONF_PMM_ENABLE
- static void app_resources_uninit(void);
- #endif
-
- /****************************** FUNCTIONS **************************************/
-
- static void print_reset_causes(void)
- {
- enum system_reset_cause rcause = system_get_reset_cause();
- printf("Last 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");
- }
- }
-
- #ifdef CONF_PMM_ENABLE
- static void appWakeup(uint32_t sleptDuration)
- {
- HAL_Radio_resources_init();
- sio2host_init();
- printf("\r\nsleep_ok %ld ms\r\n", sleptDuration);
-
- }
- #endif
-
- #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 Demo Application of EU Band
- */
- int main(void)
- {
- /* System Initialization */
- system_init();
- /* Initialize the delay driver */
- delay_init();
- /* Initialize the board target resources */
- board_init();
-
- INTERRUPT_GlobalInterruptEnable();
- /* Initialize Hardware and Software Modules */
- driver_init();
- /* Initialize the Serial Interface */
- sio2host_init();
-
- print_reset_causes();
- #if (_DEBUG_ == 1)
- SYSTEM_AssertSubscribe(assertHandler);
- #endif
- /* Initialize demo application */
- Stack_Init();
-
- SwTimerCreate(&demoTimerId);
- SwTimerCreate(&lTimerId);
-
- mote_demo_init();
-
- while (1)
- {
- serial_data_handler();
- SYSTEM_RunTasks();
- #ifdef CONF_PMM_ENABLE
- if (false == certAppEnabled)
- {
- if(bandSelected == true)
- {
- PMM_SleepReq_t sleepReq;
- /* Put the application to sleep */
- sleepReq.sleepTimeMs = DEMO_CONF_DEFAULT_APP_SLEEP_TIME_MS;
- sleepReq.pmmWakeupCallback = appWakeup;
- sleepReq.sleep_mode = CONF_PMM_SLEEPMODE_WHEN_IDLE;
- if (CONF_PMM_SLEEPMODE_WHEN_IDLE == SLEEP_MODE_STANDBY)
- {
- deviceResetsForWakeup = false;
- }
- if (true == LORAWAN_ReadyToSleep(deviceResetsForWakeup))
- {
- app_resources_uninit();
- if (PMM_SLEEP_REQ_DENIED == PMM_Sleep(&sleepReq))
- {
- HAL_Radio_resources_init();
- sio2host_init();
- /*printf("\r\nsleep_not_ok\r\n");*/
- }
- }
- }
- }
- #endif
- }
- }
-
- /* Initializes all the hardware and software modules used for Stack operation */
- static void driver_init(void)
- {
- /* Initialize the Radio Hardware */
- HAL_RadioInit();
- /* Initialize the AES Hardware Engine */
- AESInit();
- /* Initialize the Software Timer Module */
- SystemTimerInit();
- #ifdef CONF_PMM_ENABLE
- /* Initialize the Sleep Timer Module */
- SleepTimerInit();
- #endif
- #if (ENABLE_PDS == 1)
- /* PDS Module Init */
- PDS_Init();
- #endif
- }
-
- #ifdef CONF_PMM_ENABLE
- static void app_resources_uninit(void)
- {
- /* Disable USART TX and RX Pins */
- struct port_config pin_conf;
- port_get_config_defaults(&pin_conf);
- pin_conf.powersave = true;
- port_pin_set_config(HOST_SERCOM_PAD0_PIN, &pin_conf);
- port_pin_set_config(HOST_SERCOM_PAD1_PIN, &pin_conf);
- /* Disable UART module */
- sio2host_deinit();
- /* Disable Transceiver SPI Module */
- HAL_RadioDeInit();
- }
- #endif
- /**
- End of File
- */
|