/* * * Copyright 2016,2020 NXP * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include "se05x_tlv.h" #include "nxLog_hostLib.h" #include "smCom.h" static U16 CM_SendSmComRawCommand(void *conn_ctx, uint8_t* cmd, U16 cmdLen) { U16 rv = SM_NOT_OK; U32 ret = 0; uint8_t resp[256] = { 0 }; U32 respLen = sizeof(resp); size_t rspIndex = 0; ret = smCom_TransceiveRaw(conn_ctx, cmd, cmdLen, resp, &respLen); if (ret != SM_OK) { LOG_E("Error in smCom_TransceiveRaw !!!"); goto exit; } else { rspIndex = respLen - 2; ret = (resp[rspIndex] << 8) | (resp[rspIndex + 1]); if (ret != SM_OK) { LOG_E("Command Failed"); LOG_MAU8_E("Command Response", resp, respLen); goto exit; } else { LOG_I("Command Successful!!!"); if (respLen > 2) { LOG_MAU8_I("Command Response", resp, respLen - 2); } } } rv = SM_OK; exit: return rv; } /** * Select card manager and send garbageCollection command * * \param[in] conn_ctx - Connection context * \param[out] None * * \retval ::SW_OK Upon successfull execution */ U16 CM_InvokeGarbageCollection (void *conn_ctx) { U16 rv = SM_NOT_OK; U32 ret = 0; uint8_t select_cmd[5] = { 0x00, 0xA4, 0x04, 0x00, 0x00 }; uint8_t invoke_garbage_collection_cmd[9] = { 0x80, 0xCA, 0x00, 0xFE, 0x04, 0xDF, 0x25, 0x01, 0x03 }; LOG_W("Invoking this api will close the existing session to SE05X."); LOG_W("To use SE05X, open session again."); LOG_I("Sending Select command "); ret = CM_SendSmComRawCommand(conn_ctx, select_cmd, sizeof(select_cmd)); if (ret != SM_OK) { LOG_E("Error in sending Select Command !!!"); goto exit; } LOG_I("Sending 'Invoke Garbage Collection' Command "); ret = CM_SendSmComRawCommand(conn_ctx, invoke_garbage_collection_cmd, sizeof(invoke_garbage_collection_cmd)); if (ret != SM_OK) { LOG_E("Error in sending invoke_garbage_collection_cmd !!!"); goto exit; } rv = SW_OK; exit: return rv; }