/*
 *
 *    Copyright (c) 2013 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 Nest Labs Time-variant
 *      Data Profile.
 *
 */

#ifndef WEAVE_PROFILES_TIME_VARIANT_DATA_CONSTANTS_HPP
#define WEAVE_PROFILES_TIME_VARIANT_DATA_CONSTANTS_HPP

namespace nl {

namespace Weave {

namespace Profiles {

namespace TimeVariantData {

#define knlWeaveNestProfilesTimeVariantData 0x235A0004

// Stream Descriptor Measurement Type

enum {
    kType_None                      = 0x0000,
    kType_Length                    = 0x0001,
    kType_Mass                      = 0x0002,
    kType_Time                      = 0x0003,
    kType_Current                   = 0x0004,
    kType_Temperature               = 0x0005,
    kType_Luminous_Intensity        = 0x0006,
    kType_Area                      = 0x0007,
    kType_Volume                    = 0x0008,
    kType_Velocity                  = 0x0009,
    kType_Acceleration              = 0x000A,
    kType_Density                   = 0x000B,
    kType_Current_Density           = 0x000C,
    kType_Magnetic_Field_Strength   = 0x000D,
    kType_Luminance                 = 0x000E,
    kType_Mass_Concentration        = 0x000F,
    kType_Molar_Concentration       = 0x0010,
    kType_Number_Concentration      = 0x0011,
    kType_Volume_Concentration      = 0x0012,
    kType_Normality                 = 0x0013,
    kType_Molality                  = 0x0014,
    kType_Mole_Fraction             = 0x0015,
    kType_Mole_Ratio                = 0x0016,
    kType_Mass_Fraction             = 0x0017,
    kType_Mass_Ratio                = 0x0018,
    kType_Plane_Angle               = 0x0019,
    kType_Solid_Angle               = 0x001A,
    kType_Frequency                 = 0x001B,
    kType_Force                     = 0x001C,
    kType_Pressure                  = 0x001D,
    kType_Energy                    = 0x001E,
    kType_Power                     = 0x001F,
    kType_Electric_Charge           = 0x0020,
    kType_Electric_Potential        = 0x0021,
    kType_Capacitance               = 0x0022,
    kType_Electric_Resistance       = 0x0023,
    kType_Electric_Conductance      = 0x0024,
    kType_Magnetic_Flux             = 0x0025,
    kType_Magnetic_Flux_Density     = 0x0026,
    kType_Inductance                = 0x0028,
    kType_Luminous_Flux             = 0x0029,
    kType_Illuminance               = 0x002A,
    kType_Radioactivity             = 0x002B,
    kType_Depth                     = 0x002C,
    kType_Height                    = 0x002D,
    kType_Humidity                  = 0x002E,
    kType_Distance                  = 0x002F,
    kType_Opacity                   = 0x0030,
    kType_Attenuation               = 0x0031
};

// Stream Descriptor Operation

enum {
    kOperation_None                 = 0x0000,
    kOperation_Minimum              = 0x0001,
    kOperation_Maximum              = 0x0002,
    kOperation_Mean                 = 0x0003,
    kOperation_Mode                 = 0x0004,
    kOperation_Median               = 0x0005,
    kOperation_Log_Base_2           = 0x0006,
    kOperation_Log_Base_e           = 0x0007,
    kOperation_Log_Base_10          = 0x0008,
    kOperation_Quadratic_Mean       = 0x0009,
    kOperation_Root_Mean_Squared    = kOperation_Quadratic_Mean
};

// Stream Descriptor Unit Prefix Exponents

enum {
    kExponent_Yotta                 =  24,
    kExponent_Zetta                 =  21,
    kExponent_Exa                   =  18,
    kExponent_Peta                  =  15,
    kExponent_Tera                  =  12,
    kExponent_Giga                  =   9,
    kExponent_Mega                  =   6,
    kExponent_Kilo                  =   3,
    kExponent_Hecto                 =   2,
    kExponent_Deca                  =   1,
    kExponent_Deci                  =  -1,
    kExponent_Centi                 =  -2,
    kExponent_Milli                 =  -3,
    kExponent_Micro                 =  -6,
    kExponent_Nano                  =  -9,
    kExponent_Pico                  = -12,
    kExponent_Femto                 = -15,
    kExponent_Atto                  = -18,
    kExponent_Zepto                 = -21,
    kExponent_Yocto                 = -24
};

// Stream Descriptor Unit Systems

enum {
    kSystem_None                    = 0,
    kSystem_System_International    = 1,
    kSystem_English                 = 2
};

// Stream Descriptor Unit Quantities

enum {
    kQuantity_None                  = 0,
    kQuantity_Length                = 1,
    kQuantity_Mass                  = 2,
    kQuantity_Time                  = 3,
    kQuantity_Electric_Current      = 4,
    kQuantity_Temperature           = 5,
    kQuantity_Luminous_Intensity    = 6,
    kQuantity_Amount                = 7,
    kQuantity_Plane_Angle           = 8,
    kQuantity_Solid_Angle           = 9
};

// Stream Descriptor Time Base References

enum {
    kReference_Monotonic            = 0,
    kReference_Real_Time            = 1
};

// Stream Descriptor Time Base Synchronization

enum {
    kSynchronization_Unknown        = 0,
    kSynchronization_Synchronized   = 1,
    kSynchronization_Unsynchronized = 2
};

}; // namespace TimeVariantData

}; // namespace Profiles

}; // namespace Weave

}; // namespace nl

#endif // WEAVE_PROFILES_TIME_VARIANT_DATA_CONSTANTS_HPP
