#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