Europalab Devices produces a LoRaWAN transmitting client node, specialised for higher research of actuator and sensor assisted IoT networks. https://dev.europalab.com/nlnet/20200000/
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

166 řádky
4.6KB

  1. /**
  2. * \file main.c
  3. *
  4. * \brief Main file of LoRa Simple Example P2P.
  5. *
  6. * Copyright (c) 2019 Microchip Technology Inc. and its subsidiaries.
  7. *
  8. * \asf_license_start
  9. *
  10. * \page License
  11. *
  12. * Subject to your compliance with these terms, you may use Microchip
  13. * software and any derivatives exclusively with Microchip products.
  14. * It is your responsibility to comply with third party license terms applicable
  15. * to your use of third party software (including open source software) that
  16. * may accompany Microchip software.
  17. *
  18. * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
  19. * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
  20. * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
  21. * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
  22. * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
  23. * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
  24. * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
  25. * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
  26. * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
  27. * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  28. * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  29. *
  30. * \asf_license_stop
  31. *
  32. */
  33. /****************************** NOTES **************************************/
  34. //Guidance for design, build, and use of this firmware is available:
  35. //https://www.github.com/MicrochipTech/atsamr34_long_range_p2p/
  36. /************************ HEADERS ****************************************/
  37. #include "task.h"
  38. #include "asf.h"
  39. #include "sio2host.h"
  40. #if defined(ENABLE_NETWORK_FREEZER)
  41. #include "pdsDataServer.h"
  42. #include "wlPdsTaskManager.h"
  43. #endif
  44. #include "system_task_manager.h"
  45. #include "system_init.h"
  46. #include "sw_timer.h"
  47. #if (BOARD == SAMR34_XPLAINED_PRO)
  48. #include "edbg-eui.h"
  49. #endif
  50. #if (BOARD == SAMR34_SENDCOMM)
  51. #define SENDCOMM_NOOP_WHATEVER
  52. #endif
  53. /************************** DEFINITIONS **********************************/
  54. /************************** PROTOTYPES **********************************/
  55. void ReadMacAddress(void);
  56. SYSTEM_TaskStatus_t APP_TaskHandler(void);
  57. int main ( void )
  58. {
  59. bool freezer_enable = false;
  60. irq_initialize_vectors();
  61. system_init();
  62. delay_init();
  63. cpu_irq_enable();
  64. #if defined (ENABLE_LCD)
  65. LCD_Initialize();
  66. #endif
  67. #if defined (ENABLE_CONSOLE)
  68. sio2host_init();
  69. #endif
  70. // Permanent address for the device is set in miwi_config.h and loaded in global variable myLongAddress
  71. // Define SYMBOL MACRO to populate myLongAddress from EDBG_EUI or from MODULE_EUI
  72. #if (EDBG_EUI_READ == 1 || MODULE_EUI_READ == 1)
  73. ReadMacAddress();
  74. #endif
  75. SystemTimerInit();
  76. // Demo Start Message
  77. DemoOutput_Greeting();
  78. #if (defined EXT_BOARD_OLED1_XPLAINED_PRO)
  79. Buttons_init();
  80. #endif
  81. #if defined(ENABLE_NETWORK_FREEZER)
  82. nvm_init(INT_FLASH);
  83. PDS_Init();
  84. demo_output_freezer_options();
  85. // User Selection to commission a network or use Freezer
  86. freezer_enable = freezer_feature();
  87. #endif
  88. // Commission the network
  89. Initialize_Demo(freezer_enable);
  90. /* Initialize demo application */
  91. Stack_Init();
  92. while(1)
  93. {
  94. SYSTEM_RunTasks();
  95. Run_Demo();
  96. }
  97. }
  98. /*********************************************************************//*
  99. \brief Application Task Handler
  100. ************************************************************************/
  101. SYSTEM_TaskStatus_t APP_TaskHandler(void)
  102. {
  103. Run_Demo();
  104. return SYSTEM_TASK_SUCCESS;
  105. }
  106. /*********************************************************************
  107. * Function: void ReadMacAddress()
  108. *
  109. * PreCondition: none
  110. *
  111. * Input: none
  112. *
  113. * Output: Reads MAC Address from SAM R34 XPRO EDBG or from
  114. * WLR089U0 Internal Flash
  115. * Side Effects: none
  116. *
  117. * Overview: Uses the MAC Address for addressing
  118. *
  119. * Note:
  120. **********************************************************************/
  121. void ReadMacAddress(void)
  122. {
  123. #if (BOARD == SAMR34_XPLAINED_PRO && defined(__SAMR34J18B__))
  124. // only applicable for SAM R34 Xpro with EDBG on-board
  125. uint8_t* peui64 = edbg_eui_read_eui64() ;
  126. for (uint8_t i = 0; i < MY_ADDRESS_LENGTH; i++)
  127. {
  128. myLongAddress[i] = peui64[MY_ADDRESS_LENGTH-i-1] ;
  129. }
  130. #elif (defined(__WLR089U0__))
  131. // applicable for module with WLR089 Xpro board or custom board
  132. #define NVM_UID_ADDRESS ((volatile uint16_t *)(0x0080400AU))
  133. uint8_t i = 0, j = 0 ;
  134. uint8_t peui64[8] ;
  135. for (i = 0; i < MY_ADDRESS_LENGTH; i += 2, j++)
  136. {
  137. peui64[i] = (NVM_UID_ADDRESS[j] & 0xFF) ;
  138. peui64[i + 1] = (NVM_UID_ADDRESS[j] >> 8) ;
  139. }
  140. for (i= 0; i < MY_ADDRESS_LENGTH; i++)
  141. {
  142. myLongAddress[i] = peui64[MY_ADDRESS_LENGTH-i-1] ;
  143. }
  144. #endif
  145. }