diff --git a/include/arke.h b/include/arke.h index 40c9ad2..4647926 100644 --- a/include/arke.h +++ b/include/arke.h @@ -1,137 +1,138 @@ #pragma once #include "inttypes.h" #ifdef __cplusplus extern "C"{ #endif //__cplusplus typedef enum ArkeMessageType_e { ARKE_NETWORK_CONTROL_COMMAND = 0x00, ARKE_HIGH_PRIORITY_MESSAGE = 0x01, ARKE_MESSAGE = 0x02, ARKE_HEARTBEAT = 0x03, ARKE_MESSAGE_TYPE_MASK = 0x03 << 9 } ArkeMessageType; typedef enum ArkeNodeClass_e { ARKE_BROADCAST = 0x0, ARKE_ZEUS = 0x38, ARKE_HELIOS = 0x34, ARKE_CELAENO = 0x30, ARKE_NODE_CLASS_MASK = 0x3f << 3 } ArkeNodeClass; typedef enum ArkeNetworkCommand_e { ARKE_RESET_REQUEST = 0x00, ARKE_SYNCHRONISATION = 0x01, ARKE_HEARTBEAT_REQUEST = 0x07, ARKE_SUBID_MASK = 0x07 } ArkeNetworkCommand; //#define ARKE_SUBID_MASK ARKE_HEARTBEAT_REQUEST typedef enum ArkeMessageClass_e { ARKE_ZEUS_SET_POINT = 0x38, ARKE_ZEUS_REPORT = 0x39, ARKE_ZEUS_VIBRATION_REPORT = 0x40, ARKE_ZEUS_CONFIG = 0x41, ARKE_HELIOS_SET_POINT = 0x34, ARKE_CELAENO_SET_POINT = 0x30, ARKE_CELAENO_STATUS = 0x31, ARKE_CELAENO_CONFIG = 0x32 } ArkeMessageClass; struct ArkeZeusSetPoint_t { uint16_t Humidity; uint16_t Temperature; + uint8_t Wind; } __attribute__((packed)); typedef struct ArkeZeusSetPoint_t ArkeZeusSetPoint; void ArkeZeusSetTargetHumidity(ArkeZeusSetPoint * sp); void ArkeZeusSetTargetTemperature(ArkeZeusSetPoint * sp); struct ArkeZeusReport_t { uint16_t Humidity:14; uint16_t Temperature1:14; uint16_t Temperature2:12; uint16_t Temperature3:12; uint16_t Temperature4:12; } __attribute__((packed)); typedef struct ArkeZeusReport_t ArkeZeusReport; float ArkeZeusGetHumidity(const ArkeZeusReport * r); float ArkeZeusGetTemperature1(const ArkeZeusReport * r); float ArkeZeusGetTemperature2(const ArkeZeusReport * r); float ArkeZeusGetTemperature3(const ArkeZeusReport * r); float ArkeZeusGetTemperature4(const ArkeZeusReport * r); struct ArkePDConfig_t { uint8_t DeadRegion; uint8_t ProportionalMult; uint8_t DerivativeMult; uint8_t ProportionalDivPower2:4; uint8_t DerivativeDivPower2:4; } __attribute__((packed)); typedef struct ArkePDConfig_t ArkePDConfig; struct ArkeZeusConfig_t { ArkePDConfig Humidity; ArkePDConfig Temperature; } __attribute__((packed)); typedef struct ArkeZeusConfig_t ArkeZeusConfig; struct ArkeHeliosSetPoint_t { uint8_t Visible; uint8_t UV; } __attribute__((packed)); typedef struct ArkeHeliosSetPoint_t ArkeHeliosSetPoint; struct ArkeCelaenoSetPoint_t { uint8_t Power; } __attribute__((packed)); typedef struct ArkeCelaenoSetPoint_t ArkeCelaenoSetPoint; struct ArkeCelaenoStatus_t { uint8_t waterLevel; uint16_t fanStatus; } __attribute__((packed)); typedef struct ArkeCelaenoStatus_t ArkeCelaenoStatus; typedef enum ArkeCelaenoWaterLevel_e { ARKE_CELAENO_NOMINAL = 0, ARKE_CELAENO_WARNING = (1 << 0), ARKE_CELAENO_CRITICAL = (1 << 1), ARKE_CELAENO_RO_ERROR = (1 << 2) } ArkeCelaenoWaterLevel; #define ARKE_CELAENO_FAN_AGING_ALERT (0x4000) #define ARKE_CELAENO_FAN_STALL_ALERT (0x8000) #define ARKE_CELAENO_FAN_RPM_MASK (0x1fff) #define ArkeCelaenoFanAging(status) (((status).fanStatus & ARKE_CELAENO_FAN_AGING_ALERT) != 0x0000) #define ArkeCelaenoFanStall(status) (((status).fanStatus & ARKE_CELAENO_FAN_STALL_ALERT) != 0x0000) #define ArkeCelaenoFanRPM(status) ( (status).fanStatus & ARKE_CELAENO_FAN_RPM_MASK ) struct ArkeCelaenoConfig_t { uint16_t RampUpTimeMS; uint16_t RampDownTimeMS; uint16_t MinOnTimeMS; uint16_t DebounceTimeMS; } __attribute__((packed)); typedef struct ArkeCelaenoConfig_t ArkeCelaenoConfig; #ifdef __cplusplus } #endif //__cplusplus