Skip to content

Commit

Permalink
Enhance AT+BOOT to work with RP2040
Browse files Browse the repository at this point in the history
Add option for custom boards (no LED's no BLE advertising)
  • Loading branch information
beegee-tokyo committed May 21, 2023
1 parent a1b0fe4 commit 494271d
Show file tree
Hide file tree
Showing 10 changed files with 59 additions and 10 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1215,6 +1215,9 @@ AT Command functions: Taylor Lee ([email protected])
----
# 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
Expand Down
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "WisBlock-API-V2",
"version": "2.0.8",
"version": "2.0.9",
"keywords": [
"lora",
"Semtech",
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=WisBlock-API-V2
version=2.0.8
version=2.0.9
author=Bernd Giesecke <[email protected]>
maintainer=Bernd Giesecke <[email protected]>
sentence=API for WisBlock Core module
Expand Down
20 changes: 20 additions & 0 deletions src/WisBlock-API.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -102,13 +108,15 @@ void setup()
xSemaphoreGive(g_task_sem);
#endif

#ifndef _CUSTOM_BOARD_
// Initialize the built in LED
pinMode(LED_GREEN, OUTPUT);
digitalWrite(LED_GREEN, LOW);

// Initialize the connection status LED
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_BLUE, HIGH);
#endif

#if API_DEBUG > 0
// Initialize Serial for debug output
Expand All @@ -121,7 +129,9 @@ void setup()
if ((millis() - serial_timeout) < 5000)
{
delay(100);
#ifndef _CUSTOM_BOARD_
digitalWrite(LED_GREEN, !digitalRead(LED_GREEN));
#endif
}
else
{
Expand All @@ -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();
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
}
}
9 changes: 9 additions & 0 deletions src/at_cmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
10 changes: 10 additions & 0 deletions src/ble-esp32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@ uint16_t _timeout;

void toggle_blue_led(void)
{
#ifndef _CUSTOM_BOARD_
digitalWrite(LED_BLUE, !digitalRead(LED_BLUE));
#endif
}

/**
Expand All @@ -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
};

/**
Expand All @@ -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
}
};

Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
14 changes: 6 additions & 8 deletions src/ble-nrf52.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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]));
Expand Down Expand Up @@ -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)
{
Expand All @@ -147,6 +144,7 @@ void init_ble(void)
{
restart_advertising(0);
}
#endif
}

/**
Expand Down
4 changes: 4 additions & 0 deletions src/lora.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions src/lorawan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down

0 comments on commit 494271d

Please sign in to comment.