/*
 *
 *    Copyright (c) 2013-2014 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 tags used in the Amber-specific Nest Labs
 *      Heat Link profile.
 */

#ifndef WEAVE_PROFILES_HEAT_LINK_TAGS_HPP
#define WEAVE_PROFILES_HEAT_LINK_TAGS_HPP

namespace nl {
namespace Weave {
namespace Profiles {
namespace Vendor {
namespace Nestlabs {
namespace HeatLink {

// Heat Link Tags
//
//                                   Value     Tag Type          Element Type  Disposition  Description
//                                 -----------------------------------------------------------------------------------------------------
enum
{
    // top-level tags

    kTag_HeatLinkSwitchState       = 0x101, // Profile-Specific  Structure     Required     the whole set of switch states
    kTag_HeatLinkManualMode        = 0x102, // Profile-Specific  Boolean       Optional     the status of the manual override on the HL box
    kTag_HeatLinkTimeout           = 0x103, // Profile-Specific  Integer       Optional     the deadman timer for the current state
    kTag_HeatLinkCurrentSense      = 0x104, // Profile-Specific  Integer       Optional     current sense for heatlink2
    kTag_HeatLinkDataTimeStamp     = 0x105, // Profile-Specific  Integer       Optional     timestamp of collected stats/diag data

    // deprecated tags from previous version of protocol

    kTag_HeatLinkStageOneHeat_d    = 0x01,  // Profile-Specific  Boolean       Required     (true == 'on')
    kTag_HeatLinkTimeout_d         = 0x02,  // Profile-Specific  Integer       Optional     the deadman timer for the current state

    // nested switch state tags (true == 'on')

    kTag_Fan                       = 0x11,  // Context           Boolean       Required
    kTag_FanCool                   = 0x12,  // Context           Boolean       Required
    kTag_StageOneCool              = 0x13,  // Context           Boolean       Required
    kTag_StageTwoCool              = 0x14,  // Context           Boolean       Required
    kTag_StageOneHeat              = 0x15,  // Context           Boolean       Required
    kTag_StageTwoHeat              = 0x16,  // Context           Boolean       Required
    kTag_StageThreeHeat            = 0x17,  // Context           Boolean       Required
    kTag_StageOneAlternateHeat     = 0x18,  // Context           Boolean       Required
    kTag_StageTwoAlternateHeat     = 0x19,  // Context           Boolean       Required
    kTag_AuxiliaryHeat             = 0x1a,  // Context           Boolean       Required
    kTag_EmergencyHeat             = 0x1b,  // Context           Boolean       Required
    kTag_OB                        = 0x1c,  // Context           Boolean       Required
    kTag_Humidifier                = 0x1d,  // Context           Boolean       Required
    kTag_Dehumidifier              = 0x1e,  // Context           Boolean       Required
    kTag_AutoDehum                 = 0x1f   // Context           Boolean       Required
};

}; // namespace HeatLink
}; // namespace Nestlabs
}; // namespace Vendor
}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

#endif // WEAVE_PROFILES_HEAT_LINK_TAGS_HPP
