## 设备管理模块
## 版本说明
当前版本号 0.2.0.4
| 版本号 | 版本说明 |
| ------- | ------------------------------------------------------------ |
| 0.0.0.1 | 发布对外头文件和接口说明文档 |
| 0.1.0.2 | 增加消息 MSG_ADD_DEVICES_BY_DEVTYPE 处理 |
| 0.2.0.3 | 增加消息 MSG_TIMER 处理;<br>增加消息 MSG_DEL_CONFIRM;<br>修改device.xml配置文件,增加设备属性 |
| 0.2.0.4 | 修改带通讯添加设备MSG_ADD_DEVICES_BY_DEVTYPE 消息<br>增加DLT645设备添加消息 MSG_ADD_DEVICES_DLT645发布和格式定义;<br>增加消息 MSG_COLLECT_ONLINE_ADD_DEV订阅 |
| 0.3.0.5 | 双网设备添加 修改消息MSG_ADD_DEVICES MSG_ADD_DEVICES_FROM_XML |
## 1 对外接口
### 1.1 数据结构
```c
typedef struct __dev_list
{
UINT16 nDeviceId; // 设备ID
UINT16 nDeviceCode; // 设备编码
UINT16 nDeviceType; // 设备类型
UINT16 nDeviceIndex; // 设备索引
UINT16 nComId; // 端口ID
UINT16 nCollectAddr;
UINT16 nTransmittAddr;
} DEVICE_LIST_S;
设备列表结构
```
### 1.2 API接口
#### 1.2.1 对外提供的API接口
| 函数名称 | INT32 devmgr_init(void); |
| ------------ | ------------------------------------------------------------ |
| 函数功能 | 设备管理模块初始化,用于实现设备列表和消息命令初始化,创建设备管理线程 |
| 入参 | 无 |
| 返回值 | =0 成功; -1 失败 |
| **函数名称** | **UINT16 devmgr_get_devlist ( UINT16 dev_type, UINT16 dev_code, DEVICE_LIST_T \*dev_list );** |
| 函数功能 | 获取设备列表,可指定设备大类和设备类型编码 |
| 入参 | dev_type 设备大类 |
| 入参 | dev_code 设备类型编码 |
| 出参 | dev_list 设备列表,内存由调用模块提供 |
| 返回值 | =0 成功; -1 失败 |
| **函数名称** | **INT32 devmgr_get_devnum( UINT16 dev_type, UINT16 dev_code );** |
| 函数功能 | 获取设备列表中设备数,可指定设备大类和设备类型编码 |
| 入参 | dev_type 设备大类 |
| 入参 | dev_code 设备类型编码 |
| 出参 | 无 |
| 返回值 | >0 成功 返回总设备数; -1 失败 |
| **函数名称** | **INT32 devmgr_del_dev( UINT16 devid);** |
| 函数功能 | 删除设备列表中设备 |
| 入参 | devid 待删除设备的ID |
| 出参 | 无 |
| 返回值 | =0 成功; -1 失败 |
| **函数名称** | **INT32 devmgr_get_devid( UINT16 dev_code, UINT16 dev_index, UINT16 \*dev_id);** |
| 函数功能 | 获取设备ID |
| 入参 | dev_index 设备索引 |
| 入参 | dev_code 设备类型编码 |
| 出参 | devid 设备ID |
| 返回值 | =0 成功; -1 失败 |
| **函数名称** | **INT32 devmgr_get_dev_dataid ( UINT16 dev_code, UINT16 data_rw, char \*data_name, UINT32 \*data_id );** |
| 函数功能 | 测点编码 (暂未用) |
| 入参 | dev_code 设备类型编码 |
| 入参 | data_rw 测点rw属性 |
| 入参 | data_name 测点名称 |
| 出参 | data_id 编码后的测点ID |
| 返回值 | =0 成功; 非0 失败 |
#### 1.2.2 引用的外部API接口
| 模块 | 接口名称 | 备注 |
| -------- | ------------------------------------------------------------ | ------------------------ |
| 消息管理 | INT32 mm_init(INT32 mode);<br>INT32 mm_login(UINT16 user_id);<br>INT32 mm_msg_publish(UINT16 user_id, UINT16 msg_id, UINT16 msg_len, MSG_T_E msg_type);<br>INT32 mm_msg_subscribe(UINT16 user_id, UINT16 msg_id, UINT8 priority, INT32 mode);<br>INT32 mm_msg_send(mm_msg_s \*msg);<br>INT32 mm_msg_rev(UINT16 user_id, mm_msg_s \*msg);<br>mm_msg_s\* mm_msg_malloc(UINT16 user_id, UINT16 msg_len); | 用于实现设备管理消息通信 |
| 数据处理 | INT32 dp_set_sig_value(UINT16 dev_id, UINT16 sig_id, UINT16 sig_size, const UINT8 \*p_value);<br>INT32 dp_get_sig_value(UINT16 dev_id, UINT16 sig_id, UINT16 sig_size, UINT8 \*p_value);<br>INT32 dp_del_dev(UINT16 dev_id);<br>INT32 dp_get_all_devlist(DEVICE_LIST_T *pst_dev_list);<br>INT32 dp_add_dev(UINT16 dev_id, UINT16 dev_code, UINT16 index ,UINT16 dev_type, const char *dp_xml) | 用于设备属性的存取等操作 |
### 1.3 消息接口
消息结构如下表:(参见耀世平台消息协议说明书)
| **字段名称** | **长度** | **备注** |
| ------------ | -------- | ------------------------------------ |
| 源模块ID | 2Bytes | |
| 目的ID | 2Bytes | 广播推送:0xFFFF,订阅推送:0 |
| 消息命令 | 2Bytes | cmd |
| 消息数据长度 | 2Bytes | |
| 预留 | 4 Bytes | |
| 流水号 | 4 Bytes | 回复消息时复制此字段,接收回复时判断 |
| 附加消息 | N Bytes | 可变长根据附加消息长度来定 |
#### 1.3.1 发布消息
**设备管理发布的消息**如下:
| 序号 | **消息命令** | **发布类型** | **备注** |
| ---- | ------------------------------- | ----------------- | ------------------------------ |
| 1 | **MSG_ADD_DEVICES** | MSG_T_QA | 添加设备 |
| 2 | **MSG_GET_DEVICES_LIST** | MSG_T_QA | 获取设备列表 |
| 3 | **MSG_REG_UPDATE_DEVICES_LIST** | **MSG_T_PUSH_QA** | 设备列表更新推送 |
| 4 | MSG_DELETE_DEVICES | MSG_T_QA | 删除设备 |
| 5 | MSG_REPLACE_DEVICE | MSG_T_QA | 替换设备 |
| 6 | MSG_GET_CHILD_DEVICES_LIST | MSG_T_QA | 获取子设备列表 |
| 7 | **MSG_ADD_DEVICES_BY_DEVTYPE** | MSG_T_QA | 带通讯添加设备(设备模糊添加) |
| 8 | **MSG_ADD_DEVICES_DLT645** | MSG_T_QA | DLT645设备添加 |
| 9 | MSG_ADD_DEVICES_FROM_XML | MSG_T_QA | 导入XML进行设备添加 |
**消息格式定义如下**:
##### 1.3.1.1 设备添加
消息命令:MSG_ADD_DEVICES
发布者:设备管理
订阅者:web后台
订阅者发送设备添加消息:消息头+附加消息,附加消息格式如下 <!--消息格式待定-->
| **字段**名称 | **�