farScope/globals/test_config.cpp
jerryzeng bcefbebd6d v0.1
基本版本:所有模块中每个Peak的处理时钟不超过9个clock
2026-10-14 20:28:58 +08:00

293 lines
9.2 KiB
C++

#include "tbGlobals.h"
#include <stdio.h>
#include <string.h>
#define ARRAY_COUNT(a) (sizeof(a) / sizeof((a)[0]))
//test data root path
const char tb_sim_root[] = "D:/zeng/WoodCamera/farScope/testData";
//test data groups
const TbGroup tb_groups[] = {
{ "Grp_0", 0, 178 },
};
const size_t tb_group_count = ARRAY_COUNT(tb_groups);
const char * const tb_module_names[TB_MODULE_COUNT] = {
"1_peakCentering",
"2_convolve",
"3_subPix",
"4_Calib",
"5_lrMatch",
"6_SSProc",
"7_compute3D"
};
static int valid_name(const char *s)
{
const unsigned char *p = (const unsigned char *)s;
if (p == NULL || *p == '\0') return 0;
for (; *p; ++p) {
if (!((*p >= 'A' && *p <= 'Z') ||
(*p >= 'a' && *p <= 'z') ||
(*p >= '0' && *p <= '9') || *p == '_' || *p == '-'))
return 0;
}
return 1;
}
static int same_name(const char *a, const char *b)
{
unsigned char x, y;
do {
x = (unsigned char)*a++;
y = (unsigned char)*b++;
if (x >= 'A' && x <= 'Z') x = (unsigned char)(x - 'A' + 'a');
if (y >= 'A' && y <= 'Z') y = (unsigned char)(y - 'A' + 'a');
if (x != y) return 0;
} while (x != '\0');
return 1;
}
int tb_check_config(void)
{
size_t g, j;
int m, n;
if (tb_group_count == 0) return -1;
for (g = 0; g < tb_group_count; ++g) {
const TbGroup *group = &tb_groups[g];
if (!valid_name(group->name) || group->start_id < 0 ||
group->end_id < group->start_id) {
fprintf(stderr, "Invalid group at index %lu\n", (unsigned long)g);
return -1;
}
for (j = 0; j < g; ++j) {
if (same_name(group->name, tb_groups[j].name)) {
fprintf(stderr, "Duplicate group name: %s\n", group->name);
return -1;
}
}
}
for (m = 0; m < TB_MODULE_COUNT; ++m) {
if (!valid_name(tb_module_names[m]) ||
same_name(tb_module_names[m], "src")) {
fprintf(stderr, "Invalid module name at index %d\n", m);
return -1;
}
for (n = 0; n < m; ++n) {
if (same_name(tb_module_names[m], tb_module_names[n])) {
fprintf(stderr, "Duplicate module name\n");
return -1;
}
}
}
return 0;
}
int tb_get_paths_at(const char *root, TbModule module,
size_t group_index, int file_id, int LRflag, TbPaths *paths)
{
const TbGroup *group;
int n1,n2;
if (root == NULL || root[0] == '\0' || paths == NULL ||
(int)module < 0 || (int)module >= TB_MODULE_COUNT ||
group_index >= tb_group_count) return -1;
group = &tb_groups[group_index];
if (file_id < group->start_id || file_id > group->end_id) return -1;
n1 = snprintf(paths->paras, sizeof(paths->paras),
"%s/%s/2DData/%d_para_verilog.txt", root, group->name, file_id);
if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->paras))) return -1;
switch(module)
{
case TB_1_peakCentering:
if(LRflag == 0)
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/2DData/%d_L_verilog.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/1_peakCentering/%d_L_peakCentering.txt", root, group->name, file_id);
}
else
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/2DData/%d_R_verilog.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/1_peakCentering/%d_R_peakCentering.txt", root, group->name, file_id);
}
break;
case TB_2_convolve:
if(LRflag == 0)
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/1_peakCentering/%d_L_peakCentering.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/2_convolve/%d_L_convolve.txt", root, group->name, file_id);
}
else
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/1_peakCentering/%d_R_peakCentering.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/2_convolve/%d_R_convolve.txt", root, group->name, file_id);
}
break;
case TB_3_subPix:
if(LRflag == 0)
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/2_convolve/%d_L_convolve.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/3_subPix/%d_L_subPix.txt", root, group->name, file_id);
}
else
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/2_convolve/%d_R_convolve.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/3_subPix/%d_R_subPix.txt", root, group->name, file_id);
}
break;
case TB_4_Calib:
if(LRflag == 0)
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/3_subPix/%d_L_subPix.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/4_Calib/%d_L_calib.txt", root, group->name, file_id);
}
else
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/3_subPix/%d_R_subPix.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/4_Calib/%d_R_calib.txt", root, group->name, file_id);
}
break;
case TB_5_lrMatch:
if(LRflag == 0)
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/4_Calib/%d_L_calib.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id);
}
else
{
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/4_Calib/%d_R_calib.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id);
}
break;
case TB_6_SSProc:
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/5_lrMatch/%d_lrMatch.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/6_SSProc/%d_ssProc.txt", root, group->name, file_id);
break;
case TB_7_compute3D:
n1 = snprintf(paths->input, sizeof(paths->input),
"%s/%s/SimResult/6_SSProc/%d_ssProc.txt", root, group->name, file_id);
n2 = snprintf(paths->output, sizeof(paths->output),
"%s/%s/SimResult/7_compute3D/%d_compute3D.txt", root, group->name, file_id);
break;
default:
break;
}
return ( (n1 < 0) || (n2 < 0) || ((size_t)n1 >= sizeof(paths->input)) || ((size_t)n2 >= sizeof(paths->output))) ? -1 : 0;
}
int tb_get_paths(TbModule module, size_t group_index,
int file_id, int LRflag, TbPaths *paths)
{
return tb_get_paths_at(tb_sim_root, module, group_index, file_id, LRflag, paths);
}
int tb_get_fittingMap_paths(TbModule module, size_t group_index, TbFittingMapPaths *paths)
{
const TbGroup *group;
int n1;
if (tb_sim_root == NULL || tb_sim_root[0] == '\0' || paths == NULL ||
(int)module != TB_4_Calib || group_index >= tb_group_count) return -1;
group = &tb_groups[group_index];
n1 = snprintf(paths->calib_fittingMap_L, sizeof(paths->calib_fittingMap_L),
"%s/%s/simParas/fittingMapL.txt", tb_sim_root, group->name);
if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->calib_fittingMap_L))) return -1;
n1 = snprintf(paths->calib_fittingMap_R, sizeof(paths->calib_fittingMap_R),
"%s/%s/simParas/fittingMapR.txt", tb_sim_root, group->name);
if ( (n1 < 0) || ((size_t)n1 >= sizeof(paths->calib_fittingMap_R))) return -1;
return 0;
}
Luma_frameInfo readParaFile(const char* file, int idx)
{
std::ifstream inputFile(file);
Luma_frameInfo frameInfo;
std::string strLineTxt;
int data;
getline(inputFile, strLineTxt); //XL
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.left_L = (uint16_t)data;
getline(inputFile, strLineTxt); //XR
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.right_L = (uint16_t)data;
getline(inputFile, strLineTxt); //TL
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.left_T = (uint16_t)data;
getline(inputFile, strLineTxt); //TR
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.right_T = (uint16_t)data;
getline(inputFile, strLineTxt); //W
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.W = (uint16_t)data;
getline(inputFile, strLineTxt); //H
sscanf(strLineTxt.c_str(), "%d", &data);
frameInfo.H = (uint16_t)data;
getline(inputFile, strLineTxt); //U0
sscanf(strLineTxt.c_str(), "%x", &data);
UintFloat tmp;
tmp.unData = (unsigned int)data;
frameInfo.u0 = tmp.fdata;
getline(inputFile, strLineTxt); //V0
sscanf(strLineTxt.c_str(), "%x", &data);
tmp.unData = (unsigned int)data;
frameInfo.v0 = tmp.fdata;
getline(inputFile, strLineTxt); //F
sscanf(strLineTxt.c_str(), "%x", &data);
tmp.unData = (unsigned int)data;
frameInfo.F = tmp.fdata;
getline(inputFile, strLineTxt); //F
sscanf(strLineTxt.c_str(), "%x", &data);
tmp.unData = (unsigned int)data;
frameInfo.baseLen = tmp.fdata;
frameInfo.FrmNo = idx;
frameInfo.TimeStamp = idx * 1000;
frameInfo.encInfo = idx;
inputFile.close();
return frameInfo;
}