⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vpl_pub.h

📁 motorola mpc系列 mpc852cpu bsp
💻 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 + -