hoymilesClient/inc/hoymiles/sunspecParameters/sunspecParametersGeneric.h

124 lines
3.3 KiB
C
Raw Permalink Normal View History

2024-03-29 21:40:50 +01:00
#ifndef SUNSPEC_PARAMETERS_GENERIC_H
#define SUNSPEC_PARAMETERS_GENERIC_H
#include <stdint.h>
#include <string>
class SunspecParameter {
protected:
std::string name;
int registerAddressOffset;
int registerSize;
public:
SunspecParameter(std::string name, int registerAddressOffset, int registerSize);
virtual ~SunspecParameter();
enum SunspecValueType { uint32, uint16, string32, string16, sunssf, int16, acc32, float32, enum16 };
union SunspecValue {
uint32_t u32;
uint16_t u16;
uint16_t ssf;
int i16;
uint16_t a32;
float f;
uint16_t e16;
};
protected:
SunspecValueType valueType;
SunspecValue value;
public:
2024-04-06 00:32:49 +02:00
virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
std::pair<SunspecValue, SunspecValueType> getValue();
};
// class SunspecParameterUint32 : public SunspecParameter {
// protected:
// public:
// SunspecParameterUint32(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterUint16 : public SunspecParameter {
// protected:
// public:
// SunspecParameterUint16(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
class SunspecParameterString32 : public SunspecParameter {
protected:
std::string value;
public:
SunspecParameterString32(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
};
// class SunspecParameterString16 : public SunspecParameter {
// protected:
// std::string value;
// public:
// SunspecParameterString16(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterSunssf : public SunspecParameter {
// protected:
// public:
// SunspecParameterSunssf(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterInt16 : public SunspecParameter {
// protected:
// public:
// SunspecParameterInt16(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterAcc32 : public SunspecParameter {
// protected:
// public:
// SunspecParameterAcc32(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterFloat32 : public SunspecParameter {
// protected:
// public:
// SunspecParameterFloat32(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
// class SunspecParameterEnum16 : public SunspecParameter {
// protected:
// public:
// SunspecParameterEnum16(std::string name, int registerAddressOffset, int registerSize);
2024-04-06 00:32:49 +02:00
// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset);
2024-03-29 21:40:50 +01:00
// };
#endif