MAILBOX_EXTERN unsigned long mailbox_send_msg( unsigned long mailcode, void *data, unsigned long length) { unsigned long ret_val; unsigned long try_go_on = MAILBOX_TRUE; unsigned long try_times = 0; extern bool hifi_is_loaded(void); if (!hifi_is_loaded()) { return MAILBOX_TARGET_NOT_READY; } ret_val= BSP_CPU_StateGet(mailbox_get_dst_id(mailcode)); if(!ret_val) { return MAILBOX_TARGET_NOT_READY; } ret_val = mailbox_try_send_msg(mailcode, data, length); if (MAILBOX_FALSE == mailbox_int_context()) { /*发送满等待轮询尝试*/ while (MAILBOX_FULL == ret_val) { mailbox_delivery(mailbox_get_channel_id(mailcode)); try_go_on = mailbox_scene_delay(MAILBOX_DELAY_SCENE_MSG_FULL, &try_times); if (MAILBOX_TRUE == try_go_on) { ret_val = mailbox_try_send_msg(mailcode, data, length); } else { break; } } } if (MAILBOX_OK != ret_val) { mailbox_show(mailcode,0); mailbox_assert(ret_val); if (MAILBOX_FULL != ret_val) { ret_val = MAILBOX_ERRO; } return ret_val; } return ret_val; }
/***************************************************************************** 函 数 名 : mailbox_send_msg 功能描述 : 提供给各模块进行核间数据发送的接口。 输入参数 : unsigned int mailcode -- 邮件的id号, 逻辑通道号。 unsigned char *data -- 指向邮件数据的指针。 unsigned int length/byte -- 数据或者消息总长度 字节为单位。 输出参数 : 无 返 回 值 : unsigned int 成功OK, 异常返回值 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年9月28日 作 者 : 莫南 00176101 修改内容 : 新生成函数 *****************************************************************************/ MAILBOX_EXTERN unsigned int mailbox_send_msg( unsigned int mailcode, void *data, unsigned int length) { int ret_val = MAILBOX_OK; unsigned int try_go_on = MAILBOX_TRUE; int try_times = 0; ret_val= BSP_CPU_StateGet(mailbox_get_dst_id(mailcode)); if(!ret_val) { return MAILBOX_TARGET_NOT_READY; } ret_val = (int)mailbox_try_send_msg(mailcode, data, length); if (MAILBOX_FALSE == mailbox_int_context()) { /*发送满等待轮询尝试*/ while ((int)MAILBOX_FULL == ret_val) { mailbox_delivery(mailbox_get_channel_id(mailcode)); try_go_on = (unsigned int)mailbox_scene_delay(MAILBOX_DELAY_SCENE_MSG_FULL, &try_times); if (MAILBOX_TRUE == try_go_on) { ret_val = (int)mailbox_try_send_msg(mailcode, data, length); } else { break; } } } if (MAILBOX_OK != ret_val) { /*mailbox_show(mailcode,0);*/ /*mailbox_assert(ret_val);*/ if ((int)MAILBOX_FULL != ret_val) { ret_val = (int)MAILBOX_ERRO; } return (unsigned int)ret_val; } return (unsigned int)ret_val; }