/******************************************************************************
 *
 *  Copyright (C) 2014 The Android Open Source Project
 *  Copyright (C) 2003-2012 Broadcom Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  This is the main implementation file for the BTA MCE I/F
 *
 ******************************************************************************/

#include <stddef.h>
#include "bta_api.h"
#include "bta_sys.h"
#include "bta_mce_api.h"
#include "bta_mce_int.h"

/*****************************************************************************
** Constants and types
*****************************************************************************/

#if BTA_DYNAMIC_MEMORY == FALSE
tBTA_MCE_CB bta_mce_cb;
#endif

/* state machine action enumeration list */
#define BTA_MCE_NUM_ACTIONS  (BTA_MCE_MAX_INT_EVT & 0x00ff)

/* type for action functions */
typedef void (*tBTA_MCE_ACTION)(tBTA_MCE_MSG *p_data);

/* action function list */
const tBTA_MCE_ACTION bta_mce_action[] =
{
    bta_mce_enable,                    /* BTA_MCE_API_ENABLE_EVT */
    bta_mce_get_remote_mas_instances,  /* BTA_MCE_API_GET_REMOTE_MAS_INSTANCES_EVT */
};

/*******************************************************************************
**
** Function         bta_mce_sm_execute
**
** Description      State machine event handling function for MCE
**
**
** Returns          void
**
*******************************************************************************/
BOOLEAN bta_mce_sm_execute(BT_HDR *p_msg)
{
    if(p_msg == NULL) return FALSE;

    BOOLEAN ret = FALSE;
    UINT16 action = (p_msg->event & 0x00ff);

    /* execute action functions */
    if(action < BTA_MCE_NUM_ACTIONS)
    {
        (*bta_mce_action[action])((tBTA_MCE_MSG*)p_msg);
        ret = TRUE;
    }

    return(ret);
}
