From 60ade3b413442dc96cc1d148ce1f96adb6889cfe Mon Sep 17 00:00:00 2001 From: ahu_gq <57164135+gq-hefei@users.noreply.github.com> Date: Sat, 24 May 2025 17:17:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0web=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E6=97=B6=E5=BA=93=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clib/web/aarch64/libcrtdb.so | Bin 0 -> 49880 bytes clib/web/include/bsp_rtdb.h | 143 +++++++++++++++++++++++++++++++++++ clib/web/readme | 78 +++++++++++++++++++ clib/web/x86/libcrtdb.so | Bin 0 -> 53160 bytes 4 files changed, 221 insertions(+) create mode 100644 clib/web/aarch64/libcrtdb.so create mode 100644 clib/web/include/bsp_rtdb.h create mode 100644 clib/web/readme create mode 100644 clib/web/x86/libcrtdb.so diff --git a/clib/web/aarch64/libcrtdb.so b/clib/web/aarch64/libcrtdb.so new file mode 100644 index 0000000000000000000000000000000000000000..3cb013542742618e59d91ebb28610ddfe5107a15 GIT binary patch literal 49880 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

)W;@PF?q9p;$}1!FYg7Nc{3V|m%RX4 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef enum +{ + RTDB_OK, + RTDB_ERROR +} rtdb_state_e; + +typedef enum +{ + Rtdb_ShMem, + Rtdb_Redis, + Rtdb_End +} rtdb_type_e; + +typedef enum +{ + kEE_SHM_READ, // 0 + kEE_SHM_CREAT // 1 +} shm_creat_type_e; + +typedef enum +{ + kSign_Share_Start = 0, + kSign_ShMem = kSign_Share_Start, + kSign_Redis, + kSign_MQ, // 消息队列 + kSign_Share_End +} sign_share_type_e; + +// 全局变量web配置变化索引 +typedef enum +{ + kSign_Start = 0, + kSign_SysReboot = kSign_Start, // 系统reboot标记 + kSign_SysSyncTime, // 系统对时 + kSign_SysSetIp, // 系统IP配置 + kSign_SysUpdate, // 本机系统软件升级 + kSign_Rev40 = kSign_Start + 39, + kSign_End +} cfg_web_sign_e; + +// 接入控制器的所有设备类型 +typedef enum +{ + kDev_Type_Start = 0, // 起始值 + kDev_Type_EMS = kDev_Type_Start, // EMS本机 数量一个 + kDev_Type_Pccmeter, // PCC电表 数量一个 + kDev_Type_Bsmeter, // 储能电表 一般数量一个 + kDev_Type_BSU, // 电池堆 数量 多个可配置 + kDev_Type_BCU, // 电池簇 数量 多个可配置 + kDev_Type_PCS, // PCS 数量 多个可配 + kDev_Type_AirCond_LiquidCool, // 空调/液冷机组 + kDev_Type_Thsensor, // 温湿度传感器 数量 多个可配置 + kDev_Type_WaterThsensor, // 水浸传感器 + kDev_Type_YGThsensor, // 烟感传感器 数量 多个可配置 + kDev_Type_FireSystem, // 消防系统 + kDev_Type_DI_DO_Device, // DI/DO设备设备 + kDev_Type_UPS, // UPS设备 一般数量一个 + kDev_Type_Reserve2, // 预留类型2 + kDev_Type_Reserve3, // 预留类型3 + kDev_Type_Reserve4, // 预留类型4 + kDev_Type_Reserve5, // 预留类型5 + kDev_Type_End +} dev_type_e; + +extern rtdb_type_e rtdbType; + +/***************************************************************************** + * @brief 初始化rtdb + * @param[in] type: 实时库的类型 + * @param[in] arg: 默认为空 + * @param[in] shmType: 创建实时库类型 + * @return 0-成功 1失败 + *****************************************************************************/ +uint8_t initRtdb(rtdb_type_e type, void *arg, shm_creat_type_e shmType); + +/***************************************************************************** + * @brief 获取RTDB中的值 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] devType: 设备类型 + * @param[in] devId: 设备序号 从0开始 + * @param[in] pointId: 该设备中点号,从0开始 + * @return 获取值 + *****************************************************************************/ +double getRtdbPointValue(rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId); + +/***************************************************************************** + * @brief 向RTDB中写入值 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] devType: 设备类型 + * @param[in] devId: 设备序号 从0开始 + * @param[in] pointId: 该设备中点号,从0开始 + * @param[in] value: 向RTDB中写入的值 + *****************************************************************************/ +void setRtdbPointValue(rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId, double value); + +/***************************************************************************** + * @brief 初始化用于web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] arg: 所有测点属性的指针 + * @return 0-成功 1失败 + *****************************************************************************/ +uint8_t initWebSign(sign_share_type_e rtype, shm_creat_type_e rwtype); + +/***************************************************************************** + * @brief 读取web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] signType: 通知的地址 + * @return 0-成功 1失败 + *****************************************************************************/ +uint16_t readWebSign(sign_share_type_e rtype, cfg_web_sign_e signType); + +/***************************************************************************** + * @brief 写入web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 + * @param[in] signType: 通知的地址 + * @param[in] val: 对应的值 + * @return 0-成功 1失败 + *****************************************************************************/ +void writeWebSign(sign_share_type_e rtype, cfg_web_sign_e signType, uint16_t val); + +#endif // BSP_RTDB_H \ No newline at end of file diff --git a/clib/web/readme b/clib/web/readme new file mode 100644 index 0000000..dbd69e6 --- /dev/null +++ b/clib/web/readme @@ -0,0 +1,78 @@ +/***************************************************************************** + * @copyright Copyright (c) 2025-2055 Gary. All rights reserved. + * @file readme + * @brief rtdb组件 + * @author Gary + * @remark 提供web端获取数据接口更改 + * @date 2025/03/04 + *****************************************************************************/ +一、本库分为两个重要组件 + 1、一个是用于web配置相关的参数,通知C的组件; + 2、一个是用于Web实时读取EMS系统中所有数据的组件; + +二、针对两个组件使用步骤如下: + 通知组件 + 1、首先调用初始化函数:uint8_t initWebSign(sign_share_type_e rtype, shm_creat_type_e rwtype); + 2、针对不同配置的通知信号调用:void writeWebSign(sign_share_type_e rtype, cfg_web_sign_e signType, uint16_t val); + + RTDB组件 + 1、首先调用初始化函数:uint8_t initRtdb(rtdb_type_e type, void *arg, shm_creat_type_e shmType); + 2、针对不同设备不同测点调用函数:double getRtdbPointValue(rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId); + + +三、每个函数的具体说明如下: + +/***************************************************************************** + * @brief 初始化rtdb + * @param[in] type: 实时库的类型 + * @param[in] arg: 默认为空 + * @param[in] shmType: 创建实时库类型 + * @return 0-成功 1失败 + *****************************************************************************/ +uint8_t initRtdb(rtdb_type_e type, void *arg, shm_creat_type_e shmType); + +/***************************************************************************** + * @brief 获取RTDB中的值 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] devType: 设备类型 + * @param[in] devId: 设备序号 从0开始 + * @param[in] pointId: 该设备中点号,从0开始 + * @return 获取值 + *****************************************************************************/ +double getRtdbPointValue(rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId); + +/***************************************************************************** + * @brief 向RTDB中写入值 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] devType: 设备类型 + * @param[in] devId: 设备序号 从0开始 + * @param[in] pointId: 该设备中点号,从0开始 + * @param[in] value: 向RTDB中写入的值 + *****************************************************************************/ +void setRtdbPointValue(rtdb_type_e type, uint16_t devType, uint16_t devId, uint16_t pointId, double value); + +/***************************************************************************** + * @brief 初始化用于web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] arg: 所有测点属性的指针 + * @return 0-成功 1失败 + *****************************************************************************/ +uint8_t initWebSign(sign_share_type_e rtype, shm_creat_type_e rwtype); + +/***************************************************************************** + * @brief 读取web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 默认选择Rtdb_ShMem + * @param[in] signType: 通知的地址 + * @return 0-成功 1失败 + *****************************************************************************/ +uint16_t readWebSign(sign_share_type_e rtype, cfg_web_sign_e signType); + +/***************************************************************************** + * @brief 写入web与c写配置变化的通知组件 + * @param[in] type: 实时库的类型 + * @param[in] signType: 通知的地址 + * @param[in] val: 对应的值 + * @return 0-成功 1失败 + *****************************************************************************/ +void writeWebSign(sign_share_type_e rtype, cfg_web_sign_e signType, uint16_t val); + diff --git a/clib/web/x86/libcrtdb.so b/clib/web/x86/libcrtdb.so new file mode 100644 index 0000000000000000000000000000000000000000..0c025ea0970c42907d2732cec9e3b89be63717e0 GIT binary patch literal 53160 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 E2Yrj04gdfE literal 0 HcmV?d00001