Browse Source

Full functionality for ble

pull/2736/head
LegoManACM 1 month ago
parent
commit
9256683534
  1. 5
      src/helpers/rp2040/SerialBLEInterface.cpp
  2. 2
      variants/pico_dragino_sx1276/platformio.ini
  3. 41
      variants/pico_dragino_sx1276/target.cpp
  4. 2
      variants/pico_w_dragino_sx1276/platformio.ini
  5. 41
      variants/pico_w_dragino_sx1276/target.cpp

5
src/helpers/rp2040/SerialBLEInterface.cpp

@ -5,7 +5,6 @@
void SerialBLEInterface::onConnect(BLEServer* p) {
(void)p;
Serial.println("BLE: connected");
_isConnected = true;
send_queue_len = 0;
recv_queue_len = 0;
@ -13,7 +12,6 @@ void SerialBLEInterface::onConnect(BLEServer* p) {
void SerialBLEInterface::onDisconnect(BLEServer* p) {
(void)p;
Serial.println("BLE: disconnected");
_isConnected = false;
send_queue_len = 0;
recv_queue_len = 0;
@ -25,7 +23,6 @@ void SerialBLEInterface::onDisconnect(BLEServer* p) {
void SerialBLEInterface::onWrite(BLECharacteristic* c) {
size_t len = c->valueLen();
const uint8_t* data = (const uint8_t*)c->valueData();
Serial.printf("BLE: onWrite len=%d hdr=0x%02x\n", len, len > 0 ? data[0] : 0);
if (len > 0 && len <= MAX_FRAME_SIZE && recv_queue_len < FRAME_QUEUE_SIZE) {
recv_queue[recv_queue_len].len = len;
memcpy(recv_queue[recv_queue_len].buf, data, len);
@ -97,7 +94,6 @@ size_t SerialBLEInterface::checkRecvFrame(uint8_t dest[]) {
if (send_queue_len > 0 && _isConnected && millis() >= _last_write + BLE_WRITE_MIN_INTERVAL) {
_last_write = millis();
_txChar->setValue(send_queue[0].buf, send_queue[0].len);
Serial.printf("BLE: notify len=%d hdr=0x%02x\n", send_queue[0].len, send_queue[0].buf[0]);
shiftSendQueueLeft();
}
@ -105,7 +101,6 @@ size_t SerialBLEInterface::checkRecvFrame(uint8_t dest[]) {
if (recv_queue_len > 0) {
size_t len = recv_queue[0].len;
memcpy(dest, recv_queue[0].buf, len);
Serial.printf("BLE: recv frame len=%d hdr=0x%02x\n", len, dest[0]);
shiftRecvQueueLeft();
return len;
}

2
variants/pico_dragino_sx1276/platformio.ini

@ -1,6 +1,7 @@
[pico_dragino_sx1276]
extends = rp2040_base
board = pico
board_build.filesystem_size = 0.5m
build_flags =
${rp2040_base.build_flags}
-I variants/pico_dragino_sx1276
@ -23,6 +24,7 @@ build_flags =
-D setPins=setPinout
-D ENV_SKIP_GPS_DETECT=1
-D PERSISTANT_GPS=1
-D PICO_FLASH_SIZE_BYTES=2097152
build_src_filter = ${rp2040_base.build_src_filter}
+<../variants/pico_dragino_sx1276>
+<../variants/waveshare_rp2040_lora/WaveshareBoard.cpp>

41
variants/pico_dragino_sx1276/target.cpp

@ -1,5 +1,6 @@
#include "target.h"
#include <Arduino.h>
#include <LittleFS.h>
#include <helpers/ArduinoHelpers.h>
#include <helpers/sensors/MicroNMEALocationProvider.h>
#include <helpers/sensors/EnvironmentSensorManager.h>
@ -16,42 +17,28 @@ MicroNMEALocationProvider nmea(Serial1, &rtc_clock);
EnvironmentSensorManager sensors(nmea);
bool radio_init() {
pinMode(25, OUTPUT);
Serial.begin(115200);
delay(2000);
// step 1
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.setRX(PIN_GPS_RX);
// step 2
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.setTX(PIN_GPS_TX);
// step 3
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.begin(9600);
// step 4
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
rtc_clock.begin(Wire);
// step 5
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
SPI.begin();
// step 6
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
bool result = radio.std_init(NULL);
if (result) {
for (int i = 0; i < 10; i++) {
digitalWrite(25,HIGH); delay(100); digitalWrite(25,LOW); delay(100);
}
if (LittleFS.begin()) {
Serial.println("LittleFS mounted OK");
} else {
Serial.println("LittleFS mount failed, formatting...");
LittleFS.format();
if (LittleFS.begin()) {
Serial.println("LittleFS formatted and mounted OK");
} else {
for (int i = 0; i < 3; i++) {
digitalWrite(25,HIGH); delay(500); digitalWrite(25,LOW); delay(500);
}
Serial.println("LittleFS still failed!");
}
return result;
}
return radio.std_init(NULL);;
}
uint32_t radio_get_rng_seed() {

2
variants/pico_w_dragino_sx1276/platformio.ini

@ -1,6 +1,7 @@
[pico_w_dragino_sx1276]
extends = rp2040_base
board = rpipicow
board_build.filesystem_size = 0.5m
build_flags =
${rp2040_base.build_flags}
-I variants/pico_w_dragino_sx1276
@ -26,6 +27,7 @@ build_flags =
-D BLE_PIN_CODE=123456
-D RTOS_STACK_SIZE_BLE=4096
-D PIO_FRAMEWORK_ARDUINO_ENABLE_BLUETOOTH
-D PICO_FLASH_SIZE_BYTES=2097152
build_src_filter = ${rp2040_base.build_src_filter}
+<../variants/pico_w_dragino_sx1276>
+<../variants/waveshare_rp2040_lora/WaveshareBoard.cpp>

41
variants/pico_w_dragino_sx1276/target.cpp

@ -1,5 +1,6 @@
#include "target.h"
#include <Arduino.h>
#include <LittleFS.h>
#include <helpers/ArduinoHelpers.h>
#include <helpers/sensors/MicroNMEALocationProvider.h>
#include <helpers/sensors/EnvironmentSensorManager.h>
@ -16,41 +17,28 @@ MicroNMEALocationProvider nmea(Serial1, &rtc_clock);
EnvironmentSensorManager sensors(nmea);
bool radio_init() {
pinMode(25, OUTPUT);
Serial.begin(115200);
delay(2000);
// step 1
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.setRX(PIN_GPS_RX);
// step 2
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.setTX(PIN_GPS_TX);
// step 3
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
Serial1.begin(9600);
// step 4
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
rtc_clock.begin(Wire);
// step 5
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
SPI.begin();
// step 6
digitalWrite(25,HIGH); delay(300); digitalWrite(25,LOW); delay(300);
bool result = radio.std_init(NULL);
if (result) {
for (int i = 0; i < 10; i++) {
digitalWrite(25,HIGH); delay(100); digitalWrite(25,LOW); delay(100);
}
if (LittleFS.begin()) {
Serial.println("LittleFS mounted OK");
} else {
Serial.println("LittleFS mount failed, formatting...");
LittleFS.format();
if (LittleFS.begin()) {
Serial.println("LittleFS formatted and mounted OK");
} else {
for (int i = 0; i < 3; i++) {
digitalWrite(25,HIGH); delay(500); digitalWrite(25,LOW); delay(500);
}
Serial.println("LittleFS still failed!");
}
}
return result;
}
@ -66,7 +54,6 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) {
}
void radio_set_tx_power(int8_t dbm) {
Serial.printf("TX power set: %d dBm\n", dbm);
radio.setOutputPower(dbm);
}

Loading…
Cancel
Save