/*
 $License:
    Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
    See included License.txt for License information.
 $
 */
/**
 *   @defgroup  Message_Layer message_layer
 *   @brief     Motion Library - Message Layer
 *              Holds Low Occurance messages
 *
 *   @{
 *       @file message_layer.c
 *       @brief Holds Low Occurance Messages.
 */
#include "message_layer.h"
#include "log.h"

struct message_holder_t {
    long message;
};

static struct message_holder_t mh;

/** Sets a message.
* @param[in] set The flags to set.
* @param[in] clear Before setting anything this will clear these messages,
*                  which is useful for mutually exclusive messages such
*                  a motion or no motion message.
* @param[in] level Level of the messages. It starts at 0, and may increase
*            in the future to allow more messages if the bit storage runs out.
*/
void inv_set_message(long set, long clear, int level)
{
    if (level == 0) {
        mh.message &= ~clear;
        mh.message |= set;
    }
}

/** Returns Message Flags for Level 0 Messages.
* Levels are to allow expansion of more messages in the future.
* @param[in] clear If set, will clear the message. Typically this will be set
*  for one reader, so that you don't get the same message over and over.
* @return bit field to corresponding message.
*/
long inv_get_message_level_0(int clear)
{
    long msg;
    msg = mh.message;
    if (clear) {
        mh.message = 0;
    }
    return msg;
}

/**
 * @}
 */
