/**
 * @file accessManager.h
 * @author NXP Semiconductors
 * @version 1.0
 * @par License
 *
 * Copyright 2017,2020 NXP
 * SPDX-License-Identifier: Apache-2.0
 *
 * @par Description
 *
 * @par History
 *
 *****************************************************************************/
#include "sm_types.h"

// #define AM_LOCK_UNLOCK_SUPPORT    // Lock / Unlock support is not available, do NOT define

#define SERVERPORT              8040

#define MSG_SIZE                2048
#define MSG_HEADER_SIZE            4

// General Message Format
//
// [MTY]:[NAD]:[LNH]:[LNL]:[D0]:...[Dn]
// MTY: Message Type
#define	MTY_WAIT_FOR_CARD       0x00
#define	MTY_APDU_DATA           0x01
#define	MTY_STATUS              0x02
#define	MTY_ERROR_MSG           0x03
#define	MTY_TERMINAL_INFO       0x04
#define	MTY_INITIALIZATION_DATA 0x05
#define	MTY_INFORMATION_TEXT    0x06
#define	MTY_DEBUG_INFORMATION   0x07
    // Additionaly defined
    // Lock/Unlock command: Reserve/Release access to node to calling client
#define MTY_LOCK                0x30
#define MTY_UNLOCK              0x31
    // Development commands
#define MTY_SET_UINT32          0x40
#define MTY_GET_UINT32          0x41

#ifndef NDEBUG
#define MTY_QUIT				0x50
#endif

// NAD: Node adres
//   For now always 0x00
// LNH: MSB of data payload length
// LNL: LSB of data payload length
// D0 .. Dn: Optional data payload

// Specific Message Formats
// MTY_LOCK
//  CMD: [MTY_LOCK]:[0x00]:[0x00]:[0x00|0x04]:{NULL}|{Timeout_in_ms(4 byte) NOT_IMPLEMENTED}
//  RSP:
//   In case of failure: [MTY_LOCK]:[0x00]:[0x00]:[0x01]:[failure_cause] (NOT_IMPLEMENTED)
//   In case of success: [MTY_LOCK]:[0x00]:[0x00]:[0x00]
//
// MTY_UNLOCK
//  CMD: [MTY_UNLOCK]:[0x00]:[0x00]:[0x00]
//  RSP: [MTY_UNLOCK]:[0x00]:[0x00]:[0x00]
//
// MTY_SET_UINT32
//  CMD: [MTY_SET_UINT32]:[0x00]:[0x00]:[0x05]:[idx]:{Value (4 byte)}
//  RSP:
//   In case of failure: [MTY_SET_UINT32]:[0x00]:[0x00]:[0x00]
//   In case of success: [MTY_SET_UINT32]:[0x00]:[0x00]:[0x05]:[idx]:{Value (4 byte)}
//
// MTY_GET_UINT32
//  CMD: [MTY_GET_UINT32]:[0x00]:[0x00]:[0x01]:[idx]
//  RSP
//   In case of failure: [MTY_SET_UINT32]:[0x00]:[0x00]:[0x00]
//   In case of success: [MTY_SET_UINT32]:[0x00]:[0x00]:[0x05]:[idx]:{Value (4 byte)}
// MTY_QUIT // Only Enabled in Debug build
//  CMD: [MTY_QUIT]:[0x00]:[0x00]:[0x00]
//  RSP: [MTY_QUIT]:[0x00]:[0x00]:[0x00]

#define MTY_IDX 0
#define NAD_IDX 1
#define LNH_IDX 2
#define LNL_IDX 3
#define DATA_START_IDX 4

#define MCS_OK                     0
#define MCS_SOCKET_FAILURE         2
#define MCS_MSG_MISMATCH           3

int handleSetUint32(uint8_t *cmdBuffer, int cmdBufferLen, uint8_t *rspBuffer, int *rspBufferLen);
int handleGetUint32(uint8_t *cmdBuffer, int cmdBufferLen, uint8_t *rspBuffer, int *rspBufferLen);

#define AM_OK       0x0000
#define AM_ARG_FAIL 0x6000

U16 amPackageApduResponse(U8 messageType, U8 nodeAddress, U8 *payload, U16 payloadLen, U8 *targetBuf, U16 *targetBufLen);