diff --git a/src/HAPConstants.h b/src/HAPConstants.h index c3b1a20..cfe8ff7 100644 --- a/src/HAPConstants.h +++ b/src/HAPConstants.h @@ -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 ); }; diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 7d1fed2..cb95b83 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -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; diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 6618b42..5acf320 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -136,8 +136,7 @@ struct SpanService{ vector req; // vector of pointers to all required HAP Characteristic Types for this Service vector 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 diff --git a/src/Services.h b/src/Services.h index 77b811b..d9c705d 100644 --- a/src/Services.h +++ b/src/Services.h @@ -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); }}; - + } /////////////////////////////////////////