blob: b9328bd2dd8d487dc48aaaa433e463dd0982e41d [file] [log] [blame]
/*
*
* Copyright 2016,2020 NXP
* SPDX-License-Identifier: Apache-2.0
*/
#include <stddef.h>
#include <assert.h>
#include <string.h>
#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;
}