# Canon CameraTethering

## 职责

提供 Canon EOS 相机 USB OTG 有线连接与边拍边传（PC Remote）能力。

## 核心组件

| 组件 | 说明 |
| --- | --- |
| `CanonCameraService` | 实现 `CameraServiceProtocol`，管理基线与去重 |
| `CanonImageCaptureDeviceManager` | ImageCaptureCore 会话、GetEvent 轮询、PTP/Catalog 下载 |
| `CanonPTPCommands` | Canon EOS PTP 厂商扩展命令 |
| `CanonEosEventParser` | GetEvent blob 解析（ObjectAddedEx / ObjectAddedEx2） |

## PTP 会话时序

1. ImageCaptureCore 打开 ICC 会话（不发 PTP OpenSession）。
2. `SetRemoteMode` (0x9114) — 进入 PC 遥控模式。
3. `SetEventMode` (0x9115) — 订阅扩展事件。
4. `KeepDeviceOn` (0x911D) — 重置自动关机（部分机身不支持，非致命）。
5. 每 500ms 轮询 `GetEvent` (0x9116)。
6. 收到 `ObjectAddedEx` / `ObjectAddedEx2` 后通过 `EOS_GetObject` (0x9104) 下载。
7. 发送 `TransferComplete` (0x9117) 释放相机缓冲。

## Catalog 回退

若 PTP 实时路径不可用，仍可通过 `deviceDidBecomeReady` + `didAddItems` + 1.5s 轮询检测 catalog 新文件，并使用 `requestDownloadFile` 下载。

## 相机端设置

- USB 模式设为 **电脑遥控 / PC Remote / 照片传输（PTP）**
- 关闭「仅充电」模式
- 边拍边传时勿调用 `SetUILock` (0x911B)

## 依赖

- ImageCaptureCore（系统框架）
- 共享 `PTPHelper` / `CameraDownloadStorage`
