📄 vpl_pub.h
字号:
/*-----------------------------------------------------------------------------
文件名 : Vpl_pub.h
作者 :
版本 :
完成日期: 2003-xx-xx
文件描述: XXX模块公共头文件
备注 :
修改历史:
1. 修改者 :
时间 : 2003-xx-xx
版本 :
修改原因 :
2. ...
-----------------------------------------------------------------------------*/
#ifndef _VPL_PUB_H__
#define _VPL_PUB_H__
/*================================头文件引用=================================*/
/*==================================宏定义===================================*/
#define VPL_MAX_INDEX 32 /* 所有的VPL最大通道数目*/
#define VPL_MAX_PHY_INDEX 16 /*单个物理类型下最大的通道数目*/
#define VPL_MAX_HDLC 16
#define VPL_MAX_MAC 1
#define VPL_MAX_SERIAL 1
#define VPL_MTU_HDLC 1024
#define VPL_MTU_MAC 1524
#define VPL_MTU_SERIAL 128
#define VPL_SEND_MSG 1
#define VPL_RECV_MSG 0
#define VPL_PRINT_MAX_LEN 500
#define VPL_MemStaticAlloc(ulSize) \
malloc((ulSize))
#define VPL_MemSet(pDest, ulSize) \
memset((pDest), G_NULL_BYTE, (ulSize))
#define VPL_MEM_ALLOC(ulSize) \
((g_pfPhyAlloc != G_NULL_PTR) ? g_pfPhyAlloc((ulSize)) : G_NULL_PTR)
#define VPL_MEM_FREE(pBlock) \
if((pBlock) != G_NULL_PTR && g_pfPhyFree != G_NULL_PTR) \
g_pfPhyFree((pBlock))
#define VPL_COUNTER(pstVplTable, ucCountType) \
(pstVplTable)->stCount[(ucCountType)]++;
#define VPL_AddRecvCount(ulVplIndex, enVplRecvType)\
m_pstVplTable[ulVplIndex].ulRecvCount[enVplRecvType]++;
/*===============================枚举变量定义================================*/
/* 接收模块统计 */
typedef enum tag_EN_VPL_RECEIVER_TYPE
{
EN_VPL_RECEIVER_DL,
EN_VPL_RECEIVER_DSP,
EN_VPL_RECEIVER_MINIP,
EN_VPL_RECEIVER_URP,
EN_VPL_RECEIVER_BUTT
}EN_VPL_RECEIVER_TYPE;
/* 发送物理类型定义*/
typedef enum tag_EN_PHY_TYPE
{
VPL_HDLC,
/* VPL_MAC_IN, 内部通讯的MAC*/
VPL_MAC_EXT, /* 外部通讯的MAC*/
VPL_SERIAL,
VPL_BUTT /* 物理类型定义的尾部*/
}EN_PHY_TYPE;
typedef enum tag_EN_VPL_IO_CMD
{
VPL_IO_GET_MAC,
VPL_IO_GET_STATE,
VPL_IO_SET_MAC,
VPL_IO_CMD_BUTT
}EN_VPL_IO_CMD;
typedef enum tag_EN_VPL_COUNT_TYPE
{
VPL_COUNT_HLE_TO_VPL,
VPL_COUNT_VPL_TO_HLE,
VPL_COUNT_VPL_TO_PHY,
VPL_COUNT_PHY_TO_VPL,
VPL_COUNT_BUTT
}EN_VPL_COUNT_TYPE;
typedef enum tag_EN_VPL_PRINT_CHANNEL
{
VPL_PRINT_MUST,
VPL_PRINT_ERR,
VPL_PRINT_SEND,
VPL_PRINT_RECV,
VPL_PRINT_TIMER,
VPL_PRINT_INFO,
VPL_PRINT_BUTT
}EN_VPL_PRINT_CHANNEL;
/*===============================函数指针定义================================*/
/* 常用物理驱动的通道接口函数指针*/
typedef _U32 (* PF_PHY_INTERFACE)(_U8 ucPhyType, _U32 ulPhyChannel);
/* 物理驱动初始化函数指针*/
typedef _U32 (* PF_PHY_INITIAL)(_U8 ucPhyType);
/* 驱动发送函数指针*/
typedef _U32 (* PF_PHY_SEND)(_U8 ucPhyType, _U32 ulPhyChannel, _VOID *pBlock, _VOID *pData, _U16 usDataLen);
/* 驱动申请内存函数指针*/
typedef _VOID * (* PF_PHY_ALLOC)(_U32 ulSzie);
/* 驱动释放内存函数指针*/
typedef _VOID (* PF_PHY_FREE)(_VOID *pBlock);
/*设置块内存是否进行泄漏检查函数指针*/
typedef _U32 (* PF_PHY_MEM_ISCHECK)(_VOID* pMem, _BOOL bIsLeakCheck);
/* 驱动IO控制函数指针*/
typedef union tag_UN_VPL_IO_OPTION
{
_U8 ucMacAddr[6];
_U32 ulstatus;
}UN_VPL_IO_OPTION;
typedef _U32 (* PF_PHY_IO_CONTROL)(_U8 ucPhyType, _U32 ulPhyChannel, _U16 usCmd, UN_VPL_IO_OPTION *punOption);
/* Higher Layers Entity 上层实体接收函数选择指针*/
typedef _BOOL (* PF_HLE_SELECT)(_U32 ulVplIndex, _VOID *pData, _U16 usDataLen);
/* Higher Layers Entity 上层实体接收函数指针*/
typedef _U32 (* PF_HLE_RECV)(_U32 ulVplIndex, _VOID *pBlock, _VOID *pData, _U16 usDataLen);
/* 常用上层实体接口函数指针*/
typedef _U32 (* PF_HLE_INTERFACE)(_U32 ulVplIndex);
/*===============================数据结构定义================================*/
typedef struct tag_ST_VPL_TO_HLE
{
_U8 ucIsInvaild; /* 是否失效标记 */
EN_VPL_RECEIVER_TYPE enVplRecvType; /* 接收者,用于统计 */
PF_HLE_SELECT pfSelect; /* 上层实体对应的接收选择函数 */
PF_HLE_RECV pfRecv; /* 上层实体对应的接收函数 */
struct tag_ST_VPL_TO_HLE *pNext;
}ST_VPL_TO_HLE;
typedef struct tag_ST_VPL_ALARM
{
PF_HLE_INTERFACE pfActive; /* 上层实体对应的通道正常通知处理*/
PF_HLE_INTERFACE pfFail; /* 上层实体对应的通道故障通知处理*/
struct tag_ST_VPL_ALARM *pNext;
}ST_VPL_ALARM;
typedef struct tag_ST_VPL_COUNT
{
_U32 ulHleToVpl;
_U32 ulVplToHle;
_U32 ulVplToPhy;
_U32 ulPhyToVpl;
}ST_VPL_COUNT;
typedef struct tag_ST_VPL_MODEL
{
_U32 ulMtu; /* 最大的传送单元*/
_U32 ulMaxChannel; /* 最大的物理通道号*/
PF_PHY_INITIAL pfPhyInit; /* 重新初始化驱动申请的内存*/
PF_PHY_SEND pfPhySend; /* 驱动对应的消息发送函数*/
PF_PHY_INTERFACE pfPhyOpen; /* 物理通道打开的注册函数*/
PF_PHY_INTERFACE pfPhyClose; /* 物理通道关闭的注册函数*/
PF_PHY_IO_CONTROL pfPhyIO; /* 物理通道控制的注册函数*/
ST_VPL_ALARM *pstAlarm; /* 通道故障和恢复上报*/
ST_VPL_TO_HLE *pstToHle; /* 接收消息分发到各上层实体*/
}ST_VPL_MODEL;
typedef struct tag_ST_VPL_TABLE
{
_U8 ucPhyType; /* 物理类型 */
_U32 ulPhyIndex; /* 物理通道索引号 */
/* 16位码元比特链路控制*/
_U8 bi1IsUsed :1; /* 通道是否使用标志 */
_U8 bi1IsLocalLoop :1; /* 通道近端自环标志 */
_U8 bi1IsRemoteLoop :1; /* 通道远端自环标志 */
/* 统计信息*/
_U32 stCount[VPL_COUNT_BUTT]; /* 发送和接收的计数统计 */
_U32 ulRecvCount[EN_VPL_RECEIVER_BUTT]; /* 接收PID统计 */
}ST_VPL_TABLE;
/*===============================消息结构定义================================*/
/*#pragma pack(1, 1, 1)
#pragma pack()
*/
/*===============================函数原型定义================================*/
/* 给上层实体提供的函数接口*/
extern _U32 VPL_SendToPhy(_U32 ulVplIndex, _VOID *pBlock, _VOID *pData, _U16 usDataLen);
extern _U32 VPL_GetPhyInfoFromVPLIndex(_U32 ulVplIndex, _U8 *pucPhyType, _U32 *pulPhyChannel);
extern _U32 VPL_GetVPLIndexFromPhyInfo(_U8 ucPhyType, _U32 ulPhyChannel, _U32 *pulVplIndex);
extern _U32 VPL_ChannelOpen(_U32 ulVplIndex);
extern _U32 VPL_ChannelClose(_U32 ulVplIndex);
extern _U32 VPL_IO_Control(_U32 ulVplIndex, _U16 usCmd, UN_VPL_IO_OPTION *punOption);
/* 给物理驱动提供的函数接口*/
extern _VOID VPL_BspMalloc(_VOID);
extern _VOID VPL_BspInitial(_VOID);
extern _U32 VPL_RecvFromPhy(_U8 ucPhyType, _U32 ulPhyChannel, _VOID *pBlock, _VOID *pData, _U16 usDataLen);
extern _U32 VPL_ChannelActive(_U8 ucPhyType, _U32 ulPhyChannel);
extern _U32 VPL_ChannelFail(_U8 ucPhyType, _U32 ulPhyChannel);
/* 内部定义的函数*/
extern _VOID VPL_RegistAlarmFunc(_U8 ucVplType, PF_HLE_INTERFACE pfActive, PF_HLE_INTERFACE pfFail);
extern _VOID VPL_RegistRecvFunc(_U8 ucVplType, PF_HLE_SELECT pfSelect, PF_HLE_RECV pfRecv, EN_VPL_RECEIVER_TYPE enVplRecvType);
extern _U32 VPL_CreatVPLIndex(_U8 ucPhyType, _U32 ulPhyChannel, _U32 *pulVplIndex);
extern _VOID VPL_BspConfig(_VOID);
extern _VOID VPL_PrivateInit(_VOID);
extern _VOID VPL_PrintMsg(_VOID *pMsg, _U8 ucDirect, _U16 usOffset);
extern _VOID VPL_Print(const _S8 *pFormat, ...);
/*=============================全局变量外部引用==============================*/
extern ST_VPL_MODEL g_stVplModel[];
extern PF_PHY_ALLOC g_pfPhyAlloc; /* 物理驱动申请内存指针*/
extern PF_PHY_FREE g_pfPhyFree; /* 物理驱动释放内存指针*/
extern PF_PHY_MEM_ISCHECK g_pfPhyIsMemCheck; /* 设置块内存是否进行泄漏检查函数指针*/
extern ST_VPL_TABLE *m_pstVplTable;
extern _U32 *m_pulPhy2VPLIndex[];
/*===========================对外接口函数外部引用============================*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* _VPL_PUB_H__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -