inwudriver-weibo/target/include/interface/soc_mdm_tl.h

201 lines
7.4 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2018-2019. All rights reserved.
* Description: secondary development APIs of the transport layer
* Author: CompanyName
* Create: 2018-10-31
*/
/** @defgroup transfer Transfer
* @ingroup mid
*/
#ifndef __SOC_MDM_TL_H__
#define __SOC_MDM_TL_H__
#include <soc_list.h>
#include <soc_types.h>
#include "soc_mdm_types.h"
#include "soc_config.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @ingroup transfer
* Configuration parameters of the transport layer
*/
typedef struct {
td_u8 send_num; /* Number of send */
td_u8 pad[3]; /* Send window size, reserved 3 bytes for 4-byte alignment */
td_u32 retry_timeout; /* Retry timeout period (unit: ms) */
td_u32 rcv_timeout; /* Receive timeout period (unit: ms) */
td_u16 snd_interval; /* Send interval (unit: ms) */
td_u16 delay_ack_time; /* ACK message delay (unit: ms) */
} ext_tl_param_st;
/**
* @ingroup transfer
* Buffer data format
*/
typedef struct {
td_u8 *buf;
td_u16 buf_len;
td_u8 send_ack_mode; /* only use low 4 bits */
td_u8 pad; /* reserved */
} ext_tl_buf_info_st;
/**
* @ingroup transfer
* Data transmission format of the transport layer
*/
typedef struct {
ext_tl_buf_info_st data_info;
td_u8 oda[EXT_PLC_MAC_ADDR_LEN];
td_u8 app_head_len;
td_u8 pad;
td_u8 *app_head;
} ext_tl_send_info;
/**
* @ingroup transfer
* @brief Defines the function for sending fragmented packets at the transport layer.
*
* @par Description:
* Defines the function for sending fragmented packets at the transport layer.
*
* @attention None
* @param send_info [IN] Type #ext_tl_send_info *, send data.
*
* @retval #td_u32
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @see None
* @since DW21_V100R001C00
*/
typedef td_u32 (*tl_send_fun)(EXT_CONST ext_tl_send_info *send_info);
/**
* @ingroup transfer
* @brief Load of the transport layer
*
* @par Description:
* Component load of the transport layer
*
* @attention
* @li This function can be called only once.
* @li This API can be called only after the component is initialized, that is, after uapi_mac_cp_init is called.
* @param queue_size [IN] Type #td_u8, queue size. This parameter must be set based on the actual requirements.
* The value must be less than or equal to 32 and not equal to 0.
* @retval #EXT_ERR_SUCCESS Success
* @retval #Other values Failure
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_load_tl(td_u8 queue_size);
/**
* @ingroup transfer
* @brief Creates a transport layer handle.
*
* @par Description:
* Creates a transport layer handle.
*
* @attention Only one handle needs to be created by an app.
* @param tl_id [OUT] Type #td_u32*, transport layer handle created by the corresponding app
* @param tl_send_func [IN] Type #tl_send_func, fragment packet sending API. The buffer send_info->data_info.buf does
* not need to be released by the app.
* @param tl_mss [IN] Type #td_u16, maximum segment length. This parameter must be set based on the actual
* requirements. The value must be greater than 5.
* @param snd_window [IN] Type #td_u8, size of the send window. The value cannot be greater than 5.
* @retval #EXT_ERR_SUCCESS Success
* @retval #Other values Failure
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_tl_create_transport_layer(td_u32 *tl_id, tl_send_fun tl_send_func, td_u16 tl_mss, td_u8 snd_window);
/**
* @ingroup transfer
* @brief Deletes the transport layer handle.
*
* @par Description:
* Deletes the transport layer handle.
*
* @param tl_id [IN] Type #td_u32, transport layer handle created by the corresponding app
* @retval #EXT_ERR_SUCCESS Success
* @retval #Other values Failure
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_tl_delete_transport_layer(td_u32 tl_id);
/**
* @ingroup transfer
* @brief Sets the transport layer parameters.
*
* @par Description:
* Sets the transport layer parameters.
*
* @attention The receive timeout period must be greater than the total retry timeout period and not more than one hour.
* No parameter value can be 0.
* @param tl_id [IN] Type #td_u32, transport layer handle created by the corresponding app
* @param trans_param [IN] Type #ext_tl_param_st, parameter setting information
* @retval #EXT_ERR_SUCCESS Success
* @retval #Other values Failure
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_tl_set_transport_layer_param(td_u32 tl_id, EXT_CONST ext_tl_param_st *trans_param);
/**
* @ingroup transfer
* @brief TX interface of the transport layer
*
* @par Description:
* TX interface of the transport layer
*
* @attention Fragment + Transmission header
* @attention send_info->data_info.buf requires the caller to apply for dynamic memory, which is released by the
* transport layer. The return value EXT_ERR_NO_INITILIZATION is excluded.
* @attention send_info->app_head determines whether the dynamic memory exists based on the actual requirements.
* If yes, the caller needs to apply for dynamic memory, which is released by the transport layer.
* The return value EXT_ERR_NO_INITILIZATION is excluded.
* @param tl_id [IN] Type #td_u32, transport layer handle created by the corresponding app
* @param send_info [IN] Type #ext_tl_send_info *, send information.
* @retval #EXT_ERR_SUCCESS Success.
* @retval #Other values Failure.
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_tl_send_packet(td_u32 tl_id, EXT_CONST ext_tl_send_info *send_info);
/**
* @ingroup transfer
* @brief RX interface of the transport layer
*
* @par Description:
* RX interface of the transport layer
*
* @attention Reassembly + de-transmission layer header
* @attention The data memory for fragment_info->buf is dynamically applied by the app and released by the transport
* layer. The return value EXT_ERR_NO_INITILIZATION is excluded.
* @param tl_id [IN] Type #td_u32, transport layer handle created by the corresponding app
* @param fragment_info [IN] Type #ext_tl_buf_info_st, received buffer information
* @param src_mac [IN] Type #td_u8 *, MAC address of the buffer source
* @param src_mac_len [IN] Type #td_u8 *, length of the MAC address
* @param out_buf [OUT] Type #ext_tl_buf_info_st *, the reassembled buffer information is output. When the return value
* is EXT_ERR_SUCCESS, out_buf->buf is dynamically applied by the transport layer and released by the caller.
* @retval #EXT_ERR_SUCCESS Success.
* @retval #EXT_ERR_CONTINUE Waiting for reception.
* @retval #Other values Error
* @par Dependency:
* @li soc_mdm_tl.h: This file describes the external APIs of the link layer.
* @since DW21_V100R001C00
*/
td_u32 uapi_tl_rcv_packet(td_u32 tl_id, ext_tl_buf_info_st *fragment_info, EXT_CONST td_u8 *src_mac, td_u8 src_mac_len,
ext_tl_buf_info_st *out_buf);
#ifdef __cplusplus
}
#endif
#endif