/** * \file main.c * * \brief Main file of LoRa Simple Example P2P. * * Copyright (c) 2019 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_long_range_p2p/ /************************ HEADERS ****************************************/ #include "task.h" #include "asf.h" #include "sio2host.h" #if defined(ENABLE_NETWORK_FREEZER) #include "pdsDataServer.h" #include "wlPdsTaskManager.h" #endif #include "system_task_manager.h" #include "system_init.h" #include "sw_timer.h" #if (BOARD == SAMR34_XPLAINED_PRO) #include "edbg-eui.h" #endif #if (BOARD == SAMR34_SENDCOMM) #define SENDCOMM_NOOP_WHATEVER #endif /************************** DEFINITIONS **********************************/ /************************** PROTOTYPES **********************************/ void ReadMacAddress(void); SYSTEM_TaskStatus_t APP_TaskHandler(void); int main ( void ) { bool freezer_enable = false; irq_initialize_vectors(); system_init(); delay_init(); cpu_irq_enable(); #if defined (ENABLE_LCD) LCD_Initialize(); #endif #if defined (ENABLE_CONSOLE) sio2host_init(); #endif // Permanent address for the device is set in miwi_config.h and loaded in global variable myLongAddress // Define SYMBOL MACRO to populate myLongAddress from EDBG_EUI or from MODULE_EUI #if (EDBG_EUI_READ == 1 || MODULE_EUI_READ == 1) ReadMacAddress(); #endif SystemTimerInit(); // Demo Start Message DemoOutput_Greeting(); #if (defined EXT_BOARD_OLED1_XPLAINED_PRO) Buttons_init(); #endif #if defined(ENABLE_NETWORK_FREEZER) nvm_init(INT_FLASH); PDS_Init(); demo_output_freezer_options(); // User Selection to commission a network or use Freezer freezer_enable = freezer_feature(); #endif // Commission the network Initialize_Demo(freezer_enable); /* Initialize demo application */ Stack_Init(); while(1) { SYSTEM_RunTasks(); Run_Demo(); } } /*********************************************************************//* \brief Application Task Handler ************************************************************************/ SYSTEM_TaskStatus_t APP_TaskHandler(void) { Run_Demo(); return SYSTEM_TASK_SUCCESS; } /********************************************************************* * Function: void ReadMacAddress() * * PreCondition: none * * Input: none * * Output: Reads MAC Address from SAM R34 XPRO EDBG or from * WLR089U0 Internal Flash * Side Effects: none * * Overview: Uses the MAC Address for addressing * * Note: **********************************************************************/ void ReadMacAddress(void) { #if (BOARD == SAMR34_XPLAINED_PRO && defined(__SAMR34J18B__)) // only applicable for SAM R34 Xpro with EDBG on-board uint8_t* peui64 = edbg_eui_read_eui64() ; for (uint8_t i = 0; i < MY_ADDRESS_LENGTH; i++) { myLongAddress[i] = peui64[MY_ADDRESS_LENGTH-i-1] ; } #elif (defined(__WLR089U0__)) // applicable for module with WLR089 Xpro board or custom board #define NVM_UID_ADDRESS ((volatile uint16_t *)(0x0080400AU)) uint8_t i = 0, j = 0 ; uint8_t peui64[8] ; for (i = 0; i < MY_ADDRESS_LENGTH; i += 2, j++) { peui64[i] = (NVM_UID_ADDRESS[j] & 0xFF) ; peui64[i + 1] = (NVM_UID_ADDRESS[j] >> 8) ; } for (i= 0; i < MY_ADDRESS_LENGTH; i++) { myLongAddress[i] = peui64[MY_ADDRESS_LENGTH-i-1] ; } #endif }