# Module: ultrasys — 超聲核心

`handprobe.application.ultrasys`（+ 少量 `handprobe.components.ultrasys`）是整個 App 的影像核心。`Ultrasys` 是中央單例，上游接 native 引擎（經 `jni`/`jnitojava`），下游餵 UI 層。

## Responsibilities

- 統籌成像管線：B / M / Color / PW 模式切換與參數分發
- DSC（數字掃描轉換）：`algm.DscCtrl` 把探頭極坐標數據轉為屏幕直角坐標
- 影像顯示與回放：`ImagePlayer` / `TwoImagePlayer` / `CinePlayer` / `MBCinePlayer`
- MITI（機械指數 MI / 熱指數 TI）：`MITIData` + `MITIObservable` 實時計算與顯示
- 前端控制：`algm.FeUltrasysCtrl`（頻率/深度/焦點）
- 探頭模式管理：`probe.ExamMode.HExamType`、`probe.ConnectType`

## Key Files

- `Ultrasys.java` — 中央單例（`Ultrasys.Instance()`），持有 DscCtrl / FeUltrasysCtrl / ImagePlayer / CinePlayer / PresetServer / MITIData 引用
- `ParaCtrl.java` — 參數控制（從 UI 參數變化同步到 native）
- `HFuncId.java` — 功能 ID 常量（按鍵/菜單/功能碼）
- `algm/DscCtrl.java` — 掃描轉換控制（`SetBFrameCorrCoef` / `SetCFrameCorrCoef`）
- `image/` — `DispMode`、`DispSurface`、`ImageDefine`、`ImagePlayer(Base)`、`TwoImagePlayer`
- `parameter/` — `ExamTypesId`、`FuncidMap`、`InspectionObjectType`
- `probe/` — `ConnectType`（7 種連接）、`ExamMode/`、`podsys/`（探頭系統）、`PidInterface`
- `cine/` — cine 錄製

## Public API（Java 側關鍵入口）

- `Ultrasys.Instance()` — 取單例
- `Ultrasys.setMITIData(float[])` — native 回調更新熱指數（由 `jnitojava.UpdateMITI` 調用）
- `Ultrasys.GetPattern(int, int)` — 取模式數據
- `Ultrasys.GetProbeConType()` — 探頭連接類型
- `ConnectType.SetConnType(int)` — 切換連接類型並同步 `HSysctrlIf.SetProbeConnType()`

## Internal Structure

- `algm/`（algorithm）— 與 native 配對的算法控制：DSC、前端
- `image/` — 顯示鏈：player → surface → 模式定義
- `parameter/` — 檢查類型/功能碼映射
- `probe/` — 探頭體系：連接、模式、pod 系統（poddef 定義）
- `cine/` — cine 環形緩衝與錄製

## Dependencies

- **Used by:** `com.Com.handprobe.BaseActivity`（宿主）、`gui.fragment.ImageDisplayFragment`、`ai.*`
- **Uses:** `jni.*`（HBeParamIf/HFeParamIf/HPidIf/HDscClassIf/HSysctrlIf/HPresetIf）、`kernel.*`、`handprobe.application.usb.*`、`handprobe.application.wlan.*`、`components.ultrasys.*`（FrameLineData、CinePartitionBuffer、B/C/M/PW 掃描參數類）

## Notable Patterns / Gotchas

- `Ultrasys` 大量字段是 public 的直接暴露（`mDscCtrl` 等），跨包直接操作——無嚴格封裝
- 掃描參數按模式分族：`BScanPara`/`CScanPara`/`MScanPara`/`PWScanPara` + 對應 `*DspPara`
- `FrameLineData.SimDataBuffer` 表明有模擬數據路徑（SIMU 連接模式，用於無探頭演示/培訓）
- MITI 數據由 native 側計算後上拋（`UpdateMITI(float[])`），Java 只負責顯示
