结构体内嵌函数指针实现面向对象分层调用

一、定义回调指针

typedef void (*pRpcRxBtCallBack)(char len, char *buf);
typedef void (*pRpcPreSleepNotifyCallback)(uint8_t sleepmode);
typedef void (*pRpcWakeupNotifyCallback)( char wakeUpSource);
typedef void (*pRpcTimeCalcNotifyCallback)(TimeInfo *pTimeInfo, TimeCalcFlag type);
typedef void (*pRpcEcallNotifyCallback)( char ecallType);
typedef void (*pRpcRxTboxDtcCallback)( short len, char *buf);
typedef void (*pRpcRxAirBagInfoCallback)( short len, char *buf);
typedef void (*pRpcClientConnetNotify)( RpcConnectStatus connectStatus);

二、定义结构体指针

typedef struct rpcRxCallBack
{
    pRpcRxBtCallBack                rpcRxBtCallBack;
    pRpcPreSleepNotifyCallback      rpcPreSleepNotifyCallback;
    pRpcWakeupNotifyCallback        rpcWakeupNotifyCallback;
    pRpcTimeCalcNotifyCallback      rpcTimeCalcNotifyCallback;
    pRpcEcallNotifyCallback         rpcEcallNotifyCallback;
    pRpcRxTboxDtcCallback           rpcRxTboxDtcCallback;
    pRpcRxAirBagInfoCallback        rpcRxAirBagInfoCallback;
}RpcCallBack;

三、定义全局结构体

RpcCallBack    g_rpcCallBack;
static RpcCallBack *RpcGetClientCallback(void)
{
    return &g_rpcCallBack;
}

三、注册函数

void RpcRegisterCallback (RpcCallBack  rpcCallBack)
{
    RpcCallBack    *pRpcCallBack   = RpcGetClientCallback();
          
    if(NULL != rpcCallBack.rpcRxBtCallBack)
    {   
        pRpcCallBack->rpcRxBtCallBack = rpcCallBack.rpcRxBtCallBack;
    }
    else
    {
        pRpcCallBack->rpcRxBtCallBack = NULL;
    }
}

四、实例


void BytonDidDemoConnetNotify(RpcConnectStatus connectStatus)
{
  
}
void BytonEcallClientReister(void)
{
    RpcCallBack  rpcCallBack;
    rpcCallBack.rpcRxBtCallBack = NULL;
    rpcCallBack.rpcCanCallBack = NULL;
    rpcCallBack.rpcRxCantpFrameData = NULL;
    rpcCallBack.prpcRxdidInfo = BytonDidDemoRxDidInfo;
    rpcCallBack.rpcClientConnetNotify = BytonDidDemoConnetNotify;
    RpcRegisterCallback(rpcCallBack);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值