mirror of https://github.com/meshcore-dev/MeshCore
4 changed files with 167 additions and 0 deletions
@ -0,0 +1,17 @@ |
|||
#pragma once |
|||
|
|||
#include <RadioLib.h> |
|||
|
|||
#define LR1110_IRQ_HAS_PREAMBLE 0b0000000100 // 4 4 valid LoRa header received
|
|||
#define LR1110_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received
|
|||
|
|||
class CustomLR1110 : public LR1110 { |
|||
public: |
|||
CustomLR1110(Module *mod) : LR1110(mod) { } |
|||
|
|||
bool isReceiving() { |
|||
uint16_t irq = getIrqStatus(); |
|||
bool hasPreamble = ((irq & LR1110_IRQ_HEADER_VALID) && (irq & LR1110_IRQ_HAS_PREAMBLE)); |
|||
return hasPreamble; |
|||
} |
|||
}; |
|||
@ -0,0 +1,27 @@ |
|||
#pragma once |
|||
|
|||
#include "CustomLR1110.h" |
|||
#include "RadioLibWrappers.h" |
|||
|
|||
class CustomLR1110Wrapper : public RadioLibWrapper { |
|||
public: |
|||
CustomLR1110Wrapper(CustomLR1110& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { } |
|||
bool isReceiving() override { |
|||
if (((CustomLR1110 *)_radio)->isReceiving()) return true; |
|||
|
|||
idle(); // put sx126x into standby
|
|||
// do some basic CAD (blocks for ~12780 micros (on SF 10)!)
|
|||
bool activity = (((CustomLR1110 *)_radio)->scanChannel() == RADIOLIB_LORA_DETECTED); |
|||
idle(); |
|||
|
|||
return activity; |
|||
} |
|||
|
|||
void onSendFinished() override { |
|||
RadioLibWrapper::onSendFinished(); |
|||
_radio->setPreambleLength(8); // overcomes weird issues with small and big pkts
|
|||
} |
|||
|
|||
float getLastRSSI() const override { return ((CustomLR1110 *)_radio)->getRSSI(); } |
|||
float getLastSNR() const override { return ((CustomLR1110 *)_radio)->getSNR(); } |
|||
}; |
|||
@ -0,0 +1,68 @@ |
|||
#include <Arduino.h> |
|||
#include "T1000eBoard.h" |
|||
|
|||
#include <bluefruit.h> |
|||
#include <Wire.h> |
|||
|
|||
|
|||
|
|||
#if 0 |
|||
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"); |
|||
} |
|||
|
|||
|
|||
bool TrackerT1000eBoard::startOTAUpdate() { |
|||
// 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("T1000E_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
|
|||
|
|||
return true; |
|||
} |
|||
#endif |
|||
@ -0,0 +1,55 @@ |
|||
#pragma once |
|||
|
|||
#include <MeshCore.h> |
|||
#include <Arduino.h> |
|||
|
|||
// LoRa and SPI pins
|
|||
#define P_LORA_DIO_1 (32 + 1) // P1.1
|
|||
#define P_LORA_NSS (0 + 12) // P0.12
|
|||
#define P_LORA_RESET (32 + 10) // P1.10
|
|||
#define P_LORA_BUSY (0 + 7) // P0.7
|
|||
#define P_LORA_SCLK (0 + 11) // P0.11
|
|||
#define P_LORA_MISO (32 + 8) // P1.8
|
|||
#define P_LORA_MOSI (32 + 9) // P0.9
|
|||
#define LR1110_POWER_EN 37 |
|||
|
|||
#define LR11X0_DIO_AS_RF_SWITCH true |
|||
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6 |
|||
|
|||
// built-ins
|
|||
//#define PIN_VBAT_READ 5
|
|||
//#define ADC_MULTIPLIER (3 * 1.73 * 1000)
|
|||
|
|||
class T1000eBoard : public mesh::MainBoard { |
|||
protected: |
|||
uint8_t startup_reason; |
|||
|
|||
public: |
|||
void begin() { |
|||
// for future use, sub-classes SHOULD call this from their begin()
|
|||
startup_reason = BD_STARTUP_NORMAL; |
|||
|
|||
// pinMode(PIN_VBAT_READ, INPUT);
|
|||
|
|||
// Doesn't seem to be a pwr en pin ...
|
|||
// pinMode(LR1110_POWER_EN, OUTPUT);
|
|||
// digitalWrite(LR1110_POWER_EN, HIGH);
|
|||
delay(10); // give sx1262 some time to power up
|
|||
} |
|||
|
|||
uint16_t getBattMilliVolts() override { |
|||
return 0; |
|||
} |
|||
|
|||
uint8_t getStartupReason() const override { return startup_reason; } |
|||
|
|||
const char* getManufacturerName() const override { |
|||
return "Seeed Tracker T1000-e"; |
|||
} |
|||
|
|||
void reboot() override { |
|||
NVIC_SystemReset(); |
|||
} |
|||
|
|||
// bool startOTAUpdate() override;
|
|||
}; |
|||
Loading…
Reference in new issue