/******************************************************************************* 函数名称: MML_Exit 功能说明: 无 输入参数: 无 输出参数: 无 返 回 值: >=0: 成功 < 0: 错误代码 作 者: 曾华荣 ([email protected]) 修改时间: 2012年4月15日 说 明: 无 *******************************************************************************/ void MML_Exit(int32_t v_para) { int32_t ret = 0; g_exit = B_TRUE; ret = SEND_CMD(MML_CMD_INIT); if (0 != ret) { OS_PRINT("Send cmd failed. cmd: %d, ret: %d\n", MML_CMD_INIT, ret); } return; }
/* This is user space implementation of osal_firmware_request() It copies fw image file to a malloced buffer and update the size and buffer pointer in fw_ctxt. */ osal_result os_firmware_request(const char *fw_image_fs_path, os_firmware_t *fw_ctxt) { FILE *fp = NULL; osal_result os_ret = OSAL_ERROR; if ( NULL != fw_ctxt) { fp = fopen(fw_image_fs_path, "rb"); if (NULL != fp) { fseek(fp, 0L, SEEK_END); fw_ctxt->fw_size = ftell(fp); /* get image size */ fseek(fp, 0L, SEEK_SET ); /*Allocate buffer for fw image */ fw_ctxt->fw_address = OS_ALLOC(fw_ctxt->fw_size); if (NULL != fw_ctxt->fw_address) { size_t data_read; data_read = fread(fw_ctxt->fw_address, 1, fw_ctxt->fw_size, fp); if (data_read == fw_ctxt->fw_size) { os_ret = OSAL_SUCCESS; } } fclose(fp); } else { OS_PRINT("ERR: %s file not found \n", fw_image_fs_path); } } else { os_ret = OSAL_INVALID_PARAM; OS_PRINT("ERR: fw_ctxt is NULL\n"); } return os_ret; }
/******************************************************************************* 函数名称: MmlSendCmd 功能说明: 无 输入参数: 无 输出参数: 无 返 回 值: >=0: 成功 < 0: 错误代码 作 者: 曾华荣 ([email protected]) 修改时间: 2012年4月15日 说 明: 无 *******************************************************************************/ void MmlSendCmd(void) { int32_t ret = 0; uint32_t waitTimeCnt = 0; /* 初始化 */ memset(&g_userCmd, 0, sizeof(g_userCmd)); g_userCmd.status = MML_STATUS_INIT; g_exit = B_FALSE; /* 注册信号函数 */ signal(SIGINT, MML_Exit); signal(SIGKILL, MML_Exit); signal(SIGTERM, MML_Exit); /* 发送命令 */ g_userCmd.status = MML_STATUS_INPUT_OK; ret = SEND_CMD(MML_CMD_PROCESS_CMD); if (0 != ret) { OS_PRINT("Send cmd failed. cmd: %d, ret: %d\n", MML_CMD_PROCESS_CMD, ret); MML_Exit(0); return; } /* 检查命令执行结果 */ while (B_FALSE == g_exit) { if ((MML_STATUS_INIT == g_userCmd.status) || (MML_STATUS_OUTPUT_BEGIN == g_userCmd.status)) { if (MML_STATUS_INIT == g_userCmd.status) { waitTimeCnt += MML_WAIT_TIME; if (MML_WAIT_TIMEOUT < waitTimeCnt) { OS_PRINT("Wait for result overtime.\n"); MML_Exit(0); return; } } ret = SEND_CMD(MML_CMD_GET_RESULT); if (0 != ret) { OS_PRINT("Send cmd failed. cmd: %d, ret: %d\n", MML_CMD_GET_RESULT, ret); MML_Exit(0); return; } OS_SLEEP_MS(MML_WAIT_TIME); } waitTimeCnt = 0; OS_PRINT("%s", g_userCmd.dat); if (MML_STATUS_OUTPUT_CONTINUE == g_userCmd.status) { g_userCmd.status = MML_STATUS_OUTPUT_BEGIN; } else if (MML_STATUS_OUTPUT_END == g_userCmd.status) { break; } } MML_Exit(0); return; }