Home | History | Annotate | Download | only in linux
      1 /*
      2  $License:
      3     Copyright (C) 2014 InvenSense Corporation, All Rights Reserved.
      4  $
      5  */
      6 
      7 /******************************************************************************
      8  *
      9  * $Id:$
     10  *
     11  *****************************************************************************/
     12 
     13 /**
     14  * @defgroup ML_LOAD_DMP
     15  *
     16  * @{
     17  *      @file     ml_load_dmp.c
     18  *      @brief    functions for writing dmp firmware.
     19  */
     20 #include <stdio.h>
     21 
     22 #undef MPL_LOG_TAG
     23 #define MPL_LOG_TAG "MPL-loaddmp"
     24 
     25 #include "ml_load_dmp.h"
     26 #include "log.h"
     27 #include "mlos.h"
     28 
     29 #define LOADDMP_LOG MPL_LOGI
     30 #define LOADDMP_LOG MPL_LOGI
     31 
     32 #define NUM_LOCAL_KEYS (sizeof(dmpTConfig)/sizeof(dmpTConfig[0]))
     33 #define NUM_LOCAL_KEYS (sizeof(dmpTConfig)/sizeof(dmpTConfig[0]))
     34 #define NUM_LOCAL_KEYS (sizeof(dmpTConfig)/sizeof(dmpTConfig[0]))
     35 #define DMP_CODE_SIZE 2943
     36 #define FIFO_SIZE     1024
     37 #define RESERVED_SIZE 32
     38 #define MEMORY_SIZE   1024*4
     39 #define DMP_SIZE_AVAILABLE (MEMORY_SIZE - FIFO_SIZE - RESERVED_SIZE - DMP_CODE_SIZE)
     40 #if DMP_SIZE_AVAILABLE < 0
     41 #error "DMP image size is larger than available memory"
     42 #endif
     43 
     44 static const unsigned char dmpMemory[DMP_CODE_SIZE] = {
     45     /* bank # 0 */
     46     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     47     0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x10, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x0a,
     48     0x06, 0xb8, 0x81, 0xa1, 0xe1, 0x89, 0xb2, 0x78, 0x37, 0xf8, 0x5a, 0x9c, 0xcf, 0xdd, 0x85, 0x3b,
     49     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     50     0x01, 0xf0, 0x19, 0x80, 0x40, 0x00, 0x00, 0x00, 0x02, 0xca, 0xe3, 0x09, 0x3e, 0x80, 0x00, 0x00,
     51     0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
     52     0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x6e, 0x00, 0x00, 0x06, 0x92, 0x0a, 0x16, 0xc0, 0xdf,
     53     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07,
     54     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x2b, 0x00, 0x00, 0x16, 0x57, 0x00, 0x00, 0x03, 0x59,
     55     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xfa, 0x00, 0x02, 0x6c, 0x1d, 0x36, 0x66, 0x66, 0x66,
     56     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     57     0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00,
     58     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     59     0x00, 0x00, 0x00, 0x00, 0x1f, 0xdb, 0xe2, 0xb9, 0x3b, 0x7b, 0x11, 0x7b, 0x32, 0x57, 0x83, 0x7b,
     60     /* bank # 1 */
     61     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xeb, 0x85, 0x3f, 0xae, 0x14, 0x7b,
     62     0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     63     0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     64     0x00, 0x00, 0x10, 0x72, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     65     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xff, 0xff, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01,
     66     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x58, 0x05, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8,
     67     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff,
     68     0x08, 0x00, 0x02, 0x00, 0x04, 0x00, 0x01, 0x00, 0x80, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00,
     69     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     70     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     71     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     72     0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x6a, 0x00, 0x00, 0x00, 0x00,
     73     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     74     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     75     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     76     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     77     /* bank # 2 */
     78     0x00, 0x00, 0x00, 0x00, 0x01, 0x47, 0xae, 0x14, 0x3e, 0xb8, 0x51, 0xec, 0x00, 0x0f, 0x00, 0x00,
     79     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     80     0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     81     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     82     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     83     0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     84     0x00, 0x06, 0x74, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     85     0x0e, 0x41, 0x28, 0x14, 0xc5, 0xaf, 0x3e, 0xf2, 0x59, 0xd9, 0x4a, 0x5f, 0xc2, 0x36, 0xd9, 0x51,
     86     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     87     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     88     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05,
     89     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     90     0x00, 0x1b, 0x00, 0x00, 0x00, 0xd9, 0xe8, 0x3e, 0x30, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
     91     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05,
     92     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05,
     93     0xff, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     94     /* bank # 3 */
     95     0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     96     0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x18, 0x74, 0x70,
     97     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x96, 0x00, 0x3c,
     98     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     99     0x0c, 0xb3, 0x12, 0xb4, 0xcc, 0x0f, 0x1e, 0x1b, 0x51, 0xa0, 0xa3, 0x45, 0xc5, 0xad, 0x1e, 0x16,
    100     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    101     0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
    102     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    103     0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    104     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x18, 0x85, 0x00, 0x00, 0x40, 0x00,
    105     0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    106     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    107     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
    108     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    109     0x00, 0x00, 0x00, 0x00, 0x67, 0x7d, 0xdf, 0x7e, 0x72, 0x90, 0x2e, 0x55, 0x4c, 0xf6, 0xe6, 0x88,
    110     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    111 
    112     /* bank # 4 */
    113     0xd8, 0xb0, 0xb5, 0xb9, 0xf3, 0xa6, 0xf8, 0xf9, 0xd1, 0xd9, 0x81, 0x96, 0xf8, 0xf7, 0x3e, 0xd8,
    114     0xf3, 0xb1, 0x86, 0x96, 0xa3, 0x31, 0xd1, 0xda, 0xf1, 0xff, 0xd8, 0xb9, 0xb1, 0xb4, 0xa7, 0x87,
    115     0x9d, 0xd0, 0xf7, 0x4a, 0xf3, 0x40, 0xb8, 0xb0, 0xf7, 0xa8, 0x8d, 0x91, 0x6a, 0x8d, 0x90, 0x5f,
    116     0x98, 0x4a, 0xb9, 0xf2, 0xa6, 0xd0, 0xf8, 0xf9, 0xd1, 0xd9, 0xf4, 0x07, 0xd8, 0xf3, 0xb8, 0xa8,
    117     0xf9, 0xdb, 0xfb, 0xf7, 0xb9, 0xb1, 0xa7, 0x87, 0x9d, 0xd0, 0x4a, 0xd8, 0xb3, 0xb7, 0xbb, 0x8e,
    118     0x9e, 0xae, 0xf1, 0x32, 0xf5, 0x1b, 0xf1, 0xb4, 0xb8, 0xb0, 0x80, 0x97, 0xf1, 0xa9, 0xdf, 0xdf,
    119     0xdf, 0xaa, 0xdf, 0xdf, 0xdf, 0xf2, 0xaa, 0xc5, 0xcd, 0xc7, 0xa9, 0x0c, 0xc9, 0x2c, 0x97, 0xf1,
    120     0xa9, 0x89, 0x26, 0x46, 0x66, 0xb2, 0x89, 0x99, 0xa9, 0x2d, 0x55, 0x7d, 0xb0, 0x8a, 0xa8, 0x96,
    121     0x36, 0x56, 0x76, 0xd8, 0xf1, 0xb0, 0x89, 0xb9, 0xa3, 0xc3, 0xc5, 0xc7, 0xb1, 0x81, 0xb4, 0x97,
    122     0xa3, 0x11, 0xb5, 0x93, 0xa1, 0xf0, 0x24, 0x08, 0x44, 0x10, 0x64, 0x18, 0xf1, 0x93, 0x81, 0xa3,
    123     0x2d, 0x55, 0x3d, 0xf2, 0xa6, 0xfa, 0xf9, 0xd1, 0xd9, 0xf8, 0xf1, 0x83, 0xa2, 0xc3, 0xc5, 0xc7,
    124     0xd8, 0xf3, 0xa2, 0xde, 0xf1, 0x82, 0x93, 0xa3, 0x2d, 0x55, 0x7d, 0x83, 0x95, 0xf5, 0xa3, 0x30,
    125     0xd9, 0xf3, 0xa2, 0xf8, 0xd8, 0xf5, 0xa3, 0x50, 0xd9, 0xf3, 0xa2, 0xf8, 0xd8, 0xf5, 0xa3, 0x70,
    126     0xd9, 0xf3, 0xa2, 0xf8, 0xd8, 0xf2, 0xb9, 0xa2, 0xf8, 0xf9, 0xd1, 0xd9, 0xa6, 0xde, 0xdf, 0xf4,
    127     0x1c, 0xd8, 0xf2, 0xa6, 0xf8, 0xf9, 0xd1, 0xd9, 0xf4, 0x14, 0xd8, 0xf2, 0xf9, 0xd1, 0xd9, 0xf8,
    128     0xf4, 0x1e, 0xd8, 0xf2, 0xf9, 0xd1, 0xd9, 0xf8, 0xf8, 0xf4, 0x14, 0xd8, 0xf4, 0x10, 0xd8, 0xf3,
    129     /* bank # 5 */
    130     0xa2, 0xf8, 0xf9, 0xd1, 0xda, 0xf2, 0xa6, 0xf8, 0xf1, 0xa5, 0xde, 0xd8, 0xf4, 0xa3, 0x14, 0x14,
    131     0xd8, 0xf1, 0xa5, 0xf8, 0xa3, 0x85, 0x95, 0x09, 0xd9, 0xf1, 0xa5, 0xde, 0xf2, 0xa6, 0xf8, 0xdf,
    132     0xd8, 0xf4, 0xa3, 0x09, 0xd8, 0xf3, 0xa2, 0xf8, 0xf9, 0xd1, 0xf4, 0xd9, 0x08, 0x17, 0xda, 0x42,
    133     0xf2, 0xa2, 0xde, 0xf4, 0x0b, 0xd8, 0xf1, 0xa5, 0xf8, 0xa3, 0x85, 0x95, 0x19, 0xda, 0xf4, 0x05,
    134     0xd8, 0xf2, 0xa6, 0xde, 0xdf, 0xd8, 0xf1, 0xb8, 0xaa, 0xb3, 0x8d, 0xb4, 0x98, 0x0d, 0x35, 0x5d,
    135     0xb2, 0xb6, 0xba, 0xaf, 0x8c, 0x96, 0x19, 0x8f, 0x9f, 0xb8, 0xa8, 0x0e, 0x16, 0x1e, 0xb4, 0x9a,
    136     0xaa, 0x88, 0x2c, 0x54, 0x7c, 0xd8, 0xf1, 0xb8, 0xb4, 0xb0, 0x97, 0x86, 0xa8, 0x31, 0x9b, 0x06,
    137     0x99, 0x07, 0xab, 0x97, 0x28, 0x88, 0x9b, 0xf0, 0x0c, 0x20, 0x14, 0x40, 0xb0, 0xb4, 0xb8, 0xf0,
    138     0xa8, 0x8a, 0x9a, 0x28, 0x50, 0x78, 0xb7, 0x9b, 0xa8, 0x29, 0x51, 0x79, 0x24, 0x70, 0x59, 0x44,
    139     0x69, 0x38, 0x64, 0x48, 0x31, 0xf1, 0xbb, 0xab, 0x88, 0x00, 0x2c, 0x54, 0x7c, 0xf0, 0xb3, 0x8b,
    140     0xb8, 0xa8, 0x04, 0x28, 0x50, 0x78, 0xf1, 0xb0, 0x88, 0xb4, 0x97, 0x26, 0xa8, 0x59, 0x98, 0xbb,
    141     0xab, 0xb3, 0x8b, 0x02, 0x26, 0x46, 0x66, 0xb0, 0xb8, 0xf0, 0x8a, 0x9c, 0xa8, 0x29, 0x51, 0x79,
    142     0x8b, 0x29, 0x51, 0x8a, 0x24, 0x70, 0x59, 0x8b, 0x20, 0x58, 0x8a, 0x44, 0x69, 0x38, 0x8b, 0x39,
    143     0x40, 0x8a, 0x64, 0x48, 0x31, 0x8b, 0x30, 0x49, 0x88, 0xf1, 0xac, 0x00, 0x2c, 0x54, 0x7c, 0xf0,
    144     0x8c, 0xa8, 0x04, 0x28, 0x50, 0x78, 0xf1, 0x88, 0x97, 0x26, 0xa8, 0x59, 0x98, 0xac, 0x8c, 0x02,
    145     0x26, 0x46, 0x66, 0xf0, 0x89, 0x9c, 0xa8, 0x29, 0x51, 0x79, 0x24, 0x70, 0x59, 0x44, 0x69, 0x38,
    146     /* bank # 6 */
    147     0x64, 0x48, 0x31, 0xa9, 0x88, 0x09, 0x20, 0x59, 0x70, 0xab, 0x11, 0x38, 0x40, 0x69, 0xa8, 0x19,
    148     0x31, 0x48, 0x60, 0x8c, 0xa8, 0x3c, 0x41, 0x5c, 0x20, 0x7c, 0x00, 0xf1, 0x87, 0x98, 0x19, 0x86,
    149     0xa8, 0x6e, 0x76, 0x7e, 0xa9, 0x99, 0x88, 0x2d, 0x55, 0x7d, 0xd8, 0xf1, 0xb3, 0x8b, 0xb4, 0x97,
    150     0xbb, 0xab, 0xf8, 0xf9, 0xb9, 0xa3, 0xda, 0xc3, 0xc5, 0xc7, 0xd9, 0x2d, 0x4d, 0x6d, 0xd8, 0xb0,
    151     0x8c, 0xb8, 0xac, 0xf8, 0xf9, 0xa8, 0xda, 0xc3, 0xc5, 0xc7, 0xd9, 0x2d, 0x4d, 0x6d, 0xd8, 0xf3,
    152     0xb9, 0xac, 0xde, 0xd8, 0xb1, 0xb6, 0xb9, 0xf1, 0xa8, 0xf8, 0xf3, 0xb9, 0xaa, 0xfa, 0xf9, 0xd1,
    153     0xda, 0xf2, 0x8a, 0xca, 0xf4, 0x0e, 0xf3, 0xb1, 0x87, 0xdd, 0xc2, 0xc2, 0xf1, 0x8c, 0xc4, 0xdc,
    154     0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf2, 0xb2, 0xb6, 0xba, 0xad, 0xfa, 0x8d, 0x9d, 0xab, 0x39, 0xd9,
    155     0xad, 0xdf, 0xf4, 0x13, 0xdd, 0xf2, 0xb1, 0x87, 0xb5, 0x9a, 0x08, 0x08, 0xf1, 0xb1, 0x83, 0xc2,
    156     0xc4, 0xc6, 0xdc, 0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf3, 0xb2, 0xb6, 0xba, 0xad, 0xf8, 0x8d, 0x9d,
    157     0xab, 0x11, 0xd9, 0xad, 0xde, 0xf4, 0x13, 0xdd, 0xf2, 0xb1, 0x87, 0xb5, 0x9a, 0x28, 0x28, 0xf1,
    158     0xb0, 0x88, 0xc2, 0xc4, 0xc6, 0xdc, 0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf3, 0xb2, 0xb6, 0xba, 0xad,
    159     0xfa, 0x8d, 0x9d, 0xab, 0x39, 0xd9, 0xad, 0xdf, 0xf4, 0x12, 0xdd, 0xf3, 0xb1, 0x87, 0xb5, 0x9a,
    160     0x08, 0xf2, 0xf2, 0x88, 0xc2, 0xc4, 0xc6, 0xdc, 0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf2, 0xb2, 0xb6,
    161     0xba, 0xae, 0xf8, 0x8e, 0x9e, 0xab, 0x11, 0xd9, 0xae, 0xde, 0xf4, 0x12, 0xdd, 0xf3, 0xb1, 0x87,
    162     0xb5, 0x9a, 0x68, 0xf2, 0xb0, 0x80, 0xc0, 0xc8, 0xc2, 0xdc, 0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf2,
    163     /* bank # 7 */
    164     0xb2, 0xb6, 0xba, 0xae, 0xfa, 0x8e, 0x9e, 0xab, 0x39, 0xd9, 0xae, 0xdf, 0xf4, 0x12, 0xdd, 0xf2,
    165     0xb1, 0x87, 0xb5, 0x9a, 0x68, 0xf2, 0xb0, 0x80, 0xc4, 0xcc, 0xc6, 0xdc, 0xf3, 0xb9, 0xac, 0xf8,
    166     0xd8, 0xf3, 0xb2, 0xb6, 0xba, 0xae, 0xf8, 0x8e, 0x9e, 0xab, 0x11, 0xd9, 0xae, 0xde, 0xf4, 0x12,
    167     0xdd, 0xf3, 0xb1, 0x87, 0xb5, 0x9a, 0x48, 0xf2, 0xb0, 0x81, 0xc0, 0xc8, 0xc2, 0xdc, 0xf3, 0xb9,
    168     0xac, 0xf8, 0xd8, 0xf3, 0xb2, 0xb6, 0xba, 0xae, 0xfa, 0x8e, 0x9e, 0xab, 0x39, 0xd9, 0xae, 0xdf,
    169     0xf4, 0x12, 0xdd, 0xf2, 0xb1, 0x87, 0xb5, 0x9a, 0x48, 0xf2, 0xb0, 0x81, 0xc4, 0xcc, 0xc6, 0xdc,
    170     0xf3, 0xb9, 0xac, 0xf8, 0xd8, 0xf2, 0xb0, 0x88, 0xb9, 0xa8, 0xc3, 0xc5, 0xc7, 0xb1, 0xb5, 0xb9,
    171     0xf3, 0xac, 0xfa, 0xf9, 0xd1, 0xda, 0xf4, 0x10, 0xd8, 0xf3, 0xac, 0xf8, 0xf9, 0xd1, 0xda, 0xf1,
    172     0xb9, 0xaa, 0xdf, 0xf4, 0x1c, 0xd9, 0xf4, 0x1a, 0xd8, 0xf3, 0xac, 0xf8, 0xf9, 0xd1, 0xd9, 0xf4,
    173     0x1d, 0xd8, 0xf2, 0x8c, 0xac, 0xf8, 0xf9, 0xd1, 0xd9, 0xc2, 0xd8, 0xf2, 0xf9, 0xd9, 0xde, 0xf4,
    174     0x09, 0x1d, 0x16, 0xda, 0xf2, 0xdd, 0xc6, 0xdc, 0xf4, 0x30, 0xf1, 0xb9, 0xaa, 0xdf, 0xd8, 0xf1,
    175     0xab, 0xfa, 0x8b, 0x9b, 0xa3, 0x69, 0xd9, 0xf4, 0x07, 0x06, 0xda, 0xf1, 0xb9, 0xab, 0xdf, 0xfe,
    176     0xd8, 0xf1, 0xbb, 0xb3, 0xb7, 0xaa, 0xf9, 0xda, 0xff, 0xd9, 0x80, 0x9a, 0xaa, 0x28, 0xb4, 0x80,
    177     0x98, 0xa7, 0x20, 0xd8, 0xb7, 0x87, 0xaa, 0xd0, 0xc1, 0xa7, 0x81, 0x97, 0x62, 0x93, 0xf0, 0x71,
    178     0x71, 0x60, 0x85, 0x94, 0x01, 0x29, 0x51, 0x79, 0x90, 0xa5, 0xf1, 0x28, 0x4c, 0x6c, 0x87, 0x0c,
    179     0x95, 0x18, 0x85, 0x78, 0xb0, 0xb4, 0xb8, 0x87, 0x98, 0xaf, 0x20, 0x83, 0x9f, 0x22, 0xb7, 0x93,
    180     /* bank # 8 */
    181     0xf0, 0x31, 0x31, 0x20, 0x8e, 0xb4, 0x94, 0x01, 0x29, 0x51, 0x79, 0x97, 0xae, 0xf1, 0x28, 0x4c,
    182     0x6c, 0x8f, 0x0c, 0x9e, 0x18, 0x8e, 0x78, 0x87, 0x98, 0xaf, 0x20, 0x83, 0x9f, 0x22, 0xb7, 0x93,
    183     0xf0, 0x31, 0x31, 0x20, 0xb2, 0x81, 0xb4, 0x94, 0x01, 0x9f, 0x29, 0x51, 0x79, 0x97, 0xba, 0xa1,
    184     0xf1, 0x28, 0x4c, 0x6c, 0xb0, 0x8f, 0x0c, 0xb6, 0x91, 0x18, 0xb2, 0x81, 0x78, 0xb0, 0x87, 0xb4,
    185     0x98, 0xba, 0xab, 0x20, 0xb2, 0x86, 0xb6, 0x9b, 0x02, 0xb7, 0x93, 0xf0, 0x11, 0x11, 0x00, 0x84,
    186     0xb6, 0x97, 0x01, 0x29, 0x51, 0x79, 0xb4, 0x97, 0xa4, 0xf1, 0x28, 0x4c, 0x6c, 0x8b, 0x0c, 0xb6,
    187     0x94, 0x18, 0xb2, 0x84, 0x78, 0xbb, 0xa3, 0xb3, 0x83, 0xb7, 0x90, 0x28, 0x4c, 0x6c, 0x8a, 0x6c,
    188     0xf2, 0xb0, 0x83, 0xb4, 0x93, 0xb8, 0xa3, 0x71, 0xd9, 0xd0, 0xf8, 0xf5, 0x8e, 0x9e, 0xb9, 0xa3,
    189     0x78, 0xf1, 0xb1, 0x8a, 0xb5, 0x93, 0x45, 0xb2, 0x8c, 0x2e, 0xb1, 0x8a, 0x54, 0x83, 0xaa, 0xd0,
    190     0xc6, 0xf5, 0xb2, 0x81, 0xb6, 0x91, 0xa3, 0x78, 0xf1, 0xb1, 0x8a, 0xb5, 0x93, 0x65, 0xb2, 0x8c,
    191     0x2e, 0xb1, 0x8a, 0x74, 0x83, 0xaa, 0xd0, 0xc7, 0xd8, 0xf2, 0xb0, 0x83, 0xb8, 0xaf, 0xc6, 0xf9,
    192     0xa3, 0xb4, 0x9f, 0x41, 0xd9, 0xf1, 0xb1, 0x8a, 0xba, 0xa6, 0xc5, 0xc7, 0xb2, 0xb6, 0xb9, 0x86,
    193     0x96, 0xa3, 0x50, 0xb1, 0x83, 0xb5, 0x93, 0x04, 0x2c, 0xf3, 0xb8, 0xa3, 0xd0, 0xf8, 0xf9, 0xd1,
    194     0xdb, 0xf1, 0xb6, 0x9c, 0xb9, 0xa3, 0xd0, 0x56, 0xd8, 0xf2, 0xb0, 0x83, 0xb4, 0x9f, 0xb8, 0xa3,
    195     0x41, 0xdb, 0xf3, 0x97, 0x49, 0xf1, 0xb1, 0x83, 0xb6, 0x9c, 0xb9, 0xa3, 0xd0, 0x5e, 0xd8, 0xf2,
    196     0xb0, 0x83, 0xb8, 0xa3, 0xb4, 0x9f, 0x41, 0xd9, 0xf3, 0xa3, 0xd0, 0xde, 0xf8, 0xf1, 0xb1, 0x83,
    197     /* bank # 9 */
    198     0xb6, 0x96, 0xb9, 0xa3, 0xdb, 0x69, 0xf3, 0xb8, 0xa3, 0xd0, 0xde, 0xf1, 0xb3, 0x86, 0xba, 0xa0,
    199     0xc0, 0xd8, 0xf2, 0xb0, 0x83, 0xb8, 0xa3, 0xb4, 0x9f, 0x41, 0xd9, 0xd0, 0xde, 0xd8, 0xf3, 0xbb,
    200     0xb3, 0xb7, 0x90, 0xa2, 0x82, 0x00, 0xf2, 0x10, 0xf1, 0xb2, 0x82, 0xb5, 0x9b, 0xba, 0xa2, 0xd0,
    201     0x64, 0xf2, 0xb3, 0x82, 0xab, 0xc2, 0xf8, 0xf9, 0xd1, 0xf1, 0xb9, 0xa4, 0xd9, 0xde, 0xda, 0xf8,
    202     0xd8, 0xf2, 0xbb, 0xaf, 0x80, 0xb7, 0x92, 0x50, 0x8f, 0x0d, 0xdb, 0xf1, 0xb1, 0x84, 0xb5, 0x94,
    203     0x21, 0xd9, 0xf5, 0xb3, 0x85, 0xb7, 0x95, 0xb9, 0xa3, 0x78, 0xf1, 0xb1, 0x80, 0xb5, 0x90, 0xa0,
    204     0x1a, 0xf0, 0x93, 0x40, 0xf5, 0xb2, 0x84, 0xb6, 0x94, 0xa3, 0x78, 0xf1, 0xb1, 0x80, 0xb5, 0x90,
    205     0xa0, 0x3e, 0xf0, 0x93, 0x40, 0xd8, 0xf1, 0xb9, 0xa3, 0xd0, 0xdf, 0xb0, 0x8b, 0xb5, 0x90, 0xb9,
    206     0xa3, 0x6a, 0xb1, 0x80, 0x93, 0x05, 0xd9, 0xd0, 0xf8, 0xd8, 0xf2, 0xb3, 0x80, 0xb7, 0x92, 0xbb,
    207     0xaf, 0x50, 0xf8, 0x8f, 0x0d, 0xdb, 0xf1, 0xb1, 0x84, 0xb5, 0x94, 0xb9, 0xa3, 0x21, 0xd0, 0xfa,
    208     0xd8, 0xf1, 0xb9, 0xa3, 0xd0, 0xfa, 0xf9, 0xd1, 0xd9, 0xf1, 0xb2, 0x84, 0xbb, 0xa8, 0xd0, 0xc4,
    209     0xc7, 0xf3, 0xb9, 0xa4, 0xd0, 0xde, 0xda, 0xf1, 0xb3, 0x85, 0xbb, 0xa8, 0xd0, 0xc4, 0xc7, 0xf3,
    210     0xb9, 0xa4, 0xd0, 0xde, 0xf8, 0xdf, 0xf8, 0xd8, 0xf3, 0xb1, 0x84, 0xb7, 0x90, 0xb9, 0xa3, 0x69,
    211     0xdb, 0xb3, 0x80, 0xb5, 0x94, 0x11, 0xd9, 0xf2, 0xa4, 0xd0, 0xde, 0xd8, 0xf2, 0xbb, 0xaf, 0xb7,
    212     0x92, 0xb3, 0x82, 0x19, 0x80, 0xa2, 0xd9, 0x26, 0xf3, 0xa7, 0xd0, 0xdf, 0xd8, 0xf1, 0xaf, 0x89,
    213     0x98, 0x19, 0xa9, 0x80, 0xd9, 0x38, 0xd8, 0xaf, 0x89, 0x39, 0xa9, 0x80, 0xda, 0x3c, 0xd8, 0xaf,
    214     /* bank # 10 */
    215     0x2e, 0x88, 0xf5, 0x75, 0xda, 0xff, 0xd8, 0x71, 0x80, 0xa9, 0xda, 0xf1, 0xff, 0xd8, 0x82, 0xa7,
    216     0xf3, 0xc1, 0xf2, 0x80, 0xc2, 0xf1, 0x97, 0x86, 0x49, 0x2e, 0xa6, 0xd0, 0x50, 0x96, 0x86, 0xaf,
    217     0x75, 0xd9, 0x88, 0xa2, 0xd0, 0xf3, 0xc0, 0xc3, 0xf1, 0xda, 0x8f, 0x96, 0xa2, 0xd0, 0xf3, 0xc2,
    218     0xc3, 0x82, 0xb4, 0x93, 0x78, 0x78, 0xf1, 0xd8, 0x80, 0xb7, 0x90, 0xaf, 0x0d, 0x89, 0x99, 0xaf,
    219     0x10, 0x80, 0x9f, 0x21, 0xda, 0x2e, 0xd8, 0x89, 0x99, 0xaf, 0x31, 0x80, 0xda, 0x2e, 0xd8, 0xaf,
    220     0x82, 0x92, 0xf3, 0x41, 0x80, 0xf1, 0xd9, 0x2e, 0xd8, 0xaf, 0x82, 0xf3, 0x19, 0x80, 0xf1, 0xd9,
    221     0x2e, 0xd8, 0xf1, 0x89, 0x90, 0xaf, 0xd0, 0x09, 0x8f, 0x99, 0xaf, 0x51, 0xdb, 0x89, 0x31, 0xf3,
    222     0x82, 0x92, 0x19, 0xf2, 0xb1, 0x84, 0xb5, 0x94, 0x71, 0xd9, 0xf1, 0xdf, 0xf9, 0xf2, 0xb9, 0xa4,
    223     0xd0, 0xf8, 0xf8, 0xf3, 0xdf, 0xd8, 0xb3, 0xb7, 0xbb, 0x82, 0xac, 0xf3, 0xc0, 0xa2, 0x80, 0x22,
    224     0xf1, 0xa9, 0x22, 0x26, 0x9f, 0xaf, 0x29, 0xda, 0xac, 0xde, 0xff, 0xd8, 0xa2, 0xf2, 0xde, 0xf1,
    225     0xa9, 0xdf, 0xf3, 0xb8, 0xa3, 0xd0, 0xf8, 0xf9, 0xd1, 0xd9, 0xff, 0xd8, 0xf2, 0xb2, 0xb6, 0xba,
    226     0xa2, 0xd0, 0xde, 0xf8, 0xf1, 0xb0, 0x87, 0x90, 0xab, 0xd0, 0x7e, 0xb2, 0x80, 0xb7, 0x96, 0xab,
    227     0x01, 0x8b, 0xb6, 0x92, 0xab, 0x05, 0xdb, 0x82, 0x9b, 0x79, 0xf3, 0xb1, 0x84, 0xb4, 0x97, 0x49,
    228     0xf2, 0xa2, 0xd0, 0xf8, 0xd8, 0xf3, 0xb9, 0xa4, 0xd0, 0xf8, 0xf9, 0xd1, 0xd9, 0xf2, 0xba, 0xa2,
    229     0xd0, 0xf8, 0xd8, 0xb3, 0xb7, 0xbb, 0x97, 0x8c, 0xaf, 0xf3, 0x79, 0xda, 0xf1, 0xf1, 0xf1, 0xf1,
    230     0xb1, 0x88, 0xb9, 0xac, 0xd0, 0xc0, 0xb3, 0xf3, 0xf3, 0xb9, 0xaa, 0xfa, 0xf1, 0xbb, 0xaa, 0xd0,
    231     /* bank # 11 */
    232     0xf8, 0xf4, 0x10, 0xd8, 0xf3, 0xa7, 0xd0, 0xfa, 0x97, 0x8c, 0xaf, 0x79, 0xda, 0xf1, 0x87, 0x9a,
    233     0xaa, 0xd0, 0x70, 0xd8, 0xf2, 0x82, 0x92, 0xaf, 0x31, 0xd9, 0xf1, 0xde, 0xb2, 0x82, 0xb6, 0x92,
    234     0xcc, 0xb3, 0x8f, 0xb7, 0x96, 0xa6, 0x00, 0xac, 0x8c, 0x9c, 0x0c, 0x30, 0xdb, 0xb2, 0xb6, 0xba,
    235     0x82, 0x92, 0xab, 0x39, 0xf3, 0xb1, 0x84, 0xb4, 0x97, 0x49, 0xd9, 0xf1, 0xb2, 0xb6, 0x80, 0x90,
    236     0xa0, 0xd0, 0x5e, 0xf0, 0x92, 0x38, 0xd8, 0xf2, 0xb3, 0x82, 0xb7, 0x92, 0xbb, 0xaf, 0x31, 0xd9,
    237     0xf1, 0xbb, 0xac, 0xde, 0xd0, 0xde, 0xba, 0xa2, 0xd0, 0xdf, 0xf1, 0xff, 0xd8, 0xf3, 0xb9, 0xa4,
    238     0xd0, 0xf8, 0xf9, 0xd1, 0xd9, 0xf2, 0xbb, 0xa2, 0xfa, 0xf8, 0xda, 0xf2, 0xbb, 0xa2, 0xfa, 0xd8,
    239     0xf2, 0xb3, 0xb7, 0xbb, 0x80, 0x92, 0xaf, 0x49, 0xd1, 0xd9, 0xf1, 0xb9, 0xa4, 0xde, 0xa0, 0xde,
    240     0xdf, 0xd8, 0xf1, 0x8c, 0x9c, 0xbb, 0xac, 0xd0, 0x10, 0xac, 0xde, 0xba, 0xa2, 0xd0, 0xdf, 0xbb,
    241     0x92, 0x82, 0xaf, 0xf1, 0xca, 0xf2, 0x35, 0xf1, 0x96, 0x8f, 0xa6, 0xd9, 0x00, 0xd8, 0xff
    242 };
    243 
    244 #define DMP_VERSION (dmpMemory)
    245 
    246 inv_error_t inv_write_dmp_data(FILE *fd, const unsigned char *dmp, size_t len)
    247 {
    248     inv_error_t result = INV_SUCCESS;
    249     int bytesWritten = 0;
    250 
    251     if (len <= 0) {
    252         MPL_LOGE("Nothing to write");
    253         return INV_ERROR_FILE_WRITE;
    254     }
    255     else {
    256         MPL_LOGI("dmp firmware size to write = %d", len);
    257     }
    258     if ( fd == NULL ) {
    259         return INV_ERROR_FILE_OPEN;
    260     }
    261     bytesWritten = fwrite(dmp, 1, len, fd);
    262     if (bytesWritten != len) {
    263         MPL_LOGE("bytes written (%d) don't match requested length (%d)\n",
    264                  bytesWritten, len);
    265         result = INV_ERROR_FILE_WRITE;
    266     }
    267     else {
    268         MPL_LOGI("Bytes written = %d", bytesWritten);
    269     }
    270     return result;
    271 }
    272 
    273 inv_error_t inv_load_dmp(FILE *fd)
    274 {
    275     inv_error_t result = INV_SUCCESS;
    276     result = inv_write_dmp_data(fd, DMP_VERSION, DMP_CODE_SIZE);
    277     return result;
    278 }
    279 
    280 void read_dmp_img(char *dmp_path, char* out_file)
    281 {
    282     MPL_LOGI("read_dmp_img");
    283     FILE *fp;
    284     int i;
    285     int dmpSize = DMP_CODE_SIZE;
    286     char dmp_img[dmpSize];
    287 
    288     if ((fp = fopen(dmp_path, "rb")) < 0) {
    289         perror("dmp fail");
    290     }
    291     i = fread(dmp_img, 1, dmpSize, fp);
    292     MPL_LOGI("Result=%d", i);
    293     fclose(fp);
    294     fp = fopen(out_file, "wt");
    295     if(fp == NULL) {
    296     MPL_LOGE("error open out file:%s", out_file);
    297         return;
    298     }
    299     fprintf(fp, "char rec[]={\n");
    300     for(i = 0; i < dmpSize; i++) {
    301         fprintf(fp, "0x%02x, ", dmp_img[i]);
    302         if(((i + 1) % 16) == 0) {
    303             fprintf(fp, "\n");
    304         }
    305     }
    306     fprintf(fp, "};\n ");
    307     fclose(fp);
    308 }
    309 
    310 /**
    311  *  @}
    312  */
    313