e79223c87e
- Introduced configuration macros for OEM manufacturer ID, application number, and application version in knxprod.h. - Updated product identity definitions to use the new configuration macros. - Modified device type enumeration to include additional device types. - Adjusted color space enumeration values for consistency. - Defined generated group object layout constants for memory offsets and block sizes. - Enhanced knx_dali_gw.cpp to utilize the new configuration macros for manufacturer ID and program version. - Updated the device initialization logic to reflect the new hardware and program version structures. - Removed obsolete knx_dali_gw subproject and updated related submodules. Signed-off-by: Tony <tonylu@tony-cloud.com>
93 lines
3.8 KiB
C++
93 lines
3.8 KiB
C++
#pragma once
|
|
|
|
#include "esp_idf_platform.h"
|
|
#include "ets_memory_loader.h"
|
|
|
|
#include "knx/bau07B0.h"
|
|
#include "knx/cemi_frame.h"
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace gateway::openknx {
|
|
|
|
class TpuartUartInterface;
|
|
|
|
class EtsDeviceRuntime {
|
|
public:
|
|
using CemiFrameSender = std::function<void(const uint8_t* data, size_t len)>;
|
|
using GroupWriteHandler = std::function<void(uint16_t group_address, const uint8_t* data,
|
|
size_t len)>;
|
|
using FunctionPropertyHandler = std::function<bool(uint8_t object_index, uint8_t property_id,
|
|
const uint8_t* data, size_t len,
|
|
std::vector<uint8_t>* response)>;
|
|
|
|
EtsDeviceRuntime(std::string nvs_namespace,
|
|
uint16_t fallback_individual_address,
|
|
uint16_t tunnel_client_address = 0,
|
|
std::unique_ptr<TpuartUartInterface> tp_uart_interface = nullptr);
|
|
~EtsDeviceRuntime();
|
|
|
|
uint16_t individualAddress() const;
|
|
uint16_t tunnelClientAddress() const;
|
|
bool configured() const;
|
|
bool programmingMode() const;
|
|
void setProgrammingMode(bool enabled);
|
|
void toggleProgrammingMode();
|
|
EtsMemorySnapshot snapshot() const;
|
|
|
|
// Accessors for OpenKNX integration (DIB construction, IP parameter object).
|
|
DeviceObject& deviceObject();
|
|
Platform& platform();
|
|
|
|
void setFunctionPropertyHandlers(FunctionPropertyHandler command_handler,
|
|
FunctionPropertyHandler state_handler);
|
|
void setGroupWriteHandler(GroupWriteHandler handler);
|
|
void setBusFrameSender(CemiFrameSender sender);
|
|
void setNetworkInterface(esp_netif_t* netif);
|
|
bool hasTpUart() const;
|
|
bool enableTpUart(bool enabled = true);
|
|
bool tpUartOnline() const;
|
|
bool transmitTpFrame(const uint8_t* data, size_t len);
|
|
|
|
bool handleTunnelFrame(const uint8_t* data, size_t len, CemiFrameSender sender);
|
|
bool handleBusFrame(const uint8_t* data, size_t len);
|
|
bool emitGroupValue(uint16_t group_object_number, const uint8_t* data, size_t len,
|
|
CemiFrameSender sender);
|
|
void loop();
|
|
|
|
private:
|
|
static bool HandleOutboundCemiFrame(CemiFrame& frame, void* context);
|
|
static void EmitTunnelFrame(CemiFrame& frame, void* context);
|
|
static void HandleSecureGroupWrite(uint16_t group_address, const uint8_t* data,
|
|
uint8_t data_length, void* context);
|
|
static bool HandleFunctionPropertyCommand(uint8_t object_index, uint8_t property_id,
|
|
uint8_t length, uint8_t* data,
|
|
uint8_t* result_data, uint8_t& result_length);
|
|
static bool HandleFunctionPropertyState(uint8_t object_index, uint8_t property_id,
|
|
uint8_t length, uint8_t* data,
|
|
uint8_t* result_data, uint8_t& result_length);
|
|
static uint16_t DefaultTunnelClientAddress(uint16_t individual_address);
|
|
static bool DispatchFunctionProperty(FunctionPropertyHandler* handler, uint8_t object_index,
|
|
uint8_t property_id, uint8_t length, uint8_t* data,
|
|
uint8_t* result_data, uint8_t& result_length);
|
|
bool shouldConsumeTunnelFrame(CemiFrame& frame) const;
|
|
bool shouldConsumeBusFrame(CemiFrame& frame) const;
|
|
|
|
std::string nvs_namespace_;
|
|
std::unique_ptr<TpuartUartInterface> tp_uart_interface_;
|
|
EspIdfPlatform platform_;
|
|
Bau07B0 device_;
|
|
CemiFrameSender sender_;
|
|
CemiFrameSender bus_frame_sender_;
|
|
GroupWriteHandler group_write_handler_;
|
|
FunctionPropertyHandler command_handler_;
|
|
FunctionPropertyHandler state_handler_;
|
|
};
|
|
|
|
} // namespace gateway::openknx
|