diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b06f91..d76b9eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ Arduino library for RAKWireless WisBlock Core modules that takes all the LoRaWAN # Release Notes +## 2.0.9 Enhancements + - Enhance AT+BOOT to work with RP2040 + - Add option for custom boards (no LED's no BLE advertising) ## 2.0.8 Add AT+BOOT command to force DFU/UF2 bootloader mode ## 2.0.7 Add new CayenneLPP type for device ID (for Hummingbird PoC) diff --git a/README.md b/README.md index 925a7c6..71ad9a4 100644 --- a/README.md +++ b/README.md @@ -1215,6 +1215,9 @@ AT Command functions: Taylor Lee (taylor.lee@rakwireless.com) ---- # Changelog [Code releases](CHANGELOG.md) +- 2023-05-21 + - Enhance AT+BOOT to work with RP2040 + - Add option for custom boards (no LED's no BLE advertising) - 2023-05-20 - Add AT+BOOT command to force DFU/UF2 bootloader mode - 2023-05-16 diff --git a/library.json b/library.json index 113e27e..9bf407b 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "WisBlock-API-V2", - "version": "2.0.8", + "version": "2.0.9", "keywords": [ "lora", "Semtech", diff --git a/library.properties b/library.properties index 0ba89cd..af905b5 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WisBlock-API-V2 -version=2.0.8 +version=2.0.9 author=Bernd Giesecke maintainer=Bernd Giesecke sentence=API for WisBlock Core module diff --git a/src/WisBlock-API.cpp b/src/WisBlock-API.cpp index dd72a51..b6371a8 100644 --- a/src/WisBlock-API.cpp +++ b/src/WisBlock-API.cpp @@ -33,8 +33,10 @@ bool g_enable_ble = false; */ void periodic_wakeup(TimerHandle_t unused) { +#ifndef _CUSTOM_BOARD_ // Switch on LED to show we are awake digitalWrite(LED_GREEN, HIGH); +#endif api_wake_loop(STATUS); } #endif @@ -56,8 +58,10 @@ volatile uint16_t g_task_event_type = NO_EVENT; */ void periodic_wakeup(void) { +#ifndef _CUSTOM_BOARD_ // Switch on LED to show we are awake digitalWrite(LED_GREEN, HIGH); +#endif api_wake_loop(STATUS); } #endif @@ -82,8 +86,10 @@ bool g_enable_ble = false; */ void periodic_wakeup(void) { +#ifndef _CUSTOM_BOARD_ // Switch on LED to show we are awake digitalWrite(LED_GREEN, HIGH); +#endif api_wake_loop(STATUS); } #endif @@ -102,6 +108,7 @@ void setup() xSemaphoreGive(g_task_sem); #endif +#ifndef _CUSTOM_BOARD_ // Initialize the built in LED pinMode(LED_GREEN, OUTPUT); digitalWrite(LED_GREEN, LOW); @@ -109,6 +116,7 @@ void setup() // Initialize the connection status LED pinMode(LED_BLUE, OUTPUT); digitalWrite(LED_BLUE, HIGH); +#endif #if API_DEBUG > 0 // Initialize Serial for debug output @@ -121,7 +129,9 @@ void setup() if ((millis() - serial_timeout) < 5000) { delay(100); +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_GREEN, !digitalRead(LED_GREEN)); +#endif } else { @@ -133,7 +143,9 @@ void setup() #ifdef ESP32 Serial.onReceive(usb_rx_cb); #endif +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_GREEN, HIGH); +#endif // Call app setup for special settings setup_app(); @@ -162,16 +174,20 @@ void setup() } else { +#ifndef _CUSTOM_BOARD_ // BLE is not activated, switch off blue LED digitalWrite(LED_BLUE, LOW); +#endif } // Take the semaphore so the loop will go to sleep until an event happens xSemaphoreTake(g_task_sem, 10); #endif #ifdef ARDUINO_ARCH_RP2040 +#ifndef _CUSTOM_BOARD_ // RAK11310 does not have BLE, switch off blue LED digitalWrite(LED_BLUE, LOW); +#endif #endif // If P2P mode, override auto join setting @@ -236,8 +252,10 @@ void loop() // Sleep until we are woken up by an event api_wait_wake(); { +#ifndef _CUSTOM_BOARD_ // Switch on green LED to show we are awake digitalWrite(LED_GREEN, HIGH); +#endif while (g_task_event_type != NO_EVENT) { // Application specific event handler (timer event or others) @@ -297,9 +315,11 @@ void loop() } Serial.flush(); g_task_event_type = 0; +#ifndef _CUSTOM_BOARD_ // Switch off blue LED to show we go to sleep digitalWrite(LED_GREEN, LOW); delay(10); +#endif // Go back to sleep } } diff --git a/src/at_cmd.cpp b/src/at_cmd.cpp index f61e1f8..3817ce9 100644 --- a/src/at_cmd.cpp +++ b/src/at_cmd.cpp @@ -1767,8 +1767,17 @@ static int at_exec_restore(void) */ static int at_exec_dfu(void) { +#if defined NRF52_SERIES NRF_POWER->GPREGRET = 0x57; // 0xA8 OTA, 0x4e Serial, 0x57 UF2 NVIC_SystemReset(); // or sd_nvic_SystemReset(); +#endif +#if defined ESP32 + // No way to go into bootloader programmatically + ESP.restart(); +#endif +#ifdef ARDUINO_ARCH_RP2040 + _ontouch1200bps_(); +#endif } /** Application build time */ diff --git a/src/ble-esp32.cpp b/src/ble-esp32.cpp index 1fc5894..c771d45 100644 --- a/src/ble-esp32.cpp +++ b/src/ble-esp32.cpp @@ -67,7 +67,9 @@ uint16_t _timeout; void toggle_blue_led(void) { +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_BLUE, !digitalRead(LED_BLUE)); +#endif } /** @@ -86,7 +88,9 @@ class MyServerCallbacks : public BLEServerCallbacks advertising_timer.detach(); blue_led_timer.detach(); g_ble_uart_is_connected = true; +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_BLUE, HIGH); +#endif }; /** @@ -101,7 +105,9 @@ class MyServerCallbacks : public BLEServerCallbacks ble_advertising->start(); advertising_timer.once(_timeout, stop_ble_adv); blue_led_timer.attach(1, toggle_blue_led); +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_BLUE, LOW); +#endif } }; @@ -452,7 +458,9 @@ void restart_advertising(uint16_t timeout) if (timeout != 0) { advertising_timer.once(timeout, stop_ble_adv); +#ifndef _CUSTOM_BOARD_ blue_led_timer.attach(1, toggle_blue_led); +#endif } ble_advertising->start(timeout); g_ble_is_on = true; @@ -465,7 +473,9 @@ void stop_ble_adv(void) { advertising_timer.detach(); blue_led_timer.detach(); +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_BLUE, LOW); +#endif /// \todo needs patch in BLEAdvertising.cpp -> handleGAPEvent() -> remove start(); from ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT ble_advertising->stop(); g_ble_is_on = false; diff --git a/src/ble-nrf52.cpp b/src/ble-nrf52.cpp index a3e87a0..bf55cef 100644 --- a/src/ble-nrf52.cpp +++ b/src/ble-nrf52.cpp @@ -60,27 +60,21 @@ void init_ble(void) #if NO_BLE_LED > 0 Bluefruit.autoConnLed(false); +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_BLUE, LOW); +#endif #endif // Create device name char helper_string[256] = {0}; - // uint32_t addr_high = ((*((uint32_t *)(0x100000a8))) & 0x0000ffff) | 0x0000c000; - // uint32_t addr_low = *((uint32_t *)(0x100000a4)); #ifdef _VARIANT_ISP4520_ /** Device name for ISP4520 */ - // sprintf(helper_string, "%s-%02X%02X%02X%02X%02X%02X", g_ble_dev_name, - // (uint8_t)(addr_high), (uint8_t)(addr_high >> 8), (uint8_t)(addr_low), - // (uint8_t)(addr_low >> 8), (uint8_t)(addr_low >> 16), (uint8_t)(addr_low >> 24)); sprintf(helper_string, "%s-%02X%02X%02X%02X%02X%02X", g_ble_dev_name, (uint8_t)(g_lorawan_settings.node_device_eui[2]), (uint8_t)(g_lorawan_settings.node_device_eui[3]), (uint8_t)(g_lorawan_settings.node_device_eui[4]), (uint8_t)(g_lorawan_settings.node_device_eui[5]), (uint8_t)(g_lorawan_settings.node_device_eui[6]), (uint8_t)(g_lorawan_settings.node_device_eui[7])); #else /** Device name for RAK4631 */ - // sprintf(helper_string, "%s-%02X%02X%02X%02X%02X%02X", g_ble_dev_name, - // (uint8_t)(addr_high), (uint8_t)(addr_high >> 8), (uint8_t)(addr_low), - // (uint8_t)(addr_low >> 8), (uint8_t)(addr_low >> 16), (uint8_t)(addr_low >> 24)); sprintf(helper_string, "%s-%02X%02X%02X%02X%02X%02X", g_ble_dev_name, (uint8_t)(g_lorawan_settings.node_device_eui[2]), (uint8_t)(g_lorawan_settings.node_device_eui[3]), (uint8_t)(g_lorawan_settings.node_device_eui[4]), (uint8_t)(g_lorawan_settings.node_device_eui[5]), (uint8_t)(g_lorawan_settings.node_device_eui[6]), (uint8_t)(g_lorawan_settings.node_device_eui[7])); @@ -138,6 +132,9 @@ void init_ble(void) Bluefruit.Advertising.restartOnDisconnect(true); Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms Bluefruit.Advertising.setFastTimeout(15); // number of seconds in fast mode + +// On custom boards advertising has to be started automatically +#ifndef _CUSTOM_BOARD_ // Bluefruit.Advertising.start(60); // 0 = Don't stop advertising if (g_lorawan_settings.auto_join) { @@ -147,6 +144,7 @@ void init_ble(void) { restart_advertising(0); } +#endif } /** diff --git a/src/lora.cpp b/src/lora.cpp index c7552a0..e23d283 100644 --- a/src/lora.cpp +++ b/src/lora.cpp @@ -92,7 +92,9 @@ int8_t init_lora(void) break; } +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_GREEN, LOW); +#endif g_lorawan_initialized = true; g_lpwan_has_joined = true; @@ -282,8 +284,10 @@ bool send_p2p_packet(uint8_t *data, uint8_t size) Radio.Sleep(); Radio.SetCadParams(LORA_CAD_08_SYMBOL, g_lorawan_settings.p2p_sf + 13, 10, LORA_CAD_ONLY, 0); +#ifndef _CUSTOM_BOARD_ // Switch on Indicator lights digitalWrite(LED_GREEN, HIGH); +#endif // Start CAD Radio.StartCad(); diff --git a/src/lorawan.cpp b/src/lorawan.cpp index 1a86328..a68882d 100644 --- a/src/lorawan.cpp +++ b/src/lorawan.cpp @@ -215,7 +215,9 @@ void lpwan_join_fail_handler(void) */ static void lpwan_joined_handler(void) { +#ifndef _CUSTOM_BOARD_ digitalWrite(LED_GREEN, LOW); +#endif otaaDevAddr = lmh_getDevAddr();