mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-19 16:29:31 +00:00
Fixes
This commit is contained in:
parent
c09434b77e
commit
9721d980a9
@ -1,73 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
#ifdef BLOCKING_PACKET_QUEUE
|
||||
#include <condition_variable>
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Generic platform independent and re-entrant queue wrapper that can be used to
|
||||
* safely pass (generic) movable objects between threads.
|
||||
*/
|
||||
template <typename T> class PacketQueue
|
||||
{
|
||||
public:
|
||||
PacketQueue() {}
|
||||
|
||||
PacketQueue(PacketQueue const &other) = delete;
|
||||
|
||||
/**
|
||||
* Push movable object into queue
|
||||
*/
|
||||
void push(T &&packet)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
queue.push(packet.move());
|
||||
#ifdef BLOCKING_PACKET_QUEUE
|
||||
cond.notify_one();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef BLOCKING_PACKET_QUEUE
|
||||
/**
|
||||
* Pop movable object from queue (blocking)
|
||||
*/
|
||||
std::unique_ptr<T> pop(void)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mutex);
|
||||
cond.wait(lock, [this] { return !queue.empty(); });
|
||||
T packet = queue.front()->move();
|
||||
queue.pop();
|
||||
return packet;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Pop movable object from queue (non-blocking)
|
||||
*/
|
||||
std::unique_ptr<T> try_pop()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (queue.empty())
|
||||
return {nullptr};
|
||||
auto packet = queue.front()->move();
|
||||
queue.pop();
|
||||
return packet;
|
||||
}
|
||||
|
||||
uint32_t size() const
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
return queue.size();
|
||||
}
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex;
|
||||
std::queue<std::unique_ptr<T>> queue;
|
||||
#ifdef BLOCKING_PACKET_QUEUE
|
||||
std::condition_variable cond;
|
||||
#endif
|
||||
};
|
@ -1148,11 +1148,6 @@ void setup()
|
||||
initApiServer(TCPPort);
|
||||
#endif
|
||||
|
||||
#ifdef USE_PACKET_API
|
||||
MeshPacketServer::init();
|
||||
PacketClient::init();
|
||||
#endif
|
||||
|
||||
// Start airtime logger thread.
|
||||
airTime = new AirTime();
|
||||
|
||||
|
@ -148,11 +148,6 @@ class PhoneAPI
|
||||
*/
|
||||
virtual void onNowHasData(uint32_t fromRadioNum) {}
|
||||
|
||||
/**
|
||||
* Subclasses can use this to find out when a client drops the link
|
||||
*/
|
||||
virtual void handleDisconnect();
|
||||
|
||||
/// begin a new connection
|
||||
void handleStartConfig();
|
||||
|
||||
|
@ -1,62 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
/**
|
||||
* Polymorphic packets that can be moved into and out of packet queues.
|
||||
*/
|
||||
class Packet
|
||||
{
|
||||
public:
|
||||
using PacketPtr = std::unique_ptr<Packet>;
|
||||
|
||||
Packet(int packetId) : id(packetId) {}
|
||||
|
||||
// virtual move constructor
|
||||
virtual PacketPtr move() { return PacketPtr(new Packet(std::move(*this))); }
|
||||
|
||||
// Disable copying
|
||||
Packet(const Packet &) = delete;
|
||||
Packet &operator=(const Packet &) = delete;
|
||||
|
||||
virtual ~Packet() {}
|
||||
|
||||
int getPacketId() const { return id; }
|
||||
|
||||
protected:
|
||||
// Enable moving
|
||||
Packet(Packet &&) = default;
|
||||
Packet &operator=(Packet &&) = default;
|
||||
|
||||
private:
|
||||
int id;
|
||||
};
|
||||
|
||||
/**
|
||||
* generic packet type class
|
||||
*/
|
||||
template <typename PacketType> class DataPacket : public Packet
|
||||
{
|
||||
public:
|
||||
template <typename... Args> DataPacket(int id, Args &&...args) : Packet(id), data(new PacketType(std::forward<Args>(args)...))
|
||||
{
|
||||
}
|
||||
|
||||
PacketPtr move() override { return PacketPtr(new DataPacket(std::move(*this))); }
|
||||
|
||||
// Disable copying
|
||||
DataPacket(const DataPacket &) = delete;
|
||||
DataPacket &operator=(const DataPacket &) = delete;
|
||||
|
||||
virtual ~DataPacket() {}
|
||||
|
||||
const PacketType &getData() const { return *data; }
|
||||
|
||||
protected:
|
||||
// Enable moving
|
||||
DataPacket(DataPacket &&) = default;
|
||||
DataPacket &operator=(DataPacket &&) = default;
|
||||
|
||||
private:
|
||||
std::unique_ptr<PacketType> data;
|
||||
};
|
@ -1,55 +0,0 @@
|
||||
#include "sharedMem/PacketServer.h"
|
||||
#include "api/PacketAPI.h"
|
||||
#include "sharedMem/SharedQueue.h"
|
||||
#include <assert.h>
|
||||
|
||||
const uint32_t max_packet_queue_size = 50;
|
||||
|
||||
SharedQueue *sharedQueue = nullptr;
|
||||
|
||||
PacketServer *packetServer = nullptr;
|
||||
|
||||
PacketServer::PacketServer() : queue(nullptr) {}
|
||||
|
||||
void PacketServer::init(void)
|
||||
{
|
||||
packetServer = new PacketServer;
|
||||
packetAPI = new PacketAPI(packetServer);
|
||||
sharedQueue = new SharedQueue;
|
||||
packetServer->begin(sharedQueue);
|
||||
}
|
||||
|
||||
void PacketServer::begin(SharedQueue *_queue)
|
||||
{
|
||||
queue = _queue;
|
||||
}
|
||||
|
||||
Packet::PacketPtr PacketServer::receivePacket(void)
|
||||
{
|
||||
assert(queue);
|
||||
if (queue->clientQueueSize() == 0)
|
||||
return {nullptr};
|
||||
return queue->serverReceive();
|
||||
}
|
||||
|
||||
bool PacketServer::sendPacket(Packet &&p)
|
||||
{
|
||||
assert(queue);
|
||||
if (queue->serverQueueSize() >= max_packet_queue_size) {
|
||||
return false;
|
||||
}
|
||||
queue->serverSend(std::move(p));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PacketServer::hasData() const
|
||||
{
|
||||
assert(queue);
|
||||
return queue->clientQueueSize() > 0;
|
||||
}
|
||||
|
||||
bool PacketServer::available() const
|
||||
{
|
||||
assert(queue);
|
||||
return queue->serverQueueSize() < max_packet_queue_size;
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "concurrency/PacketQueue.h"
|
||||
#include "sharedMem/Packet.h"
|
||||
|
||||
class SharedQueue;
|
||||
|
||||
/**
|
||||
* Generic server implementation (base class) for bidirectional task communication
|
||||
* Uses a queue that is shared with the client
|
||||
*/
|
||||
class PacketServer
|
||||
{
|
||||
public:
|
||||
PacketServer();
|
||||
static void init(void);
|
||||
virtual void begin(SharedQueue *_queue);
|
||||
virtual bool sendPacket(Packet &&p);
|
||||
virtual Packet::PacketPtr receivePacket(void);
|
||||
// template variant with typed return values
|
||||
// template<> Packet::PacketPtr receivePacket<Packet::PacketPtr>()
|
||||
// template<typename T> T receivePacket();
|
||||
virtual bool hasData() const;
|
||||
virtual bool available() const;
|
||||
|
||||
private:
|
||||
SharedQueue *queue;
|
||||
};
|
@ -1,37 +0,0 @@
|
||||
#include "sharedMem/SharedQueue.h"
|
||||
|
||||
SharedQueue::SharedQueue() {}
|
||||
|
||||
SharedQueue::~SharedQueue() {}
|
||||
|
||||
bool SharedQueue::serverSend(Packet &&p)
|
||||
{
|
||||
serverQueue.push(std::move(p));
|
||||
return true;
|
||||
}
|
||||
|
||||
Packet::PacketPtr SharedQueue::serverReceive()
|
||||
{
|
||||
return clientQueue.try_pop();
|
||||
}
|
||||
|
||||
size_t SharedQueue::serverQueueSize() const
|
||||
{
|
||||
return serverQueue.size();
|
||||
}
|
||||
|
||||
bool SharedQueue::clientSend(Packet &&p)
|
||||
{
|
||||
clientQueue.push(std::move(p));
|
||||
return true;
|
||||
}
|
||||
|
||||
Packet::PacketPtr SharedQueue::clientReceive()
|
||||
{
|
||||
return serverQueue.try_pop();
|
||||
}
|
||||
|
||||
size_t SharedQueue::clientQueueSize() const
|
||||
{
|
||||
return clientQueue.size();
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "concurrency/PacketQueue.h"
|
||||
#include "sharedMem/Packet.h"
|
||||
|
||||
/**
|
||||
* @brief Queue wrapper that aggregates two thread queues (namely client and server)
|
||||
* for bidirectional packet transfer between two threads or processes.
|
||||
*
|
||||
* This queue may also be created in shared memory (e.g. in Linux for inter-process communication)
|
||||
*/
|
||||
class SharedQueue
|
||||
{
|
||||
public:
|
||||
SharedQueue();
|
||||
virtual ~SharedQueue();
|
||||
|
||||
// server methods
|
||||
virtual bool serverSend(Packet &&p);
|
||||
virtual Packet::PacketPtr serverReceive();
|
||||
virtual size_t serverQueueSize() const;
|
||||
|
||||
// client methods
|
||||
virtual bool clientSend(Packet &&p);
|
||||
virtual Packet::PacketPtr clientReceive();
|
||||
virtual size_t clientQueueSize() const;
|
||||
|
||||
private:
|
||||
// the server pushes into serverQueue and the client pushes into clientQueue
|
||||
// receiving is done from the opposite queue, respectively
|
||||
PacketQueue<Packet> serverQueue;
|
||||
PacketQueue<Packet> clientQueue;
|
||||
};
|
||||
|
||||
extern SharedQueue *sharedQueue;
|
@ -1,101 +1,19 @@
|
||||
// ST7789 TFT LCD
|
||||
#define ST7789_CS 12
|
||||
#define ST7789_RS 11 // DC
|
||||
#define ST7789_SDA 41 // MOSI
|
||||
#define ST7789_SCK 40
|
||||
#define ST7789_RESET -1
|
||||
#define ST7789_MISO 38
|
||||
#define ST7789_BUSY -1
|
||||
#define ST7789_BL 42
|
||||
#define ST7789_SPI_HOST SPI2_HOST
|
||||
#define TFT_BL 42
|
||||
#define SPI_FREQUENCY 40000000
|
||||
#define SPI_READ_FREQUENCY 16000000
|
||||
#define TFT_HEIGHT 320
|
||||
#define TFT_WIDTH 240
|
||||
#define TFT_OFFSET_X 0
|
||||
#define TFT_OFFSET_Y 0
|
||||
#define TFT_OFFSET_ROTATION 0
|
||||
#define SCREEN_ROTATE
|
||||
#define SCREEN_TRANSITION_FRAMERATE 5
|
||||
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
|
||||
; LilyGo T-Deck
|
||||
[env:t-deck]
|
||||
extends = esp32s3_base
|
||||
board = t-deck
|
||||
board_check = true
|
||||
upload_protocol = esptool
|
||||
#upload_port = COM29
|
||||
|
||||
#define HAS_TOUCHSCREEN 1
|
||||
#define SCREEN_TOUCH_INT 16
|
||||
#define TOUCH_I2C_PORT 0
|
||||
#define TOUCH_SLAVE_ADDRESS 0x5D // GT911
|
||||
build_flags = ${esp32_base.build_flags}
|
||||
-DT_DECK
|
||||
-DBOARD_HAS_PSRAM
|
||||
-DMAX_THREADS=40
|
||||
-DGPS_POWER_TOGGLE
|
||||
-Ivariants/t-deck
|
||||
|
||||
#define SLEEP_TIME 120
|
||||
|
||||
#define BUTTON_PIN 0
|
||||
// #define BUTTON_NEED_PULLUP
|
||||
#define GPS_DEFAULT_NOT_PRESENT 1
|
||||
#define GPS_RX_PIN 44
|
||||
#define GPS_TX_PIN 43
|
||||
|
||||
// Have SPI interface SD card slot
|
||||
#define HAS_SDCARD 1
|
||||
#define SPI_MOSI (41)
|
||||
#define SPI_SCK (40)
|
||||
#define SPI_MISO (38)
|
||||
#define SPI_CS (39)
|
||||
#define SDCARD_CS SPI_CS
|
||||
|
||||
#define BATTERY_PIN 4 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||
// ratio of voltage divider = 2.0 (RD2=100k, RD3=100k)
|
||||
#define ADC_MULTIPLIER 2.11 // 2.0 + 10% for correction of display undervoltage.
|
||||
#define ADC_CHANNEL ADC1_GPIO4_CHANNEL
|
||||
|
||||
// keyboard
|
||||
#define I2C_SDA 18 // I2C pins for this board
|
||||
#define I2C_SCL 8
|
||||
#define KB_POWERON 10 // must be set to HIGH
|
||||
#define KB_SLAVE_ADDRESS TDECK_KB_ADDR // 0x55
|
||||
#define KB_BL_PIN 46 // not used for now
|
||||
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
||||
|
||||
// trackball
|
||||
#define HAS_TRACKBALL 1
|
||||
#define TB_UP 3
|
||||
#define TB_DOWN 15
|
||||
#define TB_LEFT 1
|
||||
#define TB_RIGHT 2
|
||||
#define TB_PRESS BUTTON_PIN
|
||||
|
||||
// microphone
|
||||
#define ES7210_SCK 47
|
||||
#define ES7210_DIN 14
|
||||
#define ES7210_LRCK 21
|
||||
#define ES7210_MCLK 48
|
||||
|
||||
// dac / amp
|
||||
#define HAS_I2S
|
||||
#define DAC_I2S_BCK 7
|
||||
#define DAC_I2S_WS 5
|
||||
#define DAC_I2S_DOUT 6
|
||||
#define DAC_I2S_MCLK 21 // GPIO lrck mic
|
||||
|
||||
// LoRa
|
||||
#define USE_SX1262
|
||||
#define USE_SX1268
|
||||
|
||||
#define LORA_SCK 40
|
||||
#define LORA_MISO 38
|
||||
#define LORA_MOSI 41
|
||||
#define LORA_CS 9
|
||||
|
||||
#define LORA_DIO0 -1 // a No connect on the SX1262 module
|
||||
#define LORA_RESET 17
|
||||
#define LORA_DIO1 45 // SX1262 IRQ
|
||||
#define LORA_DIO2 13 // SX1262 BUSY
|
||||
#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
|
||||
|
||||
#define SX126X_CS LORA_CS // FIXME - we really should define LORA_CS instead
|
||||
#define SX126X_DIO1 LORA_DIO1
|
||||
#define SX126X_BUSY LORA_DIO2
|
||||
#define SX126X_RESET LORA_RESET
|
||||
// Not really an E22 but TTGO seems to be trying to clone that
|
||||
#define SX126X_DIO2_AS_RF_SWITCH
|
||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||
// Internally the TTGO module hooks the SX1262-DIO2 in to control the TX/RX switch (which is the default for the sx1262interface
|
||||
// code)
|
||||
lib_deps = ${esp32s3_base.lib_deps}
|
||||
lovyan03/LovyanGFX@^1.1.9
|
||||
earlephilhower/ESP8266Audio@^1.9.9
|
||||
earlephilhower/ESP8266SAM@^1.0.1
|
Loading…
Reference in New Issue
Block a user