forked from gary/ems
2
0
Fork 0
sun_ems/ems_c/logic/logic_bcu2bsu.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