#ifndef __IFAA_TA_COMMAND_ID_H__
#define __IFAA_TA_COMMAND_ID_H__

#define LOCAL_PAGE_SIZE (0x1000)

#define IFBIO_INPUT_LEN   (LOCAL_PAGE_SIZE - 8)
#define IFBIO_OUTPU_LEN   (LOCAL_PAGE_SIZE - 8)

#ifdef TA_RELEASE
#define LOGGER_BUF_LEN (LOCAL_PAGE_SIZE - 4)
#else
#define LOGGER_BUF_LEN (LOCAL_PAGE_SIZE * 2 - 4)
#endif

typedef struct {
    union{
        uint32_t version;
        uint32_t cmd_id;
    };

    uint32_t in_len;

    uint8_t output[IFBIO_INPUT_LEN];
} __attribute__ ((packed)) cmd_req_t, qsc_send_cmd_t;

#define QSC_RSP_DATA_GAP (0x100 )
typedef struct {
    union{
        int32_t status;
        int32_t ret;
    };

    uint32_t out_len;
    uint8_t output[IFBIO_OUTPU_LEN];

    uint8_t reserved[QSC_RSP_DATA_GAP];

    uint32_t log_len;
    uint8_t log_buf[LOGGER_BUF_LEN];
} __attribute__ ((packed)) cmd_rsp_t, qsc_send_cmd_rsp_t;

typedef enum {
    IFAA_ERR_SUCCESS = 0x00000000,   //success
    IFAA_ERR_UNKNOWN = 0x7A000001,
    IFAA_ERR_BAD_ACCESS = 0x7A000002,
    IFAA_ERR_BAD_PARAM = 0x7A000003,
    IFAA_ERR_UNKNOWN_CMD = 0x7A000004,
    IFAA_ERR_BUF_TOO_SHORT = 0x7A000005,
    IFAA_ERR_OUT_OF_MEM = 0x7A000006,
    IFAA_ERR_TIMEOUT = 0x7A000007,
    IFAA_ERR_HASH = 0x7A000008,
    IFAA_ERR_SIGN = 0x7A000009,
    IFAA_ERR_VERIFY = 0x7A00000A,
    IFAA_ERR_KEY_GEN = 0x7A00000B,
    IFAA_ERR_READ = 0x7A00000C,
    IFAA_ERR_WRITE = 0x7A00000D,
    IFAA_ERR_ERASE = 0x7A00000E,
    IFAA_ERR_NOT_MATCH = 0x7A00000F,
    IFAA_ERR_GEN_RESPONSE = 0x7A000010,
    IFAA_ERR_GET_DEVICEID = 0x7A000011,
    IFAA_ERR_GET_LAST_IDENTIFIED_RESULT = 0x7A000012,
    IFAA_ERR_AUTHENTICATOR_SIGN = 0x7A000013,
    IFAA_ERR_GET_ID_LIST = 0x7A000014,
    IFAA_ERR_GET_AUTHENTICATOR_VERSION = 0x7A000015,
    IFAA_ERR_UN_INITIALIZED = 0x7A000016,
    IFAA_ERR_NO_OPTIONAL_LEVEL = 0x7A000017,
    IFAA_ERR_NO_FILE = 0x7A000018,
    IFAA_ERR_PROVISION_FAILED = 0x7A000020,
    IFAA_ERR_DEVICE_NOT_TRUSTED = 0x7A000021,
    IFAA_ERR_SKPM_SIGN_FAILED = 0x7A000022,
    IFAA_ERR_MALLOC_FAILED = 0x7A000023,
    IFAA_ERR_GET_FILE_LIST_FAILED = 0x7A000024,
    // more in considering....
} IFAA_Result;

#endif /*__IFAA_TA_COMMAND_ID_H__*/
