1 /* 2 * Copyright (c) 2016, Freescale Semiconductor, Inc. 3 * Copyright 2016-2017 NXP 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 /** 9 * @file host_interface_service.h 10 * @brief The host_interface_service.h file describes the structures and definitions for the host. 11 */ 12 13 #ifndef HOST_INTERFACE_SERVICE_H_ 14 #define HOST_INTERFACE_SERVICE_H_ 15 #include <stddef.h> 16 #include <stdint.h> 17 #include <stdbool.h> 18 #include "comm_interface.h" 19 20 #define HOST_INTERFACE_OK 0 21 #define HOST_INTERFACE_VERSION ((1 << 4) | (0 & 0xF)) // Host Interface Version 1.0 22 23 /******************************************************************************* 24 * Definitions 25 ******************************************************************************/ 26 /* Interface functions Signature.*/ 27 typedef void (*Host_Event_t)(uint32_t event); /*< Pointer to Host Event.*/ 28 29 /* @brief This defines the handle to host 30 */ 31 typedef struct _host_interface_handle_ 32 { 33 comm_interface_t *pCommInterface; 34 void *pInData; /*!< Input data for the callback .*/ 35 uint32_t status; /*!< Current Comm status.*/ 36 comm_handle_t commHandle; /*!< pointer to a specific communication channel.*/ 37 Host_Event_t event; /*!< Host Event callback: Future implementaion .*/ 38 comm_instance_type_t instanceType; /*!< COMM Instance Type .*/ 39 } host_interface_handle_t; 40 41 /* @brief This defines the host interface config structure 42 */ 43 typedef struct _host_interface_config_ 44 { 45 uint32_t tbd; // tbd 46 47 } host_interface_config_t; 48 49 /* @brief This defines the host interface based events 50 */ 51 #define HOST_INTERFACE_EVENT_SEND_COMPLETE \ 52 (1UL << 0) ///< Send completed. Completed the data transfer. Useful for Asynchronous, non blocking calls 53 #define HOST_INTERFACE_EVENT_RECEIVE_COMPLETE \ 54 (1UL << 1) ///< Receive completed, Receved specifed bytes of data. Useful for Asynchronous, non blocking calls 55 56 typedef void (*BlockRead_t)(host_interface_handle_t *pHandle, void *pData); /*< Pointer to block read function. 57 User can implement start and end packet detection logic to determine unknown receive length. 58 This basically a data-interchangbility format dependent such as HDLC, JSON etc..*/ 59 /******************************************************************************/ 60 /*! @brief The function to Initialize the Host 61 * @details It initialize the host for the specified communucation channel and data format service. 62 63 * @param[in] pHandle - pointer to the interface handle 64 * @param[in] type- host communication type 65 * @param[in] pCommInstance - pointer to a communication object. 66 * @param[in] inType - instanceType. 67 * @param[in] event - event handler callback 68 * @param[in] pInData - input data to underlying layers 69 * @return ::HOST_Initialize() returns the status . 70 * 71 * @Constraints None 72 * 73 * @Reentrant Yes 74 */ 75 int32_t HOST_Initialize(host_interface_handle_t *pHandle, 76 comm_type_t type, 77 void *pCommInstance, 78 comm_instance_type_t inType, 79 Host_Event_t event, 80 void *pInData); 81 82 /******************************************************************************/ 83 /*! @brief The function to Configure the Host 84 * @details TBD 85 86 * @param[in] pHandle - pointer to the interface handle 87 * @param[in] pConfigData - Host configuration information 88 * @return ::HOST_Configure() returns the status . 89 * 90 * @Constraints None 91 * 92 * @Reentrant Yes 93 */ 94 int32_t HOST_Configure(host_interface_handle_t *pHandle, void *pConfigData); 95 /******************************************************************************/ 96 /*! @brief The function to Send the data to the host 97 * @details TBD 98 99 * @param[in] pHandle - pointer to the interface handle 100 * @param[in] pData - pointer to a data to send 101 * @param[in] size - number of byte to send 102 * @return ::HOST_Send() returns the status . 103 * 104 * @Constraints None 105 * 106 * @Reentrant Yes 107 */ 108 int32_t HOST_Send(host_interface_handle_t *pHandle, uint8_t *pData, uint32_t size); 109 110 /*! @brief The function to receive data from the host. 111 * @details BlockRead callback function will be called only if Host is initialized with Blocking Call communication 112 instance, 113 refer comm_instance_type_t inType HOST_Initialize() function. 114 If the host is initialized with blocking communication instance, This call will be blocked until 115 BlockRead_t process returns provided BlockRead_t process is not NULL 116 else it will be blocked until specified number of requested bytes are received. User can implement own 117 logic to separate packet start and end de-limiter in 118 BlockRead_t process to determine a stream or use provided Block Read function in the each Data Format. 119 If the host is intialized with NonBlocking Communication instance. This call will be immediately 120 returns and Users Needs to Syschronous data based on 121 Host event HOST_INTERFACE_EVENT_RECEIVE_COMPLETE. 122 * @param[in] pHandle - pointer to the interface handle. 123 * @param[out] pData - pointer to data to be received. 124 * @param[out] pRecvSize - number of byte received. This field is for the future use. 125 * @param[in] size - Nnumber of byte intend to receive, if user know. This argument has no impact if "BlockRead_t 126 process" is not NULL and communication instance is Blocking 127 * @param[in] process - process function for the block data read. NOTE: This parameter is not valid, if 128 communication Read function is Nonblocking. 129 The logic in the callback can start and end packet data detection to get the unknown receive length stream data from 130 the host. 131 132 * @return ::HOST_Receive() returns the status . 133 * 134 * @Constraints None 135 * 136 * @Reentrant Yes 137 */ 138 // Note: Signature of this function may change based on the implementation and usability. 139 int32_t HOST_Receive( 140 host_interface_handle_t *pHandle, uint8_t *pData, uint32_t *pRecvSize, uint32_t size, BlockRead_t process); 141 142 #endif // HOST_INTERFACE_SERVICE_H_ 143