blob: 66bd836241996f9ed7cfc1639680571a66f5656c [file] [log] [blame]
/**
* @file app_boot.h
* @author NXP Semiconductors
* @version 1.0
* @par License
*
* Copyright 2017 NXP
* SPDX-License-Identifier: Apache-2.0
*
* @par Description
* Implementation of the App booting time initilization functions
*/
#include "sm_api.h"
#define APP_HOST_CONNECTION_STATUS_LINK_ERR 0x02
#define APP_HOST_CONNECTION_STATUS_PORT_ADDR_ERR 0x03
#define APP_HOST_CONNECTION_STATUS_COMM_ERR 0x04
#define APP_HOST_CONNECTION_STATUS_PROTOCOL_ERR 0x05
#define APP_HOST_CONNECTION_STATUS_LINK_FAILED 0x02
#define BOOT_SKIP_EXAMPLE (0x00) //!< Argument relevant to ::exBoot
#define BOOT_SIMULATED_CYCLE (0x01) //!< Argument relevant to ::exBoot
#define BOOT_BOOTLOADER_ROLE (0x02) //!< Argument relevant to ::exBoot
#define BOOT_HOST_OS_RESUME (0x04) //!< Argument relevant to ::exBoot
#if defined(TDA8029_UART) || defined(SCI2C) || defined(PCSC) || defined(SPI) || defined(IPC)
#define APP_BOOT_RESUME_HANDLING(EX_BOOT_FN) \
if (argc == 2) \
{ \
initMeasurement(&execTime); \
if (strcmp(argv[1], "boot") == 0) \
{ \
result &= EX_BOOT_FN(BOOT_BOOTLOADER_ROLE); \
} \
else if (strcmp(argv[1], "resume") == 0) \
{ \
result &= EX_BOOT_FN(BOOT_HOST_OS_RESUME); \
} \
else if (strcmp(argv[1], "both") == 0) \
{ \
result &= EX_BOOT_FN(BOOT_BOOTLOADER_ROLE); \
result &= EX_BOOT_FN(BOOT_HOST_OS_RESUME); \
} \
else \
{ \
printf("Unknown command option: %s.\r\n", argv[1]); \
printf("Usage: %s [boot|resume|both].\r\n", argv[0]); \
result = 0; \
} \
goto LBL_REPORT_STATUS; \
} \
#else
#define APP_BOOT_RESUME_HANDLING(EX_BOOT_FN)
#endif
/**
* Boot up of the application. Configure clocks/pin/etc. where applicable on
* platform. For most systems these decisions have to be made as early as
* possible during boot.
*
* For many systems like linux/windows these would translate to an almost empty
* call. For other embedded platforms this would do HW initialization.
*
* @return 0 on success.
*/
extern int app_boot_Init(void);
/**
* For Freerots crypto init function to be called after task creation
*/
extern int app_boot_Init_RTOS(void);
/**
* Connect to secure element based on the pre-compiled selection of
* Communication layer.
*
* @param[out] pCommState Pointer where the communication state is updated.
* @param[in] pConnectionParam Can be null where connection is I2C/etc. on the
* same board. For remote connection this would
* be name of IpAddress/Server Name : Port in case
* of Socket connection or COM PORT in case of
* VCOM Connection.
*
* @return 0 on success.
*/
extern int app_boot_Connect(
SmCommState_t* pCommState, const char* pConnectionParam);
/**
* SET LEDs for the stauts.
*
* @parm[in] status 1 => Pass. 0 ==> Failed.
*/
extern void app_test_status(U8 result);