/*
 *
 *    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 Domestic Hot Water Profile
 */

#ifndef WEAVE_PROFILES_NEST_DOMESTIC_HOT_WATER_CONSTANTS
#define WEAVE_PROFILES_NEST_DOMESTIC_HOT_WATER_CONSTANTS

namespace nl {

namespace Weave {

namespace Profiles {

namespace Vendor {

namespace Nestlabs {

namespace DomesticHotWater {

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

enum ProductionSource {
    UnknownSource    = 0,
    Electricity      = 1,
    NaturalGas       = 2,
    Propane          = 3,
    Solar            = 4,
    Geothermal       = 5,
    District         = 6,
    Boiler           = 7,
};

enum Type {
    UnknownType      = 0,
    Storage          = 1,
    Tank             = Storage,
    Tankless         = 2,
};

enum Locality {
    UnknownLocality  = 0,
    Centralized      = 1,
    PointOfUse       = 2
};


// Generic Domestic Hot Water tag space
//
//                                  Tag        Tag               Element
//                                  Number     Category          Type        Constraints        Disposition  Readability  Writability  OT
//                                  -----------------------------------------------------------------------------------------------------

enum {
    kTag_EquipmentInterface       = 0x0001, // Profile-specific  UINT32      EquipmentInterface Mandatory    Any          -
    kTag_ProductionSource         = 0x0002, // Profile-specific  UINT32      ProductionSource   Mandatory    Any          -

    //Turn on/off, Specify setpoint
    kTag_Enable                   = 0x0003, // Profile-specific  Bool        -                  Optional     Any          Any          W=0.HB.1,R=0.LB.2
    kTag_Setpoint                 = 0x0004, // Profile-specific  UINT32      0 to 1000 0.1degC  Mandatory    -            Any          56
    kTag_MinSetpoint              = 0x0005, // Profile-specific  INT32       0 to 1000 0.1degC  Optional     -            Any          48.LB
    kTag_MaxSetpoint              = 0x0006, // Profile-specific  INT32       0 to 1000 0.1degC  Optional     -            Any          48.HB

    kTag_Type                     = 0x0007, // Profile-specific  UINT32      Type               Optional     Any          -            3.3
    kTag_Locality                 = 0x0008, // Profile-specific  UINT32      Locality           Optional     Any          -

    kTag_ManualModeSetpoint       = 0x0009, // Profile-specific  UINT32      0 to 1000 0.1degC  Optional     -            Any
};


// Domestic Hot Water OpenTherm (OT) specific tag space (0x10001 - 0x1FFFF)
//
//                                   Tag        Tag               Element
//                                   Number     Category          Type        Constraints        Disposition  Readability  Writability
//                                   -----------------------------------------------------------------------------------------------

//enum {
//};


// Domestic Hot Water sensor tag space (0x20001 - 0x2FFFF)
//
//                                   Tag         Tag               Element
//                                   Number      Category          Type        Constraints        Disposition  Readability  Writability  OT
//                                   ------------------------------------------------------------------------------------------------------

enum {
    kTag_Sensor_WaterTemperature   = 0x20001, // Profile-specific  UINT32      0 to 1000 0.1degC  Optional     Any          -            26
    kTag_Sensor_WaterFlowRate      = 0x20002, // Profile-specific  UINT32      0 to 1000 0.1L/min Optional     Any          -            19
};


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

enum {
    kTag_Counter_NumPumpStarts          = 0x30001, // Profile-specific  UINT32     -            Optional     Any          Any          118
    kTag_Counter_NumBurnerStarts        = 0x30002, // Profile-specific  UINT32     -            Optional     Any          Any          119
    kTag_Counter_PumpOperationHours     = 0x30003, // Profile-specific  UINT32     -            Optional     Any          Any          122
    kTag_Counter_BurnerOperationHours   = 0x30004, // Profile-specific  UINT32     -            Optional     Any          Any          123
};


// Domestic Hot Water status codes
enum {
    kStatus_DomesticHotWaterEnableFailed  =     0x0001,     // Error enabling Domestic Hot Water
    kStatus_DomesticHotWaterDisableFailed =     0x0002,     // Error enabling Domestic Hot Water
    kStatus_DomesticHotWaterWriteFailed   =     0x0003,     // Error enabling or disabling DHW due to write error
    kStatus_CannotSetSetpoint             =     0x0004,     // Setpoint cannot be set
};


}; // namespace DomesticHotWater

}; // namespace Nestlabs

}; // namespace Vendor

}; // namespace Profiles

}; // namespace Weave

}; // namespace nl

#endif // WEAVE_PROFILES_NEST_DOMESTIC_HOT_WATER_CONSTANTS
