驱动接口API设计的一种方法

驱动接口API设计的一种方法

xxx_interface.h

/*! \cond MMM_ID_API*/
/*!
 *  \brief
 *     提供给应用层的xxx命令
 */
typedef enum
{
    /*! 打开stub */
    XXX_OP_OPEN = 0,
    /*! 关闭stub */
    XXX_OP_CLOSE,
} xxx_cmd_t;

extern int stub_mod_cmd(void *, void *, void *, int);

/*启动xxx设备*/
/*int xxx_init(bool need_uninstall_led)*/
#define xxx_open(a)  (int)xxx_mod_cmd((void*)(a), (void*)(0), (void*)(0), XXX_OP_OPEN)

/*关闭xxx设备*/
/*int xxx_exit(void)*/
#define xxx_close() (int)xxx_mod_cmd((void*)(0), (void*)(0), (void*)(0), XXX_OP_CLOSE)

xxx_entry.h

typedef int (*xxx_func_t)(void *param0, void *param1, void *param2);

typedef struct
{
    xxx_func_t open;
    xxx_func_t close;
} stub_hal_ops_t;

xxx_entry.c

xxx_hal_ops_t *g_xxx_ops;
const xxx_hal_ops_t xxx_ops[] =
{
    xxx_open,
    xxx_close,
    NULL,
};

int32 inner_xxx_open(void* param0, void* param1, void* param2)
{
    int32 ret_val;
    g_xxx_ops = xxx_ops;
    ret_val = g_xxx_ops->open(param0, param1, param2);
    return ret_val;
}

int xxx_mod_cmd(void* param0, void* param1, void* param2, int cmd)
{
    switch (cmd)
    {
        case XXX_OP_OPEN:
        return inner_xxx_open(param0, param1, param2);

        case XXX_OP_CLOSE:
        return g_xxx_ops->close(param0, param1, param2);
    }
    return -1;
}
在底层对这两个代码进行实现
xxx_open
xxx_close
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值