# "DLT698_read" 提交修改介绍

该提交新增了 **DL/T 698.45 电表协议** 的完整支持，共修改 **17 个文件**，新增 **2063 行**。

---

## 新建文件

| 文件 | 说明 |
|------|------|
| `dlt698.c` (870 行) | **DL/T 698.45 协议核心实现**：帧组包/解包、CRC-16 校验、ASN.1 编码、A-XDR 数据解析、UART 收发、前导码处理 |
| `dlt698.h` (106 行) | 协议头文件：帧结构定义（OAD、地址域）、接口声明、常量宏 |
| `dlt698_asn1/dlt698_app.asn1` | ASN.1 协议定义：Client-APDU、Server-APDU、GET-Request/Response、OAD |
| `dlt698_asn1/gen_asn1c.sh` | ASN.1 代码生成脚本 |
| `dlt698_asn1/generated/dlt698_asn_codec.c` | 手写 ASN.1 编解码器：Client-APDU DER 编码、Server-APDU BER 解码、OAD 编解码 |
| `dlt698_asn1/generated/dlt698_asn_types.h` | ASN.1 类型定义：OAD、GetRequest、GetResponse、Client-APDU、Server-APDU |
| `Meter_DLT698.json` (57 行) | **DL/T 698.45 电表模板**：定义 poll_list（8 个轮询 OAD）和 read_reg（32 个点位） |

## 修改文件

| 文件 | 修改内容 |
|------|---------|
| `Makefile` | 将 `dlt698_asn1/generated/*.c` 加入编译 |
| `common.c` | 协议类型名称数组增加 `"dlt698"` |
| `tag.h` | 协议类型枚举增加 `PROTOCOL_TYPE_DLT698` |
| `protocol.h` | 引入 `dlt698.h`；定义 `dlt698_poll_info_t`、`dlt698_rw_info_t` |
| `protocol.c` (+46 行) | 新增 `dlt698_proto_init`、`dlt698_proto_deinit`、`dlt698_proto_read` |
| `proto_forward.c` (+221 行) | 新增 DLT698 设备创建（`creat_dlt698_dev_attr`）、模板解析（`poll_list`/`read_reg`/`write_reg`）、tag 点位匹配、调试日志输出 |
| `port_transf.c` (+329 行) | 新增 `dlt698_channel`（主轮询循环）、`dlt698_update_tags`（数据写入 tag）、`meter_dlt698_common_adp_handle`（适配器桩） |
| `prot_transf.h` | 声明 `meter_dlt698_common_adp_handle` |
| `business_log/business_log.h` | 新增 `DAS_ID_DLT698_1` 日志分类 ID |

## 核心流程

```
Meter_DLT698.json → proto_forward.c 解析模板
    → port_transf.c: dlt698_channel() 主循环
        → dlt698.c: dlt698_pack_get_request() 组帧（68 L C A HCS APDU FCS 16）
        → UART 收发
        → dlt698.c: dlt698_frame_check() 帧校验
        → dlt698_asn_codec.c: ber_decode_Server_APDU() 解码响应
        → dlt698.c: dlt698_collect_scalars() 解析 A-XDR 数组/标量
        → port_transf.c: dlt698_update_tags() 写入 tag 点位
```
