mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
The Xiao nRF52840 combined with the Wio-SX1262 is often used for cheap and compact DIY companion nodes. The Wio actually has an onboard pushbutton that can be used as user button. Enable support for the button. Signed-off-by: Frieder Schrempf <frieder@fris.de>
96 lines
No EOL
2.7 KiB
C++
96 lines
No EOL
2.7 KiB
C++
#ifdef XIAO_NRF52
|
|
|
|
#include <Arduino.h>
|
|
#include <Wire.h>
|
|
#include <bluefruit.h>
|
|
|
|
#include "XiaoNrf52Board.h"
|
|
|
|
static BLEDfu bledfu;
|
|
|
|
static void connect_callback(uint16_t conn_handle) {
|
|
(void)conn_handle;
|
|
MESH_DEBUG_PRINTLN("BLE client connected");
|
|
}
|
|
|
|
static void disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
|
(void)conn_handle;
|
|
(void)reason;
|
|
|
|
MESH_DEBUG_PRINTLN("BLE client disconnected");
|
|
}
|
|
|
|
void XiaoNrf52Board::begin() {
|
|
// for future use, sub-classes SHOULD call this from their begin()
|
|
startup_reason = BD_STARTUP_NORMAL;
|
|
NRF_POWER->DCDCEN = 1;
|
|
|
|
pinMode(PIN_VBAT, INPUT);
|
|
pinMode(VBAT_ENABLE, OUTPUT);
|
|
digitalWrite(VBAT_ENABLE, HIGH);
|
|
|
|
#ifdef PIN_USER_BTN
|
|
pinMode(PIN_USER_BTN, INPUT);
|
|
#endif
|
|
|
|
#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL)
|
|
Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL);
|
|
#endif
|
|
|
|
Wire.begin();
|
|
|
|
#ifdef P_LORA_TX_LED
|
|
pinMode(P_LORA_TX_LED, OUTPUT);
|
|
digitalWrite(P_LORA_TX_LED, HIGH);
|
|
#endif
|
|
|
|
// pinMode(SX126X_POWER_EN, OUTPUT);
|
|
// digitalWrite(SX126X_POWER_EN, HIGH);
|
|
delay(10); // give sx1262 some time to power up
|
|
}
|
|
|
|
bool XiaoNrf52Board::startOTAUpdate(const char *id, char reply[]) {
|
|
// Config the peripheral connection with maximum bandwidth
|
|
// more SRAM required by SoftDevice
|
|
// Note: All config***() function must be called before begin()
|
|
Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);
|
|
Bluefruit.configPrphConn(92, BLE_GAP_EVENT_LENGTH_MIN, 16, 16);
|
|
|
|
Bluefruit.begin(1, 0);
|
|
// Set max power. Accepted values are: -40, -30, -20, -16, -12, -8, -4, 0, 4
|
|
Bluefruit.setTxPower(4);
|
|
// Set the BLE device name
|
|
Bluefruit.setName("XIAO_NRF52_OTA");
|
|
|
|
Bluefruit.Periph.setConnectCallback(connect_callback);
|
|
Bluefruit.Periph.setDisconnectCallback(disconnect_callback);
|
|
|
|
// To be consistent OTA DFU should be added first if it exists
|
|
bledfu.begin();
|
|
|
|
// Set up and start advertising
|
|
// Advertising packet
|
|
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
|
|
Bluefruit.Advertising.addTxPower();
|
|
Bluefruit.Advertising.addName();
|
|
|
|
/* Start Advertising
|
|
- Enable auto advertising if disconnected
|
|
- Interval: fast mode = 20 ms, slow mode = 152.5 ms
|
|
- Timeout for fast mode is 30 seconds
|
|
- Start(timeout) with timeout = 0 will advertise forever (until connected)
|
|
|
|
For recommended advertising interval
|
|
https://developer.apple.com/library/content/qa/qa1931/_index.html
|
|
*/
|
|
Bluefruit.Advertising.restartOnDisconnect(true);
|
|
Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms
|
|
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
|
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
|
|
|
strcpy(reply, "OK - started");
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif |