C++ 项目中的 函数指针

HttpServer.cpp

    #define A311D_TO_SC2000_SETEVENTPARAM_URL   "/Camera/A311D_TO_SC2000_SeteEventParam"

    typedef int (*i_Func_vpp_vp)(void **pp, void *p);

    typedef struct
    {
        const XAG_CHAR *path;
        i_Func_vpp_vp func;
    }HTTP_SERVER_REQ_FUNC, *pHTTP_SERVER_REQ_FUNC;

    HTTP_SERVER_REQ_FUNC http_server_req_func[] =
    {    
        {A311D_TO_SC2000_SETEVENTPARAM_URL, REQ_A311D_TO_SC2000_EventParam}
    }


RecvCmd.cpp
    
    XAG_S32 REQ_A311D_TO_SC2000_EventParam(XAG_VOID **pp, XAG_VOID *path)
    {
        /* radar */
        cJSON_GetValueInt(st_RtkEvetParm.refDistance,  cJSON_GetObjectItem(item, "radarPeriod"));
        cJSON_GetValueInt(st_RtkEvetParm.minDistance,  cJSON_GetObjectItem(item, "minDistance"));
        cJSON_GetValueInt(st_RtkEvetParm.maxDistance,  cJSON_GetObjectItem(item, "maxDistance"));
        
        s32Ret = pm_AppsCtrl->m_CameraCtrl.Callback_Network_MissionStatusUpdate(st_RtkEvetParm.s32Cmd, &st_RtkEvetParm, sizeof(st_RtkEvetParm));
    }

CameraCtrl.cpp

    XAG_S32 CameraCtrl::Callback_Network_MissionStatusUpdate(XAG_U32 wp_seg, void *extra, XAG_U32 size){
        return m_SerialProxy.Serial_FC_UpdateMissionStatus(wp_seg, extra, size);
    }

SerialProxy.cpp

    XAG_S32  SerialProxy::Serial_FC_UpdateMissionStatus(XAG_U32 wp_seg, void *extra, XAG_U32 size){
        return m_FcProc.FcProc_UpdateMissionStatus(wp_seg, extra, size);
    }

FcProc.cpp

    XAG_S32 FcProc::FcProc_UpdateMissionStatus(XAG_U32 wp_seg, void *extra, XAG_U32 size)
    {
        int32_t s32Ret = -1;
        uint32_t u32Cmd = wp_seg;
        switch(u32Cmd)
        {
            case E_RTK_EVENT_PARM:
                FcProc_RecvEventParam(extra,size);
            break;
        }
                
        return s32Ret=0;
    }

    
    int32_t  FcProc::FcProc_RecvEventParam(void *pData, uint32_t s32Size)
    {
        if((NULL != pData) && (s32Size == sizeof(RecvRtkEventParam_ST)))
        {
             stEVENT_SYNC_DATA.u32RadarRefDis = stRecvEvent.refDistance & 0xFFFF;
             
             pm_FcProcInterface->Callback_EventInfoAdd(&stEVENT_SYNC_DATA);
        }

        return s32Ret=0;
    }

SerialProxy.cpp

    XAG_BOOL SerialProxy::Callback_EventInfoAdd(EVENT_SYNC_DATA_S* pstEventInfo)
    {
        FunSerialCmdSendCallBack(FunCameraCtrlCallBack,pstEventInfo, sizeof (EVENT_SYNC_DATA_S), NULL, NULL, CAMERA_MODULE_EVENT_INFO);
        return true;
    }

SerialProxy.h

    class SerialProxy
    {
        public:
        /* 函数指针 */
        SERIAL_CMD_SEND_BACK FunSerialCmdSendCallBack;      

        /* 函数指针声明 */
        typedef XAG_BOOL (*SERIAL_CMD_SEND_BACK)(XAG_VOID* ,XAG_VOID* , XAG_U32 ,XAG_VOID* , XAG_U32 *,XAG_U8 );

        /* 为了转换成类 */
        XAG_VOID* FunCameraCtrlCallBack;
    }          

/*
 *赋值与调用
 */
XAG_BOOL SerialProxy::SerialCallbackHandler(XAG_VOID * _funCallBak,SERIAL_CMD_SEND_BACK _m_Serial_back)
{
    FunCameraCtrlCallBack = _funCallBak;            /* 为了转换成类 */
    FunSerialCmdSendCallBack = _m_Serial_back;
    return true;
}

XAG_BOOL CameraCtrl::CameraCtrl_Init()
{
    m_SerialProxy.SetInterface(this);
    m_SerialProxy.SerialCallbackHandler(this,CameraCtrl_SerialCallBack);
}

XAG_BOOL CameraCtrl::CameraCtrl_SerialCallBack(XAG_VOID* pFunc, XAG_VOID* pDataSrc, XAG_U32 u32SrcSize,\
                                XAG_VOID* pDataDir, XAG_U32 *pu32DirSize, XAG_U8 u8Event)
{
    CameraCtrl *pmCameraCtrl = (CameraCtrl *)pFunc; /* 转换成类 */
    
    return pmCameraCtrl->CameraCtrl_Module_Interface(pDataSrc, u32SrcSize, pDataDir, pu32DirSize, u8Event);
}

XAG_BOOL CameraCtrl::CameraCtrl_Module_Interface(XAG_VOID* pDataSrc, XAG_U32 u32SrcSize,\
                                        XAG_VOID* pDataDir, XAG_U32 *pu32DirSize, XAG_U8 u8Event)
{
    return _CameraCtrl_Module_Interface( pDataSrc, u32SrcSize,pDataDir, pu32DirSize, u8Event);
}

XAG_BOOL CameraCtrl::_CameraCtrl_Module_Interface(XAG_VOID* pDataSrc, XAG_U32 u32SrcSize,\
                            XAG_VOID* pDataDir, XAG_U32 *pu32DirSize, XAG_U8 u8Event)
{
    switch (stCameraModule.eType)
    {
        case CAMERA_MODULE_EVENT_INFO:
            m_Sync_Picture_Info.Sync_Positioning_Event_Add(stPOSITION_EVENT_INFO.stEVENT_SYNC_DATA.csPath, (EVENT_SYNC_DATA_S *)pDataSrc);
            break;
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值