/**************************************************************************** * * Copyright 2017 NXP * SPDX-License-Identifier: Apache-2.0 * * Name: mainA71chConfig.c * * Description: * This file contains main entry for the A71CH configuration application. * ****************************************************************************/ #include #include #include #include #ifdef _WIN32 #define _CRTDBG_MAP_ALLOC #include #include #endif #include "app_boot.h" #include "ax_api.h" #include "sm_apdu.h" #include "configCli.h" #include "configState.h" #include "axHostCrypto.h" #include "sm_timer.h" #include "sm_printf.h" #include "global_platf.h" #define EX_APP_VERSION "1.20" /******************************************************************************* ** Main Function main() *******************************************************************************/ int main(int argc, char ** argv) { U16 connectStatus = 0; // U8 Atr[64]; // U16 AtrLen = sizeof(Atr); SmCommState_t commState; int expectedMinArg = 0; int nRet = 0; #ifdef TDA8029_UART Scp03SessionState_t sessionState; #endif nRet = app_boot_Init(); sm_initSleep(); sm_printf(DBGOUT, "a71chConfig (Rev %s) .. ", EX_APP_VERSION); #if defined(SMCOM_JRCP_V1) || defined(SMCOM_JRCP_V2) expectedMinArg = 3; #elif defined(RJCT_VCOM) expectedMinArg = 3; #else expectedMinArg = 2; #endif // if (argc >= expectedMinArg) { char *cmdName; char **cmdArg; int argcReduction = 0; cmdName = argv[0]; #if defined(SMCOM_JRCP_V1) || defined(SMCOM_JRCP_V2) argcReduction = 2; #elif defined(RJCT_VCOM) argcReduction = 2; #else argcReduction = 1; #endif cmdArg = &argv[argcReduction]; if ( (strcmp(cmdArg[0], "nc") == 0 ) ) { argc -= argcReduction; if (argc > 0) { a7xConfigSetConnectString(argv[1]); sm_printf(DBGOUT, "NOT connecting to A71CH.\n"); // Strip "nc" cmdArg = &argv[argcReduction+1]; argc -= 1; nRet = a7xConfigCli(cmdName, argc, cmdArg); return nRet; } else { sm_printf(DBGOUT, "No command is following \'nc\' directive.\n"); return AX_CLI_CHECK_USAGE; } } } // sm_printf(DBGOUT, "connect to A71CH. Chunksize at link layer = %d.\n", MAX_CHUNK_LENGTH_LINK); connectStatus = app_boot_Connect(&commState, argv[1]); if ( connectStatus == SW_FILE_NOT_FOUND ) { sm_printf(CONSOLE, "SM_Connect failed with status 0x%04X\n", connectStatus); // if (argc >= expectedMinArg) { char *cmdName; char **cmdArg; cmdName = argv[0]; #if defined(SMCOM_JRCP_V1) || defined(SMCOM_JRCP_V2) cmdArg = &argv[2]; argc -= 2; #elif defined(RJCT_VCOM) cmdArg = &argv[2]; argc -= 2; #else cmdArg = &argv[1]; argc -= 1; #endif if ( (strcmp(cmdArg[0], "identify") == 0 ) || (strcmp(cmdArg[0], "cplc") == 0 ) ) { nRet = a7xConfigCli(cmdName, argc, cmdArg); return nRet; } } // return AX_CLI_ERR_SELECT_FAILS; } else if (connectStatus != 0) { sm_printf(CONSOLE, "Select failed. SW = 0x%04X\n", connectStatus); return AX_CLI_ERR_SELECT_FAILS; } else { // int i=0; #if defined(SCI2C) sm_printf(CONSOLE, "SCI2C_"); // To highlight the ATR format for SCI2C deviates from ISO7816-3 #endif sm_printf(CONSOLE, "HostLib Version : 0x%04X\n", commState.hostLibVersion); sm_printf(CONSOLE, "Applet-Rev:SecureBox-Rev : 0x%04X:0x%04X\n", commState.appletVersion, commState.sbVersion); } // Deal with extra argument when going through card server if (argc >= expectedMinArg) { char *cmdName; char **cmdArg; cmdName = argv[0]; #if defined(SMCOM_JRCP_V1) || defined(SMCOM_JRCP_V2) cmdArg = &argv[2]; argc -= 2; #elif defined(RJCT_VCOM) cmdArg = &argv[2]; argc -= 2; #else cmdArg = &argv[1]; argc -= 1; #endif nRet = a7xConfigCli(cmdName, argc, cmdArg); } else { nRet = a7xConfigCliHelp("a71chConfig"); } return nRet; }