149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $License:
349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    Copyright (C) 2011-2012 InvenSense Corporation, All Rights Reserved.
449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    See included License.txt for License information.
549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $
649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *   @defgroup  MPL mpl
949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *   @brief     Motion Library - Start Point
1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              Initializes MPL.
1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *   @{
1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *       @file  mpl.c
1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *       @brief MPL start point.
1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "storage_manager.h"
1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "log.h"
1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "mpl.h"
2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "start_manager.h"
2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "data_builder.h"
2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "results_holder.h"
2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "mlinclude.h"
2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "message_layer.h"
2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @brief  Initializes the MPL. Should be called first and once
2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @return Returns INV_SUCCESS if successful or an error code if not.
2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowinv_error_t inv_init_mpl(void)
3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{
3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    inv_init_storage_manager();
3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    /* initialize the start callback manager */
3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    INV_ERROR_CHECK(inv_init_start_manager());
3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    /* initialize the data builder */
3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    INV_ERROR_CHECK(inv_init_data_builder());
3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    INV_ERROR_CHECK(inv_enable_results_holder());
4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    // Get any left over messages and clear them. Throw message away as it is not
4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    // initialized.
4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    (void)inv_get_message_level_0(1);
4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    return INV_SUCCESS;
4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}
4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
494a28f9c897c46c42a255823f7e307169a828a025Rosa Chowconst char ml_ver[] = "InvenSense MA 5.1.6 RC25";
5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @brief  used to get the MPL version.
5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @param  version     a string where the MPL version gets stored.
5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @return INV_SUCCESS if successful or a non-zero error code otherwise.
5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowinv_error_t inv_get_version(char **version)
5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{
5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    INVENSENSE_FUNC_START;
5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    /* cast out the const */
6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    *version = (char *)&ml_ver;
6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    return INV_SUCCESS;
6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}
6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @brief  Starts the MPL. Typically called after inv_init_mpl() or after a
6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *          inv_stop_mpl() to start the MPL back up an running.
6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @return INV_SUCCESS if successful or a non-zero error code otherwise.
6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowinv_error_t inv_start_mpl(void)
7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{
7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    INV_ERROR_CHECK(inv_execute_mpl_start_notification());
7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    return INV_SUCCESS;
7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}
7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @}
7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
78