mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
add tower v2 PA control
This commit is contained in:
@@ -19,6 +19,7 @@ void HeltecTowerV2Board::initiateShutdown(uint8_t reason) {
|
|||||||
digitalWrite(PIN_GPS_STANDBY, LOW);
|
digitalWrite(PIN_GPS_STANDBY, LOW);
|
||||||
pinMode(PIN_GPS_RESET, OUTPUT);
|
pinMode(PIN_GPS_RESET, OUTPUT);
|
||||||
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
||||||
|
loRaFEMControl.setSleepModeEnable();
|
||||||
|
|
||||||
bool enable_lpcomp = (reason == SHUTDOWN_REASON_LOW_VOLTAGE ||
|
bool enable_lpcomp = (reason == SHUTDOWN_REASON_LOW_VOLTAGE ||
|
||||||
reason == SHUTDOWN_REASON_BOOT_PROTECT);
|
reason == SHUTDOWN_REASON_BOOT_PROTECT);
|
||||||
@@ -37,10 +38,8 @@ void HeltecTowerV2Board::initiateShutdown(uint8_t reason) {
|
|||||||
void HeltecTowerV2Board::begin() {
|
void HeltecTowerV2Board::begin() {
|
||||||
NRF52Board::begin();
|
NRF52Board::begin();
|
||||||
|
|
||||||
#ifdef P_LORA_TX_LED
|
|
||||||
pinMode(P_LORA_TX_LED, OUTPUT);
|
pinMode(P_LORA_TX_LED, OUTPUT);
|
||||||
digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
|
digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
|
||||||
#endif
|
|
||||||
|
|
||||||
pinMode(PIN_BAT_CTL, OUTPUT);
|
pinMode(PIN_BAT_CTL, OUTPUT);
|
||||||
digitalWrite(PIN_BAT_CTL, LOW);
|
digitalWrite(PIN_BAT_CTL, LOW);
|
||||||
@@ -58,17 +57,18 @@ void HeltecTowerV2Board::begin() {
|
|||||||
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
||||||
pinMode(PIN_GPS_STANDBY, OUTPUT);
|
pinMode(PIN_GPS_STANDBY, OUTPUT);
|
||||||
digitalWrite(PIN_GPS_STANDBY, HIGH);
|
digitalWrite(PIN_GPS_STANDBY, HIGH);
|
||||||
|
loRaFEMControl.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef P_LORA_TX_LED
|
|
||||||
void HeltecTowerV2Board::onBeforeTransmit() {
|
void HeltecTowerV2Board::onBeforeTransmit() {
|
||||||
digitalWrite(P_LORA_TX_LED, LED_STATE_ON);
|
digitalWrite(P_LORA_TX_LED, LED_STATE_ON);
|
||||||
|
loRaFEMControl.setTxModeEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecTowerV2Board::onAfterTransmit() {
|
void HeltecTowerV2Board::onAfterTransmit() {
|
||||||
digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
|
digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
|
||||||
|
loRaFEMControl.setRxModeEnable();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
uint16_t HeltecTowerV2Board::getBattMilliVolts() {
|
uint16_t HeltecTowerV2Board::getBattMilliVolts() {
|
||||||
analogReadResolution(12);
|
analogReadResolution(12);
|
||||||
@@ -95,6 +95,7 @@ void HeltecTowerV2Board::powerOff() {
|
|||||||
digitalWrite(PIN_GPS_STANDBY, LOW);
|
digitalWrite(PIN_GPS_STANDBY, LOW);
|
||||||
pinMode(PIN_GPS_RESET, OUTPUT);
|
pinMode(PIN_GPS_RESET, OUTPUT);
|
||||||
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
digitalWrite(PIN_GPS_RESET, GPS_RESET_MODE);
|
||||||
|
loRaFEMControl.setSleepModeEnable();
|
||||||
pinMode(PIN_BAT_CTL, OUTPUT);
|
pinMode(PIN_BAT_CTL, OUTPUT);
|
||||||
digitalWrite(PIN_BAT_CTL, LOW);
|
digitalWrite(PIN_BAT_CTL, LOW);
|
||||||
variant_shutdown();
|
variant_shutdown();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <MeshCore.h>
|
#include <MeshCore.h>
|
||||||
#include <helpers/NRF52Board.h>
|
#include <helpers/NRF52Board.h>
|
||||||
|
#include "LoRaFEMControl.h"
|
||||||
|
|
||||||
class HeltecTowerV2Board : public NRF52BoardDCDC {
|
class HeltecTowerV2Board : public NRF52BoardDCDC {
|
||||||
protected:
|
protected:
|
||||||
@@ -11,12 +12,12 @@ protected:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
LoRaFEMControl loRaFEMControl;
|
||||||
|
|
||||||
HeltecTowerV2Board() : NRF52Board("TOWER_V2_OTA") {}
|
HeltecTowerV2Board() : NRF52Board("TOWER_V2_OTA") {}
|
||||||
void begin();
|
void begin();
|
||||||
#ifdef P_LORA_TX_LED
|
|
||||||
void onBeforeTransmit() override;
|
void onBeforeTransmit() override;
|
||||||
void onAfterTransmit() override;
|
void onAfterTransmit() override;
|
||||||
#endif
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override;
|
const char* getManufacturerName() const override;
|
||||||
void powerOff() override;
|
void powerOff() override;
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#include "LoRaFEMControl.h"
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "variant.h"
|
||||||
|
|
||||||
|
static void enableFEMPower() {
|
||||||
|
bool wasOff = digitalRead(LORA_KCT8103L_EN) != HIGH;
|
||||||
|
digitalWrite(LORA_KCT8103L_EN, HIGH);
|
||||||
|
if (wasOff) {
|
||||||
|
delay(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaFEMControl::init() {
|
||||||
|
pinMode(LORA_KCT8103L_EN, OUTPUT);
|
||||||
|
digitalWrite(LORA_KCT8103L_EN, HIGH);
|
||||||
|
delay(1);
|
||||||
|
pinMode(LORA_KCT8103L_TX_RX, OUTPUT);
|
||||||
|
digitalWrite(LORA_KCT8103L_TX_RX, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaFEMControl::setSleepModeEnable() {
|
||||||
|
pinMode(LORA_KCT8103L_EN, OUTPUT);
|
||||||
|
digitalWrite(LORA_KCT8103L_EN, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaFEMControl::setTxModeEnable() {
|
||||||
|
enableFEMPower();
|
||||||
|
digitalWrite(LORA_KCT8103L_TX_RX, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaFEMControl::setRxModeEnable() {
|
||||||
|
enableFEMPower();
|
||||||
|
digitalWrite(LORA_KCT8103L_TX_RX, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoRaFEMControl::setRxModeEnableWhenMCUSleep() {
|
||||||
|
enableFEMPower();
|
||||||
|
digitalWrite(LORA_KCT8103L_TX_RX, LOW);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class LoRaFEMControl {
|
||||||
|
public:
|
||||||
|
LoRaFEMControl() {}
|
||||||
|
virtual ~LoRaFEMControl() {}
|
||||||
|
|
||||||
|
void init();
|
||||||
|
void setSleepModeEnable();
|
||||||
|
void setTxModeEnable();
|
||||||
|
void setRxModeEnable();
|
||||||
|
void setRxModeEnableWhenMCUSleep();
|
||||||
|
};
|
||||||
@@ -11,7 +11,7 @@ build_flags = ${nrf52_base.build_flags}
|
|||||||
-D NRF52_POWER_MANAGEMENT
|
-D NRF52_POWER_MANAGEMENT
|
||||||
-D RADIO_CLASS=CustomSX1262
|
-D RADIO_CLASS=CustomSX1262
|
||||||
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
||||||
-D LORA_TX_POWER=22
|
-D LORA_TX_POWER=12
|
||||||
-D SX126X_CURRENT_LIMIT=140
|
-D SX126X_CURRENT_LIMIT=140
|
||||||
-D SX126X_RX_BOOSTED_GAIN=1
|
-D SX126X_RX_BOOSTED_GAIN=1
|
||||||
build_src_filter = ${nrf52_base.build_src_filter}
|
build_src_filter = ${nrf52_base.build_src_filter}
|
||||||
|
|||||||
@@ -19,7 +19,22 @@ void initVariant()
|
|||||||
|
|
||||||
void variant_shutdown()
|
void variant_shutdown()
|
||||||
{
|
{
|
||||||
|
nrf_gpio_cfg_default(PIN_GPS_EN);
|
||||||
nrf_gpio_cfg_default(PIN_GPS_PPS);
|
nrf_gpio_cfg_default(PIN_GPS_PPS);
|
||||||
|
nrf_gpio_cfg_default(PIN_GPS_RESET);
|
||||||
|
nrf_gpio_cfg_default(PIN_GPS_STANDBY);
|
||||||
|
nrf_gpio_cfg_default(GPS_RX_PIN);
|
||||||
|
nrf_gpio_cfg_default(GPS_TX_PIN);
|
||||||
|
nrf_gpio_cfg_default(LORA_KCT8103L_TX_RX);
|
||||||
|
nrf_gpio_cfg_default(RF_PA_DETECT_PIN);
|
||||||
|
nrf_gpio_cfg_default(SX126X_CS);
|
||||||
|
nrf_gpio_cfg_default(SX126X_DIO1);
|
||||||
|
nrf_gpio_cfg_default(SX126X_BUSY);
|
||||||
|
nrf_gpio_cfg_default(SX126X_RESET);
|
||||||
|
nrf_gpio_cfg_default(PIN_SPI_MISO);
|
||||||
|
nrf_gpio_cfg_default(PIN_SPI_MOSI);
|
||||||
|
nrf_gpio_cfg_default(PIN_SPI_SCK);
|
||||||
|
nrf_gpio_cfg_default(PIN_LED);
|
||||||
detachInterrupt(PIN_GPS_PPS);
|
detachInterrupt(PIN_GPS_PPS);
|
||||||
detachInterrupt(PIN_BUTTON1);
|
detachInterrupt(PIN_BUTTON1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
#define NUM_ANALOG_OUTPUTS (0)
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
#define WIRE_INTERFACES_COUNT (1)
|
#define WIRE_INTERFACES_COUNT (1)
|
||||||
#define PIN_WIRE_SDA (0 + 11)
|
#define PIN_WIRE_SDA (0 + 30)
|
||||||
#define PIN_WIRE_SCL (0 + 12)
|
#define PIN_WIRE_SCL (0 + 5)
|
||||||
#define PIN_BOARD_SDA PIN_WIRE_SDA
|
#define PIN_BOARD_SDA PIN_WIRE_SDA
|
||||||
#define PIN_BOARD_SCL PIN_WIRE_SCL
|
#define PIN_BOARD_SCL PIN_WIRE_SCL
|
||||||
|
|
||||||
@@ -52,6 +52,13 @@
|
|||||||
#define P_LORA_MOSI PIN_SPI_MOSI
|
#define P_LORA_MOSI PIN_SPI_MOSI
|
||||||
#define P_LORA_SCLK PIN_SPI_SCK
|
#define P_LORA_SCLK PIN_SPI_SCK
|
||||||
|
|
||||||
|
#define USE_KCT8103L_PA_ONLY
|
||||||
|
#define LORA_KCT8103L_EN (0 + 15)
|
||||||
|
#define LORA_KCT8103L_TX_RX (0 + 16)
|
||||||
|
#define LORA_PA_POWER LORA_KCT8103L_EN
|
||||||
|
#define RF_PA_DETECT_PIN (0 + 13)
|
||||||
|
#define RF_PA_HIGH_POWER_VALUE HIGH
|
||||||
|
|
||||||
#define GPS_L76K
|
#define GPS_L76K
|
||||||
#define GPS_RESET_MODE LOW
|
#define GPS_RESET_MODE LOW
|
||||||
#define PIN_GPS_RESET (32 + 6)
|
#define PIN_GPS_RESET (32 + 6)
|
||||||
|
|||||||
Reference in New Issue
Block a user