Home | History | Annotate | Download | only in inc
      1  /*
      2   * Copyright (C) 2015 NXP Semiconductors
      3   *
      4   * Licensed under the Apache License, Version 2.0 (the "License");
      5   * you may not use this file except in compliance with the License.
      6   * You may obtain a copy of the License at
      7   *
      8   *      http://www.apache.org/licenses/LICENSE-2.0
      9   *
     10   * Unless required by applicable law or agreed to in writing, software
     11   * distributed under the License is distributed on an "AS IS" BASIS,
     12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13   * See the License for the specific language governing permissions and
     14   * limitations under the License.
     15   */
     16 
     17 #include "data_types.h"
     18 #include "IChannel.h"
     19 #include <stdio.h>
     20 
     21 typedef struct JcopOs_TranscieveInfo
     22 {
     23     INT32 timeout;
     24     UINT8 sRecvData[1024];
     25     UINT8 *sSendData;
     26     INT32 sSendlength;
     27     int sRecvlength;
     28 }JcopOs_TranscieveInfo_t;
     29 
     30 typedef struct JcopOs_Version_Info
     31 {
     32     UINT8 osid;
     33     UINT8 ver1;
     34     UINT8 ver0;
     35     UINT8 OtherValid;
     36     UINT8 ver_status;
     37 }JcopOs_Version_Info_t;
     38 typedef struct JcopOs_ImageInfo
     39 {
     40     FILE *fp;
     41     int   fls_size;
     42     char  fls_path[256];
     43     int   index;
     44     UINT8 cur_state;
     45     JcopOs_Version_Info_t    version_info;
     46 }JcopOs_ImageInfo_t;
     47 typedef struct JcopOs_Dwnld_Context
     48 {
     49     JcopOs_Version_Info_t    version_info;
     50     JcopOs_ImageInfo_t       Image_info;
     51     JcopOs_TranscieveInfo_t  pJcopOs_TransInfo;
     52     IChannel_t               *channel;
     53 }JcopOs_Dwnld_Context_t,*pJcopOs_Dwnld_Context_t;
     54 
     55 
     56 static UINT8 Trigger_APDU[] = {0x4F, 0x70, 0x80, 0x13, 0x04, 0xDE, 0xAD, 0xBE, 0xEF, 0x00};
     57 static UINT8 GetInfo_APDU[] = {0x00, //CLA
     58                                0xA4, 0x04, 0x00, 0x0C, //INS, P1, P2, Lc
     59                                0xD2, 0x76, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,   //Data
     60                                0x00 //Le
     61                               };
     62 static UINT8 GetInfo_Data[] = {0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x72, 0x4F, 0x53};
     63 
     64 #define OSID_OFFSET  9
     65 #define VER1_OFFSET  10
     66 #define VER0_OFFSET  11
     67 #define JCOPOS_HEADER_LEN 5
     68 
     69 #define JCOP_UPDATE_STATE0 0
     70 #define JCOP_UPDATE_STATE1 1
     71 #define JCOP_UPDATE_STATE2 2
     72 #define JCOP_UPDATE_STATE3 3
     73 #define JCOP_MAX_RETRY_CNT 3
     74 #define JCOP_INFO_PATH  "/data/vendor/ese/jcop_info.txt"
     75 
     76 #define JCOP_MAX_BUF_SIZE 10240
     77 
     78 class JcopOsDwnld
     79 {
     80 public:
     81 
     82 /*******************************************************************************
     83 **
     84 ** Function:        getInstance
     85 **
     86 ** Description:     Get the SecureElement singleton object.
     87 **
     88 ** Returns:         SecureElement object.
     89 **
     90 *******************************************************************************/
     91 static JcopOsDwnld* getInstance ();
     92 
     93 
     94 /*******************************************************************************
     95 **
     96 ** Function:        getJcopOsFileInfo
     97 **
     98 ** Description:     Verify all the updater files required for download
     99 **                  are present or not
    100 **
    101 ** Returns:         True if ok.
    102 **
    103 *******************************************************************************/
    104 bool getJcopOsFileInfo();
    105 
    106 /*******************************************************************************
    107 **
    108 ** Function:        initialize
    109 **
    110 ** Description:     Initialize all member variables.
    111 **                  native: Native data.
    112 **
    113 ** Returns:         True if ok.
    114 **
    115 *******************************************************************************/
    116 bool initialize (IChannel_t *channel);
    117 
    118 /*******************************************************************************
    119 **
    120 ** Function:        finalize
    121 **
    122 ** Description:     Release all resources.
    123 **
    124 ** Returns:         None
    125 **
    126 *******************************************************************************/
    127 void finalize ();
    128 
    129 tJBL_STATUS JcopOs_Download();
    130 
    131 tJBL_STATUS TriggerApdu(JcopOs_ImageInfo_t* pVersionInfo, tJBL_STATUS status, JcopOs_TranscieveInfo_t* pTranscv_Info);
    132 
    133 tJBL_STATUS GetInfo(JcopOs_ImageInfo_t* pVersionInfo, tJBL_STATUS status, JcopOs_TranscieveInfo_t* pTranscv_Info);
    134 
    135 tJBL_STATUS load_JcopOS_image(JcopOs_ImageInfo_t *Os_info, tJBL_STATUS status, JcopOs_TranscieveInfo_t *pTranscv_Info);
    136 
    137 tJBL_STATUS JcopOs_update_seq_handler();
    138 
    139 IChannel_t *mchannel;
    140 
    141 private:
    142 static JcopOsDwnld sJcopDwnld;
    143 bool mIsInit;
    144 tJBL_STATUS GetJcopOsState(JcopOs_ImageInfo_t *Os_info, UINT8 *counter);
    145 tJBL_STATUS SetJcopOsState(JcopOs_ImageInfo_t *Os_info, UINT8 state);
    146 };
    147