Files
ratdeck/src/transport/TCPClientInterface.h
T
DeFiDude 9d81d05979 Performance and stability pass (v1.5.9)
- Tighten transport announce rate limit from 5/sec to 2/sec
- Reduce RNS loop frequency from 200Hz to 100Hz
- Throttle LVGL rendering to 30 FPS (was unthrottled)
- Time-box TCP frame loop to 3 frames / 8ms per client
- Add 12ms global TCP budget across all clients
- Replace blocking WiFi announce delay(1500) with deferred non-blocking check
- Rotate persistData() across 3 cycles to spread file I/O
- Reduce LvNodesScreen rebuild frequency (2s → 5s, skip small transient changes)
- Bump version to 1.5.9
2026-03-10 12:10:24 -06:00

53 lines
1.4 KiB
C++

#pragma once
#include <Interface.h>
#include <WiFi.h>
#include <WiFiClient.h>
class TCPClientInterface : public RNS::InterfaceImpl {
public:
TCPClientInterface(const char* host, uint16_t port, const char* name);
virtual ~TCPClientInterface();
bool start() override;
void stop() override;
void loop() override;
virtual inline std::string toString() const override {
return "TCPClient[" + _name + "]";
}
bool isConnected() { return _client.connected(); }
const String& host() const { return _host; }
uint16_t port() const { return _port; }
protected:
void send_outgoing(const RNS::Bytes& data) override;
private:
void tryConnect();
void sendFrame(const uint8_t* data, size_t len);
int readFrame();
WiFiClient _client;
String _host;
uint16_t _port;
unsigned long _lastAttempt = 0;
unsigned long _lastRxTime = 0;
uint8_t _rxBuffer[600];
// Persistent HDLC frame reassembly state (survives across loop() calls)
bool _inFrame = false;
bool _escaped = false;
size_t _rxPos = 0;
static constexpr uint8_t FRAME_START = 0x7E;
static constexpr uint8_t FRAME_ESC = 0x7D;
static constexpr uint8_t FRAME_XOR = 0x20;
static constexpr unsigned long TCP_KEEPALIVE_TIMEOUT_MS = 300000; // 5 min
static constexpr unsigned long TCP_LOOP_BUDGET_MS = 8;
public:
unsigned long lastRxTime() const { return _lastRxTime; }
};