Files
SDK_SG200x_V2/middleware/v2/sample/common/sample_common_bin.c
carbon 0545e9dc6d init version 2024-05-07
commit d1edce71135cc6d98c0a4b5729774542b676e769
Author: sophgo-forum-service <forum_service@sophgo.com>
Date:   Fri Mar 15 16:07:33 2024 +0800

    [fix] recommend using ssh method to clone repo.
    [fix] fix sensor driver repo branch name.
2024-05-07 19:36:36 +08:00

127 lines
2.9 KiB
C

#include <stdio.h>
#include "sample_comm.h"
#include "cvi_bin.h"
#include "stdlib.h"
static CVI_S32 _getFileSize(FILE *fp, CVI_U32 *size)
{
CVI_S32 ret = CVI_SUCCESS;
fseek(fp, 0L, SEEK_END);
*size = ftell(fp);
rewind(fp);
return ret;
}
CVI_S32 SAMPLE_COMM_BIN_ReadParaFrombin(void)
{
CVI_S32 ret = CVI_SUCCESS;
FILE *fp = NULL;
CVI_U8 *buf = NULL;
CVI_CHAR binName[BIN_FILE_LENGTH] = { 0 };
CVI_U32 u32TempLen = 0, u32FileSize = 0;
ret = CVI_BIN_GetBinName(binName);
if (ret != CVI_SUCCESS) {
CVI_TRACE_SYS(CVI_DBG_WARN, "GetBinName(%s) fail\n", binName);
}
fp = fopen((const CVI_CHAR *)binName, "rb");
if (fp == NULL) {
CVI_TRACE_SYS(CVI_DBG_WARN, "Can't find bin(%s)\n", binName);
ret = CVI_FAILURE;
goto ERROR_HANDLER;
} else {
CVI_TRACE_SYS(CVI_DBG_WARN, "Bin exist (%s)\n", binName);
}
_getFileSize(fp, &u32FileSize);
buf = (CVI_U8 *)malloc(u32FileSize);
if (buf == NULL) {
ret = CVI_FAILURE;
CVI_TRACE_SYS(CVI_DBG_WARN, "Allocate memory fail\n");
goto ERROR_HANDLER;
}
u32TempLen = fread(buf, u32FileSize, 1, fp);
if (u32TempLen <= 0) {
CVI_TRACE_SYS(CVI_DBG_WARN, "read data to buff fail!\n");
ret = CVI_FAILURE;
goto ERROR_HANDLER;
}
ret = CVI_BIN_ImportBinData(buf, (CVI_U32)u32FileSize);
if (ret != CVI_SUCCESS) {
CVI_TRACE_SYS(CVI_DBG_WARN, "CVI_BIN_ImportBinData error! value:(0x%x)\n", ret);
goto ERROR_HANDLER;
}
ERROR_HANDLER:
if (fp != NULL) {
fclose(fp);
}
if (buf != NULL) {
free(buf);
}
return ret;
}
CVI_S32 SAMPLE_COMM_BIN_ReadBlockParaFrombin(enum CVI_BIN_SECTION_ID id)
{
CVI_S32 ret = CVI_SUCCESS;
FILE *fp = NULL;
CVI_U8 *buf = NULL;
CVI_CHAR binName[BIN_FILE_LENGTH] = {0};
CVI_U32 u32file_size = 0;
ret = CVI_BIN_GetBinName(binName);
if (ret != CVI_SUCCESS) {
CVI_TRACE_SYS(CVI_DBG_WARN, "GetBinName(%s) fail\n", binName);
}
fp = fopen((const CVI_CHAR *)binName, "rb");
if (fp == NULL) {
if (id == CVI_BIN_ID_VPSS) {
CVI_TRACE_SYS(CVI_DBG_WARN, "Can't find bin(%s)\n", binName);
} else if (id >= CVI_BIN_ID_ISP0 && id <= CVI_BIN_ID_ISP3) {
CVI_TRACE_SYS(CVI_DBG_WARN, "Can't find bin(%s), use default parameters\n", binName);
} else {
CVI_TRACE_SYS(CVI_DBG_WARN, "Can't find bin(%s)\n", binName);
}
ret = CVI_FAILURE;
goto ERROR_HANDLER;
} else {
CVI_TRACE_SYS(CVI_DBG_WARN, "Bin exist (%s)\n", binName);
}
_getFileSize(fp, &u32file_size);
buf = (CVI_U8 *)malloc(u32file_size);
if (buf == NULL) {
ret = CVI_FAILURE;
CVI_TRACE_SYS(CVI_DBG_WARN, "Allocate memory fail\n");
goto ERROR_HANDLER;
}
fread(buf, u32file_size, 1, fp);
if (id >= CVI_BIN_ID_ISP0 && id <= CVI_BIN_ID_ISP3) {
ret = CVI_BIN_LoadParamFromBin(CVI_BIN_ID_HEADER, buf);
if (ret != CVI_SUCCESS) {
CVI_TRACE_SYS(CVI_DBG_WARN, "Bin Version not match, use default parameters\n");
goto ERROR_HANDLER;
}
}
ret = CVI_BIN_LoadParamFromBin(id, buf);
ERROR_HANDLER:
if (fp != NULL) {
fclose(fp);
}
if (buf != NULL) {
free(buf);
}
return ret;
}