/*
 *
 *    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 constants used in the Amber-specific
 *	Nest Labs Heat-Link profile.
 *
 */

#ifndef WEAVE_PROFILES_HEAT_LINK_CONSTANTS_HPP
#define WEAVE_PROFILES_HEAT_LINK_CONSTANTS_HPP

namespace nl {

namespace Weave {

namespace Profiles {

namespace Vendor {

namespace Nestlabs {

namespace HeatLink {

// miscellaneous constants

enum {
    kHeatLink_UnspecifiedTimeout =	0,    // we should never send this except to say "don't care"
    kHeatLink_DefaultTimeout =		300,  // in seconds
    kHeatLink_TopLevelPathLength = 	0,    // this is the path length for the whole "bucket"
    kHeatLink_MaxPathLength =		1,     // and, the paths should never get any longer than this
    kHeatLink_HeatOff =			0,
    kHeatLink_HeatOn =			1,
};

// heat link specific status codes

enum {
    kStatus_UpdateFailed = 		51,	// updated heat link state values could not be installed
    kStatus_ManualMode = 		52,	// could not update heat link state because the HL is in manual mode
};

}; // namespace HeatLink

}; // namespace Nestlabs

}; // namespace Vendor

}; // namespace Profiles

}; // namespace Weave

}; // namespace nl

#endif // WEAVE_PROFILES_HEAT_LINK_CONSTANTS_HPP
