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

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

第一类消息为: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)