#ifndef __SSE_STATUS_H__
#define __SSE_STATUS_H__

typedef uint16_t SSESTATUS;                //Return values

// SSP tranaction_priv function call is success, and SSP returned R-APDU. These status values are from R-APDU
// return these return values to TA.
#define SSESTATUS_OK                                                              0x0000
#define SSESTATUS_INCORRECT_VALUE                                             0x0001
#define SSESTATUS_SECURITY_STATUS_NOT_SATISFIED                     0x0002
#define SSESTATUS_WRONG_LENGH_IN_LC                                 0x0003
#define SSESTATUS_INCORRECT_P1P2                                        0x0004
#define SSESTATUS_INVALID_INS                                               0x0005
#define SSESTATUS_INVALID_CLA                                               0x0006
#define SSESTATUS_MEMORY_FAILURE                                        0x0007
#define SSESTATUS_NOT_ENOUGH_MEMORY                                   0x0008
#define SSESTATUS_SSP_NOT_AVAILABLE                                       0x0009
#define SSESTATUS_REF_DATA_NOT_FOUND                                    0x000a
#define SSESTATUS_SSP_UNDER_PROCESS                                      0x000b
#define SSESTATUS_AID_NOT_EXIST                                                 0x000c
#define SSESTATUS_MORE_DATA_AVAILABLE                               0x000d
#define SSESTATUS_VERIFY_FAILED                                             0x000e
// SSE custom errors [
#define SSESTATUS_OVER_MAX_DATA_SIZE                                0x00a0
#define SSESTATUS_ENTRY_ACCESS_NOT_PERMITTED_TID            0x00a1
#define SSESTATUS_UNSUPPORTED_ESE_VERSION                       0x00a2
#define SSESTATUS_SSP_RETURNED_UNKOWN_ERROR                 0x00a3
#define SSESTATUS_SSP_RETURNED_UNKOWN_RW1RW2                0x00a4
#define SSESTATUS_ISO_RETURNED_UNKOWN_ERROR                 0x00a5
#define SSESTATUS_OTP_KEY_LENGTH_INVALID                        0x00a6
#define SSESTATUS_RESPONSE_DATA_LENGTH_IS_ZERO              0x00a7
#define SSESTATUS_INVALID_ENTRY_CYCLE_INPUT_VAL          0x00a9 // SSE v.1.01
#define SSESTATUS_INVALID_TYPE_INPUT_VAL                       0x00aa // SSE v.1.01
#define SSESTATUS_INVALID_VALID_COUNT_INPUT_VAL          0x00ab // SSE v.1.01
#define SSESTATUS_REMAIN_DATA_SIZE_UNMATCH                 0x00ac // SSE v.1.01 R5

#define SSESTATUS_INVALID_TLV_CONSTRUCTION_PARAMS  0x00b0 // SSE v.2.0
#define SSESTATUS_DATA_SIZE_TOO_BIG                             0x00b1
#define SSESTATUS_INVALID_PARAMETER                            0x00b2
// SSE custom errors ]
#define SSESTATUS_FAIL                                                           0x00ff


// SSP function call status (SSP is not returning any R-APDU in these cases).
// return these return values to TA.
#define SSESTATUS_SSP_SUCCESS                                               0x0000
#define SSESTATUS_SSP_FAILED                                                  0x0101
#define SSESTATUS_SSP_INVALID_ARGUMENT                               0x0102
#define SSESTATUS_SSP_ESE_FAILED                                             0x0103
#define SSESTATUS_SSP_UNEXPECTED_RESPONSE                          0x0104

#define SSESTATUS_SSP_OVER_MAX_DATA_SIZE                            0x0110
#define SSESTATUS_SSP_INVALID_CMAC                                        0x0111

#define SSESTATUS_SSP_OTP_KEY_CORRUPTED                                     0x0120

#define SSESTATUS_SSP_SESSION_OPEN_FAIL                               0x0130
#define SSESTATUS_SSP_SESSION_INIT_FAIL                                 0x0131
#define SSESTATUS_SSP_INVAILD_SESSION_ID                               0x0132

#define SSESTATUS_SSP_ESE_CHANNEL_OPEN_FAILED                    0x0140
#define SSESTATUS_SSP_ESE_CHANNEL_CLOSE_FAILED                  0x0141

// ISO7816 returns
#define SSESTATUS_ESE_SUCCESS                                     (0x0000)
#define SSESTATUS_ESE_OK                                (SSESTATUS_ESE_SUCCESS)
#define SSESTATUS_ESE_INVALID_PARAMETER                           (0x0201)
#define SSESTATUS_ESE_INVALID_BUFFER                           (0x0202)
#define SSESTATUS_ESE_BUFFER_TOO_SMALL                            (0x0203)
#define SSESTATUS_ESE_INVALID_CLA                           (0x0204)
#define SSESTATUS_ESE_INVALID_CPDU_TYPE                           (0x0205)
#define SSESTATUS_ESE_INVALID_LE_TYPE                           (0x0207)
#define SSESTATUS_ESE_INVALID_DEVICE                              (0x0206)
#define SSESTATUS_ESE_MORE_FRAME                            (0x0208)
#define SSESTATUS_ESE_LAST_FRAME                                  (0x0209)
#define SSESTATUS_ESE_CRC_ERROR                                    (0x020A)
#define SSESTATUS_ESE_INSUFFICIENT_RESOURCES                      (0x020C)
#define SSESTATUS_ESE_PENDING                                     (0x020D)
#define SSESTATUS_ESE_BOARD_COMMUNICATION_ERROR                   (0x020F)
#define SSESTATUS_ESE_INVALID_STATE                               (0x0211)
#define SSESTATUS_ESE_NOT_INITIALISED                             (0x0231)
#define SSESTATUS_ESE_ALREADY_INITIALISED                         (0x0232)
#define SSESTATUS_ESE_FEATURE_NOT_SUPPORTED                       (0x0233)
#define SSESTATUS_ESE_PARITY_ERROR                              (0x0234)
#define SSESTATUS_ESE_ALREADY_REGISTERED                          (0x0235)
#define SSESTATUS_ESE_CHAINED_FRAME                          (0x0236)
#define SSESTATUS_ESE_SINGLE_FRAME                               (0x0237)
#define SSESTATUS_ESE_DESELECTED                                  (0x0238)
#define SSESTATUS_ESE_RELEASED                                    (0x0239)
#define SSESTATUS_ESE_NOT_ALLOWED                                 (0x023A)
#define SSESTATUS_ESE_DWNLD_BUSY                                  (0x026E)
#define SSESTATUS_ESE_BUSY                                        (0x026F)
#define SSESTATUS_ESE_INVALID_REMOTE_DEVICE                       (0x021D)
#define SSESTATUS_ESE_READ_FAILED                                 (0x0214)
#define SSESTATUS_ESE_WRITE_FAILED                                (0x0215)
#define SSESTATUS_ESE_NO_NDEF_SUPPORT                             (0x0216)
#define SSESTATUS_ESE_RESET_SEQ_COUNTER_FRAME_RESEND                          (0x021A)
#define SSESTATUS_ESE_INVALID_RECEIVE_LENGTH                      (0x021B)
#define SSESTATUS_ESE_INVALID_FORMAT                              (0x021C)
#define SSESTATUS_ESE_INSUFFICIENT_STORAGE                        (0x021F)
#define SSESTATUS_ESE_FRAME_RESEND                                (0x0223)
#define SSESTATUS_ESE_WRITE_TIMEOUT                              (0x0224)
#define SSESTATUS_ESE_RESPONSE_TIMEOUT                            (0x0225)
#define SSESTATUS_ESE_FRAME_RES
#define SSESTATUS_ESE_SEND_NEXT_FRAME                             (0x0227)
#define SSESTATUS_ESE_REVOCERY_STARTED                        (0x0228)
#define SSESTATUS_ESE_SINGLE_TAG_DISCOVERED                       (0x0229)
#define SSESTATUS_ESE_SECURE_ELEMENT_ACTIVATED                    (0x0228)
#define SSESTATUS_ESE_UNKNOWN_ERROR                               (0x02FE)
#define SSESTATUS_ESE_FAILED                                      (0x02FF)
#define SSESTATUS_ESE_CMD_ABORTED                                 (0x0202)
#define SSESTATUS_ESE_NO_TARGET_FOUND                             (0x020A)
#define SSESTATUS_ESE_NO_DEVICE_CONNECTED                         (0x020B)
#define SSESTATUS_ESE_RESYNCH_REQ                        (0x020E)
#define SSESTATUS_ESE_RESYNCH_RES                      (0x0210)
#define SSESTATUS_ESE_IFS_REQ                              (0x021E)
#define SSESTATUS_ESE_IFS_RES                              (0x0217)
#define SSESTATUS_ESE_ABORT_REQ                            (0x02F0)
#define SSESTATUS_ESE_ABORT_RES                            (0x02F2)
#define SSESTATUS_ESE_WTX_REQ                    (0x02F5)
#define SSESTATUS_ESE_WTX_RES                    (0x02F6)
#define SSESTATUS_ESE_SHUTDOWN                  (0x0291)
#define SSESTATUS_ESE_TARGET_LOST               (0x0292)
#define SSESTATUS_ESE_REJECTED                  (0x0293)
#define SSESTATUS_ESE_TARGET_NOT_CONNECTED      (0x0294)
#define SSESTATUS_ESE_INVALID_HANDLE            (0x0295)
#define SSESTATUS_ESE_ABORTED                   (0x0296)
#define SSESTATUS_ESE_COMMAND_NOT_SUPPORTED     (0x0297)
#define SSESTATUS_ESE_NON_NDEF_COMPLIANT        (0x0298)
#define SSESTATUS_ESE_NOT_ENOUGH_MEMORY         (0x021F)
#define SSESTATUS_ESE_INCOMING_CONNECTION        (0x0245)
#define SSESTATUS_ESE_CONNECTION_SUCCESS         (0x0246)
#define SSESTATUS_ESE_CONNECTION_FAILED          (0x0247)
#define SSESTATUS_ESE_DRIVER_ERR                 (0x0248)

#endif //__SSE_STATUS_H__
