/*
 *
 *    Copyright (c) 2015 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    This document is the property of Nest. It is considered
 *    confidential and proprietary information.
 *
 *    This document may not be reproduced or transmitted in any form,
 *    in whole or in part, without the express written permission of
 *    Nest.
 *
 */

/**
 *    @file
 *      This file defines constants used by the Nest HVAC Equipment Control Profile
 */

#ifndef WEAVE_PROFILES_NEST_HVAC_EQUIPMENT_CONTROL_CONSTANTS
#define WEAVE_PROFILES_NEST_HVAC_EQUIPMENT_CONTROL_CONSTANTS

namespace nl {

namespace Weave {

namespace Profiles {

namespace Vendor {

namespace Nestlabs {

namespace Hvac {

namespace EquipmentControl {

enum EquipmentInterface {
    UnknownEquipmentInterface = 0,
    Relay                     = 1,
    OpenTherm                 = 2,
};

enum HeatingProductionSource {
    UnknownHeatingSource    = 0,
    ElectricalHeating       = 1,
    NaturalGasHeating       = 2,
    GeothermalHeating       = 3,
    Boiler                  = 4,
};

enum CoolingProductionSource {
    UnknownCoolingSource    = 0,
    ElectricalCooling       = 1,
};

// Generic HVAC Equipment Control tag space
//
//                                    Tag        Tag               Element
//                                    Number     Category          Type        Constraints              Disposition  Readability  Writability  OT
//                                    ------------------------------------------------------------------------------------------------------

enum {
    kTag_EquipmentInterface         = 0x0001, // Profile-specific  UINT32      EquipmentInterface       Mandatory    Any          -
    kTag_HeatingProductionSource    = 0x0002, // Profile-specific  UINT32      HeatingProductionSource  Mandatory    Any          -
    kTag_CoolingProductionSource    = 0x0003, // Profile-specific  UINT32      CoolingProductionSource  Mandatory    Any          -

    //Turn on/off Central Heating
    kTag_CentralHeatingEnable       = 0x0004, // Profile-specific  Bool        -                        Mandatory    Any          Any          W=0.HB.0,R=0.LB.1

    //Turn on/off Central Heating 2
    kTag_CentralHeating2Capable     = 0x0005, // Profile-specific  Bool        -                        Optional     Any          -            3.5
    kTag_CentralHeating2Enable      = 0x0006, // Profile-specific  Bool        -                        Optional     Any          Any          W=0.HB.4,R=0.LB.5

    //Turn on/off Cooling
    kTag_CoolingCapable             = 0x0007, // Profile-specific  Bool        -                        Optional     Any          -            3.2
    kTag_CoolingEnable              = 0x0008, // Profile-specific  Bool        -                        Optional     Any          Any          W=0.HB.2,R=0.LB.4

    //Setpoints
    kTag_ControlSetpoint            = 0x0009, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any          1
    kTag_IndoorSetpoint             = 0x000A, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any          16
    kTag_MinCentralHeatingSetpoint  = 0x000B, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any          49.LB
    kTag_MaxCentralHeatingSetpoint  = 0x000C, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any          49.HB

    //Temperatures
    kTag_RoomTemperature            = 0x000D, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any          24
    kTag_OutdoorTemperature         = 0x000E, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     Any          Any          27

    //Is cool/heat switching done by thermostat?
    kTag_HeatCoolSwitchByThermostat = 0x000F, // Profile-specific  Bool        -                        Optional     Any          -            3.7

    kTag_ManualModeControlSetpoint  = 0x0010, // Profile-specific  INT32      -400 to 1270 0.1degC      Optional     -            Any
};


// HVAC Equipment Control OpenTherm (OT) specific tag space (0x10001 - 0x1FFFF)
//
//                                   Tag        Tag               Element
//                                   Number     Category          Type        Constraints        Disposition  Readability  Writability
//                                   -----------------------------------------------------------------------------------------------

//enum {
//};


// HVAC Equipment Control sensor tag space (0x20001 - 0x2FFFF)
//
//                                   Tag        Tag               Element
//                                   Number     Category          Type        Constraints        Disposition  Readability  Writability  OT
//                                   ------------------------------------------------------------------------------------------------------

enum {
    kTag_Sensor_WaterPressure      = 0x20001, // Profile-specific  UINT32     0.1 bar            Optional     Any                       18
};


// HVAC Equipment Control counters tag space (0x30001 - 0x3FFFF). Write 0 to clear
//
//                                              Tag        Tag               Element
//                                              Number     Category          Type       Constraints  Disposition  Readability  Writability  OT
//                                            ------------------------------------------------------------------------------------------------------

enum {
    kTag_Counter_NumCentralHeatingPumpStarts  = 0x30001, // Profile-specific  UINT32     -            Optional     Any          Any          117
    kTag_Counter_NumCentralHeatingPumpOpHours = 0x30002, // Profile-specific  UINT32     -            Optional     Any          Any          121
};


// HVAC Equipment Control status codes
enum {
    kStatus_OutdoorTemperatureUnavailable =     0x0001,     // Outdoor temp sensor unavailable. Thermostat must provide outdoor temp
    kStatus_CentralHeatingEnableFailed    =     0x0002,     // Error enabling Central Heating
    kStatus_CentralHeatingDisableFailed   =     0x0003,     // Error disabling Central Heating
    kStatus_CentralHeatingWriteFailed     =     0x0004,     // Error enabling or disabling CH due to write error
    kStatus_CannotSetControlSetpoint      =     0x0005,     // Control setpoint cannot be set
    kStatus_CannotSetIndoorSetpoint       =     0x0006,     // Indoor setpoint cannot be set
};


}; // namespace EquipmentConrol

}; // namespace Hvac

}; // namespace Nestlabs

}; // namespace Vendor

}; // namespace Profiles

}; // namespace Weave

}; // namespace nl

#endif // WEAVE_PROFILES_NEST_HVAC_EQUIPMENT_CONTROL_CONSTANTS
