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 {
char *id;
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 {
HAPCHAR( Active, B0 );
HAPCHAR( CarbonDioxideDetected, XX );
HAPCHAR( ChargingState, XX );
HAPCHAR( CurrentAirPurifierState, XX );
HAPCHAR( AirQuality, 95 );
HAPCHAR( BatteryLevel, XX );
HAPCHAR( Brightness, 8 );
HAPCHAR( ColorTemperature, CE );
HAPCHAR( CurrentDoorState, E );
HAPCHAR( CurrentPosition, 6D );
HAPCHAR( CurrentTemperature, 11 );
HAPCHAR( FirmwareRevision, 52 );
HAPCHAR( HardwareRevision, 53 );
HAPCHAR( HoldPosition, 6F );
HAPCHAR( Hue, 13 );
HAPCHAR( Identify, 14 );
HAPCHAR( LockPhysicalControls, );
HAPCHAR( Manufacturer, 20 );
HAPCHAR( Model, 21 );
HAPCHAR( Name, 23 );
HAPCHAR( NitrogenDioxideDensity, C4 );
HAPCHAR( ObstructionDetected, 24 );
HAPCHAR( On, 25 );
HAPCHAR( OutletInUse, 26 );
HAPCHAR( OzoneDensity, C3 );
HAPCHAR( PM10Density, C7 );
HAPCHAR( PM25Density, C6 );
HAPCHAR( PositionState, 72 );
HAPCHAR( RotationDirection, 28 );
HAPCHAR( RotationSpeed, 29 );
HAPCHAR( Saturation , 2F );
HAPCHAR( SerialNumber, 30 );
HAPCHAR( SlatType, C0 );
HAPCHAR( SmokeDetected, 76 );
HAPCHAR( StatusActive, 75 );
HAPCHAR( StatusFault, 77 );
HAPCHAR( StatusJammed, 78 );
HAPCHAR( StatusLowBattery, 79 );
HAPCHAR( StatusTampered, 7A );
HAPCHAR( SulphurDioxideDensity, C5 );
HAPCHAR( SwingMode, B6 );
HAPCHAR( TargetAirPurifierState, XX );
HAPCHAR( TargetDoorState, 32 );
HAPCHAR( TargetPosition, 7C );
HAPCHAR( TemperatureDisplayUnits, 36 );
HAPCHAR( Version, 37 );
HAPCHAR( VOCDensity, C8 );
HAPCHAR( Active, B0, PW+PR+EV );
HAPCHAR( AirQuality, 95, PR+EV );
HAPCHAR( BatteryLevel, 68, PR+EV );
HAPCHAR( Brightness, 8, PR+PW+EV );
HAPCHAR( CarbonMonoxideLevel, 90, PR+EV );
HAPCHAR( CarbonMonoxidePeakLevel, 91, PR+EV );
HAPCHAR( CarbonDioxideDetected, 92, PR+EV );
HAPCHAR( CarbonDioxideLevel, 93, PR+EV );
HAPCHAR( CarbonDioxidePeakLevel, 94, PR+EV );
HAPCHAR( CarbonMonoxideDetected, 69, PR+EV );
HAPCHAR( ChargingState, 8F, PR+EV );
HAPCHAR( CoolingThresholdTemperature, D, PR+PW+EV );
HAPCHAR( ColorTemperature, CE, PR+PW+EV );
HAPCHAR( ContactSensorState, 6A, PR+EV );
HAPCHAR( CurrentAmbientLightLevel, 6B, PR+EV );
HAPCHAR( CurrentHorizontalTiltAngle, 6C, PR+EV );
HAPCHAR( CurrentAirPurifierState, A9, PR+EV );
HAPCHAR( CurrentSlatState, AA, PR+EV );
HAPCHAR( CurrentPosition, 6D, PR+EV );
HAPCHAR( CurrentVerticalTiltAngle, 6E, PR+EV );
HAPCHAR( CurrentHumidifierDehumidifierState, B3, PR+EV );
HAPCHAR( CurrentDoorState, E, PR+EV );
HAPCHAR( CurrentFanState, AF, PR+EV );
HAPCHAR( CurrentHeatingCoolingState, F, PR+EV );
HAPCHAR( CurrentHeaterCoolerState, B1, PR+EV );
HAPCHAR( CurrentRelativeHumidity, 10, PR+EV );
HAPCHAR( CurrentTemperature, 11, PR+EV );
HAPCHAR( CurrentTiltAngle, C1, PR+EV );
HAPCHAR( FilterLifeLevel, AB, PR+EV );
HAPCHAR( FilterChangeIndication, AC, PR+EV );
HAPCHAR( FirmwareRevision, 52, PR );
HAPCHAR( HardwareRevision, 53, PR );
HAPCHAR( HeatingThresholdTemperature, 12, PR+PW+EV );
HAPCHAR( HoldPosition, 6F, PW );
HAPCHAR( Hue, 13, PR+PW+EV );
HAPCHAR( Identify, 14, PW );
HAPCHAR( InUse, D2, PR+EV );
HAPCHAR( IsConfigured, D6, PR+EV );
HAPCHAR( LeakDetected, 70, PR+EV );
HAPCHAR( LockCurrentState, 1D, PR+EV );
HAPCHAR( LockPhysicalControls, A7, PW+PR+EV );
HAPCHAR( LockTargetState, 1E, PW+PR+EV );
HAPCHAR( Manufacturer, 20, PR );
HAPCHAR( Model, 21, PR );
HAPCHAR( MotionDetected, 22, PR+EV );
HAPCHAR( Name, 23, PR );
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(const char *type, const char *hapName, char *requiredChars, char *optionalChars){
SpanService::SpanService(const char *type, const char *hapName){
this->type=type;
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 *> opt; // vector of pointers to all optional HAP Characteristic Types for this Service
SpanService(const char *type, const char *hapName,
char *requiredChars="", char *optionalChars="");
SpanService(const char *type, const char *hapName);
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

View File

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