美文网首页手机开发实战
手机开发实战41——手机模块设计2

手机开发实战41——手机模块设计2

作者: xjbclz | 来源:发表于2017-05-09 22:08 被阅读11次

    在手机系统中主要有两类消息:

    第一类消息为:Indication(IND)和返回Response(RSP)/Reject(REJ)

    它们用于下层向上层提示某种事件发生(IND)和MMI作出的反映(RSP/REJ),上层要么接受并处理该指示(RSP),要么拒绝处理(REJ)。

    第二类消息为:Request(REQ)和返回Confirmation(CNF)/Error(ERR)

    上层发送请求消息到下层请求某种服务,下层反馈给上层确认(CNF)或错误(ERR)消息。

    利用回调函数实现task之间的同步:

    //设置消息的回调函数

    typedef struct

    {

    T_RVF_ADDR_ID     addr_id;

    void               (*callback_func)(void *);

    } T_RV_RETURN_PATH;

    typedef struct

    {

    T_RV_HDR os_hdr;

    T_RV_RET status;

    T_RV_RETURN rp;

    union

    {

    T_CAMD_PARAMETERS configparams;

    BOOL enable_sensor;

    UINT8 *buff;

    }

    body;

    }

    T_CAMD_MSG;

    //发送消息

    T_RV_RET

    camd_usebuff (UINT8 *buff, T_RV_RETURN rp)

    {

    T_CAMD_MSG *msg_p;

    T_RV_RET ret_val;

    ret_val = camd_get_request_msg (&rp, &msg_p, CAMD_USEBUFF_REQ_MSG);

    if (ret_val == RV_OK)

    {

    ret_val = rvf_send_msg (camd_env_ctrl_blk_p->addr_id, msg_p);

    }

    return ret_val;

    }

    //处理完成此消息的动作后,调用回调函数或发送消息到另一task同步继续执行

    T_RVM_RETURN

    camd_send_response_to_client (UINT32 msg_id, T_CAMD_MSG * msg_p)

    {

    /* follow return path: callback or mailbox */

    msg_p->os_hdr.msg_id = msg_id;

    if (msg_p->rp.callback_func != NULL)

    {

    msg_p->rp.callback_func (msg_p);

    }

    else

    {

    if (rvf_send_msg (msg_p->rp.addr_id, msg_p) != RVF_OK)

    {

    return RVM_MEMORY_ERR;

    };

    }

    return RVM_OK;

    }

    相关文章

      网友评论

        本文标题:手机开发实战41——手机模块设计2

        本文链接:https://www.haomeiwen.com/subject/gpgitxtx.html