# XYParser64Demo / XYParser2Demo / XYParser8Demo

业务流程 demo，可直接连你的设备模拟器验证：

- `XYParser64Demo`：TCP 接收 64 导数据，可额外打开一个串口发送 `TRAIN_0 / TRAIN_1`
- `XYParser2Demo`：TCP 接收 2 导数据，固定映射 `FP1/FP2`，送算法前扩展为 64 导
- `XYParser8Demo`：串口接收 8 导数据
- `XYAlgorithmUdpServer`：算法 ZMQ 服务端，接收 demo 发来的算法输入并回包
- Welch/PSD 固定走 ZMQ：
  - `Feed -> ConvertSampleFramesToAlgorithmData -> ZMQ 发给算法 -> 收算法 ZMQ 回包 -> FeedAlgorithmData -> ReadWelch`
- demo 会打印 ZMQ 发送/接收包数、字节数，以及回包长度校验结果，方便看数据完整性

## 算法 ZMQ 服务端

```powershell
.\x64\Debug\XYAlgorithmUdpServer.exe
```

默认：

- 绑定 `tcp://127.0.0.1:8100`
- 固定接收 `XYPARSER_FRAME_ALGORITHM_VALUE_COUNT * sizeof(double)` 字节
- 默认 `preprocess` 模式：按通道做去直流、50Hz 陷波、低通和平幅裁剪后回包
- 默认采样率 `250Hz`
- 默认高通 `0.5Hz`
- 默认低通 `45Hz`
- 默认工频陷波 `50Hz`
- 默认裁剪幅值 `5000uV`
- 可用 `echo` 模式：原样回包给发送方
- 可用 `zero` 模式：回全 0 的同长度 double 数组

常用覆盖参数：

- `--listen-host 127.0.0.1`
- `--listen-port 8100`
- `--receive-timeout-ms 1000`
- `--sample-rate 250`
- `--high-pass-hz 0.5`
- `--low-pass-hz 45`
- `--notch-hz 50`
- `--notch-q 30`
- `--clip-uv 5000`
- `--mode preprocess`

联调顺序：

- 先启动 `XYAlgorithmUdpServer`
- 再启动 `XYParser64Demo`、`XYParser2Demo` 或 `XYParser8Demo`
- 如果 demo 端 `rxPackets` 开始增长，说明 ZMQ 链路已打通

## 64 导示例

```powershell
.\x64\Debug\XYParser64Demo.exe
```

流程：

- 连接 64 导 TCP 设备
- 启动后直接开启 Welch/PSD，不打开阻抗
- 采样率和增益使用内置默认值
- 默认 TCP 主机为 `127.0.0.1`
- 默认 TCP 端口为 `5086`
- 默认 trigger 串口为 `COM44`
- demo 作为 ZMQ client 连接算法服务端 `tcp://127.0.0.1:8100`
- 按 `train-duration-ms` 周期循环交替发送 `TRAIN_0 / TRAIN_1`

常用覆盖参数：

- `--tcp-port 5086`
- `--trigger-com COM44`
- `--algorithm-host 127.0.0.1`
- `--algorithm-port 8100`
- `--train-duration-ms 3000`

## 2 导示例

```powershell
.\x64\Debug\XYParser2Demo.exe
```

默认：

- 2 导数据走 TCP
- 默认 TCP 主机为 `127.0.0.1`
- 默认 TCP 端口为 `5086`
- trigger 串口可选，不传则不打标
- 启动后先按 2 导控制协议发送阻抗开启、`250Hz / 24增益`
- 关闭阻抗后恢复 `250Hz / 6增益`
- 算法前固定调用 `XYParser_Convert2ChFramesTo64Ch`
- 2 个输入通道固定映射到 `FP1`、`FP2`

2 导到 64 导导联映射图：

```text
2ch[0] -> FP1
2ch[1] -> FP2
others -> 0
```

常用覆盖参数：

- `--tcp-host 127.0.0.1`
- `--tcp-port 5086`
- `--trigger-com COM44`
- `--algorithm-host 127.0.0.1`
- `--algorithm-port 8100`
- `--train-duration-ms 3000`

## 8 导示例

```powershell
.\x64\Debug\XYParser8Demo.exe
```

默认：

- 8 导数据串口为 `COM44`
- 串口波特率为 `460800`
- 算法 ZMQ 地址为 `tcp://127.0.0.1:8100`
- 启动后先发送一次 8 导阻抗开启命令
- 在阻抗模式下持续约 `60` 秒并打印阻抗结果
- 之后自动发送阻抗关闭命令，再恢复 Welch/PSD 和算法链路

8 导转 64 导的流程：

- 先解析成 8 导 `XYParserFrameSummary`
- 再通过 `XYParser_Convert8ChFramesTo64Ch` 扩展成 64 导
- 8 个已知导联按固定位置写入 64 导 summary
- 其余未覆盖的 56 个 64 导导联全部补 `0`

8 导到 64 导导联映射图：

```text
8ch[0] -> PO5
8ch[1] -> POZ
8ch[2] -> PO6
8ch[3] -> PO7
8ch[4] -> O1
8ch[5] -> OZ
8ch[6] -> O2
8ch[7] -> PO8
others -> 0
```

表格形式：

| 8导索引 | 64导导联 |
| --- | --- |
| 0 | PO5 |
| 1 | POZ |
| 2 | PO6 |
| 3 | PO7 |
| 4 | O1 |
| 5 | OZ |
| 6 | O2 |
| 7 | PO8 |

代码依据：

- 8 导映射表定义在 `k8ChLeadMap`
- 转换实现为 `XYParser_Convert8ChFramesTo64Ch -> Convert8ChSummaryTo64ChSummary`

常用覆盖参数：

- `--data-com COM44`
- `--baud 460800`
- `--bypass-checksum 1`
- `--algorithm-host 127.0.0.1`
- `--algorithm-port 8100`
- `--algorithm-timeout-ms 200`
- `--vref 4.5`
