this change adds support for a second Victron MPPT charge controller using a second serial connection. * Add device configuration for a second victron mppt * Update VedirectView for second victron mppt * Update MqttHandleVedirect for second victron mppt * Update MqttHandleVedirectHass for second victron mppt * Handle nonexisting victron controllers with optionals * Add bool-function to Battery and inherited classes, if uart port 2 is being used * Introduced a serial port manager. In order to prevent the battery and the Victron MPPT to use the same hw serial ports, this class keeps track of the used ports and their owners.
78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
#include <frozen/string.h>
|
|
|
|
#include "Battery.h"
|
|
#include "JkBmsSerialMessage.h"
|
|
|
|
class DataPointContainer;
|
|
|
|
namespace JkBms {
|
|
|
|
class Controller : public BatteryProvider {
|
|
public:
|
|
Controller() = default;
|
|
|
|
bool init(bool verboseLogging) final;
|
|
void deinit() final;
|
|
void loop() final;
|
|
std::shared_ptr<BatteryStats> getStats() const final { return _stats; }
|
|
bool usesHwPort2() override;
|
|
|
|
private:
|
|
enum class Status : unsigned {
|
|
Initializing,
|
|
Timeout,
|
|
WaitingForPollInterval,
|
|
HwSerialNotAvailableForWrite,
|
|
BusyReading,
|
|
RequestSent,
|
|
FrameCompleted
|
|
};
|
|
|
|
frozen::string const& getStatusText(Status status);
|
|
void announceStatus(Status status);
|
|
void sendRequest(uint8_t pollInterval);
|
|
void rxData(uint8_t inbyte);
|
|
void reset();
|
|
void frameComplete();
|
|
void processDataPoints(DataPointContainer const& dataPoints);
|
|
|
|
enum class Interface : unsigned {
|
|
Invalid,
|
|
Uart,
|
|
Transceiver
|
|
};
|
|
|
|
Interface getInterface() const;
|
|
|
|
enum class ReadState : unsigned {
|
|
Idle,
|
|
WaitingForFrameStart,
|
|
FrameStartReceived,
|
|
StartMarkerReceived,
|
|
FrameLengthMsbReceived,
|
|
ReadingFrame
|
|
};
|
|
ReadState _readState;
|
|
void setReadState(ReadState state) {
|
|
_readState = state;
|
|
}
|
|
|
|
bool _verboseLogging = true;
|
|
int8_t _rxEnablePin = -1;
|
|
int8_t _txEnablePin = -1;
|
|
Status _lastStatus = Status::Initializing;
|
|
uint32_t _lastStatusPrinted = 0;
|
|
uint32_t _lastRequest = 0;
|
|
uint16_t _frameLength = 0;
|
|
uint8_t _protocolVersion = -1;
|
|
SerialResponse::tData _buffer = {};
|
|
std::shared_ptr<JkBmsBatteryStats> _stats =
|
|
std::make_shared<JkBmsBatteryStats>();
|
|
};
|
|
|
|
} /* namespace JkBms */
|