From 00ff6b17a273a7e6483996bcf6093794ad6725b0 Mon Sep 17 00:00:00 2001 From: "ian.lo" Date: Thu, 31 Aug 2023 19:28:48 +0800 Subject: [PATCH] This is RUI3 SDK inside RUI_4.0.2 release. --- boards.txt | 6 +- .../component/rui_v3_api/HardwareSerial.h | 23 - cores/nRF5/component/rui_v3_api/RAKLoRa.h | 62 --- cores/nRF5/component/rui_v3_api/RAKLorawan.h | 320 +------------- cores/nRF5/component/rui_v3_api/sleep.h | 32 -- .../service/battery/service_battery.c | 20 +- .../component/service/lora/service_lora.c | 86 +--- .../service/lora/service_lora_lptp.c | 10 +- .../component/service/lora/service_lora_p2p.c | 273 ++---------- .../component/service/lora/service_lora_p2p.h | 32 +- cores/nRF5/component/service/mode/cli/atcmd.c | 49 +-- .../service/mode/cli/atcmd_general.c | 12 +- .../service/mode/cli/atcmd_general.h | 2 +- .../service/mode/cli/atcmd_general_def.h | 2 +- .../service/mode/cli/atcmd_join_send.c | 36 +- .../component/service/mode/cli/atcmd_misc.c | 13 +- .../service/mode/cli/atcmd_multicast.c | 4 +- .../service/mode/cli/atcmd_nwk_management.c | 2 +- .../component/service/mode/cli/atcmd_p2p.c | 394 +----------------- .../component/service/mode/cli/atcmd_p2p.h | 4 - .../service/mode/cli/atcmd_p2p_def.h | 76 +--- .../service/mode/cli/atcmd_permission.h | 10 +- .../service/mode/cli/atcmd_serial_port.c | 8 +- .../service/mode/cli/atcmd_sleep_def.h | 14 - .../service/mode/cli/atcmd_supplement.c | 2 +- .../mode/protocol/service_mode_proto.c | 3 +- .../service_mode_proto_builtin_handler.c | 21 +- .../component/service/mode/service_mode.h | 2 - .../nRF5/component/service/nvm/service_nvm.c | 238 +++++++---- .../nRF5/component/service/nvm/service_nvm.h | 15 - .../runtimeConfig/service_runtimeConfig.c | 32 -- .../runtimeConfig/service_runtimeConfig.h | 39 -- cores/nRF5/component/udrv/adc/udrv_adc.h | 6 - .../component/udrv/powersave/udrv_powersave.h | 2 +- .../nRF5/component/udrv/system/udrv_system.h | 2 +- .../lora/LoRaMac-node-4.4.7/src/mac/LoRaMac.c | 2 +- .../src/mac/LoRaMacClassB.c | 2 +- .../src/mac/region/RegionAU915.c | 6 +- .../src/radio/sx126x/radio.c | 2 +- .../Environment_Detect/Environment_Detect.ino | 1 - .../LoRa/Smart_Farm/Smart_Farm.ino | 1 - .../Arduino_Advance_IO/Arduino_Advance_IO.ino | 1 - .../Example/Arduino_Analog/Arduino_Analog.ino | 1 - .../Arduino_Bit_And_Byte.ino | 1 - .../Arduino_Characters/Arduino_Characters.ino | 1 - .../Arduino_Digital/Arduino_Digital.ino | 1 - .../Arduino_Interrupt/Arduino_Interrupt.ino | 1 - .../Arduino_Led_Breathing.ino | 1 - .../Example/Arduino_Random/Arduino_Random.ino | 1 - .../Example/Arduino_Serial/Arduino_Serial.ino | 53 ++- .../Example/Arduino_Time/Arduino_Time.ino | 1 - .../Example/BLE_Beacon/BLE_Beacon.ino | 2 - .../BLE_Beacon_Custom_Payload.ino | 1 - .../BLE_Configuration/BLE_Configuration.ino | 1 - .../BLE_Custom_Service/BLE_Custom_Service.ino | 1 - .../Example/BLE_Scanner/BLE_Scanner.ino | 2 - .../examples/Example/BLE_Uart/BLE_Uart.ino | 1 - .../Example/LoRaWan_ABP/LoRaWan_ABP.ino | 34 +- .../LoRaWan_Class_B/LoRaWan_Class_B.ino | 24 +- .../Example/LoRaWan_Info/LoRaWan_Info.ino | 24 +- .../LoRaWan_Multicast/LoRaWan_Multicast.ino | 1 - .../Example/LoRaWan_OTAA/LoRaWan_OTAA.ino | 24 +- .../Example/NFC_APP_Record/NFC_APP_Record.ino | 1 - .../Example/NFC_AT_Command/NFC_AT_Command.ino | 4 +- .../Example/NFC_TXT_Record/NFC_TXT_Record.ino | 4 +- .../Example/NFC_URI_Record/NFC_URI_Record.ino | 3 +- .../examples/Example/RAK3401/RAK3401.ino | 13 +- .../examples/Example/RAK4631/RAK4631.ino | 8 +- .../examples/Example/RAK5010/RAK5010.ino | 13 +- .../System_ATCMD_Permission.ino | 1 - .../System_Custom_ATCMD.ino | 1 - .../Example/System_General/System_General.ino | 1 - .../System_Multitasking.ino | 252 +++++++++++ .../System_Powersave/System_Powersave.ino | 11 - .../System_Serial_Lock/System_Serial_Lock.ino | 3 +- .../Example/System_Timer/System_Timer.ino | 1 - libraries/RUI_V3_examples/library.properties | 2 +- platform.txt | 4 +- system/WisCore_RAK3401_Board/libboot.a | Bin 22218 -> 22218 bytes system/WisCore_RAK3401_Board/librui_v3_api.a | Bin 141960 -> 249040 bytes system/WisCore_RAK3401_Board/libudrv_adc.a | Bin 3762 -> 3762 bytes system/WisCore_RAK3401_Board/libudrv_ble.a | Bin 15544 -> 15544 bytes system/WisCore_RAK3401_Board/libudrv_delay.a | Bin 3014 -> 3014 bytes system/WisCore_RAK3401_Board/libudrv_dfu.a | Bin 2020 -> 2020 bytes system/WisCore_RAK3401_Board/libudrv_flash.a | Bin 5358 -> 4964 bytes system/WisCore_RAK3401_Board/libudrv_gpio.a | Bin 6008 -> 6008 bytes system/WisCore_RAK3401_Board/libudrv_pdm.a | Bin 5860 -> 5860 bytes .../WisCore_RAK3401_Board/libudrv_powersave.a | Bin 9320 -> 9312 bytes system/WisCore_RAK3401_Board/libudrv_pwm.a | Bin 4326 -> 4502 bytes system/WisCore_RAK3401_Board/libudrv_raknfc.a | Bin 3962 -> 3962 bytes system/WisCore_RAK3401_Board/libudrv_rtc.a | Bin 4830 -> 4830 bytes system/WisCore_RAK3401_Board/libudrv_serial.a | Bin 13608 -> 13620 bytes system/WisCore_RAK3401_Board/libudrv_spimst.a | Bin 4528 -> 4636 bytes system/WisCore_RAK3401_Board/libudrv_system.a | Bin 5946 -> 5946 bytes system/WisCore_RAK3401_Board/libudrv_timer.a | Bin 4490 -> 4490 bytes system/WisCore_RAK3401_Board/libudrv_twimst.a | Bin 4150 -> 4306 bytes system/WisCore_RAK3401_Board/libudrv_wdt.a | Bin 2240 -> 2240 bytes system/WisCore_RAK3401_Board/libuhal.a | Bin 213416 -> 213416 bytes system/WisCore_RAK4631_Board/libboot.a | Bin 22218 -> 22218 bytes system/WisCore_RAK4631_Board/librui_v3_api.a | Bin 182870 -> 324012 bytes system/WisCore_RAK4631_Board/libudrv_adc.a | Bin 3762 -> 3762 bytes system/WisCore_RAK4631_Board/libudrv_ble.a | Bin 15544 -> 15544 bytes system/WisCore_RAK4631_Board/libudrv_delay.a | Bin 3014 -> 3014 bytes system/WisCore_RAK4631_Board/libudrv_dfu.a | Bin 2020 -> 2020 bytes system/WisCore_RAK4631_Board/libudrv_flash.a | Bin 5358 -> 4964 bytes system/WisCore_RAK4631_Board/libudrv_gpio.a | Bin 6008 -> 6008 bytes system/WisCore_RAK4631_Board/libudrv_pdm.a | Bin 5860 -> 5860 bytes .../WisCore_RAK4631_Board/libudrv_powersave.a | Bin 9604 -> 9596 bytes system/WisCore_RAK4631_Board/libudrv_pwm.a | Bin 4326 -> 4502 bytes system/WisCore_RAK4631_Board/libudrv_raknfc.a | Bin 3962 -> 3962 bytes system/WisCore_RAK4631_Board/libudrv_rtc.a | Bin 4830 -> 4830 bytes system/WisCore_RAK4631_Board/libudrv_serial.a | Bin 13608 -> 13620 bytes system/WisCore_RAK4631_Board/libudrv_spimst.a | Bin 4528 -> 4636 bytes system/WisCore_RAK4631_Board/libudrv_system.a | Bin 5946 -> 5946 bytes system/WisCore_RAK4631_Board/libudrv_timer.a | Bin 4490 -> 4490 bytes system/WisCore_RAK4631_Board/libudrv_twimst.a | Bin 4150 -> 4306 bytes system/WisCore_RAK4631_Board/libudrv_wdt.a | Bin 2240 -> 2240 bytes system/WisCore_RAK4631_Board/libuhal.a | Bin 213856 -> 213856 bytes system/WisTrio_RAK5010_Board/libboot.a | Bin 22218 -> 22218 bytes system/WisTrio_RAK5010_Board/librui_v3_api.a | Bin 135870 -> 237802 bytes system/WisTrio_RAK5010_Board/libudrv_adc.a | Bin 3762 -> 3762 bytes system/WisTrio_RAK5010_Board/libudrv_ble.a | Bin 15544 -> 15544 bytes system/WisTrio_RAK5010_Board/libudrv_delay.a | Bin 3014 -> 3014 bytes system/WisTrio_RAK5010_Board/libudrv_dfu.a | Bin 2020 -> 2020 bytes system/WisTrio_RAK5010_Board/libudrv_flash.a | Bin 5358 -> 4964 bytes system/WisTrio_RAK5010_Board/libudrv_gpio.a | Bin 6008 -> 6008 bytes system/WisTrio_RAK5010_Board/libudrv_pdm.a | Bin 5860 -> 5860 bytes .../WisTrio_RAK5010_Board/libudrv_powersave.a | Bin 9716 -> 9708 bytes system/WisTrio_RAK5010_Board/libudrv_pwm.a | Bin 4326 -> 4502 bytes system/WisTrio_RAK5010_Board/libudrv_rtc.a | Bin 4830 -> 4830 bytes system/WisTrio_RAK5010_Board/libudrv_serial.a | Bin 13002 -> 13014 bytes system/WisTrio_RAK5010_Board/libudrv_system.a | Bin 5946 -> 5946 bytes system/WisTrio_RAK5010_Board/libudrv_timer.a | Bin 4490 -> 4490 bytes system/WisTrio_RAK5010_Board/libudrv_twimst.a | Bin 4150 -> 4306 bytes system/WisTrio_RAK5010_Board/libudrv_wdt.a | Bin 2240 -> 2240 bytes system/WisTrio_RAK5010_Board/libuhal.a | Bin 198322 -> 198322 bytes .../WisCore_RAK3401_Board/rui_inner_main.c | 12 - variants/WisCore_RAK3401_Board/version.c | 12 +- .../WisCore_RAK4631_Board/rui_inner_main.c | 15 +- variants/WisCore_RAK4631_Board/version.c | 12 +- .../WisTrio_RAK5010_Board/rui_inner_main.c | 12 - variants/WisTrio_RAK5010_Board/version.c | 12 +- 142 files changed, 652 insertions(+), 1788 deletions(-) delete mode 100644 cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.c delete mode 100644 cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.h create mode 100644 libraries/RUI_V3_examples/examples/Example/System_Multitasking/System_Multitasking.ino diff --git a/boards.txt b/boards.txt index 15d078d6..51d1f688 100644 --- a/boards.txt +++ b/boards.txt @@ -46,10 +46,10 @@ WisCoreRAK4631Board.build.usb_manufacturer="RAKwireless" WisCoreRAK4631Board.build.usb_product="WisCore RAK4631 Board" WisCoreRAK4631Board.build.extra_flags=-DNRF52840_XXAA -DRAK4631_V2.0+RAK5005-O_V1.0 -Drak4630 -DWISBLOCK_BASE_5005_O {build.flags.usb} WisCoreRAK4631Board.build.flags.feature= -DSUPPORT_LORA -DLORA_IO_SPI_PORT=2 -DSYS_RTC_COUNTER_PORT=2 -DATCMD_CUST_TABLE_SIZE=64 -DWAN_TYPE=0 -DLORA_STACK_VER=0x040407 -DBATTERY_LEVEL_SUPPORT -DBLE_CENTRAL_SUPPORT -DAPP_TIMER_V2 -DAPP_TIMER_V2_RTC1_ENABLED -DBOARD_PCA10056 -DS140 -DCONFIG_GPIO_AS_PINRESET -DFLOAT_ABI_HARD -DNRF52840_XXAA -DNRF_SD_BLE_API_VERSION=6 -DUSER_UART -DUSBD_CDC -DBLE_SUPPORT -DDFU_SUPPORT -DBL_SETTINGS_ACCESS_ONLY -DNRF_DFU_SVCI_ENABLED -DNRF_DFU_TRANSPORT_BLE=1 -DREGION_AS923 -DREGION_AU915 -DREGION_CN470 -DREGION_CN779 -DREGION_EU433 -DREGION_EU868 -DREGION_KR920 -DREGION_IN865 -DREGION_US915 -DREGION_RU864 -DSOFT_SE -DSECURE_ELEMENT_PRE_PROVISIONED -DLORAMAC_CLASSB_ENABLED -DSOFTDEVICE_PRESENT -DSWI_DISABLE0 -D__HEAP_SIZE=7168 -D__STACK_SIZE=7168 -DDEBUG -DSUPPORT_USB -DSUPPORT_BLE -DSUPPORT_NFC -DSUPPORT_SPI -DSUPPORT_AT -DRUI_SDK -WisCoreRAK4631Board.build.flags.lib_path="-L{runtime.platform.path}/cores/nRF5/app" "-L{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-L{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-L{runtime.platform.path}/cores/nRF5/external" "-L{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-L{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-L{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-L{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-L{runtime.platform.path}/cores/nRF5/component/service/nvm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/system" "-L{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-L{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-L{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-L{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-L{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-L{runtime.platform.path}/cores/nRF5/component/service/lora" "-L{runtime.platform.path}/cores/nRF5/component/service/runtimeConfig" "-L{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-L{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-L{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-L{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-L{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-L{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-L{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-L{runtime.platform.path}/cores/nRF5/component/service/battery" "-L{runtime.platform.path}/cores/nRF5/component/service/mode" "-L{runtime.platform.path}/cores/nRF5/component/service/debug" "-L{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-L{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-L{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/lib/cortex-m4/hard-float" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_oberon/lib/cortex-m4/hard-float" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-L{runtime.platform.path}/variants/{build.variant}" "-L{runtime.platform.path}/system/{build.variant}" -WisCoreRAK4631Board.build.flags.inc_path="-I{runtime.platform.path}/variants/{build.variant}" "-I{runtime.platform.path}/system/{build.variant}" "-I{runtime.platform.path}/cores/nRF5/app/RAK4631/src" "-I{runtime.platform.path}/cores/nRF5/component/inc" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal/serial" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/none/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-I{runtime.platform.path}/cores/nRF5/component/udrv" "-I{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-I{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-I{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-I{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-I{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-I{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-I{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/system" "-I{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-I{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-I{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-I{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-I{runtime.platform.path}/cores/nRF5/component/service/lora" "-I{runtime.platform.path}/cores/nRF5/component/service/lora/packages" "-I{runtime.platform.path}/cores/nRF5/component/service/runtimeConfig" "-I{runtime.platform.path}/cores/nRF5/component/service/nvm" "-I{runtime.platform.path}/cores/nRF5/component/service/battery" "-I{runtime.platform.path}/cores/nRF5/component/service/debug" "-I{runtime.platform.path}/cores/nRF5/component/service/mode" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/cli" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/transparent" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/protocol" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api/avr" "-I{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-I{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/system" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/peripherals" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/apps/LoRaMac/common/LmHandler" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/ringbuf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/memobj" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_scan" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/serial" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/queue" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/wdt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc/acm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/utf_converter" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/drivers_nrf/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/svc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/app" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/experimental_section_vars" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/peer_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus_c" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crc32" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sha256" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310_bl" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_sw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/oberon" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/mdk" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/build/nordic/RTE" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src/prs" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/delay" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/include" "-I{runtime.platform.path}/cores/nRF5/external/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/toolchain/cmsis/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/fprintf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/button" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/ble_central" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gq" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/optiga" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_hw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cifra" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/stack_info" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sortlist" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_qwr" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_hids" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_bas" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dis" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sensorsim" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/scheduler" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310_bl/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/message" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/text" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/uri" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/launchapp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/record" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/platform" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/FatFs/source" "-I{runtime.platform.path}/cores/nRF5/external/spiffs/src" +WisCoreRAK4631Board.build.flags.lib_path="-L{runtime.platform.path}/cores/nRF5/app" "-L{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-L{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-L{runtime.platform.path}/cores/nRF5/external" "-L{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-L{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-L{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-L{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-L{runtime.platform.path}/cores/nRF5/component/service/nvm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/system" "-L{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-L{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-L{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-L{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-L{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-L{runtime.platform.path}/cores/nRF5/component/service/lora" "-L{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-L{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-L{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-L{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-L{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-L{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-L{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-L{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-L{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-L{runtime.platform.path}/cores/nRF5/component/service/battery" "-L{runtime.platform.path}/cores/nRF5/component/service/mode" "-L{runtime.platform.path}/cores/nRF5/component/service/debug" "-L{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-L{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-L{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/lib/cortex-m4/hard-float" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_oberon/lib/cortex-m4/hard-float" "-L{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-L{runtime.platform.path}/variants/{build.variant}" "-L{runtime.platform.path}/system/{build.variant}" +WisCoreRAK4631Board.build.flags.inc_path="-I{runtime.platform.path}/variants/{build.variant}" "-I{runtime.platform.path}/system/{build.variant}" "-I{runtime.platform.path}/cores/nRF5/app/RAK4631/src" "-I{runtime.platform.path}/cores/nRF5/component/inc" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal/serial" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/none/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-I{runtime.platform.path}/cores/nRF5/component/udrv" "-I{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-I{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-I{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-I{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-I{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-I{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-I{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/system" "-I{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-I{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-I{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-I{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-I{runtime.platform.path}/cores/nRF5/component/service/lora" "-I{runtime.platform.path}/cores/nRF5/component/service/lora/packages" "-I{runtime.platform.path}/cores/nRF5/component/service/nvm" "-I{runtime.platform.path}/cores/nRF5/component/service/battery" "-I{runtime.platform.path}/cores/nRF5/component/service/debug" "-I{runtime.platform.path}/cores/nRF5/component/service/mode" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/cli" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/transparent" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/protocol" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api/avr" "-I{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-I{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/system" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/peripherals" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/apps/LoRaMac/common/LmHandler" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/ringbuf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/memobj" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_scan" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/serial" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/queue" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/wdt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc/acm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/utf_converter" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/drivers_nrf/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/svc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/app" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/experimental_section_vars" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/peer_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus_c" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crc32" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sha256" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310_bl" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_sw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/oberon" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/mdk" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/build/nordic/RTE" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src/prs" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/delay" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/include" "-I{runtime.platform.path}/cores/nRF5/external/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/toolchain/cmsis/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/fprintf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/button" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/ble_central" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gq" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/optiga" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_hw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cifra" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/stack_info" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sortlist" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_qwr" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_hids" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_bas" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dis" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sensorsim" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/scheduler" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310_bl/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/message" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/text" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/uri" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/launchapp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/record" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/platform" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/FatFs/source" "-I{runtime.platform.path}/cores/nRF5/external/spiffs/src" WisCoreRAK4631Board.build.flags.lib=-lboot -luhal -ludrv_serial -ludrv_flash -ludrv_timer -ludrv_system -ludrv_powersave -ludrv_wdt -ludrv_gpio -ludrv_twimst -ludrv_delay -ludrv_rtc -ludrv_delay -ludrv_gpio -ludrv_rtc -ludrv_twimst -ludrv_dfu -ludrv_pwm -ludrv_adc -ludrv_pdm -ludrv_spimst -ludrv_ble -ludrv_raknfc -lrui_v3_api -lnrf_cc310_0.9.13 -loberon_3.0.6 -l:nfc_t4t_lib_gcc.a -WisCoreRAK4631Board.build.flags.inc_path="-I{runtime.platform.path}/variants/{build.variant}" "-I{runtime.platform.path}/system/{build.variant}" "-I{runtime.platform.path}/cores/nRF5/app/RAK4631/src" "-I{runtime.platform.path}/cores/nRF5/component/inc" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal/serial" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/none/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-I{runtime.platform.path}/cores/nRF5/component/udrv" "-I{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-I{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-I{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-I{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-I{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-I{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-I{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/system" "-I{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-I{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-I{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-I{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-I{runtime.platform.path}/cores/nRF5/component/service/lora" "-I{runtime.platform.path}/cores/nRF5/component/service/lora/packages" "-I{runtime.platform.path}/cores/nRF5/component/service/runtimeConfig" "-I{runtime.platform.path}/cores/nRF5/component/service/nvm" "-I{runtime.platform.path}/cores/nRF5/component/service/battery" "-I{runtime.platform.path}/cores/nRF5/component/service/debug" "-I{runtime.platform.path}/cores/nRF5/component/service/mode" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/cli" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/transparent" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/protocol" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api/avr" "-I{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-I{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/system" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/peripherals" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/apps/LoRaMac/common/LmHandler" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/ringbuf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/memobj" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_scan" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/serial" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/queue" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/wdt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc/acm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/utf_converter" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/drivers_nrf/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/svc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/app" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/experimental_section_vars" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/peer_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus_c" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crc32" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sha256" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310_bl" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_sw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/oberon" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/mdk" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/build/nordic/RTE" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src/prs" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/delay" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/include" "-I{runtime.platform.path}/cores/nRF5/external/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/toolchain/cmsis/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/fprintf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/button" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/ble_central" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gq" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/optiga" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_hw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cifra" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/stack_info" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sortlist" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_qwr" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_hids" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_bas" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dis" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sensorsim" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/scheduler" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310_bl/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/message" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/text" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/uri" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/launchapp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/record" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/platform" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/FatFs/source" "-I{runtime.platform.path}/cores/nRF5/external/spiffs/src" +WisCoreRAK4631Board.build.flags.inc_path="-I{runtime.platform.path}/variants/{build.variant}" "-I{runtime.platform.path}/system/{build.variant}" "-I{runtime.platform.path}/cores/nRF5/app/RAK4631/src" "-I{runtime.platform.path}/cores/nRF5/component/inc" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/nrf52840/uhal/serial" "-I{runtime.platform.path}/cores/nRF5/component/core/mcu/none/uhal" "-I{runtime.platform.path}/cores/nRF5/component/core/board/{build.series}" "-I{runtime.platform.path}/cores/nRF5/component/udrv" "-I{runtime.platform.path}/cores/nRF5/component/udrv/serial" "-I{runtime.platform.path}/cores/nRF5/component/udrv/timer" "-I{runtime.platform.path}/cores/nRF5/component/udrv/delay" "-I{runtime.platform.path}/cores/nRF5/component/udrv/spimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/powersave" "-I{runtime.platform.path}/cores/nRF5/component/udrv/gpio" "-I{runtime.platform.path}/cores/nRF5/component/udrv/rtc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/twimst" "-I{runtime.platform.path}/cores/nRF5/component/udrv/dfu" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pwm" "-I{runtime.platform.path}/cores/nRF5/component/udrv/adc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/system" "-I{runtime.platform.path}/cores/nRF5/component/udrv/ble" "-I{runtime.platform.path}/cores/nRF5/component/udrv/flash" "-I{runtime.platform.path}/cores/nRF5/component/udrv/wdt" "-I{runtime.platform.path}/cores/nRF5/component/udrv/nfc" "-I{runtime.platform.path}/cores/nRF5/component/udrv/pdm" "-I{runtime.platform.path}/cores/nRF5/component/service/lora" "-I{runtime.platform.path}/cores/nRF5/component/service/lora/packages" "-I{runtime.platform.path}/cores/nRF5/component/service/nvm" "-I{runtime.platform.path}/cores/nRF5/component/service/battery" "-I{runtime.platform.path}/cores/nRF5/component/service/debug" "-I{runtime.platform.path}/cores/nRF5/component/service/mode" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/cli" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/transparent" "-I{runtime.platform.path}/cores/nRF5/component/service/mode/protocol" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api" "-I{runtime.platform.path}/cores/nRF5/component/rui_v3_api/avr" "-I{runtime.platform.path}/cores/nRF5/component/fund/event_queue" "-I{runtime.platform.path}/cores/nRF5/component/fund/circular_queue" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/system" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/peripherals" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/apps/LoRaMac/common/LmHandler" "-I{runtime.platform.path}/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/ringbuf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/log/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/memobj" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/s140/headers/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_scan" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/serial" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/queue" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/wdt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc/acm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/usbd/class/cdc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/utf_converter" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/drivers_nrf/usbd" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/ble_dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/svc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/app" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx/legacy" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/experimental_section_vars" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/peer_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/softdevice/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/common" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_nus_c" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_link_ctx_manager" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_flags" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/atomic_fifo" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fstorage" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crc32" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sha256" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cc310_bl" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_sw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/oberon" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader/dfu" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gatt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/uart/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/mdk" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/build/nordic/RTE" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src/prs" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/balloc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/delay" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/integration/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/include" "-I{runtime.platform.path}/cores/nRF5/external/micro_ecc" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/strerror" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/boards" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/toolchain/cmsis/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/fprintf" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/segger_rtt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/util" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_advertising" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/fds" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/button" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bsp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/hal/" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/RUI/Source/nordic/service/ble_central" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_db_discovery" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/bootloader" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwr_mgmt" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/pwm" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_gq" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/optiga" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/nrf_hw" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/mbedtls/include/mbedtls" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/crypto/backend/cifra" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/stack_info" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sortlist" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/timer" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/cli/uart" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/nrf_ble_qwr" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_hids" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_bas" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/ble/ble_services/ble_dis" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/sensorsim" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/scheduler" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310_bl/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/mutex" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/external/nrf_cc310/include" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/t4t_lib" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/message" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/text" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/uri" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/launchapp" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/ndef/generic/record" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/modules/nrfx/drivers/src" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/nfc/platform" "-I{runtime.platform.path}/cores/nRF5/external/nRF5_SDK/nRF5_SDK_17.0.2_d674dde/components/libraries/hardfault/nrf52" "-I{runtime.platform.path}/cores/nRF5/external/FatFs/source" "-I{runtime.platform.path}/cores/nRF5/external/spiffs/src" WisCoreRAK4631Board.build.ldscript=flash_nrf52840.ld WisCoreRAK4631Board.build.vid=0x239A WisCoreRAK4631Board.build.pid=0x8029 diff --git a/cores/nRF5/component/rui_v3_api/HardwareSerial.h b/cores/nRF5/component/rui_v3_api/HardwareSerial.h index 2f9bbd38..83550662 100644 --- a/cores/nRF5/component/rui_v3_api/HardwareSerial.h +++ b/cores/nRF5/component/rui_v3_api/HardwareSerial.h @@ -50,9 +50,7 @@ using namespace std; typedef enum { RAK_AT_MODE, ///< AT command mode -#ifdef SUPPOER_BINARY RAK_API_MODE, ///< API mode -#endif #ifdef SUPPORT_LORA #ifdef SUPPORT_PASSTHRU RAK_PASS_MODE, ///< Pass-through mode @@ -357,27 +355,6 @@ class HardwareSerial : public Stream */ virtual void flush(void); - - /**@par Description - * Get the baud rate from the system configure - * - * @par Syntax - * Serial.getBaudrate(); - * @return void - * @par Example - * @verbatim - void setup() { - uint32_t baudrate = Serial.getBaudrate(); - Serial.begin(baudrate); - } - - void loop() { - } - @endverbatim - - */ - virtual uint32_t getBaudrate(void); - /**@}*/ }; diff --git a/cores/nRF5/component/rui_v3_api/RAKLoRa.h b/cores/nRF5/component/rui_v3_api/RAKLoRa.h index ce19c17f..59a32dc1 100755 --- a/cores/nRF5/component/rui_v3_api/RAKLoRa.h +++ b/cores/nRF5/component/rui_v3_api/RAKLoRa.h @@ -642,68 +642,7 @@ class RAKLoraP2P */ bool set(bool enable); }; - class cad - { - public: - /**@par Description - * This api allows the user to get the Channel Activity Detection status - * - * @par Syntax - * api.lora.cad.get(); - * @return Channel Activity Detection status(Type: bool) - * @par Example - * @verbatim - void setup() - { - Serial.begin(115200); - - Serial.printf("Set Node device work mode %s\r\n", api.lorawan.nwm.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode fix Length payload %s\r\n", api.lora.cad.set(true) ? "Success" : "Fail"); - } - - void loop() - { - Serial.printf("P2P mode fix Length payload switch = %s\r\n", api.lora.cad.get()?"true":"false"); - - delay(1000); - } - - @endverbatim - - */ - bool get(); - /**@par Description - * This api allows the user to set the Channel Activity Detection status - * - * @par Syntax - * api.lora.cad.set(); - * @param value Channel Activity Detection status(bool) - * @return bool - * @retval TRUE for setting P2P Channel Activity Detection success - * @retval FALSE for setting P2P Channel Activity Detection failure - * @par Example - * @verbatim - void setup() - { - Serial.begin(115200); - - Serial.printf("Set Node device work mode %s\r\n", api.lorawan.nwm.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode fix Length payload %s\r\n", api.lora.cad.set(true) ? "Success" : "Fail"); - } - - void loop() - { - Serial.printf("P2P mode fix Length payload switch = %s\r\n", api.lora.cad.get()?"true":"false"); - delay(1000); - } - - @endverbatim - - */ - - bool set(bool enable); - }; iqInver iqInver; syncword syncword; rfFrequency rfFrequency; @@ -714,7 +653,6 @@ class RAKLoraP2P preambleLength preambleLength; symbolTimeout symbolTimeout; fixLengthPayload fixLengthPayload; - cad cad; }; diff --git a/cores/nRF5/component/rui_v3_api/RAKLorawan.h b/cores/nRF5/component/rui_v3_api/RAKLorawan.h index 5db9afde..3d1e7faa 100644 --- a/cores/nRF5/component/rui_v3_api/RAKLorawan.h +++ b/cores/nRF5/component/rui_v3_api/RAKLorawan.h @@ -78,32 +78,6 @@ typedef enum RAK_LORA_CLASS_C = 2, ///< The LoRaWan will work in Class C } RAK_LORA_CLASS; -/**@par Description - * The LoRaMac Event Info - */ - -typedef enum RAKLoRaMacEventInfoStatus -{ - RAK_LORAMAC_STATUS_OK = 0, ///Service performed successfully - RAK_LORAMAC_STATUS_ERROR, ///An error occurred during the execution of the service - RAK_LORAMAC_STATUS_TX_TIMEOUT, ///A Tx timeout occurred - RAK_LORAMAC_STATUS_RX1_TIMEOUT, ///An Rx timeout occurred on receive window 1 - RAK_LORAMAC_STATUS_RX2_TIMEOUT, ///An Rx timeout occurred on receive window 2 - RAK_LORAMAC_STATUS_RX1_ERROR, ///An Rx error occurred on receive window 1 - RAK_LORAMAC_STATUS_RX2_ERROR, ///An Rx error occurred on receive window 2 - RAK_LORAMAC_STATUS_JOIN_FAIL, ///An error occurred in the join procedure - RAK_LORAMAC_STATUS_DOWNLINK_REPEATED, ///A frame with an invalid downlink counter was received. The downlink counter of the frame was equal to the local copy of the downlink counter of the node. - RAK_LORAMAC_STATUS_TX_DR_PAYLOAD_SIZE_ERROR, ///The MAC could not retransmit a frame since the MAC decreased the datarate. The payload size is not applicable for the datarate. - RAK_LORAMAC_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS, ///The node has lost MAX_FCNT_GAP or more frames. - RAK_LORAMAC_STATUS_ADDRESS_FAIL, ///An address error occurred - RAK_LORAMAC_STATUS_MIC_FAIL, ///Message integrity check failure - RAK_LORAMAC_STATUS_MULTICAST_FAIL, ///Multicast error occurred - RAK_LORAMAC_STATUS_BEACON_LOCKED, ///Beacon locked - RAK_LORAMAC_STATUS_BEACON_LOST, ///Beacon lost - RAK_LORAMAC_STATUS_BEACON_NOT_FOUND, ///Beacon not found -}RAKLoRaMacEventInfoStatus_t; - - /**@par Description * The structure of a multicast group */ @@ -143,12 +117,6 @@ class RAKLorawan * @ingroup Joining_and_Sending * @par Syntax * api.lorawan.join() - * api.lorawan.join(join_start, auto_join, auto_join_period, auto_join_cnt) - * - * @param join_start manually join network: 0 means stop to join network; 1 means start to join network. - * @param auto_join automatically join network: 0 means stop automatically joining network; 1 means start automatically joining network. - * @param auto_join_period the join attempt period. The acceptance values are 7 to 255 (in seconds). - * @param auto_join_cnt the maximum number of join attempts. The acceptance values are 0 to 255 (in seconds). * @return bool * @retval TRUE for success * @retval FALSE for join failure @@ -189,7 +157,6 @@ class RAKLorawan @endverbatim */ bool join(); - bool join(uint8_t join_start, uint8_t auto_join, uint8_t auto_join_period, uint8_t auto_join_cnt); /**@par Description * This api provides the way to send data on a dedicated port number @@ -774,84 +741,6 @@ class RAKLorawan @endverbatim */ bool registerPSendCallback(service_lora_p2p_send_cb_type callback); - /**@par Description - * This API is used to register a callback function, - so that application can be notified when P2P uplink process is done. - * - * @ingroup P2P - * @par Syntax - * api.lorawan.registerPSendCallback(service_lora_p2p_send_cb_type callback) - * @param The callback function - * @return bool - * @retval TRUE for setting callback function success - * @retval FALSE for setting callback function failure - * @par Example - * @verbatim - void recv_cb(rui_lora_p2p_recv_t data) { - Serial.println("Receive something"); - } - - void send_cb(void) { - Serial.println("I send something"); - } - - void cad_cb(bool detect) { - if(detect) - Serial.println("detect Activity"); - else - Serial.println("no Activity"); - - } - - - long startTime; - - void setup() - { - Serial.begin(115200); - - delay(2000); - startTime = millis(); - - Serial.println("P2P Start"); - - Serial.printf("Set Node device work mode %s\r\n", api.lorawan.nwm.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode frequency %s\r\n", api.lorawan.pfreq.set(868000000) ? "Success" : "Fail"); - Serial.printf("Set P2P mode spreading factor %s\r\n", api.lorawan.psf.set(12) ? "Success" : "Fail"); - Serial.printf("Set P2P mode bandwidth %s\r\n", api.lorawan.pbw.set(125) ? "Success" : "Fail"); - Serial.printf("Set P2P mode code rate %s\r\n", api.lorawan.pcr.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); - Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); - - api.lorawan.registerPRecvCallback(recv_cb); - api.lorawan.registerPSendCallback(send_cb); - api.lorawan.registerPSendCADCallback(cad_cb); - - randomSeed(millis()); - } - - void loop() - { - uint8_t payload[] = "payload"; - - int rxDelay = random(3000, 5000); - - // Receive P2P data every 10 seconds - if(millis() - startTime >= 10*1000) { - Serial.printf("P2P Rx start for %d millisSconds\r\n", rxDelay); - startTime = millis(); - Serial.printf("P2P set Rx mode %s\r\n",api.lorawan.precv(rxDelay) ? "Success" : "Fail"); - delay(rxDelay); - } else { - - Serial.printf("P2P send %s\r\n", api.lorawan.psend(sizeof(payload), payload)? "Success" : "Fail"); - delay(1000); - } - - } - @endverbatim - */ - bool registerPSendCADCallback(service_lora_p2p_send_CAD_cb_type callback); /**@par Description * view or change the LoRAWAN APPEUI and use it to setup the LoRAWAN connection @@ -2793,7 +2682,7 @@ class RAKLorawan void loop() { - Serial.printf("The current beacon time = %lu\r\n", api.lorawan.btime.get()); + Serial.printf("The current beacon time = %l\r\n", api.lorawan.btime.get()); delay(1000); } @endverbatim @@ -3879,11 +3768,9 @@ channel mask * @ingroup P2P * @par Syntax * api.lorawan.psend(length, payload) - * api.lorawan.psend(length, payload,cad_enable) * * @param length the length of the payload * @param payload the data send to the other device - * @param bool Channel Activity Detection enable * @return bool * @retval TRUE for sending data success * @retval FALSE for sending data failure @@ -3908,7 +3795,6 @@ channel mask { uint8_t payload[] = "payload"; Serial.printf("P2P send %s\r\n", api.lorawan.psend(sizeof(payload), payload)? "Success" : "Fail"); - Serial.printf("P2P send %s\r\n", api.lorawan.psend(sizeof(payload), payload,true)? "Success" : "Fail"); delay(5000); } @@ -3916,7 +3802,6 @@ channel mask @endverbatim */ bool psend(uint8_t length, uint8_t *payload); - bool psend(uint8_t length, uint8_t *payload,bool cad_enable); /**@par Description * This api configures P2P mode encryption @@ -3936,8 +3821,8 @@ channel mask * @par Example * @verbatim long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - uint8_t encrypt_buff[16]; + uint8_t node_encrypt_key[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; + uint8_t encrypt_buff[8]; void setup() { @@ -3954,13 +3839,13 @@ channel mask Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); + Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set(node_encrypt_key, 8) ? "Success" : "Fail"); Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); + api.lorawan.enckey.get(encrypt_buff, 8); Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { + for (int i = 0 ; i < 8 ; i++) { Serial.printf("%02X", encrypt_buff[i]); } Serial.println(""); @@ -4005,8 +3890,8 @@ channel mask * @par Example * @verbatim long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - uint8_t encrypt_buff[16]; + uint8_t node_encrypt_key[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; + uint8_t encrypt_buff[8]; void setup() { @@ -4023,13 +3908,13 @@ channel mask Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); + Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set(node_encrypt_key, 8) ? "Success" : "Fail"); Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); + api.lorawan.enckey.get(encrypt_buff, 8); Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { + for (int i = 0 ; i < 8 ; i++) { Serial.printf("%02X", encrypt_buff[i]); } Serial.println(""); @@ -4074,15 +3959,15 @@ channel mask * api.lorawan.enckey.get(buff, len) * * @param buff the buffer to store encryption key - * @param len the length of encryption key(must be 16 bytes) + * @param len the length of encryption key(must be 8 bytes) * @return bool * @retval TRUE for getting encryption key success * @retval FALSE for getting encryption key failure * @par Example * @verbatim long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - uint8_t encrypt_buff[16]; + uint8_t node_encrypt_key[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; + uint8_t encrypt_buff[8]; void setup() { @@ -4099,13 +3984,13 @@ channel mask Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); + Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set(node_encrypt_key, 8) ? "Success" : "Fail"); Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); + api.lorawan.enckey.get(encrypt_buff, 8); Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { + for (int i = 0 ; i < 8 ; i++) { Serial.printf("%02X", encrypt_buff[i]); } Serial.println(""); @@ -4143,15 +4028,15 @@ channel mask * api.lorawan.enckey.set(buff, len) * * @param buff the buffer to set encryption key - * @param len the length of encryption key(must be 16 bytes) + * @param len the length of encryption key(must be 8 bytes) * @return bool * @retval TRUE for setting encryption key success * @retval FALSE for setting encryption failure * @par Example * @verbatim long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - uint8_t encrypt_buff[16]; + uint8_t node_encrypt_key[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; + uint8_t encrypt_buff[8]; void setup() { @@ -4168,13 +4053,13 @@ channel mask Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); + Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set(node_encrypt_key, 8) ? "Success" : "Fail"); Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); + api.lorawan.enckey.get(encrypt_buff, 8); Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { + for (int i = 0 ; i < 8 ; i++) { Serial.printf("%02X", encrypt_buff[i]); } Serial.println(""); @@ -4205,168 +4090,9 @@ channel mask */ bool set(uint8_t *buff, uint32_t len); }; - class enciv - { - public: - /**@par Description - * This api allows to get the IV of P2P mode encryption - * - * @par Syntax - * api.lorawan.enciv.get(buff, len) - * - * @param buff the buffer to store encryption IV - * @param len the length of encryption IV(must be 16 bytes) - * @return bool - * @retval TRUE for getting encryption IV success - * @retval FALSE for getting encryption IV failure - * @par Example - * @verbatim - long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - char * node_encrypt_IV = "ddddccccbbbbaaaa"; - uint8_t encrypt_buff[16]; - - void setup() - { - Serial.begin(115200); - startTime = millis(); - - Serial.println("P2P Start"); - - Serial.printf("Set Node device work mode %s\r\n", api.lorawan.nwm.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode frequency %s\r\n", api.lorawan.pfreq.set(868000000) ? "Success" : "Fail"); - Serial.printf("Set P2P mode spreading factor %s\r\n", api.lorawan.psf.set(12) ? "Success" : "Fail"); - Serial.printf("Set P2P mode bandwidth %s\r\n", api.lorawan.pbw.set(125) ? "Success" : "Fail"); - Serial.printf("Set P2P mode code rate %s\r\n", api.lorawan.pcr.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); - Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption IV %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_IV, 16) ? "Success" : "Fail"); - - Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); - Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { - Serial.printf("%02X", encrypt_buff[i]); - } - Serial.println(""); - api.lorawan.enciv.get(encrypt_buff, 16); - Serial.printf("P2P encryption IV = 0x"); - for (int i = 0 ; i < 16 ; i++) { - Serial.printf("%02X", encrypt_buff[i]); - } - Serial.println(""); - - - randomSeed(millis()); - } - - void loop() - { - uint8_t payload[] = "payload"; - - int rxDelay = random(3000, 5000); - - // Receive P2P data every 10 seconds - if(millis() - startTime >= 10*1000) { - Serial.printf("P2P Rx start for %d millisSconds\r\n", rxDelay); - startTime = millis(); - Serial.printf("P2P set Rx mode %s\r\n",api.lorawan.precv(rxDelay) ? "Success" : "Fail"); - delay(rxDelay); - } else { - - Serial.printf("P2P send %s\r\n", api.lorawan.psend(sizeof(payload), payload)? "Success" : "Fail"); - delay(1000); - } - - } - @endverbatim - */ - - bool get(uint8_t *buff, uint32_t len); - /**@par Description - * This api allows to set the IV of P2P mode encryption - * - * @par Syntax - * api.lorawan.enciv.set(buff, len) - * - * @param buff the buffer to set encryption IV - * @param len the length of encryption IV(must be 16 bytes) - * @return bool - * @retval TRUE for setting encryption IV success - * @retval FALSE for setting encryption failure - * @par Example - * @verbatim - long startTime; - char * node_encrypt_key = "aaaabbbbccccdddd"; - char * node_encrypt_IV = "ddddccccbbbbaaaa"; - uint8_t encrypt_buff[16]; - - void setup() - { - Serial.begin(115200); - startTime = millis(); - - Serial.println("P2P Start"); - - Serial.printf("Set Node device work mode %s\r\n", api.lorawan.nwm.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode frequency %s\r\n", api.lorawan.pfreq.set(868000000) ? "Success" : "Fail"); - Serial.printf("Set P2P mode spreading factor %s\r\n", api.lorawan.psf.set(12) ? "Success" : "Fail"); - Serial.printf("Set P2P mode bandwidth %s\r\n", api.lorawan.pbw.set(125) ? "Success" : "Fail"); - Serial.printf("Set P2P mode code rate %s\r\n", api.lorawan.pcr.set(0) ? "Success" : "Fail"); - Serial.printf("Set P2P mode preamble length %s\r\n", api.lorawan.ppl.set(8) ? "Success" : "Fail"); - Serial.printf("Set P2P mode tx power %s\r\n", api.lorawan.ptp.set(22) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption status %s\r\n", api.lorawan.encry.set(1) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption Key %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_key, 16) ? "Success" : "Fail"); - Serial.printf("Set P2P mode encryption IV %s\r\n\r\n", api.lorawan.enckey.set((uint8_t *)node_encrypt_IV, 16) ? "Success" : "Fail"); - - Serial.printf("P2P encryption status = %s\r\n", api.lorawan.encry.get() ? "Enbale" : "Disable"); - api.lorawan.enckey.get(encrypt_buff, 16); - Serial.printf("P2P encryption Key = 0x"); - for (int i = 0 ; i < 16 ; i++) { - Serial.printf("%02X", encrypt_buff[i]); - } - Serial.println(""); - api.lorawan.enciv.get(encrypt_buff, 16); - Serial.printf("P2P encryption IV = 0x"); - for (int i = 0 ; i < 16 ; i++) { - Serial.printf("%02X", encrypt_buff[i]); - } - Serial.println(""); - - - randomSeed(millis()); - } - - void loop() - { - uint8_t payload[] = "payload"; - - int rxDelay = random(3000, 5000); - - // Receive P2P data every 10 seconds - if(millis() - startTime >= 10*1000) { - Serial.printf("P2P Rx start for %d millisSconds\r\n", rxDelay); - startTime = millis(); - Serial.printf("P2P set Rx mode %s\r\n",api.lorawan.precv(rxDelay) ? "Success" : "Fail"); - delay(rxDelay); - } else { - - Serial.printf("P2P send %s\r\n", api.lorawan.psend(sizeof(payload), payload)? "Success" : "Fail"); - delay(1000); - } - - } - @endverbatim - */ - - bool set(uint8_t *buff, uint32_t len); - }; encry encry; enckey enckey; - enciv enciv; /**@par Description * This api configures the P2P FSK modem bitrate (600b/s-307200b/s) diff --git a/cores/nRF5/component/rui_v3_api/sleep.h b/cores/nRF5/component/rui_v3_api/sleep.h index be236031..27af0415 100644 --- a/cores/nRF5/component/rui_v3_api/sleep.h +++ b/cores/nRF5/component/rui_v3_api/sleep.h @@ -57,38 +57,6 @@ class sleep { void cpu(uint32_t ms_time); void cpu(); -/**@par Description - * This API is used to register a wakeup callback function, users can be notified after waking up. - * @ingroup Powersave - * @par Syntax - * api.system.sleep.registerWakeupCallback(POWER_SAVE_HANDLER callback); - * @param The callback function. - * @return bool - * @retval TRUE add callback function success. - * @retval FALSE add callback function fail. - * @par Example - * @verbatim - void WakeupCallback() - { - Serial.printf("This is Wakeup Callback\r\n"); - } - - void setup() - { - Serial.begin(115200); - if ( api.system.sleep.registerWakeupCallback(WakeupCallback) == false ) - { - Serial.println("Create Wakeup Callback failed."); - } - } - - void loop() - { - api.system.sleep.cpu(1000); - } - @endverbatim - */ - bool registerWakeupCallback(POWER_SAVE_HANDLER callback); #ifdef SUPPORT_LORA void lora(uint32_t ms_time); diff --git a/cores/nRF5/component/service/battery/service_battery.c b/cores/nRF5/component/service/battery/service_battery.c index 11f98ace..461c48b0 100755 --- a/cores/nRF5/component/service/battery/service_battery.c +++ b/cores/nRF5/component/service/battery/service_battery.c @@ -4,7 +4,6 @@ #include "service_battery.h" #include "udrv_adc.h" #include "variant.h" -#include "udrv_serial.h" extern batt_level batt_table[]; @@ -12,18 +11,6 @@ void service_battery_get_batt_level(float *bat_lvl) { uint16_t adc_value; float max, ref_over_gain; -#if defined(rak3172_sip) - UDRV_ADC_RESOLUTION resolution = udrv_adc_get_resolution(); - udrv_adc_set_resolution(UDRV_ADC_RESOLUTION_12BIT); - udrv_adc_read(UDRV_ADC_CHANNEL_VREFINT, &adc_value); - *bat_lvl = (float)adc_value; - *bat_lvl = *bat_lvl / 4095; - *bat_lvl = 1.27 / *bat_lvl; - *bat_lvl = *bat_lvl * 0.974 - 0.065; //calibrate - udrv_adc_set_resolution(resolution); - return ; -#endif - switch (udrv_adc_get_resolution()) { case UDRV_ADC_RESOLUTION_6BIT: { @@ -126,12 +113,7 @@ void service_battery_get_batt_level(float *bat_lvl) { #endif #ifdef RAK11720+RAK5005-O_V1.0 - /* - * RAK5005-O/RAK19007 Divider Resistor: 2.5 / 1.5 - * RAK11722 Divider Resistor: 1.3 / 1.0 - * Calibration: X * 2.02 + 0.21 - */ - *bat_lvl = (ref_over_gain*(((float)adc_value)/max)*(1.3f)/(1.0f)*(2.5f)/(1.5f))*2.02f+0.21f; + *bat_lvl = ((ref_over_gain*(((float)adc_value)/max)*(5.0f))/(3.0f))*(1.3f); #endif #ifdef RAK5010_EVB diff --git a/cores/nRF5/component/service/lora/service_lora.c b/cores/nRF5/component/service/lora/service_lora.c index d2f6f294..63cdc732 100755 --- a/cores/nRF5/component/service/lora/service_lora.c +++ b/cores/nRF5/component/service/lora/service_lora.c @@ -264,16 +264,12 @@ static void McpsConfirm(McpsConfirm_t *mcpsConfirm) service_lora_send_callback(mcpsConfirm->Status); } } - if( mcpsConfirm->McpsRequest == MCPS_CONFIRMED) { if(mcpsConfirm->AckReceived) - udrv_serial_log_printf("+EVT:SEND_CONFIRMED_OK\r\n"); + udrv_serial_log_printf("+EVT:SEND_CONFIRMED_OK\r\n"); else - udrv_serial_log_printf("+EVT:SEND_CONFIRMED_FAILED(%d)\r\n", mcpsConfirm->Status); - } - else { - udrv_serial_log_printf("+EVT:TX_DONE\r\n"); + udrv_serial_log_printf("+EVT:SEND_CONFIRMED_FAILED\r\n"); } service_lora_lptp_send_callback(0); @@ -362,27 +358,6 @@ static void McpsIndication(McpsIndication_t *mcpsIndication) service_lora_delay_send_process(); } - if(service_get_debug_level()) - { - MibRequestConfirm_t mibReq; - LoRaMacStatus_t status; - - mibReq.Type = MIB_NVM_CTXS; - LoRaMacMibGetRequestConfirm(&mibReq); - if ((status = LoRaMacMibGetRequestConfirm(&mibReq)) == LORAMAC_STATUS_OK) - { - udrv_serial_log_printf("Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[0]); - udrv_serial_log_printf("Rx1Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[1]); - udrv_serial_log_printf("RxCFrequency:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Frequency); - udrv_serial_log_printf("RxC Datarate:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Datarate); - udrv_serial_log_printf("ChannelsDatarate:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsDatarate); - udrv_serial_log_printf("AdrAckCounter:%u\r\n",mibReq.Param.Contexts->MacGroup1.AdrAckCounter); - udrv_serial_log_printf("ChannelsTxPower:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsTxPower); - } - else - udrv_serial_log_printf("LoRaMacMibGetRequestConfirm ERROR\r\n"); - } - } static void MlmeConfirm(MlmeConfirm_t *mlmeConfirm) @@ -473,27 +448,6 @@ static void MlmeConfirm(MlmeConfirm_t *mlmeConfirm) if (service_lora_get_class() != SERVICE_LORA_CLASS_B) { } - if(service_get_debug_level()) - { - MibRequestConfirm_t mibReq; - LoRaMacStatus_t status; - - mibReq.Type = MIB_NVM_CTXS; - LoRaMacMibGetRequestConfirm(&mibReq); - if ((status = LoRaMacMibGetRequestConfirm(&mibReq)) == LORAMAC_STATUS_OK) - { - udrv_serial_log_printf("Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[0]); - udrv_serial_log_printf("Rx1Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[1]); - udrv_serial_log_printf("RxCFrequency:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Frequency); - udrv_serial_log_printf("RxC Datarate:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Datarate); - udrv_serial_log_printf("ChannelsDatarate:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsDatarate); - udrv_serial_log_printf("AdrAckCounter:%u\r\n",mibReq.Param.Contexts->MacGroup1.AdrAckCounter); - udrv_serial_log_printf("ChannelsTxPower:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsTxPower); - } - else - udrv_serial_log_printf("LoRaMacMibGetRequestConfirm ERROR\r\n"); - } - break; case MLME_DEVICE_TIME: { @@ -1334,7 +1288,7 @@ SERVICE_LORA_BAND service_lora_get_band(void) int32_t service_lora_set_band(SERVICE_LORA_BAND band) { -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 /* Only RAK3172 supports hardware high and low frequency detection */ uint8_t hardware_freq = 0; hardware_freq = BoardGetHardwareFreq(); @@ -2113,16 +2067,11 @@ int32_t service_lora_send(uint8_t *buff, uint32_t len, SERVICE_LORA_SEND_INFO in LoRaMacStatus_t status = LoRaMacMlmeRequest(&mlmeReq); } - /* Check payload size first before send */ - status = LoRaMacQueryTxPossible( len , &txInfo ); - if(service_get_debug_level()) - { - udrv_serial_log_printf("QueryTxPossible: %s, UserDataSize %d PossibleDataSize %d AdditionalFOptsSize %d\r\n", MacStatusStrings[status], len, txInfo.MaxPossibleApplicationDataSize, (txInfo.CurrentPossiblePayloadSize - txInfo.MaxPossibleApplicationDataSize)); - } - if( status != LORAMAC_STATUS_OK ) /* if invalid, still send null packet for respond ack and trigger adr mechaniam */ + + if( LoRaMacQueryTxPossible( len , &txInfo ) != LORAMAC_STATUS_OK ) { - //LORA_TEST_DEBUG("status %d CurrentPossiblePayloadSize %d MaxPossibleApplicationDataSize %d", - //status,txInfo.CurrentPossiblePayloadSize,txInfo.MaxPossibleApplicationDataSize); + LORA_TEST_DEBUG("status %d CurrentPossiblePayloadSize %d MaxPossibleApplicationDataSize %d", + status,txInfo.CurrentPossiblePayloadSize,txInfo.MaxPossibleApplicationDataSize); // Send empty frame in order to flush MAC commands mcpsReq.Type = MCPS_UNCONFIRMED; mcpsReq.Req.Unconfirmed.fBuffer = NULL; @@ -2182,27 +2131,6 @@ int32_t service_lora_send(uint8_t *buff, uint32_t len, SERVICE_LORA_SEND_INFO in LORA_TEST_DEBUG("status %d",status); LORA_TEST_DEBUG("DutyCycleWaitTime %d",mcpsReq.ReqReturn.DutyCycleWaitTime); - if(service_get_debug_level()) - { - MibRequestConfirm_t mibReq; - LoRaMacStatus_t status; - - mibReq.Type = MIB_NVM_CTXS; - LoRaMacMibGetRequestConfirm(&mibReq); - if ((status = LoRaMacMibGetRequestConfirm(&mibReq)) == LORAMAC_STATUS_OK) - { - udrv_serial_log_printf("Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[0]); - udrv_serial_log_printf("Rx1Frequency:%u\r\n",mibReq.Param.Contexts->RegionGroup2.Channels[1]); - udrv_serial_log_printf("RxCFrequency:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Frequency); - udrv_serial_log_printf("RxC Datarate:%u\r\n",mibReq.Param.Contexts->MacGroup2.MacParamsDefaults.RxCChannel.Datarate); - udrv_serial_log_printf("ChannelsDatarate:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsDatarate); - udrv_serial_log_printf("AdrAckCounter:%u\r\n",mibReq.Param.Contexts->MacGroup1.AdrAckCounter); - udrv_serial_log_printf("ChannelsTxPower:%u\r\n",mibReq.Param.Contexts->MacGroup1.ChannelsTxPower); - } - else - udrv_serial_log_printf("LoRaMacMibGetRequestConfirm ERROR\r\n"); - } - if (status == LORAMAC_STATUS_OK) { if (tx_possible == false) diff --git a/cores/nRF5/component/service/lora/service_lora_lptp.c b/cores/nRF5/component/service/lora/service_lora_lptp.c index 6123e319..fdd5230f 100755 --- a/cores/nRF5/component/service/lora/service_lora_lptp.c +++ b/cores/nRF5/component/service/lora/service_lora_lptp.c @@ -57,7 +57,7 @@ typedef struct { LP_State_st lp_state; -int32_t lora_send_subcontract(void); +void lora_send_subcontract(void); void printf_hex(uint8_t *pdata, uint16_t len) { @@ -100,7 +100,7 @@ void service_lora_lptp_send_callback(int status) } } -int32_t lora_send_subcontract(void) +void lora_send_subcontract(void) { uint32_t data_offset, data_remain_len; uint16_t payload_len; @@ -166,7 +166,7 @@ int32_t lora_send_subcontract(void) } info.retry_valid = false; - return service_lora_send(AppData, AppLen, info, false); + service_lora_send(AppData, AppLen, info, false); // udrv_serial_log_printf("(Send data is: "); // printf_hex(AppData, AppLen); @@ -203,7 +203,9 @@ int32_t service_lora_lptp_send(uint8_t port, bool ack, uint8_t *p_data, uint16_t AppPort = port; - return lora_send_subcontract(); + lora_send_subcontract(); + + return UDRV_RETURN_OK; } #endif diff --git a/cores/nRF5/component/service/lora/service_lora_p2p.c b/cores/nRF5/component/service/lora/service_lora_p2p.c index c3564710..53160182 100755 --- a/cores/nRF5/component/service/lora/service_lora_p2p.c +++ b/cores/nRF5/component/service/lora/service_lora_p2p.c @@ -15,13 +15,12 @@ #include "service_lora_test.h" #include "soft-se/aes.h" #include "board.h" -#include "service_runtimeConfig.h" #ifdef LORA_CHIP_SX1276 // #include "sx1276Regs-LoRa.h" #define REG_LR_SYNCWORD 0x39 #elif defined LORA_CHIP_SX126X - // #include "sx126x/sx126x.h" + // #include "sx126x.h" #define REG_LR_SYNCWORD 0x0740 #elif defined LORA_CHIP_STM32WLE5XX // #include "radio_driver.h" @@ -36,7 +35,6 @@ static rui_lora_p2p_recv_t recv_data_pkg; void radio_set_syncword( uint16_t syncword); void (*service_lora_p2p_send_callback)(void); -void (*service_lora_p2p_send_CAD_callback)(bool); void (*service_lora_p2p_recv_callback)(rui_lora_p2p_recv_t recv_data_pkg); /* Radio events function pointer */ @@ -47,8 +45,7 @@ LORA_P2P_STATUS_ST lora_p2p_status = { .isRadioBusy = false, .isContinue = false, .isContinue_no_exit = false, - .isContinue_compatible_tx = false, - .isCAD = false + .isContinue_compatible_tx = false }; static uint8_t lora_p2p_buf[255]; @@ -68,19 +65,12 @@ static void OnTxDone(void) lora_p2p_status.isRadioBusy = false; LORA_P2P_DEBUG("%s\r\n", __func__); - if (service_get_debug_level()) { - udrv_serial_log_printf("%s\r\n", __func__); - } LORA_TEST_DEBUG("service_lora_p2p_send_callback %08x",service_lora_p2p_send_callback); if ((*service_lora_p2p_send_callback)!=NULL) { (*service_lora_p2p_send_callback)(); } - if (SERVICE_LORA_P2P == service_lora_get_nwm()) - udrv_serial_log_printf("+EVT:TXP2P DONE\r\n"); - else - udrv_serial_log_printf("+EVT:TXFSK DONE\r\n"); udrv_powersave_wake_unlock(); @@ -107,7 +97,6 @@ static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) { LORA_TEST_DEBUG(); uint8_t outdata[256], cut_length; - memset(outdata,'\0',sizeof(outdata)); if (size % 16) { /* Normal processing will not be executed here */ @@ -130,7 +119,7 @@ static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) recv_data_pkg.Rssi = rssi; recv_data_pkg.Snr = snr; recv_data_pkg.BufferSize = size; - recv_data_pkg.Buffer = lora_p2p_buf; + recv_data_pkg.Buffer = payload; if((*service_lora_p2p_recv_callback)!=NULL) { @@ -150,9 +139,6 @@ static void OnTxTimeout(void) { lora_p2p_status.isRadioBusy = false; LORA_P2P_DEBUG("%s\r\n", __func__); - if (service_get_debug_level()) { - udrv_serial_log_printf("%s\r\n", __func__); - } } static void OnRxTimeout(void) @@ -209,80 +195,40 @@ static void OnRxError(void) } } -static void OnCadDone(bool channelActivityDetected) -{ - if ((*service_lora_p2p_send_CAD_callback)!=NULL) - { - (*service_lora_p2p_send_CAD_callback)(channelActivityDetected); - } - if(channelActivityDetected == true) - lora_p2p_status.isRadioBusy = false; - lora_p2p_status.isCAD = false; -} - - int32_t service_lora_p2p_config(void) { uint32_t timeOnAir = 0x00FFFFFF; - uint32_t bandwidth, codingrate, Frequency; + uint32_t bandwidth, codingrate; bool rxContinuous = false; - uint8_t Powerdbm, Spreadfact; - uint16_t Preamlen; + uint32_t Frequency = service_nvm_get_freq_from_nvm(); + uint8_t Powerdbm = service_nvm_get_powerdbm_from_nvm(); + uint8_t Spreadfact = service_nvm_get_sf_from_nvm(); + uint16_t Preamlen = service_nvm_get_preamlen_from_nvm(); bool fix_length_payload = service_nvm_get_fix_length_payload_from_nvm(); bool iqinverted = service_nvm_get_iqinverted_from_nvm(); uint32_t symbol_timeout = service_nvm_get_symbol_timeout_from_nvm(); uint32_t deviation = service_nvm_get_fdev_from_nvm(); uint32_t bitrate = service_nvm_get_bitrate_from_nvm(); uint16_t syncword = service_nvm_get_syncword_from_nvm(); - - if (get_useRuntimeConfigP2P()) { - runtimeConfigP2P_t runtimeConfigP2P; - get_runtimeConfigP2P(&runtimeConfigP2P); - - Frequency = runtimeConfigP2P.frequency; - Powerdbm = runtimeConfigP2P.txpower; - Spreadfact = runtimeConfigP2P.spreading_factor; - Preamlen = runtimeConfigP2P.preamble_length; - - if (SERVICE_LORA_P2P == service_lora_get_nwm()) - { - bandwidth = runtimeConfigP2P.bandwidth; - } - else if (SERVICE_LORA_FSK == service_lora_get_nwm()) - { - //Because RadioGetFskBandwidthRegValue( bandwidth << 1 ); - // SX126x badwidth is double sided - bandwidth = (runtimeConfigP2P.fsk_rxbw >> 1); - } - - codingrate = runtimeConfigP2P.coding_rate + 1; + if (SERVICE_LORA_P2P == service_lora_get_nwm()) + { + bandwidth = service_lora_p2p_get_bandwidth(); } - else { - Frequency = service_nvm_get_freq_from_nvm(); - Powerdbm = service_nvm_get_powerdbm_from_nvm(); - Spreadfact = service_nvm_get_sf_from_nvm(); - Preamlen = service_nvm_get_preamlen_from_nvm(); - - if (SERVICE_LORA_P2P == service_lora_get_nwm()) - { - bandwidth = service_lora_p2p_get_bandwidth(); - } - else if (SERVICE_LORA_FSK == service_lora_get_nwm()) - { - //Because RadioGetFskBandwidthRegValue( bandwidth << 1 ); - // SX126x badwidth is double sided - bandwidth = (service_lora_p2p_get_bandwidth() >> 1); - } - - codingrate = service_nvm_get_codingrate_from_nvm() + 1; + else if (SERVICE_LORA_FSK == service_lora_get_nwm()) + { + //Because RadioGetFskBandwidthRegValue( bandwidth << 1 ); + // SX126x badwidth is double sided + bandwidth = (service_lora_p2p_get_bandwidth() >> 1); } + codingrate = service_nvm_get_codingrate_from_nvm() + 1; + if (SERVICE_LORA_P2P == service_lora_get_nwm()) { + if( service_nvm_get_symbol_timeout_from_nvm() == 0) rxContinuous = true; - Radio.SetTxConfig(MODEM_LORA, Powerdbm, 0, bandwidth, Spreadfact, codingrate, Preamlen, fix_length_payload, @@ -316,6 +262,7 @@ int32_t service_lora_p2p_config(void) } Radio.SetChannel(Frequency); + LORA_P2P_DEBUG("Freq %d, SF %d, Bandwidth %d, CodeRate %d, Preamlen %d, TxPower %d\r\n", Frequency, Spreadfact, bandwidth, codingrate, @@ -333,7 +280,6 @@ int32_t service_lora_p2p_init(void) RadioEvents.TxTimeout = OnTxTimeout; RadioEvents.RxTimeout = OnRxTimeout; RadioEvents.RxError = OnRxError; - RadioEvents.CadDone = OnCadDone; Radio.Init(&RadioEvents); @@ -342,7 +288,7 @@ int32_t service_lora_p2p_init(void) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_send(uint8_t *p_data, uint8_t len, bool cad_enable) +int32_t service_lora_p2p_send(uint8_t *p_data, uint8_t len) { if (lora_p2p_status.isRadioBusy == true && lora_p2p_status.isContinue_compatible_tx == false) return -UDRV_BUSY; @@ -356,47 +302,17 @@ int32_t service_lora_p2p_send(uint8_t *p_data, uint8_t len, bool cad_enable) udrv_powersave_wake_lock(); Radio.Standby(); - - lora_p2p_status.isRadioBusy = true; - if(cad_enable == true) - { - //SX126xSetCadParams(0x03,20,10,0x01,0x1); - lora_p2p_status.isCAD = true; - Radio.StartCad(); - while(lora_p2p_status.isCAD == true) - { -#if defined(LORA_CHIP_SX126X) - if(SX126xGetIrqStatus() == 0x0080) - { - RadioOnDioIrq(); - break; - } -#endif - } - - if(lora_p2p_status.isRadioBusy == false) - return -UDRV_BUSY; - } Radio.Send(lora_p2p_buf, len); + lora_p2p_status.isRadioBusy = true; - if (service_get_debug_level()) { - udrv_serial_log_printf("LoRa P2P send data: (%d) ", len); - printf_hex(lora_p2p_buf, len); - udrv_serial_log_printf("\r\n"); - } + // udrv_serial_log_printf("LoRa P2P send data len is %d\r\n", len); + // printf_hex(lora_p2p_buf, len); + // udrv_serial_log_printf("\r\n"); return UDRV_RETURN_OK; } -bool service_lora_p2p_get_radio_stat(void) -{ - if (lora_p2p_status.isRadioBusy || lora_p2p_status.isContinue || lora_p2p_status.isContinue_no_exit || lora_p2p_status.isContinue_compatible_tx) - return true; - else - return false; -} - int32_t service_lora_p2p_recv(uint32_t timeout) { // if ((lora_p2p_status.isRadioBusy == true) && (timeout != 0)) @@ -423,7 +339,6 @@ int32_t service_lora_p2p_recv(uint32_t timeout) if(timeout != 0 && ( lora_p2p_status.isContinue || lora_p2p_status.isContinue_no_exit || lora_p2p_status.isContinue_compatible_tx)) { - udrv_serial_log_printf("P2P_RX_ON already\r\n"); return -UDRV_BUSY; } @@ -485,7 +400,7 @@ int32_t service_lora_p2p_set_freq(uint32_t freq) if ((freq < 150e6) || (freq > 960e6)) return -UDRV_WRONG_ARG; -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 /* Only RAK3172 supports hardware high and low frequency detection */ uint8_t hardware_freq = 0; hardware_freq = BoardGetHardwareFreq(); @@ -511,34 +426,6 @@ int32_t service_lora_p2p_set_freq(uint32_t freq) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_check_runtime_freq(uint32_t freq) -{ - if ((freq < 150e6) || (freq > 960e6)) - return -UDRV_WRONG_ARG; - -#if defined(rak3172) || defined(rak3172T) - /* Only RAK3172 supports hardware high and low frequency detection */ - uint8_t hardware_freq = 0; - hardware_freq = BoardGetHardwareFreq(); - if(hardware_freq) - { - if(freq <= 600e6) - { - return -UDRV_WRONG_ARG; - } - } - else - { - if(freq > 600e6) - { - return -UDRV_WRONG_ARG; - } - } -#endif - - return UDRV_RETURN_OK; -} - uint8_t service_lora_p2p_get_sf(void) { return service_nvm_get_sf_from_nvm(); @@ -555,14 +442,6 @@ int32_t service_lora_p2p_set_sf(uint8_t spreadfact) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_check_runtime_sf(uint8_t spreadfact) -{ - if ((spreadfact < 5) || (spreadfact > 12)) - return -UDRV_WRONG_ARG; - - return UDRV_RETURN_OK; -} - uint32_t service_lora_p2p_get_bandwidth(void) { uint32_t bandwidth = service_nvm_get_bandwidth_from_nvm(); @@ -611,39 +490,6 @@ int32_t service_lora_p2p_set_bandwidth(uint32_t bandwidth) return ret; } -int32_t service_lora_p2p_check_runtime_bandwidth(uint32_t bandwidth) -{ - if (SERVICE_LORA_P2P == service_lora_get_nwm()) - { - - if( bandwidth == 125 ) - { - bandwidth = 0; - } - else if( bandwidth == 250 ) - { - bandwidth = 1; - } - else if( bandwidth == 500 ) - { - bandwidth = 2; - } - else if (bandwidth > 9) - { - return -UDRV_WRONG_ARG; - } - } - else if (SERVICE_LORA_FSK == service_lora_get_nwm()) - { - if (bandwidth > 467000 || bandwidth < 4800) - { - return -UDRV_WRONG_ARG; - } - } - - return UDRV_RETURN_OK; -} - uint8_t service_lora_p2p_get_codingrate(void) { return service_nvm_get_codingrate_from_nvm(); @@ -660,14 +506,6 @@ int32_t service_lora_p2p_set_codingrate(uint8_t codingrate) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_check_runtime_codingrate(uint8_t codingrate) -{ - if ((codingrate < 0) || (codingrate > 3)) - return -UDRV_WRONG_ARG; - - return UDRV_RETURN_OK; -} - uint16_t service_lora_p2p_get_preamlen(void) { return service_nvm_get_preamlen_from_nvm(); @@ -684,14 +522,6 @@ int32_t service_lora_p2p_set_preamlen(uint16_t preamlen) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_check_runtime_preamlen(uint16_t preamlen) -{ - if (preamlen < 5) - return -UDRV_WRONG_ARG; - - return UDRV_RETURN_OK; -} - uint8_t service_lora_p2p_get_powerdbm(void) { return service_nvm_get_powerdbm_from_nvm(); @@ -708,14 +538,6 @@ int32_t service_lora_p2p_set_powerdbm(uint8_t powerdbm) return UDRV_RETURN_OK; } -int32_t service_lora_p2p_check_runtime_powerdbm(uint8_t powerdbm) -{ - if ((powerdbm < 5) || (powerdbm > 22)) - return -UDRV_WRONG_ARG; - - return UDRV_RETURN_OK; -} - bool service_lora_p2p_get_crypto_enable(void) { return service_nvm_get_crypt_enable_from_nvm(); @@ -736,34 +558,13 @@ int32_t service_lora_p2p_set_crypto_key(uint8_t *buff, uint32_t len) return service_nvm_set_crypt_key_to_nvm(buff, len); } -int32_t service_lora_p2p_get_crypto_IV(uint8_t *buff, uint32_t len) -{ - return service_nvm_get_crypt_IV_from_nvm(buff, len); -} - -int32_t service_lora_p2p_set_crypto_IV(uint8_t *buff, uint32_t len) -{ - return service_nvm_set_crypt_IV_to_nvm(buff, len); -} - -bool service_lora_p2p_get_CAD(void) -{ - return service_nvm_get_CAD_from_nvm(); -} - -int32_t service_lora_p2p_set_CAD(bool enable) -{ - return service_nvm_set_CAD_to_nvm(enable); -} - - int32_t service_lora_p2p_encrpty(uint8_t *indata, uint16_t inlen,uint8_t *outdata) { uint8_t buf[255]; uint8_t key[16]; uint16_t i; aes_context ctx; - uint8_t iv[16]; + uint8_t iv[16] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}; uint8_t n_block; uint8_t pad_length; @@ -779,9 +580,8 @@ int32_t service_lora_p2p_encrpty(uint8_t *indata, uint16_t inlen,uint8_t *outdat for (i = 0; i < pad_length; i++) LORA_TEST_DEBUG("%02X", buf[i]); - service_lora_p2p_get_crypto_IV(iv,16); - - service_lora_p2p_get_crypto_key(key, 16); + service_lora_p2p_get_crypto_key(key, 8); + memcpy(&key[8], key, 8); aes_set_key(key, 16, &ctx); crypt_state = aes_cbc_encrypt(buf, outdata, n_block, iv, &ctx); LORA_TEST_DEBUG("crypt_state %d", crypt_state); @@ -796,13 +596,12 @@ int32_t service_lora_p2p_decrpty(uint8_t *indata, uint16_t inlen, uint8_t *outda uint8_t key[16]; uint16_t i; aes_context ctx; - uint8_t iv[16]; + uint8_t iv[16] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}; uint8_t crypt_state; uint8_t cut_length; - service_lora_p2p_get_crypto_IV(iv,16); - - service_lora_p2p_get_crypto_key(key, 16); + service_lora_p2p_get_crypto_key(key, 8); + memcpy(&key[8], key, 8); aes_set_key(key, 16, &ctx); crypt_state = aes_cbc_decrypt(indata, outdata, inlen / 16, iv, &ctx); @@ -1057,14 +856,6 @@ int32_t service_lora_p2p_register_recv_cb(service_lora_p2p_recv_cb_type callback service_lora_p2p_recv_callback = callback; return UDRV_RETURN_OK; } - -int32_t service_lora_p2p_register_send_CAD_cb(service_lora_p2p_send_CAD_cb_type callback) -{ - service_lora_p2p_send_CAD_callback = callback; - return UDRV_RETURN_OK; -} - - uint32_t service_lora_p2p_get_symbol_timeout(void) { return service_nvm_get_symbol_timeout_from_nvm(); diff --git a/cores/nRF5/component/service/lora/service_lora_p2p.h b/cores/nRF5/component/service/lora/service_lora_p2p.h index d5fde1ad..f3eb70d1 100755 --- a/cores/nRF5/component/service/lora/service_lora_p2p.h +++ b/cores/nRF5/component/service/lora/service_lora_p2p.h @@ -52,8 +52,7 @@ typedef enum #elif defined rak11720 #define LORA_CHIP_SX126X #elif defined rak3172 \ - || defined rak3172-sip \ - || defined rak3172T + || defined rak3172-sip #define LORA_CHIP_STM32WLE5XX #endif @@ -83,7 +82,6 @@ typedef struct { bool isContinue; bool isContinue_no_exit; bool isContinue_compatible_tx; - volatile bool isCAD; }LORA_P2P_STATUS_ST; typedef struct rui_lora_p2p_revc @@ -109,13 +107,12 @@ typedef struct rui_lora_p2p_revc typedef void(*service_lora_p2p_send_cb_type)(void); typedef void(*service_lora_p2p_recv_cb_type)(rui_lora_p2p_recv_t recv_data_pkg); -typedef void(*service_lora_p2p_send_CAD_cb_type)(bool); int32_t service_lora_p2p_init(void); int32_t service_lora_p2p_config(void); -int32_t service_lora_p2p_send(uint8_t *p_data, uint8_t len, bool cad_enable); +int32_t service_lora_p2p_send(uint8_t *p_data, uint8_t len); int32_t service_lora_p2p_recv(uint32_t timeout); @@ -123,38 +120,26 @@ uint32_t service_lora_p2p_get_freq (void);; int32_t service_lora_p2p_set_freq (uint32_t freq); -int32_t service_lora_p2p_check_runtime_freq(uint32_t freq); - uint8_t service_lora_p2p_get_sf (void); int32_t service_lora_p2p_set_sf (uint8_t spreadfact); -int32_t service_lora_p2p_check_runtime_sf(uint8_t spreadfact); - uint32_t service_lora_p2p_get_bandwidth (void); int32_t service_lora_p2p_set_bandwidth (uint32_t bandwidth); -int32_t service_lora_p2p_check_runtime_bandwidth(uint32_t bandwidth); - uint8_t service_lora_p2p_get_codingrate (void); int32_t service_lora_p2p_set_codingrate (uint8_t codingrate); -int32_t service_lora_p2p_check_runtime_codingrate(uint8_t codingrate); - uint16_t service_lora_p2p_get_preamlen (void); int32_t service_lora_p2p_set_preamlen (uint16_t preamlen); -int32_t service_lora_p2p_check_runtime_preamlen(uint16_t preamlen); - uint8_t service_lora_p2p_get_powerdbm (void); int32_t service_lora_p2p_set_powerdbm (uint8_t powerdbm); -int32_t service_lora_p2p_check_runtime_powerdbm(uint8_t powerdbm); - bool service_lora_p2p_get_crypto_enable(void); int32_t service_lora_p2p_set_crypto_enable(bool enable); @@ -163,10 +148,6 @@ int32_t service_lora_p2p_get_crypto_key (uint8_t *buff, uint32_t len); int32_t service_lora_p2p_set_crypto_key (uint8_t *buff, uint32_t len); -int32_t service_lora_p2p_get_crypto_IV (uint8_t *buff, uint32_t len); - -int32_t service_lora_p2p_set_crypto_IV (uint8_t *buff, uint32_t len); - uint32_t service_lora_p2p_get_fdev(void); int32_t service_lora_p2p_set_fdev(uint32_t fdev); @@ -181,8 +162,6 @@ int32_t service_lora_p2p_decrpty(uint8_t *indata,uint16_t inlen ,uint8_t *outdat int32_t service_lora_p2p_register_send_cb(service_lora_p2p_send_cb_type callback); -int32_t service_lora_p2p_register_send_CAD_cb(service_lora_p2p_send_CAD_cb_type callback); - int32_t service_lora_p2p_register_recv_cb(service_lora_p2p_recv_cb_type callback); bool service_lora_p2p_get_public_network(void); @@ -205,13 +184,6 @@ uint16_t service_lora_p2p_get_syncword(void); int32_t service_lora_p2p_set_syncword( uint16_t syncword ); -bool service_lora_p2p_get_CAD(void); - -int32_t service_lora_p2p_set_CAD(bool enable); - -bool service_lora_p2p_get_radio_stat(void); - - #ifdef __cplusplus } #endif diff --git a/cores/nRF5/component/service/mode/cli/atcmd.c b/cores/nRF5/component/service/mode/cli/atcmd.c index e12c0a0b..48decb3c 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd.c +++ b/cores/nRF5/component/service/mode/cli/atcmd.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "variant.h" #include "atcmd.h" @@ -40,7 +41,7 @@ #endif #include "udrv_serial.h" #include "service_mode_cli.h" -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 #include "uhal_system.h" #endif #ifdef RAK5010_EVB @@ -133,7 +134,7 @@ at_cmd_info atcmd_info_tbl[] = {ATCMD_HWID, /*14*/ At_GetHwID, 0, "get the string of the hardware id", AT_HWID_PERM}, {ATCMD_ALIAS, /*89*/ At_Alias, 0, "add an alias name to the device", AT_ALIAS_PERM}, {ATCMD_SYSV, /*92*/ At_GetSysVolt, 0, "get the System Voltage", AT_SYSV_PERM}, -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 {ATCMD_UID, /*91*/ At_GetUid, 0, "", AT_UID_PERM}, #endif #ifdef SUPPORT_BLE @@ -151,9 +152,7 @@ at_cmd_info atcmd_info_tbl[] = {ATCMD_PWORD, /*11*/ At_Pword, 0, "set the serial port locking password (max 8 char)", AT_PWORD_PERM}, {ATCMD_BAUD, /*12*/ At_Baud, 0, "get or set the serial port baudrate", AT_BAUD_PERM}, {ATCMD_ATM, /*72*/ At_AtCmdMode, 0, "switch to AT command mode", AT_ATM_PERM}, -#ifdef SUPPORT_BINARY {ATCMD_APM, /*73*/ At_ApiMode, 0, "switch to API mode", AT_APM_PERM}, -#endif #ifdef SUPPORT_LORA #ifdef SUPPORT_PASSTHRU {ATCMD_PAM, /*74*/ At_TransparentMode, 0, "enter data transparent transmission mode", ATD_PERM}, @@ -225,9 +224,7 @@ at_cmd_info atcmd_info_tbl[] = {ATCMD_PSEND, /*62*/ At_P2pSend, 0, "send data in P2P mode", AT_PSEND_PERM}, {ATCMD_PRECV, /*63*/ At_P2pRecv, 0, "enter P2P RX mode for a period of time (ms)", AT_PRECV_PERM}, {ATCMD_PCRYPT, /*64*/ At_P2pCrypt, 0, "get or set the encryption status of P2P mode", AT_ENCRY_PERM}, - {ATCMD_PCAD, /*00*/ At_P2pCAD, 0, "get or set the Channel Activity Detection status of P2P mode", AT_PCAD_PERM}, - {ATCMD_PKEY, /*65*/ At_P2pKey, 0, "get or set the encryption key of P2P mode (16 bytes in hex)", AT_ENCKEY_PERM}, - {ATCMD_PIV, /*00*/ At_P2pIV, 0, "get or set the encryption IV of P2P mode (16 bytes in hex)", AT_ENCIV_PERM}, + {ATCMD_PKEY, /*65*/ At_P2pKey, 0, "get or set the encryption key of P2P mode (8 bytes in hex)", AT_ENCKEY_PERM}, {ATCMD_P2P, /*66*/ At_P2p, 0, "get or set all P2P parameters", AT_P2P_PERM}, {ATCMD_PBR, /*67*/ At_Pbr, 0, "get or set the P2P FSK modem bitrate (600-300000 b/s)", AT_PBR_PERM}, {ATCMD_PFDEV, /*68*/ At_Pfdev, 0, "get or set the P2P FSK modem frequency deviation (600-200000 hz)", AT_PFDEV_PERM}, @@ -340,7 +337,6 @@ int At_Parser (SERIAL_PORT port, char *buff, int len) int i, j, help = 0; int nRet = AT_ERROR; int is_write = 0; - char perm[8]={0}; char cmd[MAX_CMD_LEN], operat = 0; //cmd len 32 should be enough stParam param; @@ -457,17 +453,7 @@ int At_Parser (SERIAL_PORT port, char *buff, int len) //followed by the help of all commands: At_CmdList(port, ¶m); } else { - memset(perm,'\0',sizeof(perm)); - if (atcmd_info_tbl[i].permission & ATCMD_PERM_DISABLE) - strcpy(perm,"Disable"); - else if (atcmd_info_tbl[i].permission & ATCMD_PERM_WRITEONCEREAD) - strcpy(perm,"R*"); - else - if (atcmd_info_tbl[i].permission & ATCMD_PERM_READ) - strcpy(perm+strlen(perm),"R"); - if (atcmd_info_tbl[i].permission & ATCMD_PERM_WRITE) - strcpy(perm+strlen(perm),"W"); - atcmd_printf("%s,%s: %s\r\n", atcmd_info_tbl[i].atCmd, perm, atcmd_info_tbl[i].CmdUsage); + atcmd_printf("%s: %s\r\n", atcmd_info_tbl[i].atCmd, atcmd_info_tbl[i].CmdUsage); } nRet = AT_OK; } else { @@ -521,17 +507,7 @@ int At_Parser (SERIAL_PORT port, char *buff, int len) sprintf(cust_atcmd_buff, "%s%s", "ATC+", atcmd_cust_tbl[j].atCmd); if (help) { - memset(perm,'\0',sizeof(perm)); - if (atcmd_cust_tbl[i].permission & ATCMD_PERM_DISABLE) - strcpy(perm,"Disable"); - else if (atcmd_cust_tbl[i].permission & ATCMD_PERM_WRITEONCEREAD) - strcpy(perm,"R*"); - else - if (atcmd_cust_tbl[i].permission & ATCMD_PERM_READ) - strcpy(perm+strlen(perm),"R"); - if (atcmd_cust_tbl[i].permission & ATCMD_PERM_WRITE) - strcpy(perm+strlen(perm),"W"); - atcmd_printf("%s,%s: %s\r\n", cust_atcmd_buff, perm, atcmd_cust_tbl[j].CmdUsage); + atcmd_printf("%s: %s\r\n", cust_atcmd_buff, atcmd_cust_tbl[j].CmdUsage); nRet = AT_OK; } else { if (atcmd_cust_tbl[j].permission & ATCMD_PERM_DISABLE) @@ -717,6 +693,19 @@ uint8_t at_check_digital_uint32_t(const char *p_str, uint32_t *value) return 1; } + for (uint8_t i=0; iargc == 1 && !strcmp(param->argv[0], "?")) { diff --git a/cores/nRF5/component/service/mode/cli/atcmd_general.h b/cores/nRF5/component/service/mode/cli/atcmd_general.h index d2583e34..9da4ee81 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_general.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_general.h @@ -24,7 +24,7 @@ int At_Alias (SERIAL_PORT port, char *cmd, stParam *param); int At_GetSysVolt (SERIAL_PORT port, char *cmd, stParam *param); int At_Bootver (SERIAL_PORT port, char *cmd, stParam *param); #endif -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 int At_GetUid (SERIAL_PORT port, char *cmd, stParam *param); #endif #ifdef SUPPORT_BLE diff --git a/cores/nRF5/component/service/mode/cli/atcmd_general_def.h b/cores/nRF5/component/service/mode/cli/atcmd_general_def.h index d99bb42e..41171e7e 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_general_def.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_general_def.h @@ -216,7 +216,7 @@ #define ATCMD_HWID "AT+HWID" #define ATCMD_ALIAS "AT+ALIAS" #define ATCMD_SYSV "AT+SYSV" -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 #define ATCMD_UID "AT+UID" #endif #ifdef SUPPORT_BLE diff --git a/cores/nRF5/component/service/mode/cli/atcmd_join_send.c b/cores/nRF5/component/service/mode/cli/atcmd_join_send.c index 35e583fa..13966344 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_join_send.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_join_send.c @@ -209,11 +209,10 @@ int At_CfMode(SERIAL_PORT port, char *cmd, stParam *param) int At_CfStatus(SERIAL_PORT port, char *cmd, stParam *param) { - if (SERVICE_LORAWAN != service_lora_get_nwm()) + if (SERVICE_LORA_P2P == service_lora_get_nwm()) { return AT_MODE_NO_SUPPORT; } - if (param->argc == 1 && !strcmp(param->argv[0], "?")) { atcmd_printf("%s=%u\r\n", cmd, service_lora_get_cfs()); @@ -491,12 +490,6 @@ int At_Lpsend(SERIAL_PORT port, char *cmd, stParam *param) uint16_t lp_port,lp_ack; uint16_t lp_len; uint8_t lp_buffer[1024]; - int32_t ret; - if (SERVICE_LORAWAN != service_lora_get_nwm()) - { - return AT_MODE_NO_SUPPORT; - } - if (param->argc == 1 && !strcmp(param->argv[0], "?")) { return AT_PARAM_ERROR; @@ -544,35 +537,14 @@ int At_Lpsend(SERIAL_PORT port, char *cmd, stParam *param) if (lp_ack > 1) return AT_PARAM_ERROR; - if (lp_port < 1 || lp_port > 223) - { + if (lp_port > 223) return AT_PARAM_ERROR; - } if (0 != at_check_hex_param(param->argv[2], lp_len, lp_buffer)) return AT_PARAM_ERROR; - ret = service_lora_lptp_send(lp_port,lp_ack,lp_buffer,lp_len/2); - if (ret == UDRV_RETURN_OK) - { - return AT_OK; - } - else if (ret == -UDRV_NO_WAN_CONNECTION) - { - return AT_NO_NETWORK_JOINED; - } - else if (ret == -UDRV_BUSY) - { - return AT_BUSY_ERROR; - } - else if(ret == -UDRV_WRONG_ARG ) - { - return AT_PARAM_ERROR; - } - else - { - return AT_ERROR; - } + service_lora_lptp_send(lp_port,lp_ack,lp_buffer,lp_len/2); + return AT_OK; } } #endif diff --git a/cores/nRF5/component/service/mode/cli/atcmd_misc.c b/cores/nRF5/component/service/mode/cli/atcmd_misc.c index 1c5cc26f..4393491c 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_misc.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_misc.c @@ -12,12 +12,15 @@ #ifndef RUI_BOOTLOADER int At_Factory (SERIAL_PORT port, char *cmd, stParam *param) { if (param->argc == 0) { - uint32_t page_size = 2048; - uint8_t buff[page_size]; + #ifdef rak11720 + uint8_t buff[8192]; + #else + uint8_t buff[4096]; + #endif - udrv_flash_read(MCU_SYS_CONFIG_NVM_ADDR, page_size, buff); - udrv_flash_erase(MCU_FACTORY_DEFAULT_NVM_ADDR, page_size); - udrv_flash_write(MCU_FACTORY_DEFAULT_NVM_ADDR, page_size, buff); + udrv_flash_read(MCU_SYS_CONFIG_NVM_ADDR, udrv_flash_get_page_size(), buff); + udrv_flash_erase(MCU_FACTORY_DEFAULT_NVM_ADDR, udrv_flash_get_page_size()); + udrv_flash_write(MCU_FACTORY_DEFAULT_NVM_ADDR, udrv_flash_get_page_size(), buff); return AT_OK; } else { return AT_PARAM_ERROR; diff --git a/cores/nRF5/component/service/mode/cli/atcmd_multicast.c b/cores/nRF5/component/service/mode/cli/atcmd_multicast.c index 1c0e9653..e172acd6 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_multicast.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_multicast.c @@ -52,9 +52,7 @@ int At_Addmulc(SERIAL_PORT port, char *cmd, stParam *param) return AT_PARAM_ERROR; if(param->argv[5][0] == '0') { - if (!strcmp(param->argv[5], "0")) - Datarate_u32 = 0; - else if( 0 != at_check_digital_uint32_t( param->argv[5] + 1, &Datarate_u32)) + if( 0 != at_check_digital_uint32_t( param->argv[5] + 1, &Datarate_u32)) return AT_PARAM_ERROR; } else diff --git a/cores/nRF5/component/service/mode/cli/atcmd_nwk_management.c b/cores/nRF5/component/service/mode/cli/atcmd_nwk_management.c index a80a69c4..a68e7459 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_nwk_management.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_nwk_management.c @@ -150,7 +150,7 @@ int At_DataRate (SERIAL_PORT port, char *cmd, stParam *param) int32_t ret; if (param->argc == 1 && !strcmp(param->argv[0], "?")) { - atcmd_printf("%s=%u\r\n", cmd, service_lora_get_dr()); + atcmd_printf("%s=%u\r\n", cmd, service_nvm_get_dr_from_nvm()); return AT_OK; } else if (param->argc == 1) { uint32_t dr; diff --git a/cores/nRF5/component/service/mode/cli/atcmd_p2p.c b/cores/nRF5/component/service/mode/cli/atcmd_p2p.c index 2e9bd480..fdd7893e 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_p2p.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_p2p.c @@ -8,7 +8,6 @@ #include "service_lora.h" #include "service_lora_test.h" #include "service_lora_p2p.h" -#include "service_runtimeConfig.h" #include "board.h" static void dump_hex2str(uint8_t *buf, uint8_t len) @@ -32,11 +31,6 @@ int At_NwkWorkMode(SERIAL_PORT port, char *cmd, stParam *param) if (strlen(param->argv[0]) != 1) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if ((param->argv[0][0] == '0') || (param->argv[0][0] == '1')||(param->argv[0][0] == '2')) { if (service_lora_set_nwm((SERVICE_LORA_WORK_MODE)atoi(param->argv[0])) == UDRV_RETURN_OK) { @@ -81,11 +75,6 @@ int At_P2pFreq(SERIAL_PORT port, char *cmd, stParam *param) if ((frequency < 150e6) || (frequency > 960e6)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - status = service_lora_p2p_set_freq(frequency); return at_error_code_form_udrv(status); } @@ -117,11 +106,6 @@ int At_P2pSF(SERIAL_PORT port, char *cmd, stParam *param) if ((spreading_factor < 5) || (spreading_factor > 12)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if (service_lora_p2p_set_sf((uint8_t)spreading_factor) != UDRV_RETURN_OK) { return AT_ERROR; @@ -156,11 +140,6 @@ int At_P2pBW(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_digital_uint32_t(param->argv[0], &bandwidth)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - status = service_lora_p2p_set_bandwidth(bandwidth); return at_error_code_form_udrv(status); } @@ -190,11 +169,6 @@ int At_P2pCR(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_digital_uint32_t(param->argv[0], &coding_rate)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - status = service_lora_p2p_set_codingrate((uint8_t)coding_rate) ; return at_error_code_form_udrv(status); @@ -230,11 +204,6 @@ int At_P2pPL(SERIAL_PORT port, char *cmd, stParam *param) if(preamble_length > 65535) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if (service_lora_p2p_set_preamlen((uint16_t)preamble_length) != UDRV_RETURN_OK) { return AT_ERROR; @@ -270,11 +239,6 @@ int At_P2pTP(SERIAL_PORT port, char *cmd, stParam *param) if ((txpower < 5) || (txpower > 22)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if (service_lora_p2p_set_powerdbm((uint8_t)txpower) != UDRV_RETURN_OK) { return AT_ERROR; @@ -310,8 +274,8 @@ int At_P2pSend(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_hex_param(param->argv[0], datalen, lora_data)) return AT_PARAM_ERROR; - bool cad_enable = service_lora_p2p_get_CAD(); - if (-UDRV_BUSY == service_lora_p2p_send(lora_data, datalen / 2, cad_enable)) + + if (-UDRV_BUSY == service_lora_p2p_send(lora_data, datalen / 2)) return AT_BUSY_ERROR; return AT_OK; @@ -331,15 +295,7 @@ int At_P2pRecv(SERIAL_PORT port, char *cmd, stParam *param) return AT_MODE_NO_SUPPORT; } - if (param->argc == 1 && !strcmp(param->argv[0], "?")) - { - if (service_lora_p2p_get_radio_stat()) - atcmd_printf("P2P_RX_ON\r\n"); - else - atcmd_printf("P2P_RX_OFF\r\n"); - return AT_OK; - } - else if (param->argc == 1) + if (param->argc == 1) { uint32_t timeout; @@ -381,11 +337,6 @@ int At_P2pCrypt(SERIAL_PORT port, char *cmd, stParam *param) if (crypto_enable > 1) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if (service_lora_p2p_set_crypto_enable((bool)crypto_enable) != UDRV_RETURN_OK) { return AT_ERROR; @@ -399,43 +350,6 @@ int At_P2pCrypt(SERIAL_PORT port, char *cmd, stParam *param) } } - -int At_P2pCAD(SERIAL_PORT port, char *cmd, stParam *param) -{ - if (SERVICE_LORAWAN == service_lora_get_nwm()) - { - return AT_MODE_NO_SUPPORT; - } - - if (param->argc == 1 && !strcmp(param->argv[0], "?")) - { - atcmd_printf("%s=%u\r\n", cmd, service_lora_p2p_get_CAD()); - return AT_OK; - } - else if (param->argc == 1) - { - uint32_t crypto_enable; - - if (0 != at_check_digital_uint32_t(param->argv[0], &crypto_enable)) - return AT_PARAM_ERROR; - - if (crypto_enable > 1) - return AT_PARAM_ERROR; - - if (service_lora_p2p_set_CAD((bool)crypto_enable) != UDRV_RETURN_OK) - { - return AT_ERROR; - } - - return AT_OK; - } - else - { - return AT_PARAM_ERROR; - } -} - - int At_P2pKey(SERIAL_PORT port, char *cmd, stParam *param) { if (SERVICE_LORAWAN == service_lora_get_nwm()) @@ -445,81 +359,28 @@ int At_P2pKey(SERIAL_PORT port, char *cmd, stParam *param) if (param->argc == 1 && !strcmp(param->argv[0], "?")) { - uint8_t rbuff[17]; - memset(rbuff,'\0',sizeof(rbuff)); - if (service_lora_p2p_get_crypto_key(rbuff, 16) != UDRV_RETURN_OK) + uint8_t rbuff[8]; + if (service_lora_p2p_get_crypto_key(rbuff, 8) != UDRV_RETURN_OK) { return AT_ERROR; } - //atcmd_printf("%s=%s\r\n", cmd,rbuff); atcmd_printf("%s=", cmd); - dump_hex2str(rbuff, 16); + dump_hex2str(rbuff, 8); return AT_OK; } else if (param->argc == 1) { uint32_t datalen; - uint8_t crypt_key[16]; - datalen = strlen(param->argv[0]); - if (datalen != 32) - return AT_PARAM_ERROR; - - if (0 != at_check_hex_param(param->argv[0], 32, crypt_key)) - return AT_PARAM_ERROR; - - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - - if (service_lora_p2p_set_crypto_key(crypt_key, 16) != UDRV_RETURN_OK) - return AT_ERROR; - - return AT_OK; - } - else - { - return AT_PARAM_ERROR; - } -} + uint8_t crypt_key[8]; -int At_P2pIV (SERIAL_PORT port, char *cmd, stParam *param) -{ - if (SERVICE_LORAWAN == service_lora_get_nwm()) - { - return AT_MODE_NO_SUPPORT; - } - - if (param->argc == 1 && !strcmp(param->argv[0], "?")) - { - uint8_t rbuff[17]; - memset(rbuff,'\0',sizeof(rbuff)); - if (service_lora_p2p_get_crypto_IV(rbuff, 16) != UDRV_RETURN_OK) - { - return AT_ERROR; - } - //atcmd_printf("%s=%s\r\n", cmd,rbuff); - atcmd_printf("%s=", cmd); - dump_hex2str(rbuff, 16); - return AT_OK; - } - else if (param->argc == 1) - { - uint32_t datalen; - uint8_t crypt_iv[16]; datalen = strlen(param->argv[0]); - if (datalen != 32) + if (datalen != 16) return AT_PARAM_ERROR; - if (0 != at_check_hex_param(param->argv[0], 32, crypt_iv)) + if (0 != at_check_hex_param(param->argv[0], 16, crypt_key)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - - if (service_lora_p2p_set_crypto_IV(crypt_iv, 16) != UDRV_RETURN_OK) + if (service_lora_p2p_set_crypto_key(crypt_key, 8) != UDRV_RETURN_OK) return AT_ERROR; return AT_OK; @@ -530,7 +391,6 @@ int At_P2pIV (SERIAL_PORT port, char *cmd, stParam *param) } } - int At_P2p(SERIAL_PORT port, char *cmd, stParam *param) { if (SERVICE_LORAWAN == service_lora_get_nwm()) @@ -540,36 +400,21 @@ int At_P2p(SERIAL_PORT port, char *cmd, stParam *param) if (param->argc == 1 && !strcmp(param->argv[0], "?")) { - if (get_useRuntimeConfigP2P()) - { - runtimeConfigP2P_t runtimeConfigP2P; - get_runtimeConfigP2P(&runtimeConfigP2P); - atcmd_printf("%s=", cmd); - atcmd_printf("%u:", runtimeConfigP2P.frequency); - atcmd_printf("%u:", runtimeConfigP2P.spreading_factor); - atcmd_printf("%u:", runtimeConfigP2P.bandwidth); - atcmd_printf("%u:", runtimeConfigP2P.coding_rate); - atcmd_printf("%u:", runtimeConfigP2P.preamble_length); - atcmd_printf("%u\r\n", runtimeConfigP2P.txpower); - } - else - { - atcmd_printf("%s=", cmd); - atcmd_printf("%u:", service_lora_p2p_get_freq()); - atcmd_printf("%u:", service_lora_p2p_get_sf()); - atcmd_printf("%u:", service_lora_p2p_get_bandwidth()); - atcmd_printf("%u:", service_lora_p2p_get_codingrate()); - atcmd_printf("%u:", service_lora_p2p_get_preamlen()); - atcmd_printf("%u\r\n",service_lora_p2p_get_powerdbm()); - } + atcmd_printf("%s=", cmd); + atcmd_printf("%u:", service_lora_p2p_get_freq()); + atcmd_printf("%u:", service_lora_p2p_get_sf()); + atcmd_printf("%u:", service_lora_p2p_get_bandwidth()); + atcmd_printf("%u:", service_lora_p2p_get_codingrate()); + atcmd_printf("%u:", service_lora_p2p_get_preamlen()); + atcmd_printf("%u\r\n",service_lora_p2p_get_powerdbm()); return AT_OK; } - else if (param->argc == 6 || (param->argc == 7 && !strcmp(param->argv[6],"0"))) + else if (param->argc == 6) { uint32_t frequency,spreading_factor,bandwidth,coding_rate,preamble_length,txpower; uint32_t o_frequency,o_spreading_factor,o_bandwidth,o_coding_rate,o_preamble_length,o_txpower; uint8_t udrv_code; - + // Preserve current p2p parameters o_frequency = service_lora_p2p_get_freq(); o_spreading_factor = service_lora_p2p_get_sf(); @@ -592,26 +437,6 @@ int At_P2p(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_digital_uint32_t(param->argv[5], &txpower)) return AT_PARAM_ERROR; - if ((frequency < 150e6) || (frequency > 960e6)) - return AT_PARAM_ERROR; - - if ( spreading_factor < 5 || spreading_factor > 12) - return AT_PARAM_ERROR; - - if (coding_rate > 3) - return AT_PARAM_ERROR; - - if(preamble_length< 5 || preamble_length > 65535) - return AT_PARAM_ERROR; - - if (txpower < 5 || txpower > 22) - return AT_PARAM_ERROR; - - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - // Check and save parameters udrv_code = service_lora_p2p_set_freq(frequency); if( udrv_code != UDRV_RETURN_OK) @@ -631,8 +456,6 @@ int At_P2p(SERIAL_PORT port, char *cmd, stParam *param) udrv_code = service_lora_p2p_set_powerdbm((uint8_t)txpower); if( udrv_code != UDRV_RETURN_OK) goto STEP_ATP2P_CHECK_ERROR_CODE; - - set_useRuntimeConfigP2P(false); return AT_OK; STEP_ATP2P_CHECK_ERROR_CODE: @@ -645,121 +468,8 @@ int At_P2p(SERIAL_PORT port, char *cmd, stParam *param) service_lora_p2p_set_powerdbm((uint8_t)o_txpower); //Check and return error code return at_error_code_form_udrv(udrv_code); - } - else if (param->argc == 7 && !strcmp(param->argv[6],"1")) { //for runtime setting - uint32_t frequency,spreading_factor,bandwidth,coding_rate,preamble_length,txpower; - uint32_t o_frequency,o_spreading_factor,o_bandwidth,o_coding_rate,o_preamble_length,o_txpower; - uint8_t udrv_code; - bool o_useRuntimeConfig = get_useRuntimeConfigP2P(); - runtimeConfigP2P_t runtimeConfigP2P; - - // Preserve current p2p parameters - if (o_useRuntimeConfig) { - get_runtimeConfigP2P(&runtimeConfigP2P); - o_frequency = runtimeConfigP2P.frequency; - o_spreading_factor = runtimeConfigP2P.spreading_factor; - if (SERVICE_LORA_P2P == service_lora_get_nwm()) { - o_bandwidth = runtimeConfigP2P.bandwidth; - } - else if (SERVICE_LORA_FSK == service_lora_get_nwm()) { - o_bandwidth = runtimeConfigP2P.fsk_rxbw; - } - o_coding_rate = runtimeConfigP2P.coding_rate; - o_preamble_length = runtimeConfigP2P.preamble_length; - o_txpower = runtimeConfigP2P.txpower; - } - else { - o_frequency = service_lora_p2p_get_freq(); - o_spreading_factor = service_lora_p2p_get_sf(); - o_bandwidth = service_lora_p2p_get_bandwidth(); - o_coding_rate = service_lora_p2p_get_codingrate(); - o_preamble_length = service_lora_p2p_get_preamlen(); - o_txpower = service_lora_p2p_get_powerdbm(); - } - - // Exchange parameters - if (0 != at_check_digital_uint32_t(param->argv[0], &frequency)) - return AT_PARAM_ERROR; - if (0 != at_check_digital_uint32_t(param->argv[1], &spreading_factor)) - return AT_PARAM_ERROR; - if (0 != at_check_digital_uint32_t(param->argv[2], &bandwidth)) - return AT_PARAM_ERROR; - if (0 != at_check_digital_uint32_t(param->argv[3], &coding_rate)) - return AT_PARAM_ERROR; - if (0 != at_check_digital_uint32_t(param->argv[4], &preamble_length)) - return AT_PARAM_ERROR; - if (0 != at_check_digital_uint32_t(param->argv[5], &txpower)) - return AT_PARAM_ERROR; - - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - - // Compatible old SPEC for bandwidth - if (SERVICE_LORA_P2P == service_lora_get_nwm()) { - if( bandwidth == 125 ) { - bandwidth = 0; - } - else if( bandwidth == 250 ) { - bandwidth = 1; - } - else if( bandwidth == 500 ) { - bandwidth = 2; - } - } - - // Check parameters - udrv_code = service_lora_p2p_check_runtime_freq(frequency); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - udrv_code = service_lora_p2p_check_runtime_sf((uint8_t)spreading_factor); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - udrv_code = service_lora_p2p_check_runtime_bandwidth(bandwidth); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - udrv_code = service_lora_p2p_check_runtime_codingrate((uint8_t)coding_rate); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - udrv_code = service_lora_p2p_check_runtime_preamlen((uint16_t)preamble_length); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - udrv_code = service_lora_p2p_check_runtime_powerdbm((uint8_t)txpower); - if( udrv_code != UDRV_RETURN_OK) - goto STEP_ATP2P2_CHECK_ERROR_CODE; - - runtimeConfigP2P.frequency = frequency; - runtimeConfigP2P.spreading_factor = (uint8_t)spreading_factor; - if (SERVICE_LORA_P2P == service_lora_get_nwm()) { - runtimeConfigP2P.bandwidth = bandwidth; - } - else if (SERVICE_LORA_FSK == service_lora_get_nwm()) { - runtimeConfigP2P.fsk_rxbw = bandwidth; - } - runtimeConfigP2P.coding_rate = (uint8_t)coding_rate; - runtimeConfigP2P.preamble_length = (uint16_t)preamble_length; - runtimeConfigP2P.txpower = (uint8_t)txpower; - - set_runtimeConfigP2P(&runtimeConfigP2P); - set_useRuntimeConfigP2P(true); - service_lora_p2p_config(); - return AT_OK; - - STEP_ATP2P2_CHECK_ERROR_CODE: - //Restore the previous parameters - if (!o_useRuntimeConfig) { - service_lora_p2p_set_freq(o_frequency); - service_lora_p2p_set_sf((uint8_t)o_spreading_factor); - service_lora_p2p_set_bandwidth(o_bandwidth); - service_lora_p2p_set_codingrate((uint8_t)o_coding_rate); - service_lora_p2p_set_preamlen((uint16_t)o_preamble_length); - service_lora_p2p_set_powerdbm((uint8_t)o_txpower); - } - //Check and return error code - return at_error_code_form_udrv(udrv_code); - } - else { + }else + { return AT_PARAM_ERROR; } } @@ -788,12 +498,7 @@ int At_Pbr(SERIAL_PORT port, char *cmd, stParam *param) { return AT_PARAM_ERROR; } - - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - + if (service_lora_p2p_set_bitrate(bitrate) != UDRV_RETURN_OK) { return AT_ERROR; @@ -829,11 +534,6 @@ int At_Pfdev(SERIAL_PORT port, char *cmd, stParam *param) if( fdev < 600 || fdev > 200000) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - if (service_lora_p2p_set_fdev(fdev) != UDRV_RETURN_OK) { return AT_ERROR; @@ -873,11 +573,6 @@ int At_iqInver(SERIAL_PORT port, char *cmd, stParam *param) else return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_iqinverted(iqinverted); return at_error_code_form_udrv(ret); } @@ -903,11 +598,6 @@ int At_syncword(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_hex_uint16(param->argv[0], &syncword)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_syncword(syncword); return at_error_code_form_udrv(ret); } @@ -933,11 +623,6 @@ int At_rfFrequency(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_digital_uint32_t(param->argv[0], &frequency)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_freq(frequency); return at_error_code_form_udrv(ret); } @@ -966,11 +651,6 @@ int At_txOutputPower(SERIAL_PORT port, char *cmd, stParam *param) if (txpower < 5 || txpower > 22) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_powerdbm((uint8_t)txpower); return at_error_code_form_udrv(ret); @@ -998,11 +678,6 @@ int At_bandwidth(SERIAL_PORT port, char *cmd, stParam *param) if (0 != at_check_digital_uint32_t(param->argv[0], &bandwidth)) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_bandwidth(bandwidth); return at_error_code_form_udrv(ret); } @@ -1031,11 +706,6 @@ int At_speradingFactor(SERIAL_PORT port, char *cmd, stParam *param) if ( spreading_factor < 5 || spreading_factor > 12) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_sf((uint8_t)spreading_factor); return at_error_code_form_udrv(ret); } @@ -1064,11 +734,6 @@ int At_codingrate(SERIAL_PORT port, char *cmd, stParam *param) if (coding_rate > 3) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_codingrate((uint8_t)coding_rate) ; return at_error_code_form_udrv(ret); } @@ -1097,11 +762,6 @@ int At_preambleLength(SERIAL_PORT port, char *cmd, stParam *param) if(preamble_length< 5 || preamble_length > 65535) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_preamlen((uint16_t)preamble_length); return at_error_code_form_udrv(ret); } @@ -1130,11 +790,6 @@ int At_symbolTimeout(SERIAL_PORT port, char *cmd, stParam *param) if(symbolTimeout > SYMBTIMEOUT_MAX) return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_symbol_timeout((uint16_t)symbolTimeout); return at_error_code_form_udrv(ret); } @@ -1168,11 +823,6 @@ int At_fixLengthPayload(SERIAL_PORT port, char *cmd, stParam *param) else return AT_PARAM_ERROR; - if (service_lora_p2p_get_radio_stat()) { - atcmd_printf("P2P_RX_ON already, please disable P2P RX before setting.\r\n"); - return AT_BUSY_ERROR; - } - int32_t ret = service_lora_p2p_set_fix_length_payload(fixLengthPayloadOn); return at_error_code_form_udrv(ret); } diff --git a/cores/nRF5/component/service/mode/cli/atcmd_p2p.h b/cores/nRF5/component/service/mode/cli/atcmd_p2p.h index 263ba304..f44a3691 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_p2p.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_p2p.h @@ -22,12 +22,8 @@ int At_P2pRecv (SERIAL_PORT port, char *cmd, stParam *param); int At_P2pCrypt (SERIAL_PORT port, char *cmd, stParam *param); -int At_P2pCAD (SERIAL_PORT port, char *cmd, stParam *param); - int At_P2pKey (SERIAL_PORT port, char *cmd, stParam *param); -int At_P2pIV (SERIAL_PORT port, char *cmd, stParam *param); - int At_P2p(SERIAL_PORT port, char *cmd, stParam *param); int At_Pbr(SERIAL_PORT port, char *cmd, stParam *param); diff --git a/cores/nRF5/component/service/mode/cli/atcmd_p2p_def.h b/cores/nRF5/component/service/mode/cli/atcmd_p2p_def.h index 635ac381..2cfc765d 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_p2p_def.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_p2p_def.h @@ -102,7 +102,6 @@ * | Command | Input parameter | Return value | Return code | * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| * | AT+PRECV? | -- | AT+PRECV: enter P2P RX mode for a period of time (ms) | OK | - * | AT+PRECV=? | -- | P2P_RX_OFF or P2P_RX_ON | OK | * | AT+PRECV= | | -- | OK | * | Example
AT+PRECV=| 5000 | -- | OK | * @@ -138,17 +137,16 @@ * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| * | AT+P2P? | -- | AT+P2P: get or set all P2P parameters | OK | * | AT+P2P=? | -- | \,\,\,\,\,\ | OK | - * | AT+P2P= | \,\,\,\,\,\,\ | | OK | - * | Example
AT+P2P= | 868500000,12,0,0,10,22
868500000,8,250,2,24,20:1 | -- | OK | - * | Example
AT+P2P=?| -- | 868000000,7,0,0,8,14 | OK | + * | AT+P2P= | \,\,\,\,\,\ | | OK | + * | Example
AT+P2P= | 868500000,12,125,0,65535,20 | -- | OK | + * | Example
AT+P2P=?| -- | 868000000,7,125,0,8,14 | OK | * * Freq: 150000000-960000000
* SF: 6,7,8,9,10,11,12
* Bandwidth: 0 = 125,1 = 250,2 = 500,3 = 7.8,4 = 10.4,5 = 15.63,6 = 20.83,7 = 31.25,8 = 41.67,9 = 62.5
* CR: 0 = 4/5, 1 = 4/6, 2 = 4/7, 3 = 4/8
- * Preamble Length: 5-65535
+ * Preamble Length: 2-65535
* TX Power = 5-22
- * Runtime Setting = 0-1. Optional. When Runtime Setting is 1, the configure will not store in Flash memory.
* * @subsection ATCMD_p2p_13 AT+PBR: get or set the P2P FSK modem bitrate (600b/s-300000b/s) * @@ -296,44 +294,16 @@ * * @subsection ATCMD_p2p_26 AT+ENCKEY: P2P encryption key * - * This command allows the user to get or set the encryption key of P2P mode (16 bytes in hex) + * This command allows the user to get or set the encryption key of P2P mode (8 bytes in hex) * * | Command | Input parameter | Return value | Return code | * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| - * | AT+ENCKEY? | -- | AT+ENCKEY: get or set the encryption key of P2P mode (16 bytes in hex) | OK | - * | AT+ENCKEY=? | -- | \<16 hex\> | OK | - * | AT+ENCKEY=\ |\<16 hex\> | -- | OK | + * | AT+ENCKEY? | -- | AT+ENCKEY: get or set the encryption key of P2P mode (8 bytes in hex) | OK | + * | AT+ENCKEY=? | -- | \<8 hex\> | OK | + * | AT+ENCKEY=\ |\<8 hex\> | -- | OK | * | Example
AT+ENCKEY= | 0011223344556677 | -- | OK | * | Example
AT+ENCKEY=? | -- | 0011223344556677 | OK | * - * - * @subsection ATCMD_p2p_27 AT+CRYPIV: P2P encryption IV - * - * This command allows the user to get or set the encryption IV of P2P mode (16 bytes in hex) - * - * | Command | Input parameter | Return value | Return code | - * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| - * | AT+CRYPIV? | -- | AT+CRYPIV: get or set the encryption key of P2P mode (16 bytes in hex) | OK | - * | AT+CRYPIV=? | -- | \<16 hex\> | OK | - * | AT+CRYPIV=\ |\<16 hex\> | -- | OK | - * | Example
AT+CRYPIV= | 0011223344556677 | -- | OK | - * | Example
AT+CRYPIV=? | -- | 0011223344556677 | OK | - * - * - * @subsection ATCMD_p2p_28 AT+CAD: P2P Channel Activity Detection - * - * This command allows the user to get or set the Channel Activity Detection of P2P mode - * - * | Command | Input parameter | Return value | Return code | - * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| - * | AT+CAD? | -- | AT+CAD: get or set the Channel Activity Detection of P2P mode ( 1 = on, 0 = off) | OK | - * | AT+CAD=? | -- | \<0 or 1\> | OK | - * | AT+CAD=\ |\<16 hex\> | -- | OK | - * | Example
AT+CAD= |\<0 or 1\> | -- | OK | - * | Example
AT+CAD=? | -- | 0 | OK | - * - * - * */ #endif @@ -342,22 +312,20 @@ #define _ATCMD_P2P_DEF_H_ //### following AT CMD, has doc ### -#define ATCMD_NWM "AT+NWM" -#define ATCMD_PFREQ "AT+PFREQ" -#define ATCMD_PSF "AT+PSF" -#define ATCMD_PBW "AT+PBW" -#define ATCMD_PCR "AT+PCR" -#define ATCMD_PPL "AT+PPL" -#define ATCMD_PTP "AT+PTP" -#define ATCMD_PSEND "AT+PSEND" -#define ATCMD_PRECV "AT+PRECV" -#define ATCMD_PCRYPT "AT+ENCRY" -#define ATCMD_PCAD "AT+CAD" -#define ATCMD_PKEY "AT+ENCKEY" -#define ATCMD_PIV "AT+CRYPIV" -#define ATCMD_P2P "AT+P2P" -#define ATCMD_PBR "AT+PBR" -#define ATCMD_PFDEV "AT+PFDEV" +#define ATCMD_NWM "AT+NWM" +#define ATCMD_PFREQ "AT+PFREQ" +#define ATCMD_PSF "AT+PSF" +#define ATCMD_PBW "AT+PBW" +#define ATCMD_PCR "AT+PCR" +#define ATCMD_PPL "AT+PPL" +#define ATCMD_PTP "AT+PTP" +#define ATCMD_PSEND "AT+PSEND" +#define ATCMD_PRECV "AT+PRECV" +#define ATCMD_PCRYPT "AT+ENCRY" +#define ATCMD_PKEY "AT+ENCKEY" +#define ATCMD_P2P "AT+P2P" +#define ATCMD_PBR "AT+PBR" +#define ATCMD_PFDEV "AT+PFDEV" #define ATCMD_IQINVER "AT+IQINVER" #define ATCMD_SYNCWORD "AT+SYNCWORD" #define ATCMD_RFFREQUENCY "AT+RFFREQUENCY" diff --git a/cores/nRF5/component/service/mode/cli/atcmd_permission.h b/cores/nRF5/component/service/mode/cli/atcmd_permission.h index 4013e824..146ba2ca 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_permission.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_permission.h @@ -335,25 +335,17 @@ #endif #ifndef AT_PRECV_PERM -#define AT_PRECV_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE +#define AT_PRECV_PERM ATCMD_PERM_WRITE #endif #ifndef AT_ENCRY_PERM #define AT_ENCRY_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE #endif -#ifndef AT_PCAD_PERM -#define AT_PCAD_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE -#endif - #ifndef AT_ENCKEY_PERM #define AT_ENCKEY_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE #endif -#ifndef AT_ENCIV_PERM -#define AT_ENCIV_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE -#endif - #ifndef AT_P2P_PERM #define AT_P2P_PERM ATCMD_PERM_READ | ATCMD_PERM_WRITE #endif diff --git a/cores/nRF5/component/service/mode/cli/atcmd_serial_port.c b/cores/nRF5/component/service/mode/cli/atcmd_serial_port.c index 9797c085..ed2eba0e 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_serial_port.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_serial_port.c @@ -120,13 +120,11 @@ int At_AtCmdMode(SERIAL_PORT port, char *cmd, stParam *param) } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -142,7 +140,7 @@ int At_AtCmdMode(SERIAL_PORT port, char *cmd, stParam *param) return AT_PARAM_ERROR; } } -#ifdef SUPPORT_BINARY + int At_ApiMode(SERIAL_PORT port, char *cmd, stParam *param) { int32_t ret; @@ -188,7 +186,7 @@ int At_ApiMode(SERIAL_PORT port, char *cmd, stParam *param) return AT_PARAM_ERROR; } } -#endif + #ifdef SUPPORT_PASSTHRU int At_TransparentMode(SERIAL_PORT port, char *cmd, stParam *param) { @@ -250,13 +248,11 @@ int At_TransparentMode(SERIAL_PORT port, char *cmd, stParam *param) service_mode_cli_deinit(port); break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; diff --git a/cores/nRF5/component/service/mode/cli/atcmd_sleep_def.h b/cores/nRF5/component/service/mode/cli/atcmd_sleep_def.h index 9cfac37e..ef8229e6 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_sleep_def.h +++ b/cores/nRF5/component/service/mode/cli/atcmd_sleep_def.h @@ -23,22 +23,8 @@ * | Command | Input parameter | Return value | Return code | * |:------------------:|:------------------:|:------------------------------------------------------------------|:------------------:| * | AT+LPM? | -- | AT+LPM: get or set the low power mode
0 = off
1 = on | OK | - * | AT+LPM=? | -- | \ | OK | * | AT+LPM=\ | 0 or 1 | | OK / AT_PARAM_ERROR| * | Example
AT+LPM= | 1 | -- | OK | - * | Example
AT+LPM=?| | 1 | OK | - * - * @subsection ATCMD_sleep_3 AT+LPMLVL: the sleep level for low power mode - * - * This command provides a way to setting sleep level for low power mode to support STM32 STOP Mode. - * - * | Command | Input parameter | Return value | Return code | - * |:---------------------:|:------------------:|:--------------------------------------------------------------------------------------------|:------------------:| - * | AT+LPMLVL? | -- | AT+LPMLVL: get or set the sleep level for low power mode
1 = STOP1 Mode
2 = STOP2 Mode| OK | - * | AT+LPMLVL=? | -- | 1 or 2 | OK | - * | AT+LPMLVL=\ | 1 or 2 | -- | OK / AT_PARAM_ERROR| - * | Example
AT+LPMLVL= | 1 | -- | OK | - * | Example
AT+LPMLVL=?| | 1 | OK | * */ diff --git a/cores/nRF5/component/service/mode/cli/atcmd_supplement.c b/cores/nRF5/component/service/mode/cli/atcmd_supplement.c index ae930dc4..6eceab68 100755 --- a/cores/nRF5/component/service/mode/cli/atcmd_supplement.c +++ b/cores/nRF5/component/service/mode/cli/atcmd_supplement.c @@ -54,7 +54,7 @@ int At_Mask(SERIAL_PORT port, char *cmd, stParam *param) } else if( band == SERVICE_LORA_CN470 ) { - if( mask_param > 0x800 ) + if( mask_param > 0x800 && mask_param != 0x10ff) return AT_PARAM_ERROR; } diff --git a/cores/nRF5/component/service/mode/protocol/service_mode_proto.c b/cores/nRF5/component/service/mode/protocol/service_mode_proto.c index 0767da30..05de71dd 100644 --- a/cores/nRF5/component/service/mode/protocol/service_mode_proto.c +++ b/cores/nRF5/component/service/mode/protocol/service_mode_proto.c @@ -289,7 +289,7 @@ void service_mode_proto_recv(SERIAL_PORT port, uint8_t ch) { proto_wake_unlock_all(port); } } -#ifdef SUPPORT_BINARY + void service_mode_proto_send(SERIAL_PORT port, uint8_t flag, uint8_t frame_type, uint8_t *payload, uint16_t length, SERVICE_MODE_PROTOCOL_HANDLER response_handler) { proto_packet_header header; proto_packet_tailer tailer; @@ -341,7 +341,6 @@ void service_mode_proto_send(SERIAL_PORT port, uint8_t flag, uint8_t frame_type, udrv_serial_write(port, payload, length); udrv_serial_write(port, &tailer, sizeof(tailer)); } -#endif int32_t service_mode_proto_register(uint8_t frame_type, SERVICE_MODE_PROTOCOL_HANDLER request_handler) { if (proto_upper_layer_table[frame_type].request_handler == NULL) { diff --git a/cores/nRF5/component/service/mode/protocol/service_mode_proto_builtin_handler.c b/cores/nRF5/component/service/mode/protocol/service_mode_proto_builtin_handler.c index 0b3a3d72..623e43f1 100644 --- a/cores/nRF5/component/service/mode/protocol/service_mode_proto_builtin_handler.c +++ b/cores/nRF5/component/service/mode/protocol/service_mode_proto_builtin_handler.c @@ -97,7 +97,6 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa #else ret = service_nvm_set_default_config_to_nvm(); #endif - service_nvm_set_cfg_to_nvm(); if (ret == UDRV_RETURN_OK) { nRet = AT_OK; @@ -530,13 +529,11 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -551,7 +548,6 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa } break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_PROTO_ATCMD_APM: { if (flag & PROTO_ATCMD_FLAG_WR_OR_EXE) { @@ -600,7 +596,6 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa } break; } -#endif #ifdef SUPPORT_LORA #ifdef SUPPORT_PASSTHRU case SERVICE_MODE_PROTO_ATCMD_PAM: @@ -631,13 +626,11 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa service_mode_cli_deinit(port); break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -2585,8 +2578,8 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa nRet = AT_PARAM_ERROR; goto out; } - bool cad_enable = service_lora_p2p_get_CAD(); - if (service_lora_p2p_send(arg, payload_len,cad_enable) == UDRV_RETURN_OK) { + + if (service_lora_p2p_send(arg, payload_len) == UDRV_RETURN_OK) { nRet = AT_OK; } else { nRet = AT_ERROR; @@ -2675,20 +2668,20 @@ void service_mode_proto_atcmd_request_handler (SERIAL_PORT port, uint8_t *payloa nRet = AT_PARAM_ERROR; goto out; } - if (service_lora_p2p_set_crypto_key(arg, 16) == UDRV_RETURN_OK) { + if (service_lora_p2p_set_crypto_key(arg, 8) == UDRV_RETURN_OK) { nRet = AT_OK; } else { nRet = AT_ERROR; } } else { - uint8_t rbuff[16]; - if (service_lora_p2p_get_crypto_key(rbuff, 16) != UDRV_RETURN_OK) { + uint8_t rbuff[8]; + if (service_lora_p2p_get_crypto_key(rbuff, 8) != UDRV_RETURN_OK) { nRet = AT_ERROR; goto out; } memset(buff, 0, 256); - reply_len = 16; - memcpy(buff+sizeof(header), rbuff, 16); + reply_len = 8; + memcpy(buff+sizeof(header), rbuff, 8); header.length = __builtin_bswap16(reply_len); header.flag = PROTO_ATCMD_FLAG_RESPONSE; header.atcmd_id = atcmd_id; diff --git a/cores/nRF5/component/service/mode/service_mode.h b/cores/nRF5/component/service/mode/service_mode.h index 91c39d31..7e95e31f 100644 --- a/cores/nRF5/component/service/mode/service_mode.h +++ b/cores/nRF5/component/service/mode/service_mode.h @@ -19,9 +19,7 @@ extern "C" { typedef enum _SERVICE_MODE_TYPE { SERVICE_MODE_TYPE_CLI, -#ifdef SUPPORT_BINARY SERVICE_MODE_TYPE_PROTOCOL, -#endif #ifdef SUPPORT_LORA #ifdef SUPPORT_PASSTHRU SERVICE_MODE_TYPE_TRANSPARENT, diff --git a/cores/nRF5/component/service/nvm/service_nvm.c b/cores/nRF5/component/service/nvm/service_nvm.c index b868a28c..cf4d8e6d 100755 --- a/cores/nRF5/component/service/nvm/service_nvm.c +++ b/cores/nRF5/component/service/nvm/service_nvm.c @@ -50,7 +50,7 @@ int32_t service_nvm_set_default_config_to_nvm(void) { if( factory_default.magic_num == RUI_CFG_MAGIC_NUM && factory_default.version_code == RUI_CFG_VERSION_CODE ) { //If data recovery from legacy version successfully, store new default data to flash - //udrv_flash_write(SERVICE_NVM_FACTORY_DEFAULT_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&factory_default); + udrv_flash_write(SERVICE_NVM_FACTORY_DEFAULT_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&factory_default); factory_default_exist = true; } } @@ -60,8 +60,7 @@ int32_t service_nvm_set_default_config_to_nvm(void) { if( factory_default_exist ) { memcpy(&g_rui_cfg_t,&factory_default,sizeof(PRE_rui_cfg_t)); - return UDRV_RETURN_OK; - //return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); + return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } g_rui_cfg_t.magic_num = RUI_CFG_MAGIC_NUM; g_rui_cfg_t.version_code = RUI_CFG_VERSION_CODE; @@ -130,7 +129,7 @@ int32_t service_nvm_set_default_config_to_nvm(void) { g_rui_cfg_t.lora_work_mode = SERVICE_LORAWAN; /* lorawan configuration */ - #if defined(rak3172) || defined(rak3172T) + #ifdef rak3172 /* Only RAK3172 supports hardware high and low frequency detection */ uint8_t hardware_freq = 0; hardware_freq = BoardGetHardwareFreq(); @@ -171,7 +170,7 @@ int32_t service_nvm_set_default_config_to_nvm(void) { memset(g_rui_cfg_t.g_lora_cfg_t.McSession_group,0x00,4*sizeof(McSession_t)); /* lora p2p configuration */ -#if defined(rak3172) || defined(rak3172T) +#ifdef rak3172 /* Only RAK3172 supports hardware high and low frequency detection */ hardware_freq = BoardGetHardwareFreq(); if(hardware_freq) @@ -199,9 +198,6 @@ int32_t service_nvm_set_default_config_to_nvm(void) { g_rui_cfg_t.g_rui_cfg_ex.syncword = LORA_MAC_PRIVATE_SYNCWORD; g_rui_cfg_t.g_rui_cfg_ex.fix_length_payload = false; memset(g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_key, 0x00, sizeof(g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_key)); - memset(g_rui_cfg_t.g_rui_cfg_ex.crypt_key16, 0x00, sizeof(g_rui_cfg_t.g_rui_cfg_ex.crypt_key16)); - memset(g_rui_cfg_t.g_rui_cfg_ex.crypt_IV, 0x00, sizeof(g_rui_cfg_t.g_rui_cfg_ex.crypt_IV)); - g_rui_cfg_t.g_rui_cfg_ex.CAD = 0; #endif if(sizeof(g_rui_cfg_t.firmware_ver) > strlen(sw_version)) { @@ -226,10 +222,8 @@ int32_t service_nvm_set_default_config_to_nvm(void) { } else memcpy(g_rui_cfg_t.cli_ver,cli_version,32); - - - //return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); - return UDRV_RETURN_OK; + + return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } void service_nvm_init_config(void) { @@ -237,17 +231,11 @@ void service_nvm_init_config(void) { //Try to recovery legacy user data service_nvm_data_recovery_from_legacy(SERVICE_NVM_RUI_CONFIG_NVM_ADDR,&g_rui_cfg_t); if( g_rui_cfg_t.magic_num == RUI_CFG_MAGIC_NUM && g_rui_cfg_t.version_code == RUI_CFG_VERSION_CODE) - { - //udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); - return UDRV_RETURN_OK; - } + udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); else service_nvm_set_default_config_to_nvm(); } -int32_t service_nvm_set_cfg_to_nvm() -{ - return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); -} + /***********************************************************/ /* RUI Mode */ /***********************************************************/ @@ -257,6 +245,8 @@ SERVICE_MODE_TYPE service_nvm_get_mode_type_from_nvm(SERIAL_PORT port) { } int32_t service_nvm_set_mode_type_to_nvm(SERIAL_PORT port, SERVICE_MODE_TYPE mode_type) { + if (mode_type == g_rui_cfg_t.mode_type[port]) + return UDRV_RETURN_OK; g_rui_cfg_t.mode_type[port] = mode_type; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -276,6 +266,8 @@ int32_t service_nvm_set_serial_passwd_to_nvm(uint8_t *passwd, uint32_t len) { if (len > 8) { return -UDRV_WRONG_ARG; } + if (memcmp(g_rui_cfg_t.serial_passwd,passwd,len) == 0) + return UDRV_RETURN_OK; memset(g_rui_cfg_t.serial_passwd, 0, sizeof(g_rui_cfg_t.serial_passwd)); memcpy(g_rui_cfg_t.serial_passwd, passwd, len); @@ -287,6 +279,8 @@ uint32_t service_nvm_get_auto_sleep_time_from_nvm(void) { } int32_t service_nvm_set_auto_sleep_time_to_nvm(uint32_t time) { + if (g_rui_cfg_t.auto_sleep_time == time) + return UDRV_RETURN_OK; g_rui_cfg_t.auto_sleep_time = time; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -297,6 +291,8 @@ uint8_t service_nvm_get_auto_sleep_level_from_nvm(void) { } uint8_t service_nvm_set_auto_sleep_level_to_nvm(uint32_t level) { + if (g_rui_cfg_t.g_rui_cfg_ex.auto_sleep_level == level) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.auto_sleep_level = level; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -321,6 +317,8 @@ int32_t service_nvm_set_firmware_ver_to_nvm(uint8_t *buff, uint32_t len) { return -UDRV_WRONG_ARG; } } + if(memcmp(g_rui_cfg_t.firmware_ver,buff,len) == 0) + return UDRV_RETURN_OK; memset(g_rui_cfg_t.firmware_ver, 0 , sizeof(g_rui_cfg_t.firmware_ver)); memcpy(g_rui_cfg_t.firmware_ver, buff, len); @@ -345,6 +343,8 @@ int32_t service_nvm_set_hwmodel_to_nvm(uint8_t *buff, uint32_t len) { return -UDRV_WRONG_ARG; } } + if(memcmp(g_rui_cfg_t.hwmodel,buff,len) == 0) + return UDRV_RETURN_OK; memset(g_rui_cfg_t.hwmodel, 0 , sizeof(g_rui_cfg_t.hwmodel)); memcpy(g_rui_cfg_t.hwmodel, buff, len); @@ -369,6 +369,8 @@ int32_t service_nvm_set_cli_ver_to_nvm(uint8_t *buff, uint32_t len) { return -UDRV_WRONG_ARG; } } + if(memcmp(g_rui_cfg_t.cli_ver,buff,len) == 0) + return UDRV_RETURN_OK; memset(g_rui_cfg_t.cli_ver, 0 , sizeof(g_rui_cfg_t.cli_ver)); memcpy(g_rui_cfg_t.cli_ver, buff, len); @@ -412,6 +414,8 @@ uint32_t service_nvm_get_delta_sec_from_nvm (void) { } int32_t service_nvm_set_delta_sec_to_nvm (uint32_t sec) { + if(g_rui_cfg_t.g_rtc_delta_t.seconds == sec) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rtc_delta_t.seconds = sec; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -422,6 +426,8 @@ uint32_t service_nvm_get_delta_subsec_from_nvm (void) { } int32_t service_nvm_set_delta_subsec_to_nvm (uint32_t subsec) { + if(g_rui_cfg_t.g_rtc_delta_t.subseconds == subsec) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rtc_delta_t.subseconds = subsec; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -432,6 +438,8 @@ SERIAL_WLOCK_STATE service_nvm_get_lock_status_from_nvm(SERIAL_PORT Port) { } int32_t service_nvm_set_lock_status_to_nvm(SERIAL_PORT Port, SERIAL_WLOCK_STATE wlock_state) { + if(g_rui_cfg_t.serial_lock_status[Port] == wlock_state) + return UDRV_RETURN_OK; g_rui_cfg_t.serial_lock_status[Port] = wlock_state; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -442,6 +450,8 @@ uint32_t service_nvm_get_baudrate_from_nvm(void) { } int32_t service_nvm_set_baudrate_to_nvm(uint32_t baudrate) { + if(g_rui_cfg_t.baudrate == baudrate) + return UDRV_RETURN_OK; g_rui_cfg_t.baudrate = baudrate; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -468,6 +478,8 @@ int32_t service_nvm_set_atcmd_alias_to_nvm(uint8_t *buff, uint32_t len) { return -UDRV_WRONG_ARG; } } + if(memcmp(g_rui_cfg_t.alias,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.alias, buff, len); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -491,6 +503,8 @@ int32_t service_nvm_set_sn_to_nvm (uint8_t *buff, uint32_t len) { if (len != 18) { memset(g_rui_cfg_t.sn, 0 , 18); } + if(memcmp(g_rui_cfg_t.sn,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.sn, buff, len); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -501,6 +515,8 @@ uint8_t service_nvm_get_atcmd_echo_from_nvm(void) { } int32_t service_nvm_set_atcmd_echo_to_nvm(uint8_t atcmd_echo) { + if(g_rui_cfg_t.atcmd_echo == atcmd_echo) + return UDRV_RETURN_OK; g_rui_cfg_t.atcmd_echo = atcmd_echo; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -508,6 +524,8 @@ int32_t service_nvm_set_atcmd_echo_to_nvm(uint8_t atcmd_echo) { uint32_t service_nvm_set_debug_level_to_nvm(uint8_t level) { + if(g_rui_cfg_t.debug_level == level) + return UDRV_RETURN_OK; g_rui_cfg_t.debug_level = level; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -535,6 +553,8 @@ uint8_t service_nvm_set_ble_mac_to_nvm(uint8_t *buff, uint32_t len) return -UDRV_WRONG_ARG; } } + if(memcmp(g_rui_cfg_t.g_ble_cfg_t.mac,buff,sizeof(g_rui_cfg_t.g_ble_cfg_t.mac)) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_ble_cfg_t.mac,buff,sizeof(g_rui_cfg_t.g_ble_cfg_t.mac)); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -558,6 +578,8 @@ SERVICE_LORA_BAND service_nvm_get_band_from_nvm (void) { } int32_t service_nvm_set_band_to_nvm (SERVICE_LORA_BAND band) { + if(g_rui_cfg_t.g_lora_cfg_t.region == band) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.region = band; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -572,6 +594,8 @@ int32_t service_nvm_get_mask_from_nvm (uint16_t *mask) { } int32_t service_nvm_set_mask_to_nvm (uint16_t *mask) { + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.ch_mask,mask,sizeof(g_rui_cfg_t.g_lora_cfg_t.ch_mask)) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.ch_mask, mask, sizeof(g_rui_cfg_t.g_lora_cfg_t.ch_mask)); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -592,6 +616,8 @@ int32_t service_nvm_set_app_eui_to_nvm (uint8_t *buff, uint32_t len) { if (len != 8) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.app_eui,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.app_eui, buff, 8); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -611,6 +637,8 @@ int32_t service_nvm_set_app_key_to_nvm (uint8_t *buff, uint32_t len) { if (len != 16) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.app_key,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.app_key, buff, 16); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -630,6 +658,8 @@ int32_t service_nvm_set_app_skey_to_nvm (uint8_t *buff, uint32_t len) { if (len != 16) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.app_skey,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.app_skey, buff, 16); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -649,6 +679,8 @@ int32_t service_nvm_set_dev_addr_to_nvm (uint8_t *buff, uint32_t len) { if (len != 4) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.dev_addr,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.dev_addr, buff, 4); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -668,6 +700,8 @@ int32_t service_nvm_set_dev_eui_to_nvm (uint8_t *buff, uint32_t len) { if (len != 8) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.dev_eui,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.dev_eui, buff, 8); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -687,6 +721,8 @@ int32_t service_nvm_set_net_id_to_nvm (uint8_t *buff, uint32_t len) { if (len != 4) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.nwk_id,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.nwk_id, buff, 4); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -706,6 +742,8 @@ int32_t service_nvm_set_nwk_skey_to_nvm (uint8_t *buff, uint32_t len) { if (len != 16) { return -UDRV_WRONG_ARG; } + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.nwk_skey,buff,len) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.nwk_skey, buff, 16); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -716,6 +754,8 @@ uint8_t service_nvm_get_retry_from_nvm (void) { } int32_t service_nvm_set_retry_to_nvm (uint8_t retry) { + if(g_rui_cfg_t.g_lora_cfg_t.retry == retry) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.retry = retry; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -726,6 +766,8 @@ SERVICE_LORA_CONFIRM_MODE service_nvm_get_cfm_from_nvm (void) { } int32_t service_nvm_set_cfm_to_nvm (SERVICE_LORA_CONFIRM_MODE cfm) { + if(g_rui_cfg_t.g_lora_cfg_t.confirm == cfm) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.confirm = cfm; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -736,6 +778,8 @@ SERVICE_LORA_WORK_MODE service_nvm_get_nwm_from_nvm (void) { } int32_t service_nvm_set_nwm_to_nvm (SERVICE_LORA_WORK_MODE nwm) { + if(g_rui_cfg_t.lora_work_mode == nwm) + return UDRV_RETURN_OK; g_rui_cfg_t.lora_work_mode = nwm; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -746,6 +790,8 @@ SERVICE_LORA_JOIN_MODE service_nvm_get_njm_from_nvm (void) { } int32_t service_nvm_set_njm_to_nvm (SERVICE_LORA_JOIN_MODE njm) { + if(g_rui_cfg_t.g_lora_cfg_t.join_mode == njm) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.join_mode = njm; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -756,6 +802,8 @@ bool service_nvm_get_adr_from_nvm (void) { } int32_t service_nvm_set_adr_to_nvm (bool adr) { + if(g_rui_cfg_t.g_lora_cfg_t.adr == adr) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.adr = adr; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -766,6 +814,8 @@ SERVICE_LORA_CLASS service_nvm_get_class_from_nvm (void) { } int32_t service_nvm_set_class_to_nvm (SERVICE_LORA_CLASS device_class) { + if(g_rui_cfg_t.g_lora_cfg_t.device_class == device_class) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.device_class = device_class; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -776,6 +826,8 @@ SERVICE_LORA_DATA_RATE service_nvm_get_dr_from_nvm (void) { } int32_t service_nvm_set_dr_to_nvm (SERVICE_LORA_DATA_RATE dr) { + if(g_rui_cfg_t.g_lora_cfg_t.dr == dr) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.dr = dr; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -786,6 +838,8 @@ SERVICE_LORA_DATA_RATE service_nvm_get_rx2dr_from_nvm (void) { } int32_t service_nvm_set_rx2dr_to_nvm (SERVICE_LORA_DATA_RATE dr) { + if(g_rui_cfg_t.g_lora_cfg_t.rx2dr == dr) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.rx2dr = dr; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -797,6 +851,8 @@ uint32_t service_nvm_get_jn1dl_from_nvm (void) { } int32_t service_nvm_set_jn1dl_to_nvm (uint32_t jn1dl) { + if(g_rui_cfg_t.g_lora_cfg_t.jn1dl == jn1dl) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.jn1dl = jn1dl; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -807,6 +863,8 @@ uint32_t service_nvm_get_jn2dl_from_nvm (void) { } int32_t service_nvm_set_jn2dl_to_nvm (uint32_t jn2dl) { + if(g_rui_cfg_t.g_lora_cfg_t.jn2dl == jn2dl) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.jn2dl = jn2dl; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -814,6 +872,8 @@ int32_t service_nvm_set_jn2dl_to_nvm (uint32_t jn2dl) { uint32_t service_nvm_set_rx2fq_to_nvm(uint32_t freq) { + if(g_rui_cfg_t.g_lora_cfg_t.rx2fq == freq) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.rx2fq = freq; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -829,6 +889,8 @@ bool service_nvm_get_pub_nwk_mode_from_nvm (void) { } int32_t service_nvm_set_pub_nwk_mode_to_nvm (bool pnm) { + if(g_rui_cfg_t.g_lora_cfg_t.pub_nwk_mode == pnm) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.pub_nwk_mode = pnm; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -839,6 +901,8 @@ uint32_t service_nvm_get_rx1dl_from_nvm (void) { } int32_t service_nvm_set_rx1dl_to_nvm (uint32_t rx1dl) { + if(g_rui_cfg_t.g_lora_cfg_t.rx1dl == rx1dl) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.rx1dl = rx1dl; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -849,6 +913,8 @@ uint32_t service_nvm_get_rx2dl_from_nvm (void) { } int32_t service_nvm_set_rx2dl_to_nvm (uint32_t rx2dl) { + if(g_rui_cfg_t.g_lora_cfg_t.rx2dl == rx2dl) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.rx2dl = rx2dl; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -859,6 +925,8 @@ uint8_t service_nvm_get_txpower_from_nvm (void) { } int32_t service_nvm_set_txpower_to_nvm (uint8_t txp) { + if(g_rui_cfg_t.g_lora_cfg_t.tx_power == txp) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.tx_power = txp; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -869,6 +937,8 @@ uint8_t service_nvm_get_linkcheck_from_nvm (void) { } int32_t service_nvm_set_linkcheck_to_nvm (uint8_t mode) { + if(g_rui_cfg_t.g_lora_cfg_t.linkcheck_mode == mode) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.linkcheck_mode = mode; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -879,6 +949,8 @@ uint8_t service_nvm_get_ping_slot_periodicity_from_nvm() { } int32_t service_nvm_set_ping_slot_periodicity_to_nvm(uint8_t periodicity) { + if(g_rui_cfg_t.g_lora_cfg_t.ping_slot_periodicity == periodicity) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.ping_slot_periodicity = periodicity; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -889,6 +961,8 @@ bool service_nvm_get_join_start_from_nvm(void) { } int32_t service_nvm_set_join_start_to_nvm(bool join_start) { + if(g_rui_cfg_t.g_lora_cfg_t.join_start == join_start) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.join_start = join_start; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -899,6 +973,8 @@ bool service_nvm_get_auto_join_from_nvm(void) { } int32_t service_nvm_set_auto_join_to_nvm(bool auto_join) { + if(g_rui_cfg_t.g_lora_cfg_t.auto_join == auto_join) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.auto_join = auto_join; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -909,6 +985,8 @@ uint32_t service_nvm_get_auto_join_period_from_nvm(void) { } int32_t service_nvm_set_auto_join_period_to_nvm(uint32_t auto_join_period) { + if(g_rui_cfg_t.g_lora_cfg_t.auto_join_period == auto_join_period) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.auto_join_period = auto_join_period; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -919,6 +997,8 @@ uint32_t service_nvm_get_auto_join_max_cnt_from_nvm(void) { } int32_t service_nvm_set_auto_join_max_cnt_to_nvm(uint32_t auto_join_max_cnt) { + if(g_rui_cfg_t.g_lora_cfg_t.auto_join_max_cnt == auto_join_max_cnt) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.auto_join_max_cnt = auto_join_max_cnt; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -929,6 +1009,8 @@ uint32_t service_nvm_get_freq_from_nvm (void) { } int32_t service_nvm_set_freq_to_nvm (uint32_t freq) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Frequency == freq) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Frequency = freq; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -939,6 +1021,8 @@ uint8_t service_nvm_get_sf_from_nvm (void) { } int32_t service_nvm_set_sf_to_nvm (uint8_t spreadfact) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Spreadfact == spreadfact) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Spreadfact = spreadfact; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -959,10 +1043,14 @@ int32_t service_nvm_set_bandwidth_to_nvm (uint32_t bandwidth) { if( g_rui_cfg_t.lora_work_mode == 0) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Bandwidth == bandwidth) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Bandwidth = bandwidth; } else if ( g_rui_cfg_t.lora_work_mode == 2) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.fsk_rxbw == bandwidth) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.fsk_rxbw = bandwidth; } @@ -974,6 +1062,8 @@ uint8_t service_nvm_get_codingrate_from_nvm (void) { } int32_t service_nvm_set_codingrate_to_nvm (uint8_t codingrate) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Codingrate == codingrate) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Codingrate = codingrate; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -984,6 +1074,8 @@ uint16_t service_nvm_get_preamlen_from_nvm (void) { } int32_t service_nvm_set_preamlen_to_nvm (uint16_t preamlen) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Preamlen == preamlen) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Preamlen = preamlen; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -994,6 +1086,8 @@ uint8_t service_nvm_get_powerdbm_from_nvm (void) { } int32_t service_nvm_set_powerdbm_to_nvm (uint8_t powerdbm) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.Powerdbm == powerdbm) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.Powerdbm = powerdbm; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1004,54 +1098,41 @@ bool service_nvm_get_crypt_enable_from_nvm (void) { } int32_t service_nvm_set_crypt_enable_to_nvm (bool crypt_enable) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_enable == crypt_enable) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_enable = crypt_enable; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } int32_t service_nvm_get_crypt_key_from_nvm (uint8_t *buff, uint32_t len) { - if (len < 16) { + if (len < 8) { return -UDRV_BUFF_OVERFLOW; } - memcpy(buff, g_rui_cfg_t.g_rui_cfg_ex.crypt_key16, 16); + memcpy(buff, g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_key, 8); return UDRV_RETURN_OK; } int32_t service_nvm_set_crypt_key_to_nvm (uint8_t *buff, uint32_t len) { - if (len != 16) { + if (len != 8) { return -UDRV_WRONG_ARG; } - memcpy(g_rui_cfg_t.g_rui_cfg_ex.crypt_key16, buff, 16); - return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); -} - - -int32_t service_nvm_get_crypt_IV_from_nvm (uint8_t *buff, uint32_t len) { - if (len < 16) { - return -UDRV_BUFF_OVERFLOW; - } - - memcpy(buff, g_rui_cfg_t.g_rui_cfg_ex.crypt_IV, 16); - - return UDRV_RETURN_OK; -} + if(memcmp(g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_key,buff,len) == 0) + return UDRV_RETURN_OK; + memcpy(g_rui_cfg_t.g_lora_p2p_cfg_t.crypt_key, buff, 8); -int32_t service_nvm_set_crypt_IV_to_nvm (uint8_t *buff, uint32_t len) { - if (len != 16) { - return -UDRV_WRONG_ARG; - } - memcpy(g_rui_cfg_t.g_rui_cfg_ex.crypt_IV, buff, 16); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } - McSession_t *service_nvm_get_multicast_from_nvm(void) { return g_rui_cfg_t.g_lora_cfg_t.McSession_group; } int32_t service_nvm_set_multicast_to_nvm(McSession_t *McSession) { + if(memcmp(g_rui_cfg_t.g_lora_cfg_t.McSession_group,McSession,4*sizeof(McSession_t)) == 0) + return UDRV_RETURN_OK; memcpy(g_rui_cfg_t.g_lora_cfg_t.McSession_group, McSession ,4*sizeof(McSession_t)); return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1063,6 +1144,8 @@ uint8_t service_nvm_get_tp_port_from_nvm(SERIAL_PORT port) { int32_t service_nvm_set_tp_port_to_nvm(SERIAL_PORT port, uint8_t tp_port) { if (tp_port >= 1 && tp_port <= 223) { + if(g_rui_cfg_t.g_lora_cfg_t.tp_port[port] == tp_port) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.tp_port[port] = tp_port; } else { return -UDRV_WRONG_ARG; @@ -1078,6 +1161,8 @@ uint32_t service_nvm_get_chs_from_nvm(void) uint32_t service_nvm_set_chs_to_nvm(uint32_t frequency) { + if(g_rui_cfg_t.g_lora_cfg_t.chs == frequency) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.chs = frequency; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1086,6 +1171,8 @@ uint32_t service_nvm_set_chs_to_nvm(uint32_t frequency) uint32_t service_nvm_set_fdev_to_nvm(uint32_t fdev) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.deviation == fdev) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.deviation = fdev; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1093,6 +1180,8 @@ uint32_t service_nvm_set_fdev_to_nvm(uint32_t fdev) uint32_t service_nvm_set_bitrate_to_nvm(uint32_t bitrate) { + if(g_rui_cfg_t.g_lora_p2p_cfg_t.bitrate == bitrate) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_p2p_cfg_t.bitrate = bitrate; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1110,6 +1199,8 @@ uint32_t service_nvm_get_fdev_from_nvm(void) uint32_t service_nvm_set_dcs_to_nvm(uint8_t dutycycle) { + if(g_rui_cfg_t.g_lora_cfg_t.DutycycleEnable == dutycycle) + return UDRV_RETURN_OK; g_rui_cfg_t.g_lora_cfg_t.DutycycleEnable = dutycycle; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1127,6 +1218,8 @@ bool service_nvm_get_iqinverted_from_nvm(void) int32_t service_nvm_set_iqinverted_to_nvm(bool iqinverted) { + if(g_rui_cfg_t.g_rui_cfg_ex.iqinverted == iqinverted) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.iqinverted = iqinverted; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1139,6 +1232,8 @@ uint32_t service_nvm_get_symbol_timeout_from_nvm(void) int32_t service_nvm_set_symbol_timeout_to_nvm(uint32_t symbol_timeout) { + if(g_rui_cfg_t.g_rui_cfg_ex.symbol_timeout == symbol_timeout) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.symbol_timeout = symbol_timeout; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); @@ -1151,6 +1246,8 @@ bool service_nvm_get_fix_length_payload_from_nvm(void) int32_t service_nvm_set_fix_length_payload_to_nvm(bool enable) { + if(g_rui_cfg_t.g_rui_cfg_ex.fix_length_payload == enable) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.fix_length_payload = enable; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -1162,6 +1259,8 @@ uint16_t service_nvm_get_syncword_from_nvm(void) int32_t service_nvm_set_syncword_to_nvm( uint16_t syncword) { + if(g_rui_cfg_t.g_rui_cfg_ex.syncword == syncword) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.syncword = syncword; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -1173,6 +1272,8 @@ int32_t service_nvm_get_lbt_from_nvm() int32_t service_nvm_set_lbt_to_nvm(uint8_t enable) { + if(g_rui_cfg_t.g_rui_cfg_ex.lbt_enable == enable) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.lbt_enable = enable; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -1184,6 +1285,8 @@ int16_t service_nvm_get_lbt_rssi_from_nvm() int32_t service_nvm_set_lbt_rssi_to_nvm(int16_t rssi) { + if(g_rui_cfg_t.g_rui_cfg_ex.lbt_rssi == rssi) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.lbt_rssi = rssi; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } @@ -1195,21 +1298,12 @@ uint32_t service_nvm_get_lbt_scantime_from_nvm() int32_t service_nvm_set_lbt_scantime_to_nvm(uint32_t time) { + if(g_rui_cfg_t.g_rui_cfg_ex.lbt_scantime == time) + return UDRV_RETURN_OK; g_rui_cfg_t.g_rui_cfg_ex.lbt_scantime = time; return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); } -int32_t service_nvm_get_CAD_from_nvm() -{ - return g_rui_cfg_t.g_rui_cfg_ex.CAD; -} - -int32_t service_nvm_set_CAD_to_nvm(uint8_t enable) -{ - g_rui_cfg_t.g_rui_cfg_ex.CAD = enable; - return udrv_flash_write(SERVICE_NVM_RUI_CONFIG_NVM_ADDR, sizeof(PRE_rui_cfg_t), (uint8_t *)&g_rui_cfg_t); -} - #endif @@ -1223,7 +1317,7 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ udrv_flash_read(data_flash_addr, sizeof(data_legacy), data_legacy ); if( rui_cfg_cur->magic_num == RUI_CFG_MAGIC_NUM ) version_code = rui_cfg_cur->version_code; - #if defined(rak3172) || defined(rak3172T) || defined(rak3172_sip) || defined(rak4630) || defined(rak11720) //V99 V87 V85 only support 3172 / 3172-sip / 4630 + #if defined(rak3172) || defined(rak3172_sip) || defined(rak4630) || defined(rak11720) //V99 V87 V85 only support 3172 / 3172-sip / 4630 //Check legacy version v99 if( *((uint32_t*)(data_legacy + ELEM_OFS_V99_magic)) == 0xEDD1E) { @@ -1249,11 +1343,11 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ //The historical version could not be determined return; } - #if defined(rak3172) || defined(rak3172T) || defined(rak3172_sip) || defined(rak4630) || defined(rak11720) //V87 and V85 , V99 only support 3172/3172-sip/4630 + #if defined(rak3172) || defined(rak3172_sip) || defined(rak4630) || defined(rak11720) //V87 and V85 , V99 only support 3172/3172-sip/4630 else if( version_code == RUI_VERSION_CODE_V85 ) { - #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->lora_work_mode, DATA_ADDR(ELEM_OFS_V85_lora_work_mode), sizeof(rui_cfg_cur->lora_work_mode) ); + #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->g_lora_p2p_cfg_t, DATA_ADDR(ELEM_OFS_V85_g_lora_p2p_cfg_t), sizeof(rui_cfg_cur->g_lora_p2p_cfg_t) ); #endif #ifdef SUPPORT_BLE @@ -1276,8 +1370,8 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ } else if( version_code == RUI_VERSION_CODE_V87 ) { - #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->lora_work_mode, DATA_ADDR(ELEM_OFS_V87_lora_work_mode), sizeof(rui_cfg_cur->lora_work_mode) ); + #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->g_lora_p2p_cfg_t, DATA_ADDR(ELEM_OFS_V87_g_lora_p2p_cfg_t), sizeof(rui_cfg_cur->g_lora_p2p_cfg_t) ); #endif #ifdef SUPPORT_BLE @@ -1299,8 +1393,8 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ } else if( version_code == RUI_VERSION_CODE_V99 ) { - #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->lora_work_mode, DATA_ADDR(ELEM_OFS_V99_lora_work_mode), sizeof(rui_cfg_cur->lora_work_mode) ); + #ifdef SUPPORT_LORA memcpy(&rui_cfg_cur->g_lora_p2p_cfg_t, DATA_ADDR(ELEM_OFS_V99_g_lora_p2p_cfg_t), sizeof(rui_cfg_cur->g_lora_p2p_cfg_t) ); #endif #ifdef SUPPORT_BLE @@ -1320,12 +1414,10 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ memcpy(rui_cfg_cur->alias, DATA_ADDR(ELEM_OFS_V99_alias), sizeof(rui_cfg_cur->alias) ); service_nvm_data_add_to_legacy(rui_cfg_cur); } - #endif else if( version_code == RUI_VERSION_CODE_LATEST ) { memcpy(rui_cfg_cur, data_legacy, sizeof(PRE_rui_cfg_t) ); //add new config -#ifdef SUPPORT_LORA if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.iqinverted == 0xFF) rui_cfg_cur->g_rui_cfg_ex.iqinverted = false; if(rui_cfg_cur->g_rui_cfg_ex.symbol_timeout > SYMBTIMEOUT_MAX) @@ -1337,7 +1429,6 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ } if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.fix_length_payload == 0xFF) rui_cfg_cur->g_rui_cfg_ex.fix_length_payload = false; -#endif if(*(uint8_t*)&rui_cfg_cur->debug_level == 0xFF) rui_cfg_cur->debug_level = 0; @@ -1358,32 +1449,16 @@ static void service_nvm_data_recovery_from_legacy(uint32_t data_flash_addr, PRE_ memset(rui_cfg_cur->cli_ver,'\0',sizeof(rui_cfg_cur->cli_ver)); memcpy(rui_cfg_cur->cli_ver,cli_version,strlen(cli_version)); } -#ifdef SUPPORT_LORA if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.lbt_enable == 0xFF) rui_cfg_cur->g_rui_cfg_ex.lbt_enable = 0; if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.lbt_rssi == 0xFF) rui_cfg_cur->g_rui_cfg_ex.lbt_rssi = -80; if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.lbt_scantime == 0xFF) rui_cfg_cur->g_rui_cfg_ex.lbt_scantime = 5; -#endif if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.auto_sleep_level == 0xFF) rui_cfg_cur->g_rui_cfg_ex.auto_sleep_level = 1; -#ifdef SUPPORT_LORA - if(*(uint32_t*)&rui_cfg_cur->g_rui_cfg_ex.crypt_key16 == 0xFF000000) //flash alignment - { - memset(rui_cfg_cur->g_rui_cfg_ex.crypt_key16,0,sizeof(rui_cfg_cur->g_rui_cfg_ex.crypt_key16)); - memcpy(rui_cfg_cur->g_rui_cfg_ex.crypt_key16,rui_cfg_cur->g_lora_p2p_cfg_t.crypt_key,sizeof(rui_cfg_cur->g_lora_p2p_cfg_t.crypt_key)); - } - if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.crypt_IV == 0xFF) - { - memset(rui_cfg_cur->g_rui_cfg_ex.crypt_IV,0,sizeof(rui_cfg_cur->g_rui_cfg_ex.crypt_IV)); - } - if(*(uint8_t*)&rui_cfg_cur->g_rui_cfg_ex.CAD == 0xFF) - { - rui_cfg_cur->g_rui_cfg_ex.CAD = 0; - } -#endif } + #endif else { //The historical version could not be determined @@ -1416,10 +1491,5 @@ void service_nvm_data_add_to_legacy(PRE_rui_cfg_t *rui_cfg_cur) rui_cfg_cur->g_rui_cfg_ex.lbt_scantime = 5; rui_cfg_cur->g_rui_cfg_ex.auto_sleep_level = 1; #endif -#ifdef SUPPORT_LORA - memset(rui_cfg_cur->g_rui_cfg_ex.crypt_key16,0,sizeof(rui_cfg_cur->g_rui_cfg_ex.crypt_key16)); - memset(rui_cfg_cur->g_rui_cfg_ex.crypt_IV,0,sizeof(rui_cfg_cur->g_rui_cfg_ex.crypt_IV)); - rui_cfg_cur->g_rui_cfg_ex.CAD =0; -#endif } diff --git a/cores/nRF5/component/service/nvm/service_nvm.h b/cores/nRF5/component/service/nvm/service_nvm.h index 8262432f..6da2cff8 100644 --- a/cores/nRF5/component/service/nvm/service_nvm.h +++ b/cores/nRF5/component/service/nvm/service_nvm.h @@ -135,11 +135,6 @@ typedef struct { uint32_t lbt_scantime; #endif uint8_t auto_sleep_level; -#ifdef SUPPORT_LORA - uint8_t crypt_key16[16]; - uint8_t crypt_IV[16]; - uint8_t CAD; -#endif }rui_cfg_t_ex; //add new config here in sequence typedef struct { @@ -175,7 +170,6 @@ void service_nvm_init_config(void); int32_t service_nvm_set_default_config_to_nvm(void); -int32_t service_nvm_set_cfg_to_nvm(void); /***********************************************************/ /* RUI Mode */ /***********************************************************/ @@ -400,10 +394,6 @@ int32_t service_nvm_get_crypt_key_from_nvm (uint8_t *buff, uint32_t len); int32_t service_nvm_set_crypt_key_to_nvm (uint8_t *buff, uint32_t len); -int32_t service_nvm_get_crypt_IV_from_nvm (uint8_t *buff, uint32_t len); - -int32_t service_nvm_set_crypt_IV_to_nvm (uint8_t *buff, uint32_t len); - McSession_t *service_nvm_get_multicast_from_nvm(void); int32_t service_nvm_set_multicast_to_nvm(McSession_t *McSession); @@ -468,11 +458,6 @@ uint32_t service_nvm_get_lbt_scantime_from_nvm(); int32_t service_nvm_set_lbt_scantime_to_nvm(uint32_t time); -int32_t service_nvm_get_CAD_from_nvm(void); - -int32_t service_nvm_set_CAD_to_nvm(uint8_t enable); - - #endif #endif diff --git a/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.c b/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.c deleted file mode 100644 index 5dce6065..00000000 --- a/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include "service_runtimeConfig.h" - -#ifdef SUPPORT_LORA -static bool useRuntimeConfigP2P = false; -static runtimeConfigP2P_t gRutimeConfigP2P; - -bool get_useRuntimeConfigP2P(void) -{ - return useRuntimeConfigP2P; -} - -void set_useRuntimeConfigP2P(bool useRuntimeConfig) -{ - useRuntimeConfigP2P = useRuntimeConfig; - return; -} - -bool get_runtimeConfigP2P(runtimeConfigP2P_t *configP2P) -{ - memcpy(configP2P, &gRutimeConfigP2P, sizeof(runtimeConfigP2P_t)); - return true; -} - -bool set_runtimeConfigP2P(runtimeConfigP2P_t *configP2P) -{ - memcpy(&gRutimeConfigP2P, configP2P, sizeof(runtimeConfigP2P_t)); - return true; -} -#endif - diff --git a/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.h b/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.h deleted file mode 100644 index 98605536..00000000 --- a/cores/nRF5/component/service/runtimeConfig/service_runtimeConfig.h +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @file service_runtimeConfig.h - * @brief Provide runtime config setting. - * @author Rakwireless - * @version 0.0.0 - * @date 2023.03 - */ - -#ifndef __SERVICE_RUNTIMECONFIG_H__ -#define __SERVICE_RUNTIMECONFIG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifdef SUPPORT_LORA -typedef struct runtimeConfigP2P_s { - uint32_t frequency; - uint8_t spreading_factor; - uint32_t bandwidth; - uint32_t fsk_rxbw; - uint8_t coding_rate; - uint16_t preamble_length; - uint8_t txpower; -} runtimeConfigP2P_t; - -bool get_useRuntimeConfigP2P(void); -void set_useRuntimeConfigP2P(bool useRuntimeConfig); -bool get_runtimeConfigP2P(runtimeConfigP2P_t *configP2P); -bool set_runtimeConfigP2P(runtimeConfigP2P_t *configP2P); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif // __SERVICE_RUNTIMECONFIG_H__ diff --git a/cores/nRF5/component/udrv/adc/udrv_adc.h b/cores/nRF5/component/udrv/adc/udrv_adc.h index a426bf1e..c4ee5cf9 100644 --- a/cores/nRF5/component/udrv/adc/udrv_adc.h +++ b/cores/nRF5/component/udrv/adc/udrv_adc.h @@ -39,12 +39,6 @@ typedef enum{ #endif } UDRV_ADC_MODE; -typedef enum { - UDRV_ADC_CHANNEL_TEMPSENSOR = 253, - UDRV_ADC_CHANNEL_VREFINT = 254, - UDRV_ADC_CHANNEL_VBAT = 255, -} UDRV_ADC_CHANNEL; - /** * Set ADC resolutions. * @param resolution The resolution to be set diff --git a/cores/nRF5/component/udrv/powersave/udrv_powersave.h b/cores/nRF5/component/udrv/powersave/udrv_powersave.h index 2cdcab8b..51b455cf 100644 --- a/cores/nRF5/component/udrv/powersave/udrv_powersave.h +++ b/cores/nRF5/component/udrv/powersave/udrv_powersave.h @@ -28,7 +28,7 @@ void udrv_clock_on (void); void udrv_clock_off (void); void udrv_register_sleep_callback(POWER_SAVE_HANDLER handler); void udrv_deregister_sleep_callback(POWER_SAVE_HANDLER handler); -int32_t udrv_register_wakeup_callback(POWER_SAVE_HANDLER handler); +void udrv_register_wakeup_callback(POWER_SAVE_HANDLER handler); void udrv_deregister_wakeup_callback(POWER_SAVE_HANDLER handler); void udrv_set_min_wakeup_time(uint32_t ms_time); diff --git a/cores/nRF5/component/udrv/system/udrv_system.h b/cores/nRF5/component/udrv/system/udrv_system.h index 40c59a94..0c5deda3 100644 --- a/cores/nRF5/component/udrv/system/udrv_system.h +++ b/cores/nRF5/component/udrv/system/udrv_system.h @@ -13,7 +13,7 @@ extern "C" { #define SEED_LENGTH 4 #endif -#define EVENT_QUEUE_SIZE (128) +#define EVENT_QUEUE_SIZE (32) #define EVENT_DATA_SIZE (8)//(sizeof(udrv_system_event_t)) /** diff --git a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMac.c b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMac.c index c8134df6..f55002eb 100644 --- a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMac.c +++ b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMac.c @@ -9731,7 +9731,7 @@ unsigned long udrv_get_microsecond(void); #define SEED_LENGTH 4 -#define EVENT_QUEUE_SIZE (128) +#define EVENT_QUEUE_SIZE (32) #define EVENT_DATA_SIZE (8) diff --git a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMacClassB.c b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMacClassB.c index dd50de22..2364edea 100644 --- a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMacClassB.c +++ b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/LoRaMacClassB.c @@ -9816,7 +9816,7 @@ unsigned long udrv_get_microsecond(void); #define SEED_LENGTH 4 -#define EVENT_QUEUE_SIZE (128) +#define EVENT_QUEUE_SIZE (32) #define EVENT_DATA_SIZE (8) diff --git a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region/RegionAU915.c b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region/RegionAU915.c index 1f16839e..fad7cb13 100644 --- a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region/RegionAU915.c +++ b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/mac/region/RegionAU915.c @@ -8770,13 +8770,13 @@ _Bool } case PHY_RX_DR: { - + if( verify->DatarateParams.UplinkDwellTime == 0 ) { return RegionCommonValueInRange( verify->DatarateParams.Datarate, 8, 13 ); } - + else { - + return RegionCommonValueInRange( verify->DatarateParams.Datarate, 2, 13 ); } } case PHY_DEF_TX_POWER: diff --git a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio/sx126x/radio.c b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio/sx126x/radio.c index f67e6ac7..a9972588 100644 --- a/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio/sx126x/radio.c +++ b/cores/nRF5/external/lora/LoRaMac-node-4.4.7/src/radio/sx126x/radio.c @@ -4655,7 +4655,7 @@ unsigned long udrv_get_microsecond(void); #define SEED_LENGTH 4 -#define EVENT_QUEUE_SIZE (128) +#define EVENT_QUEUE_SIZE (32) #define EVENT_DATA_SIZE (8) diff --git a/libraries/RUI_V3_examples/examples/Application_Scenario/BLE/Environment_Detect/Environment_Detect.ino b/libraries/RUI_V3_examples/examples/Application_Scenario/BLE/Environment_Detect/Environment_Detect.ino index 45bd60dd..7043ce6c 100644 --- a/libraries/RUI_V3_examples/examples/Application_Scenario/BLE/Environment_Detect/Environment_Detect.ino +++ b/libraries/RUI_V3_examples/examples/Application_Scenario/BLE/Environment_Detect/Environment_Detect.ino @@ -62,7 +62,6 @@ void cccd_callback(uint16_t chars_uuid, uint8_t * cccd_value) void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Environment Detect Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Application_Scenario/LoRa/Smart_Farm/Smart_Farm.ino b/libraries/RUI_V3_examples/examples/Application_Scenario/LoRa/Smart_Farm/Smart_Farm.ino index a4c6c112..744e6194 100644 --- a/libraries/RUI_V3_examples/examples/Application_Scenario/LoRa/Smart_Farm/Smart_Farm.ino +++ b/libraries/RUI_V3_examples/examples/Application_Scenario/LoRa/Smart_Farm/Smart_Farm.ino @@ -63,7 +63,6 @@ void sendCallback(int32_t status) void setup() { Serial.begin(115200, RAK_AT_MODE); - delay(2000); Serial.println("RAKwireless Smart Farm Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Advance_IO/Arduino_Advance_IO.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Advance_IO/Arduino_Advance_IO.ino index 9d050117..862a96ce 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Advance_IO/Arduino_Advance_IO.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Advance_IO/Arduino_Advance_IO.ino @@ -22,7 +22,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Advance IO Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Analog/Arduino_Analog.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Analog/Arduino_Analog.ino index 3ebf4185..2be5f4a5 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Analog/Arduino_Analog.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Analog/Arduino_Analog.ino @@ -13,7 +13,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Analog Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Bit_And_Byte/Arduino_Bit_And_Byte.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Bit_And_Byte/Arduino_Bit_And_Byte.ino index d253086e..67eb4c37 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Bit_And_Byte/Arduino_Bit_And_Byte.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Bit_And_Byte/Arduino_Bit_And_Byte.ino @@ -99,7 +99,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Bit and Byte Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Characters/Arduino_Characters.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Characters/Arduino_Characters.ino index a4d68d57..f166a1bc 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Characters/Arduino_Characters.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Characters/Arduino_Characters.ino @@ -105,7 +105,6 @@ void setup() { // initialize serial communcation at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Characters Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Digital/Arduino_Digital.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Digital/Arduino_Digital.ino index 7e0ba395..ba0e3824 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Digital/Arduino_Digital.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Digital/Arduino_Digital.ino @@ -16,7 +16,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Digital Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Interrupt/Arduino_Interrupt.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Interrupt/Arduino_Interrupt.ino index 01455536..e51a62e3 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Interrupt/Arduino_Interrupt.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Interrupt/Arduino_Interrupt.ino @@ -32,7 +32,6 @@ void setup() { // initialize serial communcation at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Interrupt Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Led_Breathing/Arduino_Led_Breathing.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Led_Breathing/Arduino_Led_Breathing.ino index 96beff34..ebee1a2d 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Led_Breathing/Arduino_Led_Breathing.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Led_Breathing/Arduino_Led_Breathing.ino @@ -26,7 +26,6 @@ void setup() { //initialize serial communcation at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino LED Breathing Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Random/Arduino_Random.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Random/Arduino_Random.ino index e0f7bff6..de9c3ef0 100755 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Random/Arduino_Random.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Random/Arduino_Random.ino @@ -12,7 +12,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Random Example"); Serial.println("------------------------------------------------------"); // initializes the pseudo-random number generator diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Serial/Arduino_Serial.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Serial/Arduino_Serial.ino index 1ce66ae8..4c685d2a 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Serial/Arduino_Serial.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Serial/Arduino_Serial.ino @@ -5,35 +5,34 @@ ***/ void setup() -{ - // initialize serial communication at 115200 bits per second, and use the AT mode - Serial.begin(115200, RAK_AT_MODE); - // initialize serial communication at 115200 bits per second, and use the custom mode - Serial1.begin(115200, RAK_CUSTOM_MODE); - delay(2000); - - Serial.println("RAKwireless Arduino Serial Example"); - Serial.println("------------------------------------------------------"); - Serial1.print("Current time out: "); - Serial1.println(Serial.getTimeout()); // get Serial timeout - Serial1.println("Set Timeout to 5000"); - Serial1.setTimeout(5000); // set the Serial timeout to 5 seconds - Serial1.print("Current time out: "); - Serial1.println(Serial.getTimeout()); // get Serial timeout after changed +{ + // initialize serial communication at 115200 bits per second, and use the AT mode + Serial.begin(115200, RAK_AT_MODE); + // initialize serial communication at 115200 bits per second, and use the custom mode + Serial1.begin(115200, RAK_CUSTOM_MODE); + Serial.println("RAKwireless Arduino Serial Example"); + Serial.println("------------------------------------------------------"); + delay(3000); + Serial1.print("Current time out: "); + Serial1.println(Serial.getTimeout()); // get Serial timeout + Serial1.println("Set Timeout to 5000"); + Serial1.setTimeout(5000); // set the Serial timeout to 5 seconds + Serial1.print("Current time out: "); + Serial1.println(Serial.getTimeout()); // get Serial timeout after changed } void loop() { - String returnString = " "; - // reply only when receive data on Serial port - Serial1.println("Please type any words in 5 seconds"); - returnString = Serial1.readStringUntil('\r'); // Read the string until the end of enter - if (returnString == " ") - Serial1.println("read nothing"); - else { - Serial1.print("Typed: "); - Serial1.println(returnString); //Show the string you typed - } - Serial1.println(""); - delay(1000); + String returnString = " "; + // reply only when receive data on Serial port + Serial1.println("Please type any words in 5 seconds"); + returnString = Serial1.readStringUntil('\r'); // Read the string until the end of enter + if (returnString == " ") + Serial1.println("read nothing"); + else { + Serial1.print("Typed: "); + Serial1.println(returnString); //Show the string you typed + } + Serial1.println(""); + delay(1000); } diff --git a/libraries/RUI_V3_examples/examples/Example/Arduino_Time/Arduino_Time.ino b/libraries/RUI_V3_examples/examples/Example/Arduino_Time/Arduino_Time.ino index 7bd2ac2f..d52f8ea4 100644 --- a/libraries/RUI_V3_examples/examples/Example/Arduino_Time/Arduino_Time.ino +++ b/libraries/RUI_V3_examples/examples/Example/Arduino_Time/Arduino_Time.ino @@ -8,7 +8,6 @@ void setup() { // initialize serial communication at 115200 bits per second Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Arduino Time Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Beacon/BLE_Beacon.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Beacon/BLE_Beacon.ino index 8633de51..f63aef1f 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Beacon/BLE_Beacon.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Beacon/BLE_Beacon.ino @@ -8,8 +8,6 @@ int i; void setup() { Serial.begin(115200); - delay(2000); - Serial.println("RAKwireless BLE Beacon Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Beacon_Custom_Payload/BLE_Beacon_Custom_Payload.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Beacon_Custom_Payload/BLE_Beacon_Custom_Payload.ino index 1b524363..6431382b 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Beacon_Custom_Payload/BLE_Beacon_Custom_Payload.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Beacon_Custom_Payload/BLE_Beacon_Custom_Payload.ino @@ -36,7 +36,6 @@ uint8_t cus_adv_url[] ={ void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless BLE Beacon Customize Payload Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Configuration/BLE_Configuration.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Configuration/BLE_Configuration.ino index 12445606..2dbc7d42 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Configuration/BLE_Configuration.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Configuration/BLE_Configuration.ino @@ -9,7 +9,6 @@ void setup() { bool ret; Serial.begin(115200); - delay(2000); Serial.println("RAKwireless BLE Configuration Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Custom_Service/BLE_Custom_Service.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Custom_Service/BLE_Custom_Service.ino index 2dec2138..7f02ca92 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Custom_Service/BLE_Custom_Service.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Custom_Service/BLE_Custom_Service.ino @@ -63,7 +63,6 @@ void setup() 0x80, 0x5f, 0x9b, 0x34, 0xfb}; Serial.begin(115200); - delay(2000); Serial.println("RAKwireless BLE Custom Services Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Scanner/BLE_Scanner.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Scanner/BLE_Scanner.ino index 544ff397..a6f358dd 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Scanner/BLE_Scanner.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Scanner/BLE_Scanner.ino @@ -60,8 +60,6 @@ void scan_callback(int8_t rssi_value, uint8_t * device_mac, void setup() { bool ret; - Serial.begin(115200); - delay(2000); Serial.println("RAKwireless BLE Scanner Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/BLE_Uart/BLE_Uart.ino b/libraries/RUI_V3_examples/examples/Example/BLE_Uart/BLE_Uart.ino index 5ebd06f4..5e607fe5 100644 --- a/libraries/RUI_V3_examples/examples/Example/BLE_Uart/BLE_Uart.ino +++ b/libraries/RUI_V3_examples/examples/Example/BLE_Uart/BLE_Uart.ino @@ -11,7 +11,6 @@ void setup() //If you want to read and write data through BLE API operations, you need to set BLE Serial (Serail6) to Custom Mode Serial6.begin(115200, RAK_CUSTOM_MODE); // RAK_CUSTOM_MODE, RAK_AT_MODE Serial.begin(115200); - delay(2000); Serial.println("RAKwireless BLE UART Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/LoRaWan_ABP/LoRaWan_ABP.ino b/libraries/RUI_V3_examples/examples/Example/LoRaWan_ABP/LoRaWan_ABP.ino index 354ed1fe..3c4268f6 100644 --- a/libraries/RUI_V3_examples/examples/Example/LoRaWan_ABP/LoRaWan_ABP.ino +++ b/libraries/RUI_V3_examples/examples/Example/LoRaWan_ABP/LoRaWan_ABP.ino @@ -37,30 +37,9 @@ void recvCallback(SERVICE_LORA_RECEIVE_T * data) } } -/************************************* - * enum type for LoRa Event - RAK_LORAMAC_STATUS_OK = 0, - RAK_LORAMAC_STATUS_ERROR, - RAK_LORAMAC_STATUS_TX_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_TIMEOUT, - RAK_LORAMAC_STATUS_RX2_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_ERROR, - RAK_LORAMAC_STATUS_RX2_ERROR, - RAK_LORAMAC_STATUS_JOIN_FAIL, - RAK_LORAMAC_STATUS_DOWNLINK_REPEATED, - RAK_LORAMAC_STATUS_TX_DR_PAYLOAD_SIZE_ERROR, - RAK_LORAMAC_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS, - RAK_LORAMAC_STATUS_ADDRESS_FAIL, - RAK_LORAMAC_STATUS_MIC_FAIL, - RAK_LORAMAC_STATUS_MULTICAST_FAIL, - RAK_LORAMAC_STATUS_BEACON_LOCKED, - RAK_LORAMAC_STATUS_BEACON_LOST, - RAK_LORAMAC_STATUS_BEACON_NOT_FOUND, - *************************************/ - void sendCallback(int32_t status) { - if (status == RAK_LORAMAC_STATUS_OK) { + if (status == 0) { Serial.println("Successfully sent"); } else { Serial.println("Sending failed"); @@ -70,7 +49,6 @@ void sendCallback(int32_t status) void setup() { Serial.begin(115200, RAK_AT_MODE); - delay(2000); Serial.println("RAKwireless LoRaWan ABP Example"); Serial.println("------------------------------------------------------"); @@ -89,11 +67,6 @@ void setup() // ABP Network Session Key uint8_t node_nwk_skey[16] = ABP_NWKSKEY; - if (!api.lorawan.njm.set(RAK_LORA_ABP)) // Set the network join mode to ABP - { - Serial.printf("LoRaWan ABP - set network join mode is incorrect! \r\n"); - return; - } if (!api.lorawan.daddr.set(node_dev_addr, 4)) { Serial.printf("LoRaWan ABP - set device addr is incorrect! \r\n"); return; @@ -114,6 +87,11 @@ void setup() Serial.printf("LoRaWan ABP - set device class is incorrect! \r\n"); return; } + if (!api.lorawan.njm.set(RAK_LORA_ABP)) // Set the network join mode to ABP + { + Serial.printf("LoRaWan ABP - set network join mode is incorrect! \r\n"); + return; + } if (!api.lorawan.adr.set(true)) { Serial.printf("LoRaWan ABP - set adaptive data rate is incorrect! \r\n"); diff --git a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Class_B/LoRaWan_Class_B.ino b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Class_B/LoRaWan_Class_B.ino index ea28d7cf..ed7b99eb 100644 --- a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Class_B/LoRaWan_Class_B.ino +++ b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Class_B/LoRaWan_Class_B.ino @@ -42,30 +42,9 @@ void joinCallback(int32_t status) Serial.printf("Join status: %d\r\n", status); } -/************************************* - * enum type for LoRa Event - RAK_LORAMAC_STATUS_OK = 0, - RAK_LORAMAC_STATUS_ERROR, - RAK_LORAMAC_STATUS_TX_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_TIMEOUT, - RAK_LORAMAC_STATUS_RX2_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_ERROR, - RAK_LORAMAC_STATUS_RX2_ERROR, - RAK_LORAMAC_STATUS_JOIN_FAIL, - RAK_LORAMAC_STATUS_DOWNLINK_REPEATED, - RAK_LORAMAC_STATUS_TX_DR_PAYLOAD_SIZE_ERROR, - RAK_LORAMAC_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS, - RAK_LORAMAC_STATUS_ADDRESS_FAIL, - RAK_LORAMAC_STATUS_MIC_FAIL, - RAK_LORAMAC_STATUS_MULTICAST_FAIL, - RAK_LORAMAC_STATUS_BEACON_LOCKED, - RAK_LORAMAC_STATUS_BEACON_LOST, - RAK_LORAMAC_STATUS_BEACON_NOT_FOUND, - *************************************/ - void sendCallback(int32_t status) { - if (status == RAK_LORAMAC_STATUS_OK) { + if (status == 0) { Serial.println("Successfully sent"); } else { Serial.println("Sending failed"); @@ -75,7 +54,6 @@ void sendCallback(int32_t status) void setup() { Serial.begin(115200, RAK_AT_MODE); - delay(2000); Serial.println("RAKwireless LoRaWan OTAA Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Info/LoRaWan_Info.ino b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Info/LoRaWan_Info.ino index 21f81930..47789796 100644 --- a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Info/LoRaWan_Info.ino +++ b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Info/LoRaWan_Info.ino @@ -43,30 +43,9 @@ void joinCallback(int32_t status) Serial.printf("Join status: %d\r\n", status); } -/************************************* - * enum type for LoRa Event - RAK_LORAMAC_STATUS_OK = 0, - RAK_LORAMAC_STATUS_ERROR, - RAK_LORAMAC_STATUS_TX_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_TIMEOUT, - RAK_LORAMAC_STATUS_RX2_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_ERROR, - RAK_LORAMAC_STATUS_RX2_ERROR, - RAK_LORAMAC_STATUS_JOIN_FAIL, - RAK_LORAMAC_STATUS_DOWNLINK_REPEATED, - RAK_LORAMAC_STATUS_TX_DR_PAYLOAD_SIZE_ERROR, - RAK_LORAMAC_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS, - RAK_LORAMAC_STATUS_ADDRESS_FAIL, - RAK_LORAMAC_STATUS_MIC_FAIL, - RAK_LORAMAC_STATUS_MULTICAST_FAIL, - RAK_LORAMAC_STATUS_BEACON_LOCKED, - RAK_LORAMAC_STATUS_BEACON_LOST, - RAK_LORAMAC_STATUS_BEACON_NOT_FOUND, - *************************************/ - void sendCallback(int32_t status) { - if (status == RAK_LORAMAC_STATUS_OK) { + if (status == 0) { Serial.println("Successfully sent"); } else { Serial.println("Sending failed"); @@ -76,7 +55,6 @@ void sendCallback(int32_t status) void setup() { Serial.begin(115200, RAK_AT_MODE); - delay(2000); Serial.println("RAKwireless LoRaWan OTAA Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Multicast/LoRaWan_Multicast.ino b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Multicast/LoRaWan_Multicast.ino index f5b216ec..6bfd09eb 100644 --- a/libraries/RUI_V3_examples/examples/Example/LoRaWan_Multicast/LoRaWan_Multicast.ino +++ b/libraries/RUI_V3_examples/examples/Example/LoRaWan_Multicast/LoRaWan_Multicast.ino @@ -5,7 +5,6 @@ bool ret; void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless LoRaWan Multicast Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/LoRaWan_OTAA/LoRaWan_OTAA.ino b/libraries/RUI_V3_examples/examples/Example/LoRaWan_OTAA/LoRaWan_OTAA.ino index 92c2c99f..5a01e7e4 100644 --- a/libraries/RUI_V3_examples/examples/Example/LoRaWan_OTAA/LoRaWan_OTAA.ino +++ b/libraries/RUI_V3_examples/examples/Example/LoRaWan_OTAA/LoRaWan_OTAA.ino @@ -42,30 +42,9 @@ void joinCallback(int32_t status) Serial.printf("Join status: %d\r\n", status); } -/************************************* - * enum type for LoRa Event - RAK_LORAMAC_STATUS_OK = 0, - RAK_LORAMAC_STATUS_ERROR, - RAK_LORAMAC_STATUS_TX_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_TIMEOUT, - RAK_LORAMAC_STATUS_RX2_TIMEOUT, - RAK_LORAMAC_STATUS_RX1_ERROR, - RAK_LORAMAC_STATUS_RX2_ERROR, - RAK_LORAMAC_STATUS_JOIN_FAIL, - RAK_LORAMAC_STATUS_DOWNLINK_REPEATED, - RAK_LORAMAC_STATUS_TX_DR_PAYLOAD_SIZE_ERROR, - RAK_LORAMAC_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS, - RAK_LORAMAC_STATUS_ADDRESS_FAIL, - RAK_LORAMAC_STATUS_MIC_FAIL, - RAK_LORAMAC_STATUS_MULTICAST_FAIL, - RAK_LORAMAC_STATUS_BEACON_LOCKED, - RAK_LORAMAC_STATUS_BEACON_LOST, - RAK_LORAMAC_STATUS_BEACON_NOT_FOUND, - *************************************/ - void sendCallback(int32_t status) { - if (status == RAK_LORAMAC_STATUS_OK) { + if (status == 0) { Serial.println("Successfully sent"); } else { Serial.println("Sending failed"); @@ -75,7 +54,6 @@ void sendCallback(int32_t status) void setup() { Serial.begin(115200, RAK_AT_MODE); - delay(2000); Serial.println("RAKwireless LoRaWan OTAA Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/NFC_APP_Record/NFC_APP_Record.ino b/libraries/RUI_V3_examples/examples/Example/NFC_APP_Record/NFC_APP_Record.ino index 7b6a941e..86b4ba86 100644 --- a/libraries/RUI_V3_examples/examples/Example/NFC_APP_Record/NFC_APP_Record.ino +++ b/libraries/RUI_V3_examples/examples/Example/NFC_APP_Record/NFC_APP_Record.ino @@ -32,7 +32,6 @@ void setup() 'e', 'n', 'd', 'i', 'n', 'g' }; Serial.begin(115200); - delay(2000); #ifdef SUPPORT_NFC api.nfc.init(true, false, nfc_t4t_callback); // NFC tag init diff --git a/libraries/RUI_V3_examples/examples/Example/NFC_AT_Command/NFC_AT_Command.ino b/libraries/RUI_V3_examples/examples/Example/NFC_AT_Command/NFC_AT_Command.ino index 03f038f6..339fd28d 100644 --- a/libraries/RUI_V3_examples/examples/Example/NFC_AT_Command/NFC_AT_Command.ino +++ b/libraries/RUI_V3_examples/examples/Example/NFC_AT_Command/NFC_AT_Command.ino @@ -34,8 +34,7 @@ static void nfc_t4t_callback(void *p_context, RAK_NFC_T4T_EVENT event, void setup() { - Serial.begin(115200); - delay(2000); + delay(3000); Serial.println("Example Start"); /*set LED pin to OUTPUT */ pinMode(LED_GREEN, OUTPUT); @@ -44,6 +43,7 @@ void setup() static const uint8_t language[] = { 'e', 'n' }; // the language of the NFC tag (2 Bytes) static const uint8_t payload[] = { 'N', 'F', 'C', ' ', 'D', 'e', 'f', 'a', 'u', 'l', 't' }; // the payload of NFC tag (MAX: 244 bytes) + Serial.begin(115200); #ifdef SUPPORT_NFC api.nfc.init(true, true, nfc_t4t_callback); // NFC tag init diff --git a/libraries/RUI_V3_examples/examples/Example/NFC_TXT_Record/NFC_TXT_Record.ino b/libraries/RUI_V3_examples/examples/Example/NFC_TXT_Record/NFC_TXT_Record.ino index 73c6537b..ef1b5ab2 100644 --- a/libraries/RUI_V3_examples/examples/Example/NFC_TXT_Record/NFC_TXT_Record.ino +++ b/libraries/RUI_V3_examples/examples/Example/NFC_TXT_Record/NFC_TXT_Record.ino @@ -34,8 +34,7 @@ static void nfc_t4t_callback(void *p_context, RAK_NFC_T4T_EVENT event, void setup() { - Serial.begin(115200); - delay(2000); + delay(3000); Serial.println("Example Start"); /*set LED pin to OUTPUT */ pinMode(LED_GREEN, OUTPUT); @@ -44,6 +43,7 @@ void setup() static const uint8_t language[] = { 'e', 'n' }; // the language of the NFC tag (2 Bytes) static const uint8_t payload[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'N', 'F', 'C', 'H', 'e', 'l', 'l', 'o', ' ', 'N', 'F', 'C', 'H', 'e', 'l', 'l', 'o', ' ', 'N', 'F', 'C' }; // the payload of NFC tag (MAX: 244 bytes) + Serial.begin(115200); #ifdef SUPPORT_NFC api.nfc.init(true, false, nfc_t4t_callback); // NFC tag init diff --git a/libraries/RUI_V3_examples/examples/Example/NFC_URI_Record/NFC_URI_Record.ino b/libraries/RUI_V3_examples/examples/Example/NFC_URI_Record/NFC_URI_Record.ino index 85a2c0e9..983cbb00 100644 --- a/libraries/RUI_V3_examples/examples/Example/NFC_URI_Record/NFC_URI_Record.ino +++ b/libraries/RUI_V3_examples/examples/Example/NFC_URI_Record/NFC_URI_Record.ino @@ -27,8 +27,6 @@ static void nfc_t4t_callback(void *p_context, RAK_NFC_T4T_EVENT event, void setup() { - Serial.begin(115200); - delay(2000); /*set LED pin to OUTPUT */ pinMode(LED_GREEN, OUTPUT); @@ -36,6 +34,7 @@ void setup() { 'r', 'a', 'k', 'w', 'i', 'r', 'e', 'l', 'e', 's', 's', '.', 'c', 'o', 'm' }; + Serial.begin(115200); #ifdef SUPPORT_NFC api.nfc.init(false, false, nfc_t4t_callback); // NFC tag init diff --git a/libraries/RUI_V3_examples/examples/Example/RAK3401/RAK3401.ino b/libraries/RUI_V3_examples/examples/Example/RAK3401/RAK3401.ino index 7db2bc1c..f18d25fd 100644 --- a/libraries/RUI_V3_examples/examples/Example/RAK3401/RAK3401.ino +++ b/libraries/RUI_V3_examples/examples/Example/RAK3401/RAK3401.ino @@ -1,18 +1,9 @@ -extern const char *sw_version; - void setup() { - uint32_t baudrate = Serial.getBaudrate(); - Serial.begin(baudrate); - Serial.println("RAKwireless RAK3401"); + Serial.begin(115200); + Serial.println("RAKwireless RAK3401 Example"); Serial.println("------------------------------------------------------"); - Serial.printf("Version: %s\r\n", sw_version); - - // Start BLE UART advertisement for 30 seconds - Serial6.begin(115200, RAK_AT_MODE); - api.ble.settings.blemode(RAK_BLE_UART_MODE); - api.ble.uart.start(30); } void loop() diff --git a/libraries/RUI_V3_examples/examples/Example/RAK4631/RAK4631.ino b/libraries/RUI_V3_examples/examples/Example/RAK4631/RAK4631.ino index 8a86af74..b2af1e4c 100755 --- a/libraries/RUI_V3_examples/examples/Example/RAK4631/RAK4631.ino +++ b/libraries/RUI_V3_examples/examples/Example/RAK4631/RAK4631.ino @@ -1,13 +1,9 @@ -extern const char *sw_version; - void setup() { - uint32_t baudrate = Serial.getBaudrate(); - Serial.begin(baudrate); - Serial.println("RAKwireless RAK4631"); + Serial.begin(115200); + Serial.println("RAKwireless RAK4631 Example"); Serial.println("------------------------------------------------------"); - Serial.printf("Version: %s\r\n", sw_version); // Start BLE UART advertisement for 30 seconds Serial6.begin(115200, RAK_AT_MODE); diff --git a/libraries/RUI_V3_examples/examples/Example/RAK5010/RAK5010.ino b/libraries/RUI_V3_examples/examples/Example/RAK5010/RAK5010.ino index 3dafd20a..67619c43 100644 --- a/libraries/RUI_V3_examples/examples/Example/RAK5010/RAK5010.ino +++ b/libraries/RUI_V3_examples/examples/Example/RAK5010/RAK5010.ino @@ -1,6 +1,4 @@ -extern const char *sw_version; - #ifndef rak5010 #error "Please select WisTrio Cellular RAK5010 Board and compile again" #endif @@ -46,23 +44,16 @@ int get_sensor(SERIAL_PORT port, char *cmd, stParam * param) void setup() { - uint32_t baudrate = Serial.getBaudrate(); - Serial.begin(baudrate); + Serial.begin(115200); - Serial.println("RAKwireless RAK5010"); + Serial.println("RAKwireless RAK5010 Example"); Serial.println("------------------------------------------------------"); - Serial.printf("Version: %s\r\n", sw_version); // begin for I2C Wire.begin(); api.system.atMode.add("SENSOR", "This get sensor data.", "SENSOR", get_sensor); - - // Start BLE UART advertisement for 30 seconds - Serial6.begin(115200, RAK_AT_MODE); - api.ble.settings.blemode(RAK_BLE_UART_MODE); - api.ble.uart.start(30); } void loop() diff --git a/libraries/RUI_V3_examples/examples/Example/System_ATCMD_Permission/System_ATCMD_Permission.ino b/libraries/RUI_V3_examples/examples/Example/System_ATCMD_Permission/System_ATCMD_Permission.ino index e507d73d..f1c55741 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_ATCMD_Permission/System_ATCMD_Permission.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_ATCMD_Permission/System_ATCMD_Permission.ino @@ -29,7 +29,6 @@ CHANGE_ATCMD_PERM("AT+ALIAS", RAK_ATCMD_PERM_READ | RAK_ATCMD_PERM_WRITE); void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless AT Command Permission Example"); Serial.println("------------------------------------------------------"); } diff --git a/libraries/RUI_V3_examples/examples/Example/System_Custom_ATCMD/System_Custom_ATCMD.ino b/libraries/RUI_V3_examples/examples/Example/System_Custom_ATCMD/System_Custom_ATCMD.ino index 60e357bb..adb77fca 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_Custom_ATCMD/System_Custom_ATCMD.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_Custom_ATCMD/System_Custom_ATCMD.ino @@ -36,7 +36,6 @@ int led_handle(SERIAL_PORT port, char *cmd, stParam * param) void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless Custom ATCMD Example"); Serial.println("------------------------------------------------------"); api.system.atMode.add("LED", "This controls both green and blue LEDs.", diff --git a/libraries/RUI_V3_examples/examples/Example/System_General/System_General.ino b/libraries/RUI_V3_examples/examples/Example/System_General/System_General.ino index 70a9d6b2..ffdd9462 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_General/System_General.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_General/System_General.ino @@ -7,7 +7,6 @@ int i; void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless System General Example"); Serial.println("------------------------------------------------------"); api.system.restoreDefault(); diff --git a/libraries/RUI_V3_examples/examples/Example/System_Multitasking/System_Multitasking.ino b/libraries/RUI_V3_examples/examples/Example/System_Multitasking/System_Multitasking.ino new file mode 100644 index 00000000..da36c111 --- /dev/null +++ b/libraries/RUI_V3_examples/examples/Example/System_Multitasking/System_Multitasking.ino @@ -0,0 +1,252 @@ +/*** + * This example shows multitasking in RUI3 with RAK1904, RAK1910 and LoRaWan join. +***/ +//Lorawan + +#define TEST_BAND (RAK_REGION_US915) + +#define TEST_DEVEUI {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08} + +#define TEST_APPEUI {0x0E, 0x0D, 0x0D, 0x01, 0x0E, 0x01, 0x02, 0x0E} + +#define TEST_APPKEY {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C} +//1904 + +#include + +#include + +#include +Adafruit_LIS3DH lis = Adafruit_LIS3DH();// I2C +//1910 + +#include +TinyGPS gps; +String tmp_data = ""; +int direction_S_N = 0; //0--S, 1--N +int direction_E_W = 0; //0--E, 1--W +void direction_parse(String tmp) +{ + if (tmp.indexOf(",E,") != -1) + { + direction_E_W = 0; + } + else + { + direction_E_W = 1; + } + + if (tmp.indexOf(",S,") != -1) + { + direction_S_N = 0; + } + else + { + direction_S_N = 1; + } +} + +void new_thread1(void) //1904 +{ + while (1) { + delay(2000); + lis.read(); // get X Y and Z data at once + + /* Or....get a new sensor event, normalized */ + sensors_event_t event; + lis.getEvent(&event); + /* Display the results (acceleration is measured in m/s^2) */ + Serial.print("X: "); Serial.print(event.acceleration.x); + Serial.print(" Y: "); Serial.print(event.acceleration.y); + Serial.print(" Z: "); Serial.print(event.acceleration.z); + Serial.println(" m/s^2 "); + Serial.println(); + } +} + +void new_thread2(void)//13007 +{ + while (1) { + digitalWrite(WB_IO4, LOW); + delay(1000); + digitalWrite(WB_IO4, HIGH); + delay(1000); + } +} + +void new_thread3(void)//lorawan +{ + while (api.lorawan.njs.get() == 0) + { + Serial.print("Waiting for Lorawan join..."); + api.lorawan.join(); + delay(10000); + } + while (1) { + uint8_t payload[] = "Thread"; + + if (api.lorawan.send(sizeof(payload), payload, 129, true, 1)) { + Serial.println("Send Success"); + } else { + Serial.println("Send fail"); + } + delay(4000); + } +} + +void new_thread4(void)//log +{ + while (1) { + udrv_serial_log_printf("This is new thread #4 fired every 4s! (%lu)\r\n", millis()); + delay(4000); + } +} + +void setup() +{ + Serial.begin(115200); + Serial.println("RAKwireless System Multitasking Example"); + Serial.println("------------------------------------------------------"); + time_t timeout = millis(); + Serial.begin(115200); + while (!Serial) + { + if ((millis() - timeout) < 5000) + { + delay(100); + } + else + { + break; + } + } + + //1904 + while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens + Serial.println("LIS3DH test!"); + if (! lis.begin(0x18)) { // change this to 0x19 for alternative i2c address + Serial.println("Couldnt start"); + while (1) yield(); + } + Serial.println("LIS3DH found!"); + // lis.setRange(LIS3DH_RANGE_4_G); // 2, 4, 8 or 16 G! + Serial.print("Range = "); Serial.print(2 << lis.getRange()); + Serial.println("G"); + // lis.setDataRate(LIS3DH_DATARATE_50_HZ); + Serial.print("Data rate set to: "); + switch (lis.getDataRate()) { + case LIS3DH_DATARATE_1_HZ: Serial.println("1 Hz"); break; + case LIS3DH_DATARATE_10_HZ: Serial.println("10 Hz"); break; + case LIS3DH_DATARATE_25_HZ: Serial.println("25 Hz"); break; + case LIS3DH_DATARATE_50_HZ: Serial.println("50 Hz"); break; + case LIS3DH_DATARATE_100_HZ: Serial.println("100 Hz"); break; + case LIS3DH_DATARATE_200_HZ: Serial.println("200 Hz"); break; + case LIS3DH_DATARATE_400_HZ: Serial.println("400 Hz"); break; + case LIS3DH_DATARATE_POWERDOWN: Serial.println("Powered Down"); break; + case LIS3DH_DATARATE_LOWPOWER_5KHZ: Serial.println("5 Khz Low Power"); break; + case LIS3DH_DATARATE_LOWPOWER_1K6HZ: Serial.println("16 Khz Low Power"); break; + } + // 13007 + pinMode(WB_IO2, OUTPUT); + digitalWrite(WB_IO2, HIGH); + pinMode(WB_IO4, OUTPUT); + //1910 + Serial1.begin(9600); + while (!Serial1); + Serial.println("GPS uart init ok!"); + //Lorawan + uint8_t node_device_eui[8] = TEST_DEVEUI; + uint8_t node_app_eui[8] = TEST_APPEUI; + uint8_t node_app_key[16] = TEST_APPKEY; + + api.lorawan.appeui.set(node_app_eui, 8); + api.lorawan.appkey.set(node_app_key, 16); + api.lorawan.deui.set(node_device_eui, 8); + api.lorawan.band.set(TEST_BAND); + api.lorawan.njm.set(1); + api.lorawan.join(); + + if (api.system.scheduler.task.create("new thread #1", new_thread1) == true) { + Serial.printf("Thread #1 is successfully created.\r\n"); + } else { + Serial.printf("Thread #1 can't be created.\r\n"); + } + if (api.system.scheduler.task.create("new thread #2", new_thread2) == true) { + Serial.printf("Thread #2 is successfully created.\r\n"); + } else { + Serial.printf("Thread #2 can't be created.\r\n"); + } + if (api.system.scheduler.task.create("new thread #3", new_thread3) == true) { + Serial.printf("Thread #3 is successfully created.\r\n"); + } else { + Serial.printf("Thread #3 can't be created.\r\n"); + } + if (api.system.scheduler.task.create("new thread #4", new_thread3) == true) { + Serial.printf("Thread #4 is successfully created.\r\n"); + } else { + Serial.printf("Thread #4 can't be created.\r\n"); + } +} + +void loop()//1910 +{ + bool newData = false; + unsigned long chars; + unsigned short sentences, failed; + + // For one second we parse GPS data and report some key values + for (unsigned long start = millis(); millis() - start < 1000;) + { + while (Serial1.available()) + { + char c = Serial1.read(); + tmp_data += c; + if (gps.encode(c)) + newData = true; + } + } + direction_parse(tmp_data); + tmp_data = ""; + + if (newData) + { + float flat, flon; + unsigned long age; + gps.f_get_position(&flat, &flon, &age); + if(direction_S_N == 0) + { + Serial.print("(S):"); + } + else + { + Serial.print("(N):"); + } + Serial.print("LAT="); + Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6); + if(direction_E_W == 0) + { + Serial.print(" (E):"); + } + else + { + Serial.print(" (W):"); + } + Serial.print("LON="); + Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6); + Serial.print(" SAT="); + Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites()); + Serial.print(" PREC="); + Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop()); + } + + gps.stats(&chars, &sentences, &failed); + Serial.print(" CHARS="); + Serial.print(chars); + Serial.print(" SENTENCES="); + Serial.print(sentences); + Serial.print(" CSUM ERR="); + Serial.println(failed); + if (chars == 0) + Serial.println(" No characters received from GPS: check wiring "); + delay(1000); +} diff --git a/libraries/RUI_V3_examples/examples/Example/System_Powersave/System_Powersave.ino b/libraries/RUI_V3_examples/examples/Example/System_Powersave/System_Powersave.ino index dfcf9a48..d0f23f5a 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_Powersave/System_Powersave.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_Powersave/System_Powersave.ino @@ -2,15 +2,9 @@ * This example shows powersave function. ***/ -void WakeupCallback() -{ - Serial.printf("This is Wakeup Callback\r\n"); -} - void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless System Powersave Example"); Serial.println("------------------------------------------------------"); @@ -21,11 +15,6 @@ void setup() #warning Please set the right pin refer to the documentation api.system.sleep.setup(RUI_WAKEUP_FALLING_EDGE, 0xFF); #endif - - if ( api.system.sleep.registerWakeupCallback(WakeupCallback) == false ) - { - Serial.println("Create Wakeup Callback failed."); - } } void loop() diff --git a/libraries/RUI_V3_examples/examples/Example/System_Serial_Lock/System_Serial_Lock.ino b/libraries/RUI_V3_examples/examples/Example/System_Serial_Lock/System_Serial_Lock.ino index abcec9c5..9d0e6134 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_Serial_Lock/System_Serial_Lock.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_Serial_Lock/System_Serial_Lock.ino @@ -8,8 +8,7 @@ bool locked; void setup() { Serial.begin(115200, RAK_AT_MODE); - /* Wait 2s for USB to be plugged in, or the log messages will be gone */ - delay(2000); + /* Wait 5s for USB to be plugged in, or the log messages will be gone */ Serial.println("RAKwireless System Serial Lock Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/examples/Example/System_Timer/System_Timer.ino b/libraries/RUI_V3_examples/examples/Example/System_Timer/System_Timer.ino index 62587f13..5fe0ec55 100644 --- a/libraries/RUI_V3_examples/examples/Example/System_Timer/System_Timer.ino +++ b/libraries/RUI_V3_examples/examples/Example/System_Timer/System_Timer.ino @@ -12,7 +12,6 @@ void handler(void *data) void setup() { Serial.begin(115200); - delay(2000); Serial.println("RAKwireless System Timer Example"); Serial.println("------------------------------------------------------"); diff --git a/libraries/RUI_V3_examples/library.properties b/libraries/RUI_V3_examples/library.properties index aa6f4e1c..60da84fc 100644 --- a/libraries/RUI_V3_examples/library.properties +++ b/libraries/RUI_V3_examples/library.properties @@ -6,4 +6,4 @@ paragraph= category=Communication url= architectures=* -version=1.2.3 +version=1.2.1 diff --git a/platform.txt b/platform.txt index 6eb1bdbc..90530f67 100644 --- a/platform.txt +++ b/platform.txt @@ -37,7 +37,7 @@ compiler.c.flags=-mcpu={build.mcu} -mthumb -c -g {compiler.warning_flags} {build compiler.c.elf.cmd=arm-none-eabi-gcc compiler.c.elf.flags={compiler.optimization_flag} -Wl,--gc-sections -save-temps compiler.S.cmd=arm-none-eabi-gcc -compiler.S.flags=-c -g -x assembler-with-cpp {compiler.warning_flags} +compiler.S.flags=-c -g -x assembler-with-cpp compiler.cpp.cmd=arm-none-eabi-g++ compiler.cpp.flags=-mcpu={build.mcu} -mthumb -c -g {compiler.warning_flags} {build.float_flags} -std=gnu++11 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -MMD compiler.ar.cmd=arm-none-eabi-ar @@ -163,4 +163,4 @@ tools.bootburn.erase.params.verbose= tools.bootburn.erase.params.quiet= tools.bootburn.erase.pattern= -version=4.0.6 +version=4.0.2 diff --git a/system/WisCore_RAK3401_Board/libboot.a b/system/WisCore_RAK3401_Board/libboot.a index b028641063173635024d12b2c916fb35555a46d2..43d5a3bba2a8106ffcbacc58f8ab8fbdf521727d 100644 GIT binary patch delta 59 ucmX@LmhseD#tG8w#wO-wmKK&9l^(Og*qeFS7P7!OTexO=z&RnoWy}B-=@9w= delta 59 ucmX@LmhseD#tG8whNc!KW@bhkl^(Og*qeFS7P7!OTexO=z&RnoWy}B&9}vO- diff --git a/system/WisCore_RAK3401_Board/librui_v3_api.a b/system/WisCore_RAK3401_Board/librui_v3_api.a index 03dc8582bf2c702254b48c568d6f0512417e35ce..62deb1600ce3f72ea5b63a4a05f1b4017924a57e 100644 GIT binary patch literal 249040 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

N>_5rJG{69AzUV_8s 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 {<{u`Tn|2nBA%$fO&ka#i5)ju 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 Z?~`>@kZxC66TNz$#5v2w7M1n;e*r#)-An)g literal 141960 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 delta 48 rcmdl{xubG|G`pdxg^8J&(MF|CRv3G-ou%036Ri2hFoDf>mQ~CEX3Y(~ diff --git a/system/WisCore_RAK3401_Board/libudrv_delay.a b/system/WisCore_RAK3401_Board/libudrv_delay.a index c2c90a9845f8bb08d537ed0c7549430df7fbd521..520943c453deec8d29cc191432cce734cb8fe02e 100644 GIT binary patch delta 43 lcmX>meoTCVG`q2hxtXPf|%Moo4&$A_be82|{83m*Ug delta 43 lcmX>meoTCVG`pdxg^8J&(L|-sFy>|%Moo4&$A_be82|-b3iSX0 diff --git a/system/WisCore_RAK3401_Board/libudrv_dfu.a b/system/WisCore_RAK3401_Board/libudrv_dfu.a index ed43662860986a565fc9fcc0366625101974b647..e52f4427dbb6ad98185c458c986ab0aaa81b1099 100644 GIT binary patch delta 45 ocmaFD|Ac>nG`q2hxtXPfnG`pdxg^8J&(L|+G7;|IaRc07_VxQRN29^|N051g$`2YX_ diff --git a/system/WisCore_RAK3401_Board/libudrv_flash.a b/system/WisCore_RAK3401_Board/libudrv_flash.a index 812df42f4171a9106f5ae1ae3d6734c4f0e4f224..5fed285980c0cd9d1f7264fa924ced5b9850bfab 100644 GIT binary patch delta 1736 zcma)7Ye-a45T3ht-KVbZqvw|0&CM5<&rExO*mBz-dQp@TsG$}SB~j6j%7T7HFF8=q zM)a$oBupWSG^$_ykmyMd`VkRqA;nf!3s&~c^=9`)GojG$3>!+f3`KN*n zl~oI>Yinv1rA%Qle-)*ox<-pCO0$cI+(goa|I_S;UHj&W<4$|m1DADITT5%#;4izr zmv|^mk>@X{5GTBa{(dKji887*Q%FIYF6LNj^Rm={I{M@HXwSDpO?GwLi(4a!B#k(d zSB4yNc?yB=tdC29KW71hsFFhh<#+&f+g=$pekYe&JYfK(; zST5K5MY(lmbMo5GgpKSy1Md?jLu#?QQL8J7>foa_nq<#*+#)q^{O7Z{s0# zq3$n^d=I{gM}gO9xtkFxeEvv^NtKf5jqgl2=y6=EwY=`TY7I;E!`iv{;~=}?=U|8w zfSSccR=}s@A(x&P0b8`vKOSaB#$ql`Ng(CIlW7uJMU!o&=(qKBrmvlxRy&2fh;TDg zp*}E&Ocm&r%Au*ejh3e6*X#KttPclmH|IM6SPfyqlLmlgd^!zZO2apRxq%l@AGzqh zj>|NhNiTKGL-CP^zL@YjAGYxDYF&84Vqgwgpg#O9`3w7Lm0r)ri)m7LH-%fNqh(85 z)8;+x?c$wdHJ-OuM4WSkaL(1=cvSp!Hgr0$$TgdAN!S3h)o?h4GdZ76+L&AgLk+HfuIzQ&nb=}_6Ek7<^Xk&~96xdvB z$dU`J*-{eO{!+2qymY^H$2#E6l4MLuknXnZEMpH;>FNJL{)XcXSe0)G|(8K#1gvOgRPQ3LW zgwN6lBPK#_)ZiO|Z*Fiq_>4m$HRkjA1E?|=?wF_$btNd`&SfY|2ea{xx^RwV(FAqO zZ;0VxQ{nWjGa0YereQgxXmeO^oPd8n9Y&M5`SPqLO0O0ag1gp!*ee8mg~hIp5(me zea^@8p8I~Z3yps@9d|$9wtJ7Sv$I{6y)ub$l;w8+2A1U)MF6k^a2Nl-R`j1pwCs#W zLSZ;K6pe-Akzg$JQY1JqGB^k$;rM89@U_tJq2L?wmlF~8qYyZ8??PRnpEj=-7cY#R zKA$Xi_)_bM#i6VKCl{yeRu9)RtL`KX0x*4Ej)x6SRHKL{YzHfaIW}4puvDSV z71gvkH=Kn!XJJMY3%E>i7h5m-Hd$rLsy5+mCcGU=&_nG}L_$uNAp^UIov54fV(^>d z`?UBRS}BR&{+uZxVZsw8d=xP)a0FEX5#Be&C$+d0lO%jW7fkUV3^++0|E3jq(MsTe zjD~5GB`60DiDtr8p7&(WYxkxE4^11 z5!#xzzS(FbdN3N>`gBhTt?Zg`inb3xYyeypfS2ehA#U8n_yYo>2jCFdCV&aD%>W;0 z7Jpn+{Jm!BQu6pwdfg-B$0L1`>@I+Q4Tn{n+)S(`$3p<4WO1Q)$l^k0$hHEU*YMAp zrQ@e~hU~*Q;O@}E#e}h88Eq}rk<=nqZ3m96!-u1Z&;Z&*ob480VPA=56tB;lDvy*BwWDi1Lz|{Ivkzw z63&f;)7X(0eY)rkPNBod=R=@w3HlwhzE1cnI*f$N$e=exq&nd*I5!gZBA_p%28meb zTfw=JFZ*A7U6_C0mxt?;E2KsvE=g%vR|xUdGEa c!m;Mc9Ys&$H@(ef${I_wf8D8@Wk)Rk0FOylaR2}S diff --git a/system/WisCore_RAK3401_Board/libudrv_gpio.a b/system/WisCore_RAK3401_Board/libudrv_gpio.a index 4af4be65a9bb612e10e905addd0a713f5c37d86b..beb274318cace51c00473799ebcf6b697bbcbe4c 100644 GIT binary patch delta 48 rcmeyN_d{=jG`q2hxtXPf6Y|^^t9nY z7%KJ*K`xGsF}lW;Vbc@ZhK);k;U;Gx!-6>h%~Y{%a!R0SrqD38XtI0#6*XDi_N^3_ vtnS^9x+A+5^{MO@ZY77&k>p4Vo3>DtY+zHeg1WF-ID`u^_4m}^Q|v3hK!t0< delta 420 zcmYk3O(+Cm9Eazf8M~WC4OaUxJG1XD86R858iRZsG>MBv4&*{PxQP@lvPIdGP{=}`o?C{vf^ved2)?xSz!OL zgOB`xA>m=-wB#JQ^!eQevq7}d!NQdH-~5**O# LzYlR9=z{PK9o2nk diff --git a/system/WisCore_RAK3401_Board/libudrv_pwm.a b/system/WisCore_RAK3401_Board/libudrv_pwm.a index b3b9fa37a540d61e0c9f482ddf68afd5be9e7f2b..392fa213109f09fe0d0992bfe569e09882a33778 100644 GIT binary patch delta 899 zcmaE+I8AwiG`q2hxtXPfKGX$CfD-$Pd>q% zFxi4dK@nZGBvdVgVrGzCik$P zl`Bfk(JM)AE-fxd%}Zg>14?bq=ZI$HWMN|fdW3;Ndh%sXcTN!? zj|0q8=5pthf%A%iJQXA zFi#fdQLq1xrn&@4wFr`GSd_wium~y#q`&~?14W>-kZrF)G7prfU_Nk$M6nSAGt_`( zKpNyF7=W>ZAqp9wQOdAB$5X6=D!z5CLic>4ESC8C0Nr7O=b!gAGU$3Iu?32#UN2L(b;)tSXF? zpRfr`W?_$?oW`EYsRvOmXE6B*`&qG))QS?l(v+gI_=57>_~O#yg4DbehRx?Wq8T~& zurdIhz`!6m*_g|n^9+#30p>LWc~{`P%Rt^8I8T||o%0EhrvX-3%cAFc@qX;?1w-BWOXxue3%?aEsXseP2DUYA86NPOCCYZ??5&u z5IX=d2*>~}1^Wfa76M|Jn`9>!^Qb3E0nRi+~u!hXEMd z8>-F#DzSL-eF1S%P*eeR7Qj@01Tst}a|Op}Iv=9s_S}mG2NVD(#m_2#l-HY%2?#JDw`=9mS z-c!*MYisRj@3`Yn@dr;|epEIAQ&F!PjkdM4;+0MClKI*8h9AtVDx>xz8^8Z<@TU5= zs_vh!lUL5?Rq+$02E%6FcrtdM-&NAqj3r7sbJQYrCDih-Bb0UxO+V zihVauieo&6$0EVIu_{7*81+qic`pt(34R6x)LXbmUBE1L2A`-J-1`L2VL#PCAN3u^ zsK=3^F5^9Q0_)T&GzP7^;?x3$s0~O3h3Zrp+lC*F9xMbkK8`$@mnzZP(##KFlqVB^C zjkxfdMwaE;);g}RMmwzu3$;LIm(S}ZtHuCX@xM)yHDH#kL^ds#UnA4ujtDjDV9Y12 zC!+Bz`pRaPHX$ujwk=rN>cLlO>t%Dwxz1*dPb1ze=o<`C=aHh0V~$!vo|?lBLvSCu z458R-aMlR$b|ejO)X(89po#Tm^|i;fP}O zwE6F$JqQUt%t+X{y%+=vJtPQOPxev>fs=fgM5Pqjcg3KW-*?Xce24EmoR=fTkz7-) zdA7q!B;xs&X?jv#{H(Mb1gdHphVh>X%i^7RE^cATC27mvbiJdi?&SP;38#(=G0aub zg-F?bCwuFtfYg6p7L(+9IcE0D}=pmodRkVuoGCGF!qn z>qf9u(jvOp5U#Utk!LSpfnCEoo5LYZQXNc9)|6aAoI%F&Bdz)93o?8Xz?>$P-)?-+ z!j#1>M_x2Xor^uJg&XWs6rvL8s2gvhA$o>Q&eCYmoq?U~3k>N}*=fRKJxnVob0qLl zmni801loK&zqL*B#6i}F3ATb6Hh^Vz3)`%UU`*01x?-|s)+2-m<+vY{F&}67{gZs` zI9B)f>jyow-=nrWJ!ZS}kSpu}GVBWG*eu?&Ti9h6(QHVnM~}geJ%O7>m~<34GO)x^ jt`_&KV^gM&KB2*s)QC=Y7(;9a9+}#|-)O%w@3{T~fpy#Z diff --git a/system/WisCore_RAK3401_Board/libudrv_spimst.a b/system/WisCore_RAK3401_Board/libudrv_spimst.a index 571d51accef60e3f0760919807d16e3e5efa81bf..a081528739d44538a760fda2fcf56586b6d1db19 100644 GIT binary patch delta 938 zcmZ8g&ubG=5T4CuySr%;lWdnZO{kl+&`=tiw##Y{h2Db29~3>d*kA>PB9YRI2wpu{ zQ06ANi1sF;L=S?Z;?;xyKoL)ZQqYqJrTWeO2unyZdaiH+8R~FS;ka zrBh4y>t~fa&%1L)K{5sXQ8ANGgr-BkkI4 z=~kiw?Z>jx=@ndo2l*0xOyoa@*g-5}7l(=bQ3Bf{7MkeK26)`3ggBijSm*trmz+0- zc}=gRcdvG~c|-59V_aOFXaqtNGeJzv2K!7kiR9u_Cy25V=Ljc5Y>|I&sd=I?!B}6F zIKxkkZ`?6$eP?&4d*%8TUouDgAIzF!t`7xk%Y2w=o7)4lJlr;K4bUFY-2plP>H*0f z%G}Jhn~x&|CJ&d}lMcQ8fI~Y z7cm9-CL)D8>SQl!*h$_tb)e2|;g{-D!k{*tq}nzy3gvhU?@s{a5W C3uQ3? delta 858 zcmZ{j&ubG=5Xa~3Zn9l$LN;k!O>@|7N*k&+iQNQ65b+1GNDm5v#gouL1(nqj5Dyk_ z9t{KH!Gj1^dr}F4N4F+o+)e?eP6pv)P=cP)!r0WQLI?Se`ejAksLO*w zFf5z5)kQasCW}c$vJ!}Gk!;NcScUkcm{dyTmw3;59i*$4Cl8TH`}t+&`nCaYkqYzz zRzXMX(tDll!@9WPlV&l}#a@bkrZ^+Tv`GG3irXWu#3_<+E|sv(yV-YasepIv`&NJR z+6`W_tJyoft^Um(*QPF?FqSBOapMq?%-J|hG%fbXs6}I$Xhyg}bUS0X!p0G-mMK9esNZmb0s?};IXr>>uio`9dvh0yP$_-`VD#ll14mUo$hWw zO9-AkRKBT1zd_|)5sqaZAX85y*(>-b^A`S-SAk#Znz}$8jDhkQ*L9b%$MY}74|3k| zCAb`TPw5k{(2DFmXbGBhdRm{x++sP;Uvpmh0=&2@(oT8|4te0#a-XsD5t3mC{L!6N YKX^62nE8(SSGk{GNPeT?^ZY&YFIWv%`2YX_ diff --git a/system/WisCore_RAK3401_Board/libudrv_system.a b/system/WisCore_RAK3401_Board/libudrv_system.a index bde17dd22e0c45a0817a9448be4c9fa30c8004ad..f770a31762662f30caa17c2ef02230132b046a10 100644 GIT binary patch delta 76 zcmdm`w@Yt=G`q2hxtXPfH446v1MJ6k6Dbm1rYa2v$~E#8NPF z3nA%*K)^~yf`XuuI!(|?};-x$|b$M;_d{_ndRzc|T^mz1LZr^3L{_&h?l3 z&!(^F=;Et;kt!G-s)o~FI>YO#n>_JIhTF?hmyXaRe^$FywQ}=rb3pHfRx2A>%|HB3 zx}z^Ew*=Pbzs}^XGG%o(TR!DcC51zkO#e?-$Si0&6?A(zlpN?!csIJruS?fD2c2v7 zM66Wj6Yhcg+aVk|e1T#+R4oU2ufpLEYB`02kkN!gS@uvngi5?^r6tOF547#wg7-2y z8;Ar^cpuFjPJ@%tQ#_38wJvCw-Zv!CBj6stjE_ZcQ2o~CDcbxso*LVN*PP=0c-p-# RtMJos#`;_8>0Wrp`3EoWSCaq$ delta 822 zcmZ`&O-mbL5T5tl-I|1r$*M6GYl$NHQpAXc90d>YB=qPhR3fy{gpjOXr+DxODDOe^ zqKFqyDgp7}5AY&LX|??o{)F_I-F-C(9hiOQd1iLr+1cHn<2R}O(Z0e$X}(yTJD6CO z_SyB1sL+bq6-lF1D5_(T9bD`qHf!F4EPbS;`Yj&JM!8W|h45JCSuP2cH~YWDyb66W zC{Cs(9>&RUMaU2d@A_6?kn^tIQAg&<`1`JdZ?_;aXh^MEs~L%Sfcj|gctCK1G`q2hxtXPfgctCK1G`pdxg^8J&(L|+E7<1#ig)A`k#Cc+yV^~v|0V16Yj{pDw diff --git a/system/WisCore_RAK3401_Board/libuhal.a b/system/WisCore_RAK3401_Board/libuhal.a index eca7de3ec3e2d523ef3ec19b9f6044875c1ea39c..784f5ad3d620d16f681a1a6f1afddca2d60152a1 100644 GIT binary patch delta 1746 zcmZ3{%)6qQcY-v#v5C2vrG@20rGk3r6b1%r;P4&>1`v+9LlUmXsiEov14G>&!gz87 z0|WWEo`GRu195ow69xui@MRkY1|l${#tQ~Ujd~D)gpE5G81Z4}9}JA-;!+O=Ms!?{ zED=l~|?Ck$w~9$kPu{yd<;xbT_?1}2=i9w@oH06#u`hJlG({EUTx2_Kfi zEjf7ui{IpZEIgb4vB)uQW|Ych+$_#EmvM78$5p1uTiCZxFA-oAo&1h_%XHOOOhS|Q zNV-m+=E*2O`8sdW^bH%Bf+tTCKQ;ZUGn2sNI6ltJIs&^{nUhP4CkqNlPwwI4oqn#7 z(Qor1z5vGQSDS%q_&2dmU)IRPzga-cf^o9T@#4vwxz(mGzsj^^GPC6J&5L*h88_!i z`!d1GuE}-IVw-QsPE-{wPR>Y8(aYCYP*5;5vxF9HAnENr@0k7yPtJ7agK64a=j_P} z=bZESFDsgoRtnLJu6uJp-Fjx2TCi<0P4yxu0z0O0!;PLk?7U;DZ%cH?Qb44m2!!elxOA^LzEzC*V`|#{hTAC zv%qxA8BB0XxBJatvNiSWwv61TkKSn!ci%Nf_D7 z+iz4eh4Z3__;fP8<(n+IA8!3-z5VV2(>qThIS3dw%2J|vX~~!ln%<|#EV12Bl`&Xm hdM6Vz+?4I}n3!M6!ED+NR5e!y#sf#LhaGbQGXT15=`;WU delta 1698 zcmZ3{%)6qQcY-v#p{a$5nVHcL1j3JeU5Z{WBdnS;Wf*1^C) z30|^+fq^itXJFVbf*+qRU|=8uGpfokkdEu2njGgaFyg~OJPeGq!1Zf^1`i;vA4toA zcGoj7Rj->k-Ym1+8d!%W4K-$ ziznCdOHbcd%*4C7UUVMg=6e3CtZbzji8=8FlP|0j*=!{4&N#g>iBWF)^cY5i$=mo& zZ5EdFVw_yf8@^eFEthd~p0qC$tcaRi=Pb7QhU`RD(UjDj#7ez23Q$Jnq8I$;C-q;tilV9%UgNbhbx7%4737);HGW|Iz3xvdap4fTnJ>*_8rEIt^(6vIwPqB8t^P?@`ozc>As~Xs>QcgmNI6a zoBm`TlQ7Kv+kx)S<%RLUzS-WnhUpF8^uNw1n#HzjxG<_3il!H2=0kmja5UH{e@-*; zN=<*OfzSr_%XUdk#uBc{na*&BZ?1C|7Mb43#0(eNK97m{r5wx^+xrxm=gPo%V6#2! Hm=l-*KmEK@ diff --git a/system/WisCore_RAK4631_Board/libboot.a b/system/WisCore_RAK4631_Board/libboot.a index 02b3093dcceeeaf6667addf20fa410ea373c7141..0cda474d7a5f14d1740f691c17cc186110df771c 100644 GIT binary patch delta 59 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 J{k-0m|HhVc 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∾&j|k7hS^3}VI=3Du@@oV(-Od* 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 O_ep%ua!yoLeg7AkdS+Gt literal 182870 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 Hir)VRwB%d< diff --git a/system/WisCore_RAK4631_Board/libudrv_adc.a b/system/WisCore_RAK4631_Board/libudrv_adc.a index a82bffb79d08f8f2dcd8da8df1a0ddb0318542ae..b70de583d0f7159ebe48d704dfd95ac2c1e37c5f 100644 GIT binary patch delta 44 mcmdlayGeF}G`q2hxw)a4=|&}PMi_gu3FBW*ILCs!iWva@q6+c= delta 44 mcmdlayGeF}G`pdxg^7ic$wnn^Mi_gu3FBW*ILCs!iWva@WD4&9 diff --git a/system/WisCore_RAK4631_Board/libudrv_ble.a b/system/WisCore_RAK4631_Board/libudrv_ble.a index 608953ce81ee29716312972e17363810a5276839..fe674329dcc5e6586436e544d70c49c5495e9ccc 100644 GIT binary patch delta 48 rcmdl{xubG|G`q2hxw)a4=|-haRv3G-ou%036Ri2hFoDf>mQ~CEXA=#; delta 48 rcmdl{xubG|G`pdxg^7ic$wsA4Rv3G-ou%036Ri2hFoDf>mQ~CEX3Y(~ diff --git a/system/WisCore_RAK4631_Board/libudrv_delay.a b/system/WisCore_RAK4631_Board/libudrv_delay.a index ab6f1a85989692693a4687df5afdb0b3403b7ff5..6c7389d26d231326b251c36403a7ea35becc832a 100644 GIT binary patch delta 43 lcmX>meoTCVG`q2hxw)a4=|rW^Fy>|%Moo4&$A_be82|;D3itp3 delta 43 lcmX>meoTCVG`pdxg^7ic$wZ~kFy>|%Moo4&$A_be82|-b3iSX0 diff --git a/system/WisCore_RAK4631_Board/libudrv_dfu.a b/system/WisCore_RAK4631_Board/libudrv_dfu.a index f6c78b9879b834bb8512b6be9e16f76583110a09..e733e056796eaf5b0cbaf312df8c02156b872180 100644 GIT binary patch delta 45 ocmaFD|Ac>nG`q2hxw)a4=|rVe7;|IaRc07_VxQRN29^|N053@l`~Uy| delta 45 ocmaFD|Ac>nG`pdxg^7ic$wZ}87;|IaRc07_VxQRN29^|N051g$`2YX_ diff --git a/system/WisCore_RAK4631_Board/libudrv_flash.a b/system/WisCore_RAK4631_Board/libudrv_flash.a index 4fb5109d5d2e60c2b42423d0a517338cba432fc3..18c85cab2c8a7f9506bdb5cfe5ad8936b8ac6fec 100644 GIT binary patch delta 1736 zcma)7Ye-a45T3ht-KVbZqvw|0&DB)2e5E}>Y`JX^Wl@w7sG$}SB~j6j%7T7HFF8=q zM)a$oB1|EQ9#p^jA)!6U!XFXB7E)|wwP0o6T<>*nOF<)ZXTF&^-)c-|PB`tIPh8gBt<5c+y+7^x zUZPK$BG0d>5GTEb{<}^P6J=CsrjUX(UF2I9=4Gh?b?p1Ev97O&8|~`$fjgs#B#kbghZVgLyBigz6;~=}?=U|8w zfSSccR>0>IA(x&P0b8`vKM`g}#$ql`Ng(CIlW7uJMWbz|xNGa`NMAcSt#%4|5#eU0 zLVaKknJUmLl|xf`8!b!Auh;WQSRW4BX3lp2uo}XIrwjng_)HqUoQ7`!a{~iVAGzqU zj>|NhNw0LwL-CP^KAZ45AGYxDYF&84Vqgwgpg#O9{R8`HwO-H0i)m7L4~1K(y?JYE zFiy%e_HP&3~W@bLk;K@ab55E^gNIPtcB z5WYwwjFL&+L?`a)P-{_i~mx` z{Dv6*1~}CWa1WX=;VRu{!#UO_e6VRd$5`%LL~l+()(FbW5TAxnNQ~tKGs2i%o0#Rz W%UFqK+Qo8jf$5*fR7Wp^oB;X?e delta 2073 zcma)7ZA@Eb6h8O1h1*Lla0_&^LM{VY!GQ%jLlg`%zclJL+~yQC`a@%4%;rdBi9awQX*bZdag1gp!*ee8mg~hIp5(me zea^@8p8I~Ziw%D@9`n4=y1T>Q(dL(BpG;yLWw|Y|fo1t65da(j+{OQ|<$cHF%{ya} zP#6vjMTbMNNdIu?gRh514)(tpdnF!WKMKL)_b${H`f2s~aPh+U zh#z}w5BU9Tj`O+}s2u>CUo~E+h6h+FA7EXUD~aYC`Cj;ZLUAZ3l=ann>z}S9qi-m^ zH;;LHvry81_ek#T$GLea5G*(JW(ojEs@ErOYJtLD}9UT-J|SRD?5Accz#a@5kIZs z%RS(|ew9mc?Hs$99?A-EB0cS}db#d7bth>Mfa&uxJZz{!HHv7$4zN;~V`H|Ur2=iv zR^3{);Vjfu6=pQCfZG&zvvu3Ii3(Fzr3r5{;q6e29%_#w5^}l?8Q4ASMBR)RLBJH> ztHtNhN(ub-=S>N56P`5TBZz5%!>AI7aM~1~(&AQ3lJEsxFvWi`-~@I2n^xdMD}fU- z8m3K_pbR)9q6Igw1l0sIq56Op=W#AU1?>A5u7nr0d@|*m3W}}hlf#~qor+ZRpVb_F{w0!_#J>aSUyhK+CalmDUP9_dqLcLDTiIIQBtW?~IF9s(F6iwnI=78g20wguq4hJV&9 z9Y4i0WFN)>cZU`(B8&~oXlt;Jqz18S+i`3eITVeD2GGW1Y`6F-`${Y=-?DS;8?lOg zD0-&n#8aF-EC8M(!2Rry;|Y7bfPQk+ar5j?M_pnPeI1m6ic|Hh$tF?h+^8**P6TxE zbfGgR8Ar9FcA=8YV6hi1@rkHbRN^~@YUKM80bW$xNKGh_*S6BjNByDS(2&&;BTLv1O_3zHthndN5qa>@H8yGG3lh bjy1V<*q*^}dWX%HHWX|By3;pH4_p2Lk4aW> diff --git a/system/WisCore_RAK4631_Board/libudrv_gpio.a b/system/WisCore_RAK4631_Board/libudrv_gpio.a index 11d0ab4c40e41c544fa8ba6439553ef924bc319d..e07127b890e683ea15e940f3cc5a1ae6f5c30e5e 100644 GIT binary patch delta 48 rcmeyN_d{=jG`q2hxw)a4=|&}ACK!A2KVh-WJxtkxFoDhggsYeVWYi8i delta 48 rcmeyN_d{=jG`pdxg^7ic$wnn#CK!A2KVh-WJxtkxFoDhggsYeVWR4Cu diff --git a/system/WisCore_RAK4631_Board/libudrv_pdm.a b/system/WisCore_RAK4631_Board/libudrv_pdm.a index 62c0867a5b0215a4e38f94a3d79dc7ac6e383ea3..217e77834f3b4a67b1bffe9ddfdec85f14470d77 100644 GIT binary patch delta 44 mcmaE&`$TtwG`q2hxw)a4=|-iSj4<|QCZeU^#{q3lcM5&eXk_fh~XNi?ZD&)p>ka;qKO2Fp&g6{B0*y4fX864 zbrES3oUt}Tht_707)d(x4=|8;9g;4eC(kEO-r+r5{9HJZqf>S!lS)sYCU)4{S$y#J zW-e&_InGm-Wpy!a+ni^zSqnUoWc!#EHW~LS!g>(b;T3Ny(g-rkOZAS0ne8q2A4I9W z3{^s`irrC{-J?Z(getr293|OBQ5MmV9n>jD6o+;N#bq7Th&H~6Wh|*Ka;k_c)xjm@ z2W5wHUUM*`iMY@>ZMS(0O-(|XOj}dJiVz4SeXHmaUdd*4CG3zDeOn|usf#!!n4ZKYjP^HGTLnR3wWX0oXq zNM);>Hc-t*Ic1=kSLM_hRVM!hl1C=1%BwT_O!ftmXC{{d$%x5w<<(gum>C!tCo@V3 zPrf5B02F%*mJw9|$=fPGKGX$CfD-$Pd>q% zFxi4dK@nZGBvdVgVrGzCik$P zl`Bfk(JM)AE-fxd%}Zg>14?bq=ZI$HWMN|fdW3;Ndh%sXcTN!? zj|0q8=5pthf%A%iJQXA zFi#fdQLq1xrn&@4wFr`GSd_wium~y#q`&~?14W>-kZrF)G7prfU_Nk$M6nSAGt_`( zKpNyF7=W>ZAqp9wQOdAB$5X6=D!z5CLic>4ESC8C0Nr7O=b!gAGU$3Iu?32#UN2L(b;)tSXF? zpRfr`W?_$?oW`EYsRvOmXE6B*`&qG))QS?l(v+gI_=57>_~O#yg4DbehRx?Wq8T~& zurdIhz`!6m*_g|n^9+#30p>LWc~{`P%Rt^8I8T||o%0EhrvX-3%cAFc@qX;?1w-BWOXxue3%?aEsXseP2DUYA86NPOCCYZ??5&u z5IX=d2*>~}1^Wfa76M|Jn`9>!^Qb3E0nRi+~u!hXEMd z8>-F#DzSL-eF1S%P*eeR7Qj@01Tst}a|LgUy|CzoW^d}1LP11Gk`R`J_NI(p zG^l>|B5+VpAfd9jUJO#I7rmR*ivnM0AsC}*wP@BL&HneGz4_kVhyOkIaCZ}Z&-!lf z@iZk`TdkJnJGCkP;OWbc$|hji3aXaX+SGzqF2PIoXV)8kaB4*vaUWU#{db)=)Vx)V z+WBgE<$Ye>b)r;fy6hWIM(^{x%7ioHh%%8n=bZcTUELM(v0u3h1%>^jdRQUXU065s zIrhR1X*V@KU_bO-)A*2GANW(YJ;WF*yU1AFIbLGy08Ur!w2xMGczF@Y@MXRVRdg%v z-8dXuY1qqqaJWJ6Gw7$@!aeE&W~npyMAhNnCwLakR1>|_cNnD} z#}suL@2TThqn4vS;@s6mEntvZhg3wUUX`(J_)#CgLPY0d$dd)hBGQbgPWQJ*g?fn0 zCvBMQ5t3w`WG0rv0c6Q0u^1J~u!;}iASw)9 z^E7%l%q?wP+SG<^!P3?MzDir$Ft40zYt(rLU5$di!60=WDe4$rQ%lHGv)Ew@9zwe* z6n7=gnqj^lNmHn89>z||g|nvf0vE}?kR_z06FRR(%o5r_fU)Zuz9nkun~zwL&EM9Z IwywDT0Z@JG-~a#s delta 673 zcmYk)QAkr!7zgn4-OXvsU~5tvMok+#^X_imyKXk$5@I4^>O)X(89po#Tm^|i;fP}O zwE6F$JqQUt%t+W+F9v}^4+%onlf4u|ut|HEM5Pqjcg3KW-*?Xce24EmoR?#Tv21Ij zaW-zoV`i>>mY$TBKP&AAf!}ZFy8fSCrpY_wT+GCZO;WAAWqU_g?TN+j%H6%6fA$)* zQycz-wW=>29k{d;(7%=*K7Wv>8Kq#QR-zPUlh*ohzmjN8DhvKZq4x;ie_hqj+lr~) ziMk?wR3_?;;#*~~zNgnK<$xpOpwaST^L+=6mkrM^XIqO9!g)&w)vC9J=(6gh5Tjfb zO^9T9;ADRjRgn))QXOtNsO%}Tt!#3-OFDhvsJyF>(?-0U)Qp|(tsEf1Q{z)!+ z9P9i0&4V7=@9}q9Jw~VXkSpvE((D=**bLsYHSDs>XwxM%qfh6@p1@5#NE-4S=~&?? i+lYJSu^GcfpWrqmwV<0F#Rwb6BSZc78_TbZJGQ@pb=&#? diff --git a/system/WisCore_RAK4631_Board/libudrv_spimst.a b/system/WisCore_RAK4631_Board/libudrv_spimst.a index 5e8a17f76204afafa67d59bf253725e930fb9b65..dc3370df80d2fe9c753a0d94a9317c2b6492612b 100644 GIT binary patch delta 938 zcmZ8g&ubG=5T4CuySr%;lWdnZO{kl+&`=tiwCna%=q*_MLD6Hy1}!KQiIiSM@an;W zGB?RZv^NnYdJq&9uO9pdig*%~f}T7m)o=DkSa;ZY^S*E9ee>Si-DlJNnR^v|$z5J< zdnfPL&nS1E_ZE~|NH|Wr)oR5?&vhMVY0-1}ozk#24HDB_KQyRH75=UKH2(fNdMnPw zOl?q9Zz$^}zakn`8l!Xs{5VE>hzp1c@^MqiPSo4nId+cg+GZ`OJRV<2DoyYs?b>bW zR-yv!$FkDt6TqW^siV zF$MW1B858YWG`yiN#00--)Ah_!wk=V8AmeRMbL5W*U(-?Wf^Y6Bki?N0T=JvY2dTr zT!N^JpT~gyJ>kS2@Lq1#`~=nkJ;`r!$CV#^kek*1pwngklC!v)x1!&2;N@?s{{X^l BWeNZQ delta 858 zcmZ{j&ubG=5Xa~3Zn9l$LN;k!O>@|7N*k&+iQSZnAmR^Vksd4v7Ec8O6;xJBKs;Ey zc{B`&2M;1x?MWpF9`)i$51#rb=s^UJ;>GW5-o~)tu=D19X6DVCon@cSzNtN$wp;C$ zaOHT|pIKAYw^2g{+Tr`HX0tiAE{CD-FSXjs{6W=A=O#!b6UL@a6*|m+)GsUQL>=xI zfmXgVJbs8wI>;|G*LMtfi&UT& zunIb4m)`4aAJ)YUpEQe+F7{LWGsPJxrbY5+QrsSLB~Foq^QnXl-pjsYO9i}Z-?w^O zn>TpPu4eCaw|h6cT${Lj(paGQ#f>9GGH2r`(WKa8!xoK2qAB49(IK%-qN>;y@u@24 delta 76 zcmdm`w@Yt=G`pdxg^7ic$wsAYCK!A20b#MptC*Y^8#cdXQe$G{U|?Wmke_@}#D8-J VYcek*$K*3YZ()iz9}uo$1^_Qp6<7cO diff --git a/system/WisCore_RAK4631_Board/libudrv_timer.a b/system/WisCore_RAK4631_Board/libudrv_timer.a index baec1a59c0348a2f26b9b4f172975509805ebbc3..9d544bb7a468a693e4113780c4e9cd44b5f60df7 100644 GIT binary patch delta 48 rcmeBD?oys0&2DUBZf0F1BaA&+fKP1mEk=DFn80QMzA9z_E5Hl8 delta 48 rcmeBD?oys0&2DIFVPauqvQcR^BaA&+fKP1mEk=DFn80QMzA9z_D|!pK diff --git a/system/WisCore_RAK4631_Board/libudrv_twimst.a b/system/WisCore_RAK4631_Board/libudrv_twimst.a index db05791d9934c9b7724e4664f2f7ad07193405b0..3c948da5a4fc95b9f2e6665c7c6787cecbca3f04 100644 GIT binary patch delta 855 zcmZ8gJ7^S96us}wPG%;~WHvkdi&=0t8eO9aepWXMieRxq3N38JO0)^22w0_Z5lcbk z7DDURsB2_RvR1N1`{}ivQZt~D08E!92UD{7m{6%e5)zZ!7=72s3t(Kl;HUIEC z>88G{+!9!y|2k8*%9PdFZ26Q&l@tzDGW|bUA+w~*f$ z6R}dAXWbh|La-H@pa;kbVQ`tA=G`siNlMZe?sIi7COQtRu?gWdaFN?NpXuNa<+`8q zMFu3@rEJ&wC~igYoLN^NGpE!rsR}<&)Req{&%)g`-tgY>cdy1nKaiZR`)w6`cFn8? zZw7YbD6%IS7ZHI8=@D+;fP_-Q7y$XjvsO1z6LPiq~W!Xb*A1d*-m6j;yJT(j!5`p7kfK(9MSntkW_Mo=LI-A_d7hb_cXoF7&%|Zw_h^59zE~*E74|-V zm3I4LGb*&Ac16-C<`>kV$PO*`6Ps1=AWI)8sUF0wSufQ~Djy#2{FO^WO_>8LF|R^j z42qMfiHC9WTM;ru!n?i|805UGchrG-H1WRc(AzDD3>sFe)@nu~9;5;K1r%_f$7mlh z+Zfy-r}J#JMJq})11>QJ>k?dJD$u<=^e;gkKr&6gctCK1G`q2hxw)a4=|rVc7<1#ig)A`k#Cc+yV^~v|0V3fHk^lez delta 45 ocmX>gctCK1G`pdxg^7ic$wZ}67<1#ig)A`k#Cc+yV^~v|0V16Yj{pDw diff --git a/system/WisCore_RAK4631_Board/libuhal.a b/system/WisCore_RAK4631_Board/libuhal.a index cf5c8181adfa245ad1618bdaec02355946556168..df30a70f36473e68ef66d6b670eb56ca4f9b7ace 100644 GIT binary patch delta 1683 zcmaFR#`~a+cY-v#v5C34p_%DKrGk3r6b1%r;P4&>1`v+9LlUmXsi8W9fuY`nFrIvY zfq{Hn&%m(o2XS~$3VSR0ZcA47|?J%x&V3n`9Onl;k7&rOgM2pP;!q7etf2Zfr(uFd=CQ?J}iY> za`FZizsdVpcsBoIkz?GP%t#JgchTd>zc$j7pCioPkwtIu4nqZAV%@c zk{236r&m5ja%taFrf#n3l1_|pmD}~47^4NIzny_l1$2S~k{rzH=|I&I+vAj( QTV-HEpdjAnz?{Gg0RBzj6951J delta 1739 zcmaFR#`~a+cY-v#p{a$5g^|fbrGk2oEes6Q!08SQ48-8N84L_fDR5km%t2vKXJBBU z1TWQKU?7a^85s8W;K%1*Ffb5-8C9n+kdEu2nw&%!81dnt76wLI;QF;dg9i}T52WQl zyXzU4YGQEX&I=4o`0$Ju3{2$WQx*(Nr|Llj8Te@l0~0#_Ai}^zDwe{nVe$qRzsdVp zcsBoIkz<_vF;aZor!X_xPyWc$wK-Nwka6-^ z-f7bXiNXi0fyZgB}%3Bp&?frd$JH!@*#7MMQQ1!2kLbC<=ppLAh5A2t0zDWfplg?{xC z+dq{uE;~1U#(XA(Fwo)KPt0cu=Y=Z-iP)@VddnwTnpgy}6~kQ%To_diMbis1^Pvt$ zxC;~%+c%tH5|kD#Pl0Jijt!9eCTcR4a81s1Mg&Biv#^M0L3u8YfXHECzAT60#297f Nb{S-mZ4S%{%mC9_=BWSx diff --git a/system/WisTrio_RAK5010_Board/libboot.a b/system/WisTrio_RAK5010_Board/libboot.a index 600987acd95cbe8dbc1b60cfb70dcc467ef5a09c..4008725387da262c2488a8933db12ea7a9e015e6 100644 GIT binary patch delta 59 ucmX@LmhseD#tG8w#wO-w7RDAEl^(Og*qeFS7P7!OTexO=z&RnoWy}B*3J~4^ delta 59 ucmX@LmhseD#tG8whNc!Krbeb4l^(Og*qeFS7P7!OTexO=z&RnoWy}B%JrKG8 diff --git a/system/WisTrio_RAK5010_Board/librui_v3_api.a b/system/WisTrio_RAK5010_Board/librui_v3_api.a index 7a48d3459dea2c7640758e597fcb7804327c8dbb..6069d9c6c55393ed4f8ed1d25dbd5a10147e7d01 100644 GIT binary patch literal 237802 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 z zr4eCD^B>ziIxKcQ{BDpk_w#1oj0+*Jg^gdZVf)H>^Gp*CpqG7H9fs!Ux}$t}I7Plj z@Pzs83na}lLa$)rmoo?wwSj6;4%)0u{Um4OPKV7CjP2B&vSA0#H?Oev zBOLQ@l}UI0>2zM$Dd6LniTWtbZ!&wQ=j$fiyw2)DIHsq)0)Ar!{H6#Wmb>QL8l_Xu zT(Jwc5K>O9h-bO52`)>yUn_?sUe2jbGe#rfI zg5W3I1OE$~UWapz`KEJ^e7v8py9#4iyKlAo)!f7XH8y-U^1Jh@8vzRZpv?WQ**Evt z`an2Vf4fb(;OqX$;Of3__fOmN@Sjb-y3YZBBJcQ=f8T2_Kz89>4mc`&Admp8$Y!ox z(KWX^Wg^Cy+PU zN)$kEvFk8dpJ6 zrEz7&B6YkKb56*rs<|uLTBU+KyJ}QYIkJL2@BFRQz#Nx{osj)4+?uLuwQgsl z04pe)h^~nit;NMP#qJ|2`V~i2E6j3aTwmG!Mn#?F$ZC2M(CTcrqvif$m6P3JDp#=w zsb-IY#S6hE;+CnR_a0;dYRE)bT#ajF)fB}*)l`)MD=5P~Uq!DR2SF23CcwBdTROPS ztEkF@R8yp2iE3~wT1yQf6Hp_txEfa~)fB}*)l`)M3Dhb;LaHh9n92*#CSp3GmKs7PphjSEZ(ONV zQxpSLQ&k46psZTqIgVPz7YC}|UQL=*>GKt`a&eadtCd6|I9?jIhA~r9tA+`wrp#j^ zEUv~CQ#C~~P&HL$KsTs%GfdGq+s!|P)<;O0fcmxlCIC|^;oSTrduz=32HsY0l?Zcgi}N28*<*?$_D=Tgn24BxxIe%~TZm)6>#&hq z?CZsGBQ_DS@9l{2?Hd$;-HUy98Jx3k7-8z+MiKk&z%i%s)?lNI!#-kYAN3Q*@PA_S z?K^-l%SuG-`x`{~d=G$c5#q?lISS!BhGX9k+5xB&;wVS4`Fu}%_Dx5c@XY}k{yTp; zKSR5zlOlXv2h-V}SDoHzP)KfRSC8Yk37d%6^Fzhg;PIUbu=tU-e3Fm# z;|q0BnhnnRK^*NP7e)Ly8#uo{W_Wr}vpD9v%<2_Cjw235?L_R^VsR4YGg)6GIBIat zKH{injs=T-`nS|)!#=hXmh)U}QZDjrv&H6TJ4@SR?x>gB)7C!mgY8z@C~>0q0pR>{ zS>)-RXK}RmTb2*IP!>^%CldTmgLD28$Nc1?h+aNZ_4T%S^|8?6m~SVXBe(dGL0}fb zB4W>c;C#L{o*!oeEai8p<&%6HNbZRQZ!$RN2XVBATomzx-?{sGJ3YPUS{(Bow|d2o z&EOLb@`*ivt@w6&<$}in&X1p1KFP;t{=P`i{&u|cgE-nlE{fPN3kSX*eV*Q>7RP*g zJ#l_BlT;rUD!yT_TrwUX*IA&g;s@VV@I`_*8JzQjINC!l3X(&)LFql@>E(MK#4+D< zhR?Mt{^oU(9}g?O8$7<{9^dyZpZIaT7!C|Yf(<8y$IcJpXb-t4w2#8|&i(qh-P7B~ zbZpFbiQ#j8+)%-fC5ms{tCH8|%7akPhA6!Bw7>3!JK%Qwfw zk1t!ja(>(kzSfY*{1JOTruZHQAN8`IhmEIZ9 z+k|wM-^CV3yqU#PhKpI8-ea_&Vzr-;=xhSId2TE_o^Ox^=5yyPXCdcdTUhoMA zlAZ5Uf%EHa4fvR!er&@geCJv|F@IbRfT4&Vod)OpAdY-t890e79P? za61%U-;?^aQN`Ekl}i_LiXS&xJ~96>Ik5cV$DbOU^Mg3rLoSN=@h3{}PEYS;7RP*3 z@Q2*u$CDNOcv|rddwg&4_+C2P8=UilI7IQMIztf~jw!w4p5EO+N_}jA zvwpjp4ZfuF<8GKP=KGx0 zE9XZm_=JOeV$b!8?f9@Z%1HbAAv<-ZU7(0%_72=QG9LSlX2a(0E-`6ET8!CXazq?2Iu@Bj`om?B6^3F-cGMR zuCqAi{iuQ;-#0kt$Me) zp5FIb9Q{~=!ME?nu?l|F1LxQ8A&>9<9^V4XCw@#9gMgt>7iF`-IX`9qM|;Rck!<`u z8ei`Xp56~x9P?dm^~$)I_t%^s6ro;jU$Zzlj}`&9QH(;m=>53Tdpq<#fOMWmAGSE^ zebDlWzr(m6@kOYgGdSljam-IHis=1;(tG)ws2{q?;+SvMw0ON80H1J>PwbfqoL_!@ z;A4LJaWgjNVfcK@C;6_a;K!u~=lmd!`N>5Q8@4OG!=B!cTO9NKzSS%BaUJ-Qt}_P} z-vO^&e%Ir>#qxZp^@`g{N0&%$h3^y``?!bU2l+$ybiM^MUqz9 zYk$8gJ(l4}m-&MWuqRw!!Iw0?=%-!Jlc5K zJ;R;Ym>)wuIOiMJtDkgIk7r3w?dwqJ>z@yt}tJ zqGE=}`tf0e{bXWnaDR~>2MrH*508YaAhz_HGxRd7-&ju9KeVUFFKDt^3)^1E_xd{b zK&J&IsmPjnipEpTa~e* z*A#yLa3b$bdyo3PA}oKGz)wtkw66j7{ei45&T{HBj;J1Tt_sH9F%jg@tRl*w*?rjm*=dA=sgb+{x$e95H}%Cp4YNX zQQvxO2cE`0xB+|4I8qx8N26WblS6#eS;!AW3+vSyi)Aw_SDGK)tUVT6Xl}aQ zSZsGtz}j+V)vl*^F6e8@T~XwEdQ-m5G1U+H+E3^H-RoZXCRWzUL~G7*y|BqxjqgLV zr{xZ>yYt8O4U-=?tEr{u)_v!s` z)|7*lcElJ2SRXH3zmMPkPM^^foXtwJG7Qd>!TGu{udtr{o%djML1F$`jCmNNOC#gs z_k_HS;F~e)?0|JC(m+0I0qaykJmz|4Q_neslAHX?x>J8=-ITxI)VKHx4W~D4J~U(J zdamX*HOrEtCzIy3d}l%K_tyRV?`QYj*0=6AKfi9$6L0NHE&u4c+jdTSV)p6J9J%Da zZys-Wdio15Wk0@i-IbqTcj^=Fd5vdT7q^DYt*K zz3z!r%ZJzf`%~{*_fJoJ6*+%&BslkbPaHYIx_$V_XYRS@9{Rv_!p=M#EcnKAshO$y zsk_r3p*7>bICON)l#`;>3h@$FJ=S#NnujT_CHGPaYaZ&A-?aaJSxi2hn$NWmxeg-p zd#mDwYa#krww?EkpOpLF@ywyupvLCp7JOk6*ZT|CqMI>4m}gcbteaoVEy{i4xnSQn zo=a~etFb%8N?W}5q(hm*?*>}~*1AiFw%6TYTG02N!^(I!EC2`do;04ZH9mfKeQX^- z-?smEZ(-JiXWKEN*E(a*7fI6Co$Vx&Sz+HQ{djzagMH}h!t@BQ!@N2~!nJGS{HKNa zqdwoCi6s9V#jnE{(0Y;%niPMN%D=!vlm9G*KTF{kDSWfSH;4G>e#3;LOiQ9e9Hp@c zVch@o-Mtb$sYANgeIZ6>1r1FaSI2n%R)t?_fc9@1cUE!yDurLI@E0olg$ln`;nyqt zdWFv^{6>Y}sPLN&f675);1zf9pTQ~0+k{FMrSrNVbBe7yAk>+j7u z3W}usUR|G$`uv$6WyVoD(B}*9EFvjiJBoJ-k(93;m5mZ{lrC%ED^$8}&u>uay8W(E z>AJnPt90EyFIMTgJ<3}Y29^$IDxxfD_jZD$>-Hv3{Uu$uud5<59Hj%@p7JVvSNJY7 zTNz89b1myV1Y3hY?q+zmO8?&oGe74QIM;Hs4QIme^x%(en0@q2%;fwZ>_y1;v;?qc z_?Qaw9z=xczoEjM!(db!wwbs-@RYGzEDEtT6vUo6df6Ci?FiZTR*u+#LL= z4bKU~t-=3M`M(v*zbg1qEPP?`k`42|VkS!S6x?`_!sy!=@V#G#*>YxLWv30^jS21B zWYbM~ZV&dv@?RFbD;B;onwtt&sKM>Vs@<4sx@53a?B|Lrd-2oWdzTL9M@mb>^=G(@ z4MC;iK%tkjO5t)bD+Y@F{l!uFoshyv5x*$HIVQq}#-e3G$|ka$RO6T+E=TBty9Rj+8R1V#`>6so37Rbw_tL8yJbU6GG@(jqeOv+{ z@*|e7Z!g;)nsnIq8~eEb7wbpGf>1LFtH zJOk4?`fD7rYqt!WdE&;a%{#eujV537h}~nFn&%{c8q81aWxHlDtMTxsuiw+ro^wdm8OcHZ71U@ zXu@EiasfMIE3TlVbdinjCn~F5d=-}>iK$Twk;KwE!_}V3*H=jZO{kh=?I`6?Y)oaw z^Hqv55nWY%#T-@b;Fz#-WyU!}>brff?UU)CP+_0V`~d zU*G4$mtn}qdtKg(Q#hpbXLxWc8w%t2>}^dL!Z$n^5Ob!f2OG!M+&I>k=gpFDC*pje zE((XnICjq?cOuOE0P5v!hUk3^$G#tZ2sdLB5qo|Q5kB8B@KG=M z7%zNZ!7=$H-;Fr-Mf~_zMEZW*gfRKYMG-%KjALK#i=H1GyNlkHW0TE3?~A zB29FWkH_3(E=K%)3UO?MBBJ-N0rvGSgkF{l>unY`DZhUMj=bXUR0P;gMTGAK#n+h6<182IqzK+fi_x$BO zpz!UteAtE33%(?O`AxaccdO?w=h1}kZo}vN0JP< z=>6ZykDI_J9HbO`Iu+j|9v`O#gm2XHNxoaeaFRhJc)P(lKmI@V-UYC(qdFJf=N$Q^ zIEgGfiQ_oRvE(GO>=?al%Xtv_b!_>m*v^AID#?;;DUqcUNp@sN!FfOp1PCRx1_BK? zff^E8JK#24Vr(G2P5E<+9nv<0P*OT|i&uh7k$ho&DR_Km+r1w52!H_;JIp)a)(-MfAE|rAj;lPmQy`Rloj5qG zByvCP*>NB61OsfgeC+V>raO2G9X!6X?b@+Bj~xd!pS6R0)Q?ys(cvqe+?kHt%MBmX zO~j2sx%U3ZW5*9Yyg3fuTOGWl!4viKy_;;_*|v7byUD~Ni5(XM&n*Xyj@(6tk9KVL z?05tUuw4@peOf)d%N@KWV3zCK=h^Xf0Wg44uKrN-Sv#HpAN3&?N$mKbCwD32;$M}k zjNxOt?-{u`DdIcAg24b$<4YdiM#qj7;1fH(ZSW-BVR0yQeeLP|mFBZ{kdOKhizGUn z@Z{d;$mPtU$lZX>s#~s}1ztuW=^s&J2Ke0T+XXzf=e*z8w-&q>gD2_S?@16*uE#qx zpS2^M(smGwBzD~9$-NzN@vr2z8a~?p9U~WJE2;*b)Zq*eeLm;m-Q(D?9(-cQw+x=7 zTMs;!#18W=wzWgvy(AV%?0DUi`;cP?XKF?64KT*N9(?ywFo-Am%m$x(J-!4y=0hhA zK068CRR&Mewdb+p4$WunARqCFMG_r;AAzpi#~r!X8$PD{zQ(ilRZku}zTn|K;o#lq z;QgJ!6Fd6y*f9>uA^)r$AhJm+MA?Y7pD;{qJ zAEL4n^>uip&0-jNNIZ)T^q&Atgo4Ls8<+1HBwkCy z3<;lpw`b!(f45#!T4+6K!@N4ZoV18{dtP7$JMZ>ffF94!_Xjge@txj_Gq;RJiG)zgJ}%GSwrAN`_qfqw%S!2N%LW{vcL8)@iPFKYCjNYYCUbcQBa!+~J_AKRY}7 z{L#eBe>fWIM??4S{j;6f{nJ)&8o77zn9LcO35QqidvIj;;)@SAeDQ}PcP&2uNU{=I zR90pymtLJsD=p-Ab|z7|?zNxZN}1^qk)9r@!;05zvzGmR$ZpS8W&i1DqVjo1HrAW& zTvBoR?9-neU!8n5NRzv?I`M2G{fna$tM5CQOsCSX9nCJMj_SIXpeQx}cCSoKp~OoW zrQW;)cn{Pncj&iXHM$b|^1TCfpJh4uccLi2&!#WDjxnnLWTn4N9_iiiUY+X2yHCZ8 zKi7*t*ILZBErEEK{_EetV(k=C?mDlt!brHdPSd5_ZwQ{J>O1Bk>r1X9GOrS;WRx~X zx%3bH>=z5szX1o+-;aaqh<*=eA;xbP56<-8?fJv9qT@e{c;aPo@ExzmjDM!`PY%9~ zvk>t(hDKt!nZ#bv%;8{WSFmKmwHueLnA?a&4)gm5SoNCMu(G#p#amxP9h>k;oo!u% z+uKw?cW;01D63@}hY7HCN0;P4RapMrzy2RJTMiVUm8Imt`{*>}b+ zH0uH`)_WY0zZLQ1XFFY5t@FNgRuJ&oF#T?x%Y)#ZI9HgCT@9Xf6akNAggAVLB~CNX zz*)&NaCkox=Ng=CdTA$(J{5eB2i2U8pI>vmfxXhXWBXxL>_C1r+RPrLf)i*7~$LBR)u8YZfhs1k;MYoOe&d3dm^wg?CD zMBg5`T@wA;5eT>KOOuc3MV_2_&$@E?zB+Gt${lC;neO8_h%Nb-h5LRSLW1`W1h{w` zk)Ro2#ACSFaWCAi9UN14NxXlq`K%q}qdvqUiQI?bcIDpZ*fG)YG2Jm7#1=cIz(ZSv z1n-*&aPb~Of?9;p4tFl(U*IR6Tn~;#yCh!fjelzg`KXUS7cw53!a zgJaP%9l@f{To3O>;88B^n2bZN#|DEZ>Gs0!l6ddbeAW)~5sz3T$-j3Z+_mFXM=pC6 zBKHd>z1&BS!7muZgICel;GkRdBOf3wN%+%-kJpOyRruqc`M!&A$h4P!A^_a`648oy z7HkGI!*dJ=m+@8Npsr;&Xsg%&XHbjw?U!^I5UIk|kvl1tOo%hz6=UNpEhy$l~)?CR?7N^cw(=U~4J-KX{l`5w-~8>kV6V7JT5Jx0c^ zc;e+`)e|oV3CmgaU}ri5#DmOx689B3gm)dk(H=fOXOTA1QI1IljF5Yt6)aRrzPm$M0(FrZ5eI*{7&Wru|k=F zm8msW@?nMS!=h6&U+(A(^JF|x4(d3TktwxNKl4m$Q2WIoO*@FIb$s&6qgkTk62{60 zZ+UnhM?|JBmvIrDXX$;3w1nuq9KSD_{^`-IDjnL^1mF2Q7>?Oc&$9ict4mi^wX+0Z z)TQBxmlF*?Y^QF4Dhnkm$F#VXOS#aNhW8EfaaBpC`NWjVm^NC5v>ct!`b|<5uOJvF zm`%8;mhc0l0v>mMbL-Luh%j~OEI7w3Sa!*pLe*%TRyHi(xQ%77qZT?O-#AUk&mLAt zDfDWXXCdivn6wQz)o~eroZ=i$-Z`pWK4j%-zxCRc2RelBi$?YJ-xs|gObS;jnBnoy zi1b;4ocG_}ocBdTCCtOF35a_?)a^qR`#z|YarT6w={YMKQr!EYd{$r{UXCM)R*UKR zOrt6H{n04C%t&hPRM70@Z?nRiB5;V0re9)X=tu?2y!6XF{uLhoN-y5`^C>Q*6k6}7 ze77~H{Ag+V&A-1H<{Yg^shu}md;D=p-M9-!DzXZK>HYhmQdrgbcklgAzx*xs?D5Oj zaxdO5PkwoknNgiA_x;bS0@my-HS8;L9M#o;&llI>5TbvFcyOlwgP#90@Dpz)4vwp` zk0?ZbK7)nvX9VAoNSqn}V=sOTn90vNq8v|q6~_OB@}CnlGSU#!XFUH6o`0+7f4k@Z zfaibE^Yi&ni1MED{4aa{*FFC^NlC5kUF7+%_WZYcey+I_qWnMh{CnW1NRDZidevUzv2h9QJM5&MXzwPoPoO>)W9>csimIeRe#dGf>QYnr}Sanct z{47tCf>r2lGFIbHLj5||_}QLJ!botv@so%4%HC|tSFc;VXmwi~K2G1((uP+OZ3k^h z{jy$sR?-bx*s;B%w~u4$c;!@&vUl0x{I>q>YV)T&T-rPMHpG*(V zn^bYTv8fkttvc#`*k!HT)k~Q$wO|PFZCilR{np<8p`3_$o4U93_Al%0 z3oTX?0Ug6KgMmC?2p;qM`@221EqL@t9y%MaVeY}-cFksGcBs3r4e#srcXtkl;<~qY z_X8ed17^3pEF|_K$joox66ItF-nW8I?q#Bic`s2ThY55hT-;6S z8Z!r2R&r7|4&By~#ap}9#>k`$3>oeix}^>8F>l$@Js50hTV(d&#I;z{k&P6;hHkv= zn_KWgXqA1KU6LG(l-+^;_1&G_z1zE&wPv<&Ulu{;#b1sqrQa^L#iXtQ;kpcO=zV*) zj?J-18pc( zfQYE8U*C4_)ur`$u3au?t>WzJYvmi)8#h>W>1&Djt_gk6lkwNAt*dQo>l_)uz|{7- zx&?6aQLb%xN46UUa`S-hCzjr5=D2Rs^;xNzl(chTSY*O_i+t=^m3EjpGvSlE3Vf^& zOFM%gjdRir($uiCOhP=V1_M*97x@k{+hx8ho#wgMygPie9y=<%MX&2Fg?}aE`^?(lb{#vN!A-Z-lam-JKM@WTwgxxFus;&T<1of@6y*R zdAHW5;!cx}1AU;2E`}~Rm%c}rBU?UZn|wq%6~9Zd2Q_9vaPk8>KKWjAexK0~{A}No zf1umQzu(0R{4;$kij-%8#mq$682(7ooWx z{pc7maV!dYXc#-*Y|GAVEBIL8OFfB{F$$ezYOeBW>lhsD*b#k~+1}`?Kjf?E_69XW zj3)6+IhTDYyHTSGPz;3xC?+o8Uyp^D>EYjOFpS>RBqaD&!7P(h@a<6mb!fEBc z$H)~s_8L5#6p23a9cS@BCJg2*`hCvRk9^c`vf&f`KI7@v1Et8va*A%c)$doHeuohE z1P&p=TDY~pb~oqWXqvB48N@~x|x4hFE=e3o@J#3G5@so-pc`zDM&}I}Ra&`9Lg^*m0*P zx5u&L0>j62Uo>*1ygUg!!62UKW8TfRes>&|e4^iTo_^$`oEc;S2{yma?B??b^dleh zrONQpUyq8E*rMMv@Q541R-bX;bMbaMczleKeC9ht#1p%oqsJlfZqR%-pPxqr^)ZiR z){b?a++B{`YVeEPM~qz2{YBu3o8m>Ew|jW^I(Rh>-v2Ool8*Zfx+LCbG@rHORbvOS zNOC>+oh~>3b~|z}F?_VY4he`Yy1xbw$C8CapCtHPya#~S4yN@u_;@P$apyuE-NZ&x9Sm3KBjv}<5@dKfXDVgNbv6P@X8!K_5lR% z;|5REzgrvzQ0zFM`K%q}qdwA~ARg(b0K)I$rwEO=!GPt<=>90pMASgZN09ps}v#3G5@mEd#jxX!VIdWzh8z{fTZ#ZVF7 zc@zu=(9L6)hu7}lz18qgj{{midwrh)9{U?Yg3a$+x%%}0Ps&R(n8`=HFB&|_j#tHj zIFjVcvzpK53;CG7nM@#&`-~@d#Ia+E;bXcA+-StM_Z#qVD_IgXe&ONmbnI9LZn0yE z!IN}jCBqG(*s)OaSv$sqkNOacBzExo(Qf|T>)5fv@G;%>;Nw}umBA5LPPcgak&o$w zL~f@icei8jDlm(^zwhDkn++T*6B2v>*yEcCzPR%85l`+O$gKt#@5{9~MD7<19`7;I z<-lXS5asgt3-BQ-E8*{hN9qEGiGDoGHDmZ8@V$VH*#I|&@047YTV4x9S$Y7K+I5m? z2o*f`8C|}^u;YJ07a`%(?-Xw6>D@f6)(93{8`!k4=ywYHv|e^?;AE6+d^cgqIJ|Fn zZ)V(u!OYr>UMu%k$Hz_RdbBC?*zw@ZGmfYgUB8@gtYk?rL$8oaT=C+gFFnmKN}RZh zv3r`29o3e60pB>#-=iSr^vw7Ri81*|$+1L2f0v?be8Qp#-dV@q81the{657$O=!w= z1;l*uQG7)~k@{A}fBUstQbKf|{GVUDB2Ppj?@YD&j9RS3!L<;4&Jg0g!242&ercN+ zMt>`gFg@-Z{Z1EVF^5>*Tl#zOA+MNe%$yHz<^7IVlLA_|Z5T*Bs@^WejW-i=OHql} z^9=uDSiJ>^C*u!@8ekO{!Sd@hrDOQn&l#J#7EdU}AaYrRKr*a48PrNjfv-g%C}Q zBW=b3w{6FF!q4N|*UA$(;4u(@M_4pJH z*N&&*cS-E{Is#ogo`Ij~iA54Sz6!T1x81SB9q;)8_=sJLgY-O(xb~UjM}WwZhs3$v zV%q0+@U`OLZOS~Pemqk*;91&>3)pUbS|@s$&gIL(^Lh*)-v3yP^(WmOSPQ@gx={Pv z*f4K?T2bNmKc<|f1lsobB0T--RpMID@%zY^73eNQKd_PNiNGY^@QT@>P zImB;zM)mXkZp+U5B6l6P1BdwB_v@qhY*|B!Th|@NQeK6ppYP|0T1Y3qt``q)4yA1E zssmGje|`M?_4CKK&)08;BaQY|+P)O3Bh{BWA7@@O@i!PhC6}YTb>J+-Fn0`y{tx3| zdd+`&_@agh`%WajJQzo2LrgOR{xJPH!8$L#*Tl0Vaoyw{UcBwgt*xtf>qtzst4}a^ zp=RM+G;~3)u2<{ojN|HUy7GTD+pG=Z?+&ZjHOXsQ3phh10C7!p^$*hUVU6v3nRH^{xS&xv9Q>JC3@wNcP z70=w>cD~{ln>w~He$og9^o}d|#p@lL`lR&Ei%_iI&W-kK=LQr02gnUgD3KN{t^z? zj#l{j9493D{R{!F9XGHrJ^MbA& zPdaw6k0p3B4W3-b-H3~`gL~Kl(%SJ5_-F^QNMgq(@VRmiJ9e;FD{}wE$Q3&tL0p_2 z4|#YmId-_~2A(%~I4OD@zj1bOZ%fyXC&5QM{B;Au~=QSS!uaG$X z@sn!U@rsjB`1JgS`f6KI^BeW`^UVetMU0>5$2vQHG8Ls}{C@LBJKklFA1@g_9y1XK zX{*xzcW@3ut`pCE&Xsbf!+k$T9z%+IzdVd3-f145?|1JE^2fh_9%8Z-g>>@I^}hbT ze3s~ta`)MjhZW7kaS|f(+H($*a~^KpK{VbgLi9J|2>B=A4Z4sR-)-V~9k>tPjxbu+ zuQDeR{RZUVaHstMBo?)9#S2VvueR~A7YRED2jt_Cl5iW|roq?ROxo+~8i#fa4fl55 z(iY+7_IEm<8{?Z@(2aVQvO)s!*-_ECI=lw=w~FT=KZwtciX@&D9;kwY8z8<|vU|s?Cnv?r9hm+arxehj2QRV&P0wJ~$`Zz~yFVE^Z7@tbiE4Q|>+g=GNV^{Il3d z(O_G|dr3&z(K!fk+h6Vp%;F<`5|%Ui7vUhDq-%!Tz01i*YR3US+y1VGpXnuD&g{3k za&L!R7I(_!y)SY<4!3K^M)>3Gcn88=y!#wG7%q7C8a%P19sW2w{#^4}JNn?K9mFDu z9S_6p%DvyQgSaC1$8fuLuwN_~aN2zRCfqLGmmE7d}NrNOYJ8CRgs`j$F15BA3qr__y;(JK>J&4_yH!Kx7fE=x^~`On;~Z>0ZEbHu$9< z%lezT0ngHlxPTwDKCKhIet+l*Bw9m-4T%$DrTkQ_-4CkJd{SNQ{KjJElhV3y+5XV! zC}Hk=(wn@u7)Sj6i}%BkT198-$@dou%>%H6hQ$7m^aq%=><`#+?|D0VyZgGf3%6=3 zPiY)e0OQ9lZS3!G+b|!Q#rr_6BJWG751EhRo&z`e#Lsjt$-T4^fpFV8rU`ytL8)8h zoI#jd$LvNT^07XrE>g#I!Aw{wIm?yw@2nV}GJSaD=j^WyQ zw`WY9NPZpj03v>0N2y=o)AKPKI=PL&AZnUIbxi%jhN9=Jr|K@Ztz)L+4Ij6TQ8U)+ z2}%R3y$c8V`OH_25y3yeS%~qU6A#Yx zAHqR?jaMH01a2Y5+qPnDT|?xaw3DP>u*{N1gXgKY8kf0~mbkUsRH&LBjI!6&VFtCO zf4F;adq>~0VK*6`_J)`gdw!_cw%hRC`+?i?KU?~W*EMmE3SF@*>FDd*)X{khx54OW z?b%Si+K|=Gs6-j;rOJIA^u>m(u}_7gv*!_?bLk7Kk(;C_b>frdQ>##^ zDMHPH5XGro5av|7SHG$Ck8gJ0>RQ}pxK#`Gtu}zq?OWZ5o0fem3<;_Gn)fjMU%(-C zC7h~n#rs}}_c-aDI9$9g2T%HTJU@toc#{=VQepiM4$gafQvWm;JNcwtPfo~x{!`loRH|(q516f$by0T`14lW zkKC1eI{-MoK|9zc5s&G(?>6O%9eh3)H=H(K@AL5P1AycU?H0Tv22bqgb##fcNPPbj zZfnO*gb`2jka(mi;B)P`-;pb0L`-*s#jLbJzs&nYhaM z*{1QC*hOU6G8{tmw}}U5`nTgC9-r3v%>15+zdZOOEgxiw~da z=cy)J9_5YCJi%*ULuYmyRzs^DE4OxTYf}l@whrkKPRMp|Z8O_A4)hOg+lt*8^Ud!zmPNj(ow_uI0|>KoQy-O_gLqE*YTZf)DRzGeCH zW$WA4tXqnt%9btJ-T}2N`?ii-y0>N9whnZeElm9w^M$rH$caxXJCDYht@dqg=*wx0bcybVS1i>LcHJ~?2*z{noBd_-v3q6t*fAstAF7O4KHVn^`B31L+!jynWDRHW za04qm@I~aZlTQ-4sCr`g%-p=?LzTpSbmYv)UjV|Hg7>r&C?rzZMbI5pvbFakiwiS(!A4$mNi9z2Qx0jcb z67dDm4NnYuZvk|~7eqHa9=fhIVuoRi?k0XzbcZJfeYBim%0fBg@Wh~xmNQIQC}$j= zD0<-j_7k#w~DEHb&M>(rAm8o9CYLVb=1uC7S);hNY{a1F=*8(Y(LBC1&SG3*#f zzIn@);A3;rjDxfS9@fGG{jpw%58^-%@yUkV{88gziUSq{Onf>i9X*%fQvWc z*x`k@hm(YK>>F$2|y(v!mL> zd%&^79a~#$@WlQHfEQ=SX3b~qcm#aZ#~)kU{#sKO$8pW8}GLn4&IF>UvN@11$c3G?9_bLjx_ja2eC+UJ#P2pRy%ggG<;0=eIr-O z74L&e0vSTIq6a*@W(V&ga7e!VoxziID}m>dc&A{D7H(???^EhSERxv4Jt5rdah;QY zvkV{8@!KB67CSb=16E6-kH3dq515#q*MlP_V#gMPC+XUO7k540>)Fv~>>w6N?0C0l zN7l)|xrUE={EcVFF!18;^FQ_Qb~$#`I(P>Sp4f4B9y|U?^V#chud#zzB(dXrp4@vK zJ2+k;`S*sAE9tq;hi$D8yy|+5M*^^BCH!9y(I_6nLofNo2Ku?jW$PHdmwYq)lv{>_ zWd(Sa`Y`D79VRv;PJb?75A6^m!7F@kku4R2tctTuD* z(i*i#Mq0^zuy^*-2Ro`W@@+-R&Bf{7m%h0Q5^FLWVKeou&2;pftMreiP2GIMmlIW~ zP1G}}Y(7y{Mon=}!-^_BgFzX*uSq#y8PUPf-`~OaT%6kmwnz=E&5GNvBg)TSXGn2t zt)l#AhRksBJrd?|NRw<`rNi7-nfzya{AVkEw(**@UwnGDHuR-1^B9$Po+nQRb#xkj z7cRg*WwcAp&>21NU5MH^uU!0{OfzU7k{PaZ_b$~NrQt|o$Wv8NfsJE`(vCZF~gwn={~^Qa3(+N z4bFp%7(X>BM}6^8oQ2qD_@sDnrvD)vOwTJ*j{1Vlljqr*gj)#;<;aU((7+Zog?Z*o}d| zfzDuS_g17(YbpJ2&dK~v4v2gUE+-=XGiThM#>bv_+hFf7J|ngYAESc`o!K3+Dvb6` zwaCYS;$(y$*@=zKc6Va|XTFc&nNP0qa}hbpL)DEfv7y(*hZg?k7mJCVe_2Hz{H7u1 zx=@xi&QGum^2{ZqrR&T$rf??Jpun^Ce__v317w4JR$ieoL1NbOv# zfZRlR^E0g6i^)xgyU23vrO2;`ZAOaHBjhetk1$0Mxh`J{EjGg={LXiia_%fluMY5) zhPm+#qLLSK#59Ay!{1YykLHS9I<|cz_Q=^c783Uy1dvbsOy`nx3r&C7j{UI*&-PuO zyXAZ}!rZag$I-r%ZxIgaLO%Nc9EYo4GyLw@spxYj!d<*496XWF^Jj3lcC3cqC9&ga z1j23YARp87Ac-A+3%4uxDMv0xBg78*zPIEvyC;GHr_I;b;db@Aj*$+Deske)^&=m3 z^XInM?{f8f#?kLg@QZ#Q)OfZWv?GqsAVQMQ{yOyMftLo;A{-oo6g-X%29|fPQ-*iVmbdjxo{B97jMZcHejw>(U_V8vp z`RvYt{fE}imX}IV9JnO$)@ixcj+uy{9mFDu9hZR5wWHCoqtfs(-7TISbAX4UWeI92 z>M(rbpDzlTc=3MN)33?sH`DNmejo7kyWG+5BJh%r`u(-1Uo-H`BaK27eGYi~an8ym z@&4G;k9?FgZPkUeWJrIEXFf;6`{j_8=tsRe{gF9;=;lz_vy3RvA1= z_i<6&0E+kbHJ>d9_alOK5Q{`S(hfLWxi>m?yan;(W4iBYJZr~8z^g~Nkm&QUhu7uU zQ3qzh`?kT8bbl|38$j`n!H^={){bZ4p+3YS5s#DrpKHgkV+Y%8k$Z*4vv#}yyfgs} zi9QX6PyF`AGki#&(T`_DS$Yhf7m#)_LRR3QTi8SUp)4w_z*^b*{1(l226DyPLiQ(*WDa*tgvog3nsG6KDSs5Of zxjd*6dOu2!+r!v6f7$+YP4&Ta<)Yhz+oxnEXU44LJZSZoOIA(ImaLkdRkN)#Uq9+W z2Yl~o-2TKz@KV4>m?E|JrV}OXXp-(u?o3ogq(cG}q%0k$2IgRt-If9t@lr73@k zm)`%Df%K$B-c(g5TJ_YMoS`r7oh;U&GcC(>FZ~5Jh7Qh^MeUiP_{03r{xDI9tkYlQ zrPuFVg?;#we+P^Dhcq{I!j;0CvQd3&J^S1@fXF}3hAr@wa&Vt1T}bDYVv6{I!aoZLB8k7he!u z6*}Qc;R|xn^c%eN+8-vmCUmOw*Lmr$Q|YDuim%Uk`eUNOp;T~_m;NR@*U6HYL_Et& zSl+ZhglPBhH+lYOHJA#vc=208D7aEVj~CzL#rJygy!VgL-mh;sVj5B^@avQ7!$`PN>g$$aP%83< zC*#}0NX5U&^LKfEzdrEqhg&`VVb8x!jWzMENaHBS6RLZ~SnsyrU_8e+%F!R`Fn+d4 z<>+4!k@0-oDF@dsNlN3G6buH(jh{MC3i^UG%mb?S-yCosVp1B%q@X`& zj>O**+!XQm20J4BTZ0c7Kg-V~v`12dX+PR4vnTWN)$0~7THV$*v~5!x-iKw6AB!lY z_irZ}dv1<@ZCAa&D%_D-JqJZkv8hic3G2MgecOh5^kFt+Shz&|_e{Te(p}W7!W9jPlnYh)` z60EMdMP3^=U{p$^TfED9dbZ+wo~|KyAj7AhLQ8%ANH+M9 z`4jf4x1S| z8;ug%7wW0x1HYDj;FDxsQE-nQvnc(z3BOpM8Ls5qZ^CPIdsHEQbc@(NSwFy4zCmy5 zn}q$O8gz$Z!_h4wU+IHJKk(PW&wOg+891bx%k-K0sC+_qN97apFO8_=3LRf_r9NM@ zNS~9R)nk{*hqQgkKlQ@*nDEaSzRwx|ht2hQztQ_c#-4kP{0|uU9|Ybg>#ep74s6Q? zYWMkIE+_eextoTD;$FCxyT+~m^DH&U%PK1=gdx&8#H^u+=ZjxGk)PL>Ds9gw0xiqv zvMgKf@(fYOwrYj)N?Jc(t8M*#y|;At?ZD~_TOmoa7>8Mq-_H(nL3@h0=-?SWLqaU_ z`I6$BY2RSS&O8Z5*I|@IzCyOuA4P|dXLPYqK3|gQI*cMmI7XM^a``gcp2sMHB5b2e z%VG6JMtcsr`!b5?SoYCX$eW~)Dx;QXAGKh?&Xb^!5~JNyK4hVLE1rLJ4bYV<`f`x> zWUhtq7t-LQR5)oJOoALGVmhUxmx%ZT1u`UmqGA*pJ!fLD3+GP$L^%q@^vXvoD{<@v zawlIBrHb0ed0TdFTg>C8ug9poF-jEV=R;dt$KYVcj>zIhdFD{}LAa#RK8vt#G*>+k zTUVXxFu9F$U4!)DP4`~$I;~or|2UDukn{AA%OQ^)^0?x2G>H<+aujqPS$spK*AmGU zClHN#m@VOh)TuARl}z`?#h z$#lQ92ft>hMLm0v&kT*^@G*`w7YFqz#K%!lUv3&N;p&%#pU*c!g7nb1G(g*9UQS2xm^F|+JVQe$OyUMy^e4fFAF?A zpAip_z!q<+!ISIpCB(TTc3i3XtR3W|e#9b)T#kLZa(6j)z-i@j4+CP$^?V#|(E(2D z-emYB?yHP+h!~{zX+EppA%sysxyGWOzjw*Kj(%r@U-J1eBUki$5^*kxK7Z!v=ktkv z|LEyQKI+G7LK6L+1D~6JyB+q>3@9Y$C!4k5uSg`zIr1HhAVz~^+aw;FuZ zRqRq80mE7BXw`f+pBX`Yh(!{)t3A1oId*UcNaTLb$d!B^4?Nz#LV`E!;T>}DW`J4n z{>0$nq=@C)CGkF^`K%q}qaDN|iQL1U+$SBmGYucpaa}2~#f~&Q)$j`m-Wc$?*W)no z$jAHgA{=5zmBAA`RuJ4F@vhQ*)(-MfA7YV2?s8A=3CE6EhL7n!YUGL?t-upE@kE~i z4=qMz*;a|%|1@$%_x3z? zeA~k-bMSaS3Epc4Pwe2{OD>7`0wjRj+R+0K^HuImvEw{A+;TA0k=p=%k;`?e#1=cU z@H9Gt1ux^_rGb|QAFsze9D+As@Wc+TXLU)u|3mXxJIF^nh(#hE=~HmHb~HmS?_bJo z!a+W!OOA=!@d)rx1TBd^M?Ab%CtofFx8R+CgStw(uZrRZQM|LXTx-W6L{J}Mk%&jS z5PYs3*Ex2uZzFQwZPfJ)YdGBX=?IMDBPfO>EKqS$L#RLb;;PvmV}vgSXVd`%lk~ABf@v1BrL8mTT>J z5fQu|#3E5Y68Bqmug6YD?sCM79q;$-cr}k5*L!%o9K03>?+$|}_Ww*2r&1vCKC1bw z9Vd((#3G3uf9A=(*OAL1bg^T~xajrZ1(3dhi}!sGZ#VGde&f`E;FTIYv4h`Xa7paA zQuA3m$j9qJERxu98Tj1mvB$CFD#OQgpYiNS=dmN};q7(o*x=xO!r+PeP2vC#N$fbR z`K%q}qdvqUi5*XQat}FnTx0l{t`R@PMs_P|1|I7(A;C+4&&`)7ftLmo>%Z%8$o1en z6!Ap;5pf`lBzD}S`K%q}Ly*EEpU8ciC-)`Dm2z-{;bXeTHJ-I&C-7zx$dKUOpPw44lyn zD|!TYg24c~d7J@0_j*iq@HQD9;#Gi2T@R!GUZWqP6p0=4J-)}l$LDS#(V<@C8oV^* zO8#|&nS7MH5_~+19Z!HCtd<0CW08DqF?^ysLB+kZNWM=O$@h&S`TjYEFKw+2^<(4X z=Sv*l1>jTH&0sM9;;zSe;DhL(+3+F?aF=SDe+d64>Pzr>m{_FKO$zr>a`oyR5WnrSzGr6tlKZ~mTV zEFB?n9jIJm9m-viT*AT#hu-{eZ#abwa&q^~l94B^L@F|BKz)M|^{H+kk7C7n6S?PD%G|b-ewIHHiy--= z&GY#fN4gk?+fT{IHy?byT#-c_anCV);%7RSMDBV7!fpH0>{Cz=sgvc*K7`xvc^(Fl zk98UA9rDrtDIBhT&F~8boL0YKxLv##9XyfG^L;poCw44_+aW#oz-HzG{ja9TUsJ-iYCh#eeH6TJHjp4hR8APyl~ z5%=}OzqO+ap~RE1IpUExF6G)W(UHrZfXJN)fyAz5B2XWWxPI+f;6qkq6%&4Vy&J`Y zGcia!iw*Q2!;wb7G@N-*F7uJP0nZZm^!^*`3-SDZ?Gyl9=m-$GUBd%I!-Jdc7a9xo zYwPM78`FvkzyG{j%d`F3iTEnQ+%0_rn>zZ^ZCNhl-Q2dhZ=hp1xbVUYyXIclwHbEr zfA8LFUoE?3Or~^2;=@zaj>CyhjBlyQr1tRL*!s+6nbhafdMDz{guTbiyRm084}RzR zzGKvN4a)-t7acnFz9u>z4zVxI5MKMsag^g7E4O#a@`d3LOZ1y}223#tI)=6eL;BL` z@>q&WigRM6csQ*#XWEm55Z2v1pHyGREI*KPiNaYo7i%!sz^dk4G&%Jp3BR#6Q`*9M zWDSY=Wx9&W&n)Ay+?=I;+z3Cfn-J>+(h?kQoyCfT*MeazQBr4J4L5OXaggrC5m#q% zO@doz{UiKg84c?gVmVbxFa-gJ5ymGP9{K7lj)k+oB19aLUuSWy)_t}RK0Gw6-P~!b ztb%(s%&XTsHl)*q>#Sp16W@$W8W@LC z7$uM5pW*Sdq=t0zZK>P|8YB1pW8N_#<-UJh7DmFwz4cv6MOs?MPqA$?+Xs%rs6LHJ zM6?EDfmc_{M!)cAG3c!H|S5u}LxKfytM*6ZcSfB$_^ zdB5=bwe$7uC4)M3wc3Am$KbHtU%F9;ZRj2z?(N?)WW(!q_~P!4&Vha#+F-alJNo;( z2PHThp3otAKes6gnK32ft(!lHw*v9G(m^}sGjG}U?*8G{%=Ychz>jdXbz)!bO&y)L z*byKMd>E|8q2Yn7ygbO!BKmb+mEuCO^p>JhoWk=|(`Uj%*-ZM`!3WuQz|c4{k1Hxv zu-z-VB5nMt{Ah3e{Iquke8B%?SSmuFNdhed{2ip$lQQI;YT#t*Wb zL}E`-xn%h@vK*s|wp^#$2;;K;rp9sBK{oGgsrA?nvtAIAejdZzzUCYhRQ5IH*_h>) z^~W+C#FKRGaJ$4fQV$Ne?Q?lM{7g?AlAOEXcI9qF1nVTqdz+~p#Z(W{*zE1GhJDd0gWD6IW1lp=?~_<= zrqgrhxL+KF08$Y+`SyT&7rv`CK67>^_2KjNn2p-u?5%TCADi^-1*_64K7Lbr)y|tf zaZ_;7|9&|bn^v)@OQt>h{g=iZJMFa7#s=wBCRO?GN2_ixnSJK7XRrLb8#T|n7mv-1 zJDk3KmO?H2^7;D`mrOidvNwAmF*kWc^Q3Pt*?ZunY%}}KXMZ_2OdA*d-TV1ePM%HJ zM+E78>wFx)-^|3mvGx^98{e)Jh3G)ldg%wr?n)FYl4a!KRjNYOTdL4;y^4b`ACYi zya5y8O(jyvR4NsiGn^5U@BpC+Fou4WPDCb9K>3%C7?VhZ@rC#e4#b&1+^G;Q$>f|= z)q!hIUE>N&mpXKqRlj{)oON#PO^Z3o=sY&x@ed~*DswV&2Ul&V+ zI&;6JsD87Qe&KkVj&HW9bo~9E-+CjxC+62&4}Y#_e_faqE`BR2s!xN*Ki}hT^7xy) zcz=I7-+!6Me}#v4g%|JdU+4RqJ^sZW-eUW_dm}iLc$#IOAxx$HA;>b%{^g#ZEn-Ni zV6_*&I*f!X6|C{%*Ld-3y?D3R!u0FBc=n(}N(HT6d}|m9R|@;-(cX}*3Y~DJ@Fgy} zB3HtnhfmiAgk!`B_@nws)royTS9{7<3|prHCy@C2EIvIUMZM{}B$xvt*Q`J=>475aa(EM;Kog z9F<6%8PB;W#&cMu9PQWn^cZ6NTobSHrv)uu{PmIe3xe%l{Mo=@5V81ex?P4}{Cuup z{39xUR`6YV43Xz`&wqyM*=PpFU*P!{d;U((|NEZ*BcA_Z&;Jehse-nDZty)Xp8JTz{=2E>E;xQ)YcUUnvS6AP*VcGf?Y}3}dZvDn!$%bn;E?F_RZlSp9 zYptu!y6U;9l@DgOY-!6oI+`a*>ndykr&hlWseW{uY~+<6b)Xl?av|OJx>y|DH zkU`sfJGn;q;TF`a$A*i;Rh-{pkHacdme2hT4oX2%-WoUY!Xyq8<; zoVO{GAqEH;I^ZD6o#S!-vsY%)7kB$jr@74*8%;rLvPX$UaAxx3W) zxkUjjae>$51a43_-TXkG8_c=hoa@ZF7L^sq&K=yU$Hyv$OgQQwR^t`hjDMUSCn&wm z_*t2gB;5|}<##1jx_1~qDtOkLNz?4tp!-CBDH>_k@1;BS9B%0ydVO%|ok6gP;dce< zo3W*L2i!U>D1A>5@R=#u90U&pI4{-vKO`3i!5;cEdW^8*-Fkki;tvoAlJ8eqJ>P4> z(G632zF)Un6%+!hNo#-U2bDM6XYNCKY_jG;lMfPKt@#3puL*)?1SK&D2^E#yD|kk? zYBkSzylUn7Qf+VYa{ca7@~sF2)m);_7rjNFlONG?lONV{llOVyA2s2BX!y|CVY`>i zntUHLeVDiFIi%!>?k6RO%|3A3!92>GQ1Sb~`Q^~IA9<#OM(39)mpojmiHVti8I?VL zGNxdXe5ynmuOf7b@)xH}Zkl}BNPAd>B9^r{9U|;`#hWI!81cedq37 zElzmq?EFWPFAr#@H}K6KG6UnSf!W&&rxv22&vHzif$AfF6T_6%L;Qn25Jx)WI;5`PnvcvG*Y0h#IJ6_Rz zcKyQL@Dq<%B(Z~IgUSvSif0r@?iq%U>DB_+wS$iradu1tlZ&_0!DIf29ZL_6;N6 zSvbUw|84Lj9oNaYglI*-(tOsA#}P_9h(!`RxUYztf7}mD$`#AC$h`&vi7j?K;keT##-QOFz zV#hNG6E~bzpU--DvcDLw#|1dVj;9PBPKus0XE})-eE%M9Ysd3opgzPRi5(|AxrZD( zDh(gg$#-Ez_ZJZ+WfV?}SB(nIy&kf^810y8_=tBc_}uI98p2!>JMPtd)(-M9J+Vk) z$3320?n6dC%Dvd|(LW9eh%I*f3hqa62npU_d3etPuLn%Tn}vgX#QP7=4&GNTiI-!_ za9cab$MnP^iQLQJaPzMjH@Dm$a||ET@%yaA7CZLBBW?uSa>eh*x_Gkx6zyOeM7hNK zw84{d^%n$pNW9z1XUDCY&)P8^e8eLb zN$l9_$$h}FquKB=-Or3%oD|Ij-i^l1li+>U!+Q*P%sb}GV#7zgR}CIu6zvp;@iWgz zm!l&Ex3z3%v7dr!M$sW2oyMd0 zkHP2OAGMGx_a#@Ph}_2vUai64T=H7u=81B7d<}ev$})_^@5480r}`EBc$Pe2L^TAx z07ZTeZYHK&w#U>B5SGT{CcT!Ch6Im!;PUmrjw8@TNce8+<+RkI{*JzZEqq(8(7NOL zrujv`pS?#{f_B~U`FN98R=HBX>mIlN^y6a_2zlecFUFcR!b(@H4PH`l!R$%Tj;&5U z8>E?Le0Ad4MEVy;OL0!7e|mIc^?e6Z>5}xZqx###%C_J7^_IVF@2^c((=+E4bl_Z9bKJjJpkw9G4)&5q!X^&-aR{ss#utW&ROed8 zecU8kK=Me5VlX?*%s{@9l5167&e+V&%YCY^$FYd={?yG@w4G)tl=gXs;gj~&ZO_R^ z4AR9o*yI-C+X5b6u3PttT-F&mw)6man2;xaP_Fr5Q{dOY|Zu`tYKBgDh za=s5?uH0HjE^k+n`#RjN9nB^VCq<&qx8QT}njAca3*K?KT|1U4l<-IF;5tkETRX@{ zJBURh9_d^#xpJEkA^FEXDEa7@@5)L!SdB2&@j_z9G7oQsgNJUJ#cR|0+3V3RK<12S zMR#dFYezdmsSmM8V#m8Yxvhv``@wR+exKNJ#K;vpdJxAlBqVk`=;5_HcHnW&;{CP3 zlXNT>E+JacPc@&lgM74uSR}FIxF@&Ak;~qO*uizF#I9vx(ET{pDwqCY91rg2fqN}0 zQ9pvCQ9L-4hs3kkKz|wmwFuz-FZUAjlVwHjT{weQc>azKLxSh`wX;yX$q^uYy06{3 zt#7DXZ46PUuU*$PujoBKS@uA-uRR$(j7wfVv1D9kSLQ7B4%^sFlREEQHtq=f**nkM zv-qdq3DO5%I&qi8j5!>}96w6;9X8cimFlkZ9$s9MdF?wtIQq~l6M`3xQs@`P@7u|K zIo-vv3H}f2nwIrvEA&OwVFf&O1T&)Lf8d`EBXPxBA$HY#iD#G~A0F3%2%l4h{@) zkIlNeuHG%Z!ySF=u{alB`pwsqtgACns|WhG5RP5EQrt`&zbwTM??w7qXVK4lnf_*T zUSYypjUT6Qoua91DrgMDX~?hHe{@aG?Yu-{V>>K49HxVmlL5Klxh$~~a@l@Y`$DYO zS?=VH;5BC%7Lq%OWx{RCUqnPR!g#rPsd=!?S&D;rl8${Iml#Ldj00}lW|5ESi9?d} zCb(U>GjS_ZCJ(nS^f3Ic9S^`S7;svB?uOgNYXlzU5|80bL;t675KruQ2yT}cM|u(m z+|~~AF+H(J#3Ma{!$w7uM4pcMyh zYkTd)cHmjs3B$XrPv-@_Oy}|~g{MR^199SPX8o;z#J>bSC zRvvmen33gBtslYjW=8#Tw!i#Yv-xwBtClA802!=2MhmR8>S{G&nTi$_y)l1ILN zYa*RJFg5cl)mJbwD@!tEOGO@)VfZ3iWZdKTmsFmXxnt^7)n}16+Zn5QHK%qjR3B|u zZv?0^OCGU-?uGW^)927{eLrQa%9l{%vG)GeVRBb%U%q#;c|U9V_1@8*BFS-wO8udO zq(`rP`QF(Muf?zT4tFU3RNv{IVJ)E}6;yfoTjkkzk;h-{@mG8NH6H&QkAIHGZx-*H zRD9=>_d!T?wjalOKZ*Eg{^!249gXJ`eMo#qGa7$c7zx+OkLgCyQjr-S;)Pe9f`0qn zsZCQYODVkd=Ta)T(Dg!pzdX$H;{EGC*NgYBcfA+i;Q85tgp~Wvt$%&pUOe+#X0bI! zDtN11C)kXja`duPg=<8x8N1%Nd7{71^Ygi!Wt4GzN0yC}>;I_nPgU_{!RI|c9}>yW zI*ISd9`XD?G=80aTEKmegedbraWK8a%f8jC5mt^>M(j_7`cwt79*!lo9M;ReN3^3H zPZqb3*%0x$KM{%R`DWmq=R1s_C3yx`Ufk>P%X$^^Pr_5wUzvE?HwiO`T#rH0{>y?N zdg{Ei6t}pDtJx1}#uqK-eWPC@?=viF9(S`&KJ+YZeF_H#j{8zAqQ`UbD8YwymvmWCUBNZm+}COIv3j-U`&O zO7`||9$2O^Y!1=e66OuP*LdCtWIf=AdUH|L^X>}0#;mkOuk$H|pCt1pd<~vuDQT)A zKG(8+w0;y+mR0KqGxpAnK~ zn}%eY@nf-zl8=gn_goT#(aO(?W|ZgeeD9Ar^9gI6OPX^7Gr9K#f^a}1-WbpH2S zA_Xyi6VQ`LtY0PZ>U4E=o%czc`aLHqti|1zOhP4dUN3Q@PIZ(m_kEE@RFkYPuf!qi zjaZLzZh~VSLYKqAdYydivyq2KB@T8m#^NBY&?oyV<44s9As>cI6#0D8O<@m~`V`{Z z3?5%@Gs1*KE_=A{xKj@r8TRF92X&?ml*cub#FKQp;C4y$JNJktAd zxN>(wE}KBgWw^+F5pLIxd*L@tC0v@1=da>$@$Lm4Xv_=EEL@F`tD558J*+@E&mRXt&t0$l%HKI3z&k zjA%tSYd&koA%s#N$wQIL?>@VB>~Z9BR6*qKH*)2AK8ZM%dm+L5kcYR|!QQSOKaMR+*(0RrbHKxU!NIF? z@V;yCBwf2GPB4&ov2kSN{v{vnAQnmNc*B$Xk|Xyb!^d=W8qb!O9^eTE@kF1C4WIb? zL?JSP#Jk4Rk9?F&>|08iQkSMFAi?-3){h_!NiMXoWj z3}8~faGpZs?h-r$@Fn2I)w|r!*tH`KJZaCH9K1jA@DAm%<9~X5Pvw#O7oOZE#}1Ba zB3kA95rbE2?06PCY4J0|$BntI+(_yxRFi&tI+97uK#FspTC~d8e6; z(Y9kB=MQtfhDTzz+Qa!3xDP5du|`|m)OY-Tas^FO4<^$2_ALh94D2V(HQ;Z2^29iI z#kblII`=!YM;?vH;JlEQuCL8+{aj9=_1@BA=?njx_%5v}a_YqIg*e3!VZL8_LZa_E z_8!q8=XmL*$07XFJ^tw){{@=S{Bmqw?gbq*!{eXn@n7WeU*z%6^7y0Zh1cx3Z@2JX z_pcusI)`%C@SN$yGCgaJkaEAXdu|vB7xz1MDHVC!n(==ARk`el_w!470-BBc6}yyD zU+oP;QW!fQ2QPDtmUE2}pHW>u+gbYA9`HNA{#?V=2p6LDTg8Jj{kuH>pTJK%mP>vY z_%Do~&prGO@Y6U8G5yQp!CB=l5;MIX`#&c*haN+WpJn3NUYFxtl_g%h%pK_X8Nsby z{CiD$ogWtkU-RN+tRH(Qx*x1D!~2miGYap9na}7t9~@R+fKmJ6sqew)EdufR;bF8A z`t<;YcXVOZ|8VaRUImbE8RuJ(712w+I)brGSB=O{Q&xEYwjp;L#yA0bgFMG@*)J*r zqF+9UiZnZfwe~nxQDC@Tq=Pyi?;o_btX*cg$;o#T@O9;EhkDxy1N0G->Kd4)dvI&- z&=B5bSXR$Z1hp+$v1t7UY{IzY>h&!f-`2K%*;P7E1utt8NEzZ7JfY8nn*}j~yGvOVt4!%BwKbd^P39f2Cpz zYEVV9%Tck&_<19aG6v7F!pJ)m-k6@3ZKI8AyCo*%lfg(g))woS@yK|-_#w&sym3;c za2F72*$T^yu*Qju+&Bf~MtKVh&*hKPKyJ7K!Yx~2xe?YlkC)=$F z3J8y|7M7mF9w)x&TBU$)#p4uKym+ir9ocsK0<3-9XDRySQD_F-Y$oMd$>(Dn>0%tL z0}Ju-8J20JH%2^h!)fJmynuY7$EA#PNaSur7~J-G{&M)K2kTvuoLk}MGhZ_fQWrW$ z%R-{h2m)NZKH!m$cp{(YkK=IdxDkGr#E$=kK-UiPF+C5G z*zt9^UAcEdF8fB5i$_yy$GHF_w&ZP>iNi^e*zs@hxp?~%Y49Xn55ioc zEYhW#&t4DmF+H(JV#j>&xpMD!IIH`Af}b?YIYgw1ZeAvEz%LT<&`yj%DkdJbSMG`w6^5nkg$mJ84$W5T4a<9h| zh>Nr1X%FvJ2XBUh_j9eEt*@R!oJ(TIMOv=4gM5@rERxt!2|hRfUUTHmG<;0=NzaaF z5GL0KPOA_1-gohS<=|ZeKFODl7(AGx=s9zili2Zn&1da+9t_lnSR}FIyPjOxCxi9X zEW^ii7b5|&YjKcX#1S_R$afn7$!b7RJrXsF2WQcbXR(3N9G_1k?OeF|+zY2F-^>%> zS=xnRgYO6kLdEHi15Sj}%>*$de0Vasy1#dGZ+F+CY%hia?Kt4Vbh@s#w$}Nb--w+W z8k!mrMk@TBxLs7%S;t<5*<{M)^~U8?`A-%;o-my4!9*Oads%1lv4r0tzOI&|dL_qK ztI@rZrI4-Q@c%MOeNS|NOYv)}IeB(HH z>Fu+2y(6`k3G(i`2C!yKIf}G zOvsT?b3visy_;!|+;N(t@OWTU+MB-?+Rwi*XQ(0fvv4V;M&rVexbeYj5KSwW;;6)3 z-V?H`y6ZMC{=LS}d%hBP{{x<%{SD$(<0uEhU*aspw*GI#gERfldj5a){BL;vDFAoz zXVYVdcqUT^H)x)h&nR-;By zMhSKp&0wC{jCiT6rVWu~WY0sAK|n7!C%t@`T0W92aCMN-%I|S>4)mFCRdO zXw2CUBVU?lf`V$;(DIDNiRo(4IE}@*v{u&}Npz-}E?KYBC1;uOxH<%aIIc#zh(?Su zE>_IiRIdocJk$Fe@lWe~ozL3aH6j~> zRh-zd5MacXe0T!xY8*mxJxal(@Jz%*NI0U(~ z%b$?w$M)LAd&<$z9YeWZg}^`p?eOVec)D z0O8xv+G5`R=JPO~l;6J^D(WIT|+aDrR~jKlhOnc9o={- zDM+y99kXO$5bfn9YZ`;Gr;l4RAz3=Myktt^ti(B~sflwF(-P+;rY9;&u)ufjP|wit z;Bd#LK()Y;DZW!3=Vu+n{DrlO-0RH%xeUBUhxS?An^YO7?$27G#NaTwv zlPphenYLwDZY9u`p+8A{ zDsgQ8M=CzBw{rHnV?k;ncJleai8-~E-wCQ`KX*x0$%({e&5KJfOk8~W@!4Z*GKoxL z563@}pGfSUF#D;43o2_X*Z=aapNu_`SeRH4RR8OdOEb4l*P|Y%?>%;)wC1_PLG|~K z)K-1q#O&JBkJpS%Ui_~|OD}xws5YE=a%}$@>r&XW;ES*S_@~L&&zhgkeDx;Cy`>`a z=;GO#pL{2%s>+_0xoh#*r>BjSjHFH^Rs|;#vwn7TeCF5zjiU4J!V53#ntNf_W`-Tc zH|yWC_u5y>Zkdu9+mbX|*Jm!vBt9o&GGq51j-=;UP|!1epF6%o{oL@N>WP;V4OQ*> zYxP=g6VjcIl!-c~EZg_Q%fXmLx=CT{^r@bbOx3<6J?~$f_;w;)c0g+oRR7}egFV6Q zpB|~~nVkKx$`SHs_n(oOlqoTLDy6?H`eqNLdp^@%r*MLVVl(lOyts8Urw4T}f-q&-k!sb{QE%~J*qilarRg$5U zyW0KynGA%t<&{hBUs&5F1Lp%LO3E}+;&UY^ZDZ6}UZ^GYx`5XLc^x$T|FwM$oK

J$W+A+;kK=NXo)e^7 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%0AT^5_p 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
6pAMc*2uE6_Za3e&xw$ zp)#Ts`x*S+-=HcdhR1!ccMCO_m_8MEdE2nP=c+!n-@*Vkw2QClZ*QPp$AAuuW9;{q*mAcC0K|3BxJRzqohCN>k)%=0WNk$#?z~Zj_tIik zDv)ENx-Z#;fD)hY#_Xr@B7X-ijmL8R04^cwk#51I@m2w^33kL|8VDZyrW)^ACx>B3 z!uKdRjdzy{AHyYhKf%4maZ}rd^&Oiwuh_V`Ivw(@>szYd=uYv) z@ZFsV#VURh&a7R!xn*4&c04FeOifgj%uLKmoSB-PI4f~>qEZ(_hC56n!{aZ_Ul1}6IZwsvqC9*>#QB zxTQ?Zb@x(Ei|I|Y&ShOnY$@i%)6Y1cT@vl7C(k6m3l(}M-wJz#Eqo>)P;PJ=#zXr_ n`@^{Q;9~tKb!0j2{bzCu9HNU75^+fWGx=@^)>)DH6}|rpvF0JH diff --git a/system/WisTrio_RAK5010_Board/libudrv_adc.a b/system/WisTrio_RAK5010_Board/libudrv_adc.a index 3e71a0aef4d67b8e32b7b5ee2537310d1e3c4369..942a55c8bf5d0d0e079040fd903741425f25fd27 100644 GIT binary patch delta 44 mcmdlayGeF}G`q2hxtWEr#YQD=Mi_gu3FBW*ILCs!iWvX^84Cme delta 44 mcmdlayGeF}G`pdxg^8(=*+wO9Mi_gu3FBW*ILCs!iWva@8Vc+H diff --git a/system/WisTrio_RAK5010_Board/libudrv_ble.a b/system/WisTrio_RAK5010_Board/libudrv_ble.a index c05d5a09ebc28ff473656c6894cf01cd3169d353..65369469c77ad4d0d3d87038246278a76d49a7a9 100644 GIT binary patch delta 48 rcmdl{xubG|G`q2hxtWEr#YUx0Rv3G-ou%036Ri2hFoDf>mQ~CEXsZp< delta 48 rcmdl{xubG|G`pdxg^8(=*+!*KRv3G-ou%036Ri2hFoDf>mQ~CEW_t~~ diff --git a/system/WisTrio_RAK5010_Board/libudrv_delay.a b/system/WisTrio_RAK5010_Board/libudrv_delay.a index 433b1cb02903c840a41b67b0d9ab2e57b9497743..9d77f9af2b7dd9c5a744baf8988f2c1284e6c6a4 100644 GIT binary patch delta 43 lcmX>meoTCVG`q2hxtWEr#YCmgFy>|%Moo4&$A_be82|?R3km=L delta 43 lcmX>meoTCVG`pdxg^8(=*+iw!Fy>|%Moo4&$A_be82|+n3i1E| diff --git a/system/WisTrio_RAK5010_Board/libudrv_dfu.a b/system/WisTrio_RAK5010_Board/libudrv_dfu.a index 68d608bd1b6997c0af07d5f0e781305c3ecf34a7..8a6c9dd5da6215abf41609a2988d1c466989455a 100644 GIT binary patch delta 45 ocmaFD|Ac>nG`q2hxtWEr#YCl47;|IaRc07_VxQRN29^|N05H`J4gdfE delta 45 ocmaFD|Ac>nG`pdxg^8(=*+ivO7;|IaRc07_VxQRN29^|N04}u*_5c6? diff --git a/system/WisTrio_RAK5010_Board/libudrv_flash.a b/system/WisTrio_RAK5010_Board/libudrv_flash.a index 6c64ee45260bbd9c5a7262723c19505169014a0a..2c1b88a1a18399f5cb0b1bcfd31a7ecd62f9a041 100644 GIT binary patch delta 1736 zcma)7Ye-a45T3ht-KVbZBYSL*-CUn&J~Mkk*mBz-dQnsosG%kiDPhr%%7T7HFF8=q zM)a$oB1|C)EvjGrkkB4v(T|8=3n{j;TClQjuJ^jP#h{V7GvCad@64HVSU(lM%RA%W zR#~;Ex~8%w5GV_<7{7r)MKuztG&qRJNhDqRKg}HMI#41`+O1uW9p=5wjZIwxzpUC` zVo;hcFI-e1PPq%b{dN!&rB$h>fc!K|tfzx?_ovoJ*;C<_#M#Nm{q(s@xU4N+kBo6zbdN<`(5qH>=(Dv#Jq zS8KhZ+&rftakDLMA#3;D_wmy~rAXPT))j~M`#;8{Xx(f%dcHR8X@wG0)~lJfv7oX< z^OuFc`(MQ(z#G)uoiG)=7?Pq=r6hV{ZE+htiHVJ-*S$B)A*ps$Jr{p$WYzsF43T_L zqd3S6_-r!d(DK4(iBx(g!|cdd%*9FZC0%$jO(V0Yx6Bd!mhR5fwb?1P)5(npH!}n3 z0dvq$fnKQ`n#@~hWlDatmQTQXaL^WGz7v2|7bZNd16amqQ}C4(d>fb>7>0VtL60P!gweK9AHfIr51PGcF)H z!?uvz^Dn7lR1b^yLjUAT_r5R`usRzO)s!B+#zeEb`v^F`qs`KoY}cn!&i z2CT|Ce2s*~=teyP;ygf|kY{BiYyyGa6jJI-VcP>W@+|`&ACMb#@%}oY{wDPkxBi3h zc?x0JK*){id}Hv94ekb?en_Myd_KPqRmQ?SQx&4F7)9K<3}tC&Hr`Pa&ao_=qK^4> z(fuuOsu|!ORAIukn$L!FtPS{J({_%r+%t)Rth|g-l$Rks6QQ6O&+?~*FuN8p&z+OD U2F-f%H2?qr delta 2073 zcma)7ZA@Eb6h8O1rMH*L#|7HW3b_nq1qT)=W?hIOh}Y_tFcT9EMzO5L`B7;~LAQ{! zB>XU$aUXA%7}<0t{L-k~aGO)m=nsvFF`FZiCH}yKq-;gk#xa_a49~gTTdo&>c#`v; z_cjgJBmJ?^%aQ(pk-G6UzGPz4cF5Qqeb* z-kZm~y;&&kzk4M2_T$__Xa^bfoJxWkz;3ogR zY@M`Z1pedha(0QYb}yY9$`-*)x>jk@R@v1v>bb>k@m0P>^zKpitCgKScRatRgNUD2 z@#P-yUcbssa_t$Xsa3VeJw0gPjIdvy#5P<3PGCXW>p&CUrVJBEA%&}2h&{Byu zXRB^?Z8!^cuELBa7I2&5ZnkdwHd$%PsxskiCcGW&=%Mx~A|a>Skb&L9PSnkK5d=)} zy;^)8t(3%Xf8LakFyRRkK7yDQIE*TR2&YZ)DJ^crBne;81ylS715Q%Mzi9ci@LWL3gmE4^11 z5n3C!zS(FbdLSCx`gBhUE$o_blC}>(tOr~bfS2ehA#T{j_yYo>7vLb-Mt}*jO#mNg z7Jpn+{Jm!BQu6pwdflVs$0L1;>@I*l4Tn{n+)S(?$3p<4WO1Q)$>Kt1$hH8S*YMAp zrQ@gg64{4wz}=yRiwI-GGTIufBdI~G+IAdUh7Uy(p#ijsIO`B!WnYP<ptB;lDvm%BwWPm{pce?Ivkzw z63&f;GuV+2eY)rkPNT!f=SQG!3HnQDeVy=EbQlSjkwI^YNOi(raBd{*K|o(f4HB`= zw}NvcU-rNFIx#7SY9!oeAjF$pAao;}k?=PAsKj0FGkNcjHxNWGHDy61$y4{#ohB3` zdDfiAawTqQSmV_9GtaZnBv;iKx{)xpQ3{|S@UuV4D%i4AcHbC(K241 c5so!g?65t9-}DZfEp4!C|GLvROAlNA0dN~uYXATM diff --git a/system/WisTrio_RAK5010_Board/libudrv_gpio.a b/system/WisTrio_RAK5010_Board/libudrv_gpio.a index 05140ebe67d82c0c0b5f20e8d1e149babe37f449..9e48aeb4c7e93e1c47e6d255b27502ceab504a3e 100644 GIT binary patch delta 48 rcmeyN_d{=jG`q2hxtWEr#YQDxCK!A2KVh-WJxtkxFoDhggsYeVW^4{j delta 48 rcmeyN_d{=jG`pdxg^8(=*+wN_CK!A2KVh-WJxtkxFoDhggsYeVWIPTu diff --git a/system/WisTrio_RAK5010_Board/libudrv_pdm.a b/system/WisTrio_RAK5010_Board/libudrv_pdm.a index ff69c5eafb8c04c01e34a906d2ec8315bca010b1..c633f8ab5ea54bedb3276c5852e2620e67173f7e 100644 GIT binary patch delta 44 mcmaE&`$TtwG`q2hxtWEr#YUx@j4<|QCZ3Nr@&cb+OvZ!=9KGX$CfD-$Pd>q% zFxi4dK@nZGBvdVgVrGzCik$P zl`Bfk(JM)AE-fxd%}Zg>14?bq=ZI$HWMN|fdW3;Ndh%sXcTN!? zj|0q8=5pthf%A%iJQXA zFi#fdQLq1xrn&@4wFr`GSd_wium~y#q`&~?14W>-kZrF)G7prfU_Nk$M6nSAGt_`( zKpNyF7=W>ZAqp9wQOdAB$5X6=D!z5CLic>4ESC8C0Nr7O=b!gAGU$3Iu?32#UN2L(b;)tSXF? zpRfr`W?_$?oW`EYsRvOmXE6B*`&qG))QS?l(v+gI_=57>_~O#yg4DbehRx?Wq8T~& zurdIhz`!6m*_g|n^9+#30p>LWc~{`P%Rt^8I8T||o%0EhrvX-3%cAFc@qX;?1w-BWOXxue3%?aEsXseP2DUYA86NPOCCYZ??5&u z5IX=d2*>~}1^Wfa76M|Jn`9>!^Qb3E0nRi+~u!hXEMd z8>-F#DzSL-eF1S%P*eeR7Qj@01Tst}a|=04| diff --git a/system/WisTrio_RAK5010_Board/libudrv_rtc.a b/system/WisTrio_RAK5010_Board/libudrv_rtc.a index beef4f7fe6de18e5aa7da0733b4ef002cd8ed6fb..b883bd7efeda135388a19fada2717cd82844f76d 100644 GIT binary patch delta 44 mcmcbodQWwNG`q2hxtWEr#YUxSMi_hZ62_gpa83$;6*B-LDGWRS delta 44 mcmcbodQWwNG`pdxg^8(=*+!*mMi_hZ62_gpa83$;6*B-JISeEK diff --git a/system/WisTrio_RAK5010_Board/libudrv_serial.a b/system/WisTrio_RAK5010_Board/libudrv_serial.a index 7961adff950351f9db4a6be4586581db864a071f..ef64db4c37cc6709cbf85cbb87f638fcc0cfbf86 100644 GIT binary patch delta 632 zcmXxiO=uHA6bJB`*=#mS#ZW?$R-tK3c9LyOLRwAGL!<|LlH?-wWc{Etw??S62+|y? z@lb5+{~$eRL@!0H7531AU4?-_uM3gRwrYGauggP;wZP}aqFrO}h{XpbdwmE?YFDs>{cVn0g8e2nW;F{| zJN>K4*32!n$q2Vy3vU1yoeSRrO{(ZF{{o?KQ0dlN;D3@1RZ2KqhPpj`c(UcN1R9>rTGzxa$}=F8M6-zlK(`Cv@lE-F`bm^LyfTkR_weeV7|@1o*LJkwyPftt7bCjQ(CFvv$+Vm1XPeW@ zvGlC@~D|aofiBHZqbBm!E>So zj!?5`#Ua)!xX*eM^P#BdLR+jL?<=QdbKk?=ZjVt{E_G8QN-6FZ>-jXm`~mZX;uRU( zgD=ddmk<8O*VML_t`JZ`j3}h4wHP$%pIVa^0&F#q1?85jM2nK1{P&&*pArZjKlth-gIW zz3i#8;5d6NxWL{$_B<-?IeV>m9g!G{6d@;S@ZO4}_I~PEyKsW_CBWK)7g4E?aptJX z{Kc^sk!wmlsFuQ{DLH3pH785u?5s5O zUViIJ4dyv`eT};-`3!4(gL6Hf!8r4=HEw2bKMJa({)zd@o{ll+G7%S5wHdTmNv+>Pje5jJHR6fyL9e3iTe2>xU$bbJ;p>?J@>G%s*&)kv# diff --git a/system/WisTrio_RAK5010_Board/libudrv_system.a b/system/WisTrio_RAK5010_Board/libudrv_system.a index 5699b6c34ce863895e0945084bb5a8c9ecce0042..7a9ec17934dadc3f68c7be4db9d4f5c4f6bcc577 100644 GIT binary patch delta 76 zcmdm`w@Yt=G`q2hxtWEr#YUxUCK!A20b#MptC*Y^6*j+RQe$FcVqjooke_@}#D8-J VYcek*)8sQkZ()iz9}uo$1^^-<6#)PM delta 76 zcmdm`w@Yt=G`pdxg^8(=*+!*oCK!A20b#MptC*Y^8#cdXQe$G{U|?Wmke_@}#D8-J VYcek*$K*3YZ()iz9}uo$1^_O}6;%KL diff --git a/system/WisTrio_RAK5010_Board/libudrv_timer.a b/system/WisTrio_RAK5010_Board/libudrv_timer.a index fc2456989113dd94eca22b45d7c6c7e446b6142a..59604c9c4194663061d89cffb8031f7d782ae535 100644 GIT binary patch delta 48 rcmeBD?oys0&2DUBZf0R@u~BI@BaA&+fKP1mEk=DFn80QMzA9z_Em#Z9 delta 48 rcmeBD?oys0&2DIFVPa}zx>0F1BaA&+fKP1mEk=DFn80QMzA9z_D(DNc diff --git a/system/WisTrio_RAK5010_Board/libudrv_twimst.a b/system/WisTrio_RAK5010_Board/libudrv_twimst.a index c1e5c9cfc7b145788ecbb06a6a055796e18644b4..1161b361c92534cca0fa13cc56872e6359e3fae6 100644 GIT binary patch delta 855 zcmZ8gJ7^S96us}wPG%;~WY(Si#VoiRe`|h-SBtaBrRp!B%L3o+2xR!DV`tcejuaQEMs&x}Wn! z1|;33Y}fiUZbk5nSy#`RQ)-x0g`X#CN?yQc;o&3R^xpG#uf{_^kesggZ54cR&8!A* z1%u!xka#vY86O0{M%o>q{gIZA59Ui_c_+H%)Wy4eLM=A|*$jY?KS#;M55NK9vf(MT z945dO4&PAQ4&lgQ4~p$jwH)NV3Wqu;&2JKYS>sTV37#d*UW@G7>5*78e%hmrg&f zO8e@1CnmI_jzroh7M9e7$PF%sh|OB?AV(i4t^SHTvtFu~R3S3fd6X+cO_}}caj!yO z3`&rxiH8aDTM;ru!n?i}805UEchtFgIq|mZ;Oi}j3>s1!)<#w$9-w|Y1`4>(<8+3Y zZ4~a1)A?^*iB^ng23%qc)+M;cOrU#t=%0c-faD~36Ur=6n0b!KX3YCfB&Udmm`@Y7 z1mq^O&BLm@xdn6^K7Llw@b_VN`@o&utu*$^?*5l*(=9i5oAvElg*t!2^CI%q@_Qy# zJX(tU0OJ#rstoq?CD#VKeaUsBrPjS>sOH)D4e*`6;JlYUxMv`|BW*fG{- z9rrbY1}5sTPL;HsmVuai^yYZK+Voe^g%E)+2Z?`}y@)soci?*VbkJ`usLOz_1u+Ak z#m+j;jMiCXtEsk~&3}V@kLOE48HaOQjOrb&M+7BTb?vN`z=r13bZoNcXGnEwv5N5w D!GuvA diff --git a/system/WisTrio_RAK5010_Board/libudrv_wdt.a b/system/WisTrio_RAK5010_Board/libudrv_wdt.a index 60a4f6c62f1a5e03760ee48f76a4a2b8e1e20dd7..32442e4f77c895d7d7451bf8fa345cbc19fdb133 100644 GIT binary patch delta 45 ocmX>gctCK1G`q2hxtWEr#YCl27<1#ig)A`k#Cc+yV^~v|0VHhgctCK1G`pdxg^8(=*+ivM7<1#ig)A`k#Cc+yV^~v|0U}Kdi~s-t diff --git a/system/WisTrio_RAK5010_Board/libuhal.a b/system/WisTrio_RAK5010_Board/libuhal.a index 6158a73e34ad4a8791eed4a585f48fe22bcbf2d6..877ee75c999175b59a18da889fa0fcd7dd5f432b 100644 GIT binary patch delta 1561 zcmdng%d@GMXM!}lv5C2vg|Wp%rGk2gAO;3%;E*Z?1`v)sMG~&Zsi9nofuUB5GTaUH z9DZC6QLyA40|PO5_ag=dA}}ML5(5U7U}Ip!!1ZW?I&ut*RK^PFVdd`UQladO*6 z;mP%qtdpI&8aKO&xiM}Ik@RJPl_is^#5eDko}nUIoSc!GqL;6)prBxAW(h56rtvU} zZ@1sV^hbDdxC0+TkJ#oW2V+(ke|o?PCh^UeT~%Z!zpjL<+EjIv8Kwec&gRFpYH({e z3p6OgRZglB+w9j@C^`9i5?la6yp5N!vw(rt7a_LKfT}wTfvc=k(Xy zjBwFyJdDgD)6)}C)lEudvelnHy#k>Q?8CzqjKXK8|C47FhB+8$({?=t#*~QZ*Ibz3 zqT4^XFy->X)Jzs=5Z_)M#Po)5^8V#;i$S8BUoWrWpMHJw9T=Rtaxh!KfxCV7Gp1QGFd>lRf|!{Tm;oo_m!JRu delta 1556 zcmdng%d@GMXM!}lp{a$5sgdbKrGk3bMGOqoz)7DN7>L1@&lni$zrk@mGKXk(pBw`N zF?jhd1_pe1ds00E!}cVCn34M#13@hRkAab7Tu+3iib)KNw8HhYGMGqn>xuChlgl** zoH)pffe9Z@Ok!ZdjqCAAGB8azMLu4o#lVD)x9~AApw(2IJ&sT-!IF;*epQzHJ$k@Z@?)*2%r%jguGt6rG&%Qe^Tm?gi5?D>6n-7UT8Y z93XO%ak|(CM#0TJd`DQP3$!tbPL`Kq+pI6<#<)3!SAuc6!5$`&&B_vnjFS_2VkWD5 zs%?J8>dv@1MADZDR)$Qf7Tdf}dZxWYqLd&5^)#97wm!1%tEMJadhFAG|W|$e9s%=s1jH=~EQQOpAC^`N8942JJ z?NW1@YWXKW-;FG|S!j=F(Dd&|5h^!T>oZN~mSBXd+O8nM$SgAbygEV+(3{(TsWYWS zOmB;36oxr!`+{gjtuxc(8kpchAccJmOyRsRH6Q_|KBl*PqNRyNB@nNp_+4zfpAMs~ z{`Bc6TsoW SefBe^Su!vouu;s+3CsYyRjn)l diff --git a/variants/WisCore_RAK3401_Board/rui_inner_main.c b/variants/WisCore_RAK3401_Board/rui_inner_main.c index eed5cb15..14cb35a5 100755 --- a/variants/WisCore_RAK3401_Board/rui_inner_main.c +++ b/variants/WisCore_RAK3401_Board/rui_inner_main.c @@ -126,13 +126,11 @@ void rui_event_handler_func(void *data, uint16_t size) { /* escape now immediately */ switch (mode) { -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -159,13 +157,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART1, Buf[0]); break; } -#endif default: { break; @@ -188,13 +184,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART0, Buf[0]); break; } -#endif default: { break; @@ -222,13 +216,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_USB0, Buf[0]); break; } -#endif default: { break; @@ -257,13 +249,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } break; } -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_BLE0, Buf[0]); break; } -#endif default: { break; @@ -374,13 +364,11 @@ void rui_init(void) service_mode_cli_init((SERIAL_PORT)i); } } -#ifdef SUPPORT_BINARY for (int i = 0 ; i < SERIAL_MAX ; i++) { if (service_nvm_get_mode_type_from_nvm((SERIAL_PORT)i) == SERVICE_MODE_TYPE_PROTOCOL) { service_mode_proto_init((SERIAL_PORT)i); } } -#endif #ifdef SUPPORT_WDT is_custom_wdt = false; diff --git a/variants/WisCore_RAK3401_Board/version.c b/variants/WisCore_RAK3401_Board/version.c index 24eab048..d538587e 100644 --- a/variants/WisCore_RAK3401_Board/version.c +++ b/variants/WisCore_RAK3401_Board/version.c @@ -1,11 +1,11 @@ -#define FW_REVISION "RUI_4.0.6_RAK3401" +#define FW_REVISION "RUI_4.0.2_RAK3401" #define MODEL_ID "rak3400" #define CHIP_ID "nrf52840" -#define BUILD_DATE "20230809" -#define BUILD_TIME "123548" -#define REPO_INFO "9dd1b862:4a56cd9e:7e366cab:98e243f2:4643f944:7e86595c:580d5b87:c6af41dc:c3bbaa2e:0c6afff1:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:7fc5c8db:d0dfa912" -#define CLI_REVISION "1.5.11" -#define API_REVISION "3.2.7" +#define BUILD_DATE "20230831" +#define BUILD_TIME "101425" +#define REPO_INFO "0a7f555f:53a181da:431cb7ef:40aa6db6:d74cbb50:45914d43:f43a68c0:8cb9ba74:c65bfb8d:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:602e71c7:c089af6d" +#define CLI_REVISION "1.5.9" +#define API_REVISION "3.2.4" const char *sw_version = {FW_REVISION}; const char *model_id = {MODEL_ID}; const char *chip_id = {CHIP_ID}; diff --git a/variants/WisCore_RAK4631_Board/rui_inner_main.c b/variants/WisCore_RAK4631_Board/rui_inner_main.c index 263df004..2370896f 100755 --- a/variants/WisCore_RAK4631_Board/rui_inner_main.c +++ b/variants/WisCore_RAK4631_Board/rui_inner_main.c @@ -142,13 +142,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -184,13 +182,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART1, Buf[0]); break; } -#endif default: { break; @@ -222,13 +218,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART0, Buf[0]); break; } -#endif default: { break; @@ -265,13 +259,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_USB0, Buf[0]); break; } -#endif default: { break; @@ -309,13 +301,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_BLE0, Buf[0]); break; } -#endif default: { break; @@ -473,13 +463,11 @@ void rui_init(void) } #endif #endif -#ifdef SUPPORT_BINARY for (int i = 0 ; i < SERIAL_MAX ; i++) { if (service_nvm_get_mode_type_from_nvm((SERIAL_PORT)i) == SERVICE_MODE_TYPE_PROTOCOL) { service_mode_proto_init((SERIAL_PORT)i); } } -#endif #ifdef SUPPORT_WDT is_custom_wdt = false; @@ -535,9 +523,7 @@ void main(void) #ifndef SUPPORT_MULTITASK //user init -NRF_LOG_INFO("rui_setup"); rui_setup(); -NRF_LOG_INFO("rui_setup done"); #ifdef SUPPORT_WDT if(!is_custom_wdt) { udrv_wdt_init(UDRV_WDT_FEED_PERIOD); @@ -545,6 +531,7 @@ NRF_LOG_INFO("rui_setup done"); } #endif #endif + #ifdef TOGGLE_LED_PER_SEC udrv_gpio_set_dir(BLUE_LED, GPIO_DIR_OUT); if (udrv_system_timer_create(SYSTIMER_LED, OnTimerEvent, HTMR_PERIODIC) == UDRV_RETURN_OK) diff --git a/variants/WisCore_RAK4631_Board/version.c b/variants/WisCore_RAK4631_Board/version.c index c92f6e78..8ce8d2ca 100644 --- a/variants/WisCore_RAK4631_Board/version.c +++ b/variants/WisCore_RAK4631_Board/version.c @@ -1,11 +1,11 @@ -#define FW_REVISION "RUI_4.0.6_RAK4631" +#define FW_REVISION "RUI_4.0.2_RAK4631" #define MODEL_ID "rak4630" #define CHIP_ID "nrf52840" -#define BUILD_DATE "20230809" -#define BUILD_TIME "123805" -#define REPO_INFO "9dd1b862:4a56cd9e:7e366cab:98e243f2:4643f944:7e86595c:580d5b87:c6af41dc:c3bbaa2e:0c6afff1:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:7fc5c8db:d0dfa912" -#define CLI_REVISION "1.5.11" -#define API_REVISION "3.2.7" +#define BUILD_DATE "20230831" +#define BUILD_TIME "101653" +#define REPO_INFO "0a7f555f:53a181da:431cb7ef:40aa6db6:d74cbb50:45914d43:f43a68c0:8cb9ba74:c65bfb8d:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:602e71c7:c089af6d" +#define CLI_REVISION "1.5.9" +#define API_REVISION "3.2.4" const char *sw_version = {FW_REVISION}; const char *model_id = {MODEL_ID}; const char *chip_id = {CHIP_ID}; diff --git a/variants/WisTrio_RAK5010_Board/rui_inner_main.c b/variants/WisTrio_RAK5010_Board/rui_inner_main.c index e7f49cfe..2e2fd1e8 100644 --- a/variants/WisTrio_RAK5010_Board/rui_inner_main.c +++ b/variants/WisTrio_RAK5010_Board/rui_inner_main.c @@ -148,13 +148,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_deinit(port); break; } -#endif default: { break; @@ -212,13 +210,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART1, Buf[0]); break; } -#endif default: { break; @@ -295,13 +291,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_UART0, Buf[0]); break; } -#endif default: { break; @@ -349,13 +343,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_USB0, Buf[0]); break; } -#endif default: { break; @@ -393,13 +385,11 @@ void rui_event_handler_func(void *data, uint16_t size) { } #endif #endif -#ifdef SUPPORT_BINARY case SERVICE_MODE_TYPE_PROTOCOL: { service_mode_proto_recv(SERIAL_BLE0, Buf[0]); break; } -#endif default: { break; @@ -564,13 +554,11 @@ void rui_init(void) } #endif #endif -#ifdef SUPPORT_BINARY for (int i = 0 ; i < SERIAL_MAX ; i++) { if (service_nvm_get_mode_type_from_nvm((SERIAL_PORT)i) == SERVICE_MODE_TYPE_PROTOCOL) { service_mode_proto_init((SERIAL_PORT)i); } } -#endif #ifdef SUPPORT_WDT is_custom_wdt = false; diff --git a/variants/WisTrio_RAK5010_Board/version.c b/variants/WisTrio_RAK5010_Board/version.c index 576ff82b..7b26cd4c 100644 --- a/variants/WisTrio_RAK5010_Board/version.c +++ b/variants/WisTrio_RAK5010_Board/version.c @@ -1,11 +1,11 @@ -#define FW_REVISION "RUI_4.0.6_RAK5010" +#define FW_REVISION "RUI_4.0.2_RAK5010" #define MODEL_ID "rak5010" #define CHIP_ID "nrf52840" -#define BUILD_DATE "20230809" -#define BUILD_TIME "123331" -#define REPO_INFO "9dd1b862:4a56cd9e:7e366cab:98e243f2:4643f944:7e86595c:580d5b87:c6af41dc:c3bbaa2e:0c6afff1:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:7fc5c8db:d0dfa912" -#define CLI_REVISION "1.5.11" -#define API_REVISION "3.2.7" +#define BUILD_DATE "20230831" +#define BUILD_TIME "101153" +#define REPO_INFO "0a7f555f:53a181da:431cb7ef:40aa6db6:d74cbb50:45914d43:f43a68c0:8cb9ba74:c65bfb8d:6a3d6842:b9d39ab6:d5c6e88d:a29aaa6e:da54579d:d1e75214:1365fb0c:714946eb:602e71c7:c089af6d" +#define CLI_REVISION "1.5.9" +#define API_REVISION "3.2.4" const char *sw_version = {FW_REVISION}; const char *model_id = {MODEL_ID}; const char *chip_id = {CHIP_ID};