91 lines
2.3 KiB
C
91 lines
2.3 KiB
C
|
|
|
|
#include "logic_bcu2bsu.h"
|
|
#define MAX_BSU_MQTT_POINTNUM (24)
|
|
// 定义哈希表的结构
|
|
|
|
// 声明全局变量
|
|
#if 1
|
|
// 初始化全局哈希表
|
|
void init_bcu_bsu_map(BcuBsuMap **bsu_map)
|
|
{
|
|
// 原始映射数组
|
|
bcu2bsu_t g_transBcu[] =
|
|
{
|
|
|
|
{kBsu_SysVolt, kBcu_TotalVolt},
|
|
{kBsu_SysCur, kBcu_TotalCur},
|
|
{kBsu_SOC, kBcu_SOC},
|
|
{kBsu_SOH, kBcu_SOH},
|
|
{kBsu_MaxCellTemp, kBcu_MaxCellTemp},
|
|
{kBsu_MinCellTemp, kBcu_MinCellTemp},
|
|
{kBsu_TotalChgE, kBcu_TotalChgCap},
|
|
{kBsu_TotalDChgE, kBcu_TotalDisChgCap},
|
|
};
|
|
for (int i = 0; i < sizeof(g_transBcu) / sizeof(g_transBcu[0]); i++)
|
|
{
|
|
BcuBsuMap *entry = (BcuBsuMap *)malloc(sizeof(BcuBsuMap));
|
|
if (entry == NULL)
|
|
{
|
|
// 处理内存分配失败
|
|
perror("无法为 BcuBsuMap 分配内存");
|
|
return;
|
|
}
|
|
entry->bsupointId = g_transBcu[i].bsupointId;
|
|
entry->bcupointId = g_transBcu[i].bcupointId;
|
|
HASH_ADD_INT(*bsu_map, bsupointId, entry);
|
|
}
|
|
}
|
|
|
|
// 清理全局哈希表
|
|
void free_bcu_bsu_map(BcuBsuMap *bsu_map)
|
|
{
|
|
BcuBsuMap *current_entry, *tmp;
|
|
|
|
HASH_ITER(hh, bsu_map, current_entry, tmp)
|
|
{
|
|
HASH_DEL(bsu_map, current_entry);
|
|
free(current_entry);
|
|
}
|
|
}
|
|
|
|
// 使用哈希表
|
|
int bcuTransbsuPoint(BcuBsuMap *hash_table, uint16_t key)
|
|
{
|
|
int value = 0;
|
|
// BcuBsuMap *element = NULL;
|
|
// if (element != NULL)
|
|
// {
|
|
// value = element->bcupointId; // 找到值
|
|
// }
|
|
// else
|
|
// {
|
|
// value = -1;
|
|
// }
|
|
BcuBsuMap *current;
|
|
for (current = hash_table; current != NULL; current = current->hh.next)
|
|
{
|
|
if(current->bsupointId==key)
|
|
{
|
|
value = current->bcupointId;
|
|
break;
|
|
}
|
|
value = -1;
|
|
}
|
|
|
|
return value; // 未找到
|
|
}
|
|
|
|
double getBsuRTDBPointValue(BcuBsuMap *bsu_map, rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId)
|
|
{
|
|
if (devType == kDev_Type_BSU && bcuTransbsuPoint(bsu_map, pointId) != -1)
|
|
{
|
|
return getRtdbPointValue(type, kDev_Type_BCU, 0, bcuTransbsuPoint(bsu_map, pointId));
|
|
}
|
|
else
|
|
{
|
|
return getRtdbPointValue(type, devType, devId, pointId);
|
|
}
|
|
}
|
|
|
|
#endif |