164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/*
264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran $License:
364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    See included License.txt for License information.
564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran $
664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran */
764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/**
864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *   @defgroup  Message_Layer message_layer
964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *   @brief     Motion Library - Message Layer
1064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *              Holds Low Occurance messages
1164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *
1264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *   @{
1364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *       @file message_layer.c
1464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *       @brief Holds Low Occurance Messages.
1564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran */
1664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "message_layer.h"
1764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "log.h"
1864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran
1964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranstruct message_holder_t {
2064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    long message;
2164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran};
2264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran
2364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranstatic struct message_holder_t mh;
2464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran
2564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/** Sets a message.
2664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* @param[in] set The flags to set.
2764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* @param[in] clear Before setting anything this will clear these messages,
2864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*                  which is useful for mutually exclusive messages such
2964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*                  a motion or no motion message.
3064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* @param[in] level Level of the messages. It starts at 0, and may increase
3164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*            in the future to allow more messages if the bit storage runs out.
3264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*/
3364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranvoid inv_set_message(long set, long clear, int level)
3464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran{
3564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    if (level == 0) {
3664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran        mh.message &= ~clear;
3764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran        mh.message |= set;
3864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    }
3964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran}
4064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran
4164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/** Returns Message Flags for Level 0 Messages.
4264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* Levels are to allow expansion of more messages in the future.
4364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* @param[in] clear If set, will clear the message. Typically this will be set
4464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*  for one reader, so that you don't get the same message over and over.
4564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* @return bit field to corresponding message.
4664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*/
4764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranlong inv_get_message_level_0(int clear)
4864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran{
4964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    long msg;
5064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    msg = mh.message;
5164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    if (clear) {
5264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran        mh.message = 0;
5364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    }
5464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran    return msg;
5564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran}
5664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran
5764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/**
5864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran * @}
5964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran */
60