在手机系统中主要有两类消息:
第一类消息为: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;
}
网友评论