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