/*
 $License:
   Copyright 2011 InvenSense, Inc.

 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.
  $
 */
#ifndef ML_DMPDEFAULT_H__
#define ML_DMPDEFAULT_H__

/**
 * @defgroup DEFAULT 
 * @brief Default DMP assembly listing header file
 *
 * @{
 *      @file     inv_setup_dmp.c
 *      @brief    Default DMP assembly listing header file
 */


#ifdef __cplusplus
extern "C"
{
#endif
    inv_error_t inv_setup_dmp(void);

#ifdef __cplusplus
}
#endif


#endif // ML_DMPDEFAULT_H__
