Completed adding all characteristic types to HAPCharList

This commit is contained in:
Gregg 2020-10-25 21:29:47 -05:00
parent 1d8bdc1202
commit 5838768f38
4 changed files with 114 additions and 56 deletions

View File

@ -66,60 +66,119 @@ enum class StatusCode {
struct HapCharType { struct HapCharType {
char *id; char *id;
char *name; char *name;
uint8_t perms;
}; };
/////////////////////////////// ///////////////////////////////
#define HAPCHAR(name,id) HapCharType name {#id,#name} #define HAPCHAR(name,id,perms) HapCharType name {#id,#name,perms}
enum { // create bitflags based on HAP Table 6-4
PR=1,
PW=2,
EV=4,
AA=8,
TW=16,
HD=32,
WR=64
};
struct HapCharList { struct HapCharList {
HAPCHAR( Active, B0 ); HAPCHAR( Active, B0, PW+PR+EV );
HAPCHAR( CarbonDioxideDetected, XX ); HAPCHAR( AirQuality, 95, PR+EV );
HAPCHAR( ChargingState, XX ); HAPCHAR( BatteryLevel, 68, PR+EV );
HAPCHAR( CurrentAirPurifierState, XX ); HAPCHAR( Brightness, 8, PR+PW+EV );
HAPCHAR( AirQuality, 95 ); HAPCHAR( CarbonMonoxideLevel, 90, PR+EV );
HAPCHAR( BatteryLevel, XX ); HAPCHAR( CarbonMonoxidePeakLevel, 91, PR+EV );
HAPCHAR( Brightness, 8 ); HAPCHAR( CarbonDioxideDetected, 92, PR+EV );
HAPCHAR( ColorTemperature, CE ); HAPCHAR( CarbonDioxideLevel, 93, PR+EV );
HAPCHAR( CurrentDoorState, E ); HAPCHAR( CarbonDioxidePeakLevel, 94, PR+EV );
HAPCHAR( CurrentPosition, 6D ); HAPCHAR( CarbonMonoxideDetected, 69, PR+EV );
HAPCHAR( CurrentTemperature, 11 ); HAPCHAR( ChargingState, 8F, PR+EV );
HAPCHAR( FirmwareRevision, 52 ); HAPCHAR( CoolingThresholdTemperature, D, PR+PW+EV );
HAPCHAR( HardwareRevision, 53 ); HAPCHAR( ColorTemperature, CE, PR+PW+EV );
HAPCHAR( HoldPosition, 6F ); HAPCHAR( ContactSensorState, 6A, PR+EV );
HAPCHAR( Hue, 13 ); HAPCHAR( CurrentAmbientLightLevel, 6B, PR+EV );
HAPCHAR( Identify, 14 ); HAPCHAR( CurrentHorizontalTiltAngle, 6C, PR+EV );
HAPCHAR( LockPhysicalControls, ); HAPCHAR( CurrentAirPurifierState, A9, PR+EV );
HAPCHAR( Manufacturer, 20 ); HAPCHAR( CurrentSlatState, AA, PR+EV );
HAPCHAR( Model, 21 ); HAPCHAR( CurrentPosition, 6D, PR+EV );
HAPCHAR( Name, 23 ); HAPCHAR( CurrentVerticalTiltAngle, 6E, PR+EV );
HAPCHAR( NitrogenDioxideDensity, C4 ); HAPCHAR( CurrentHumidifierDehumidifierState, B3, PR+EV );
HAPCHAR( ObstructionDetected, 24 ); HAPCHAR( CurrentDoorState, E, PR+EV );
HAPCHAR( On, 25 ); HAPCHAR( CurrentFanState, AF, PR+EV );
HAPCHAR( OutletInUse, 26 ); HAPCHAR( CurrentHeatingCoolingState, F, PR+EV );
HAPCHAR( OzoneDensity, C3 ); HAPCHAR( CurrentHeaterCoolerState, B1, PR+EV );
HAPCHAR( PM10Density, C7 ); HAPCHAR( CurrentRelativeHumidity, 10, PR+EV );
HAPCHAR( PM25Density, C6 ); HAPCHAR( CurrentTemperature, 11, PR+EV );
HAPCHAR( PositionState, 72 ); HAPCHAR( CurrentTiltAngle, C1, PR+EV );
HAPCHAR( RotationDirection, 28 ); HAPCHAR( FilterLifeLevel, AB, PR+EV );
HAPCHAR( RotationSpeed, 29 ); HAPCHAR( FilterChangeIndication, AC, PR+EV );
HAPCHAR( Saturation , 2F ); HAPCHAR( FirmwareRevision, 52, PR );
HAPCHAR( SerialNumber, 30 ); HAPCHAR( HardwareRevision, 53, PR );
HAPCHAR( SlatType, C0 ); HAPCHAR( HeatingThresholdTemperature, 12, PR+PW+EV );
HAPCHAR( SmokeDetected, 76 ); HAPCHAR( HoldPosition, 6F, PW );
HAPCHAR( StatusActive, 75 ); HAPCHAR( Hue, 13, PR+PW+EV );
HAPCHAR( StatusFault, 77 ); HAPCHAR( Identify, 14, PW );
HAPCHAR( StatusJammed, 78 ); HAPCHAR( InUse, D2, PR+EV );
HAPCHAR( StatusLowBattery, 79 ); HAPCHAR( IsConfigured, D6, PR+EV );
HAPCHAR( StatusTampered, 7A ); HAPCHAR( LeakDetected, 70, PR+EV );
HAPCHAR( SulphurDioxideDensity, C5 ); HAPCHAR( LockCurrentState, 1D, PR+EV );
HAPCHAR( SwingMode, B6 ); HAPCHAR( LockPhysicalControls, A7, PW+PR+EV );
HAPCHAR( TargetAirPurifierState, XX ); HAPCHAR( LockTargetState, 1E, PW+PR+EV );
HAPCHAR( TargetDoorState, 32 ); HAPCHAR( Manufacturer, 20, PR );
HAPCHAR( TargetPosition, 7C ); HAPCHAR( Model, 21, PR );
HAPCHAR( TemperatureDisplayUnits, 36 ); HAPCHAR( MotionDetected, 22, PR+EV );
HAPCHAR( Version, 37 ); HAPCHAR( Name, 23, PR );
HAPCHAR( VOCDensity, C8 ); HAPCHAR( NitrogenDioxideDensity, C4, PR+EV );
HAPCHAR( ObstructionDetected, 24, PR+EV );
HAPCHAR( PM25Density, C6, PR+EV );
HAPCHAR( OccupancyDetected, 71, PR+EV );
HAPCHAR( OutletInUse, 26, PR+EV );
HAPCHAR( On, 25, PR+PW+EV );
HAPCHAR( OzoneDensity, C3, PR+EV );
HAPCHAR( PM10Density, C7, PR+EV );
HAPCHAR( PositionState, 72, PR+EV );
HAPCHAR( ProgramMode, D1, PR+EV );
HAPCHAR( ProgrammableSwitchEvent, 73, PR+EV );
HAPCHAR( RelativeHumidityDehumidifierThreshold, C9, PR+PW+EV );
HAPCHAR( RelativeHumidityHumidifierThreshold, CA, PR+PW+EV );
HAPCHAR( RemainingDuration, D4, PR+EV );
HAPCHAR( ResetFilterIndication, AD, PW );
HAPCHAR( RotationDirection, 28, PR+PW+EV );
HAPCHAR( RotationSpeed, 29, PR+PW+EV );
HAPCHAR( Saturation , 2F, PR+PW+EV );
HAPCHAR( SerialNumber, 30, PR );
HAPCHAR( ServiceLabelIndex, CB, PR );
HAPCHAR( ServiceLabelNamespace, CD, PR );
HAPCHAR( SlatType, C0, PR );
HAPCHAR( SmokeDetected, 76, PR+EV );
HAPCHAR( StatusActive, 75, PR+EV );
HAPCHAR( StatusFault, 77, PR+EV );
HAPCHAR( StatusJammed, 78, PR+EV );
HAPCHAR( StatusLowBattery, 79, PR+EV );
HAPCHAR( StatusTampered, 7A, PR+EV );
HAPCHAR( SulphurDioxideDensity, C5, PR+EV );
HAPCHAR( SwingMode, B6, PR+EV+PW );
HAPCHAR( TargetAirPurifierState, A8, PW+PR+EV );
HAPCHAR( TargetFanState, BF, PW+PR+EV );
HAPCHAR( TargetTiltAngle, C2, PW+PR+EV );
HAPCHAR( TargetHeaterCoolerState, ??, PW+PR+EV ); // HAP documentation error - no code provided - must look up elsewhere
HAPCHAR( SetDuration, D3, PW+PR+EV );
HAPCHAR( TargetHorizontalTiltAngle, 7B, PW+PR+EV );
HAPCHAR( TargetHumidifierDehumidifierState, B4, PW+PR+EV );
HAPCHAR( TargetPosition, 7C, PW+PR+EV );
HAPCHAR( TargetDoorState, 32, PW+PR+EV );
HAPCHAR( TargetHeatingCoolingState, 33, PW+PR+EV );
HAPCHAR( TargetRelativeHumidity, 34, PW+PR+EV );
HAPCHAR( TargetTemperature, 35, PW+PR+EV );
HAPCHAR( TemperatureDisplayUnits, 36, PW+PR+EV );
HAPCHAR( TargetVerticalTiltAngle, 7D, PW+PR+EV );
HAPCHAR( ValveType, D5, PR+EV );
HAPCHAR( Version, 37, PR );
HAPCHAR( VOCDensity, C8, PR+EV );
HAPCHAR( Volume, 119, PW+PR+EV );
HAPCHAR( WaterLevel, B5, PR+EV );
}; };

View File

@ -1034,7 +1034,7 @@ int SpanAccessory::sprintfAttributes(char *cBuf){
// SpanService // // SpanService //
/////////////////////////////// ///////////////////////////////
SpanService::SpanService(const char *type, const char *hapName, char *requiredChars, char *optionalChars){ SpanService::SpanService(const char *type, const char *hapName){
this->type=type; this->type=type;
this->hapName=hapName; this->hapName=hapName;

View File

@ -136,8 +136,7 @@ struct SpanService{
vector<HapCharType *> req; // vector of pointers to all required HAP Characteristic Types for this Service vector<HapCharType *> req; // vector of pointers to all required HAP Characteristic Types for this Service
vector<HapCharType *> opt; // vector of pointers to all optional HAP Characteristic Types for this Service vector<HapCharType *> opt; // vector of pointers to all optional HAP Characteristic Types for this Service
SpanService(const char *type, const char *hapName, SpanService(const char *type, const char *hapName);
char *requiredChars="", char *optionalChars="");
SpanService *setPrimary(); // sets the Service Type to be primary and returns pointer to self SpanService *setPrimary(); // sets the Service Type to be primary and returns pointer to self
SpanService *setHidden(); // sets the Service Type to be hidden and returns pointer to self SpanService *setHidden(); // sets the Service Type to be hidden and returns pointer to self

View File

@ -143,9 +143,9 @@ namespace Service {
OPT(RotationSpeed); OPT(RotationSpeed);
OPT(TemperatureDisplayUnits); OPT(TemperatureDisplayUnits);
OPT(SwingMode); OPT(SwingMode);
OPT(CoolingThesholdTemperature) OPT(CoolingThresholdTemperature);
OPT(HeatingThresholdTemperature); OPT(HeatingThresholdTemperature);
OPT(CHAR_LockPhysicalControls); OPT(LockPhysicalControls);
}}; }};
struct HumidifierDehumidifier : SpanService { HumidifierDehumidifier() : SpanService{"BD","HumidifierDehumidifier"}{ struct HumidifierDehumidifier : SpanService { HumidifierDehumidifier() : SpanService{"BD","HumidifierDehumidifier"}{
@ -155,7 +155,7 @@ namespace Service {
REQ(TargetHumidifierDehumidifierState); REQ(TargetHumidifierDehumidifierState);
OPT(Name); OPT(Name);
OPT(RelativeHumidityDehumidifierThreshold); OPT(RelativeHumidityDehumidifierThreshold);
OPT(RelativeHumidityHumnidifierThreshold); OPT(RelativeHumidityHumidifierThreshold);
OPT(RotationSpeed); OPT(RotationSpeed);
OPT(SwingMode); OPT(SwingMode);
OPT(WaterLevel); OPT(WaterLevel);
@ -275,7 +275,7 @@ namespace Service {
struct Thermostat : SpanService { Thermostat() : SpanService{"4A","Thermostat"}{ struct Thermostat : SpanService { Thermostat() : SpanService{"4A","Thermostat"}{
REQ(CurrentHeatingCoolingState); REQ(CurrentHeatingCoolingState);
REQ(TargetHeatingColingState); REQ(TargetHeatingCoolingState);
REQ(CurrentTemperature); REQ(CurrentTemperature);
REQ(TargetTemperature); REQ(TargetTemperature);
REQ(TemperatureDisplayUnits); REQ(TemperatureDisplayUnits);
@ -319,7 +319,7 @@ namespace Service {
OPT(TargetVerticalTiltAngle); OPT(TargetVerticalTiltAngle);
OPT(ObstructionDetected); OPT(ObstructionDetected);
}}; }};
} }
///////////////////////////////////////// /////////////////////////////////////////