dlt2log 0.1.1

A tool to convert DLT binary files to human-readable log formats
# dlt2log

這是一個用 Rust 寫的命令行工具,用於將汽車診斷日誌 (DLT) 檔轉換為人類可讀的文本格式。

## 功能特點

*   **支援雙版本**: 兼容 DLT v1 和 DLT v2 協議。
*   **強大的解析**:
    *   自動偵測並正確解析 Storage Header。
    *   支援 DLT v2 的可變長度 ID (ECU/App/Context ID)。
    *   **智慧過濾**: 自動移除 DLT v2 verbose 訊息中的二進位殘留,確保輸出乾淨。
*   **高效能**: 批次處理大量日誌訊息不掉幀。

## 使用方式

## 安裝方式 (Installation)

你可以透過以下幾種方式安裝此工具:

### 1. 快速安裝腳本 (推薦)

這適合所有系統 (Mac/Ubuntu),腳本會自動檢查並安裝所需的 Rust 環境。

```bash
./install.sh
```

### 2. 從 Crates.io 安裝

如果你已經安裝了 Rust,可以直接從官方套件庫下載安裝:

```bash
cargo install dlt2log
```

安裝後,即可在終端機直接執行 `dlt2log`指令。

---

## 開發者指南 (Developer Guide)

如果你想要修改原始碼或從本地編譯,請參考以下步驟:

### 快速編譯

```bash
./build.sh
```

### 常用指令 (Makefile)

*   `make build`: 編譯 Release 版本。
*   `make verify`: 自動轉換 `dlt_v1_v2/` 下的所有測試檔並驗證。
*   `make clean`: 清除暫存檔與生成的 log。

## 輸出格式

輸出符合以下格式:
`[timestamp][AppID ContextID][LogLevel] payload`

*   **timestamp**: 統一為 **16 位數微秒 (Microseconds)**,對齊 `dlt-viewer``example.log`    *   **DLT v1**: 單位為 100us,程式會自動縮放並補齊。
    *   **DLT v2 (TMSP2)**: 支援高精度奈秒 (ns) 或 100ns 單位。程式會自動偵測單位並縮放至 16 位數微秒,解決 V2 原始數據位數過長的問題。
    *   **時間基準**:
        *   若 DLT 檔案包含 Storage Header,則使用絕對時間。
        *   若為純 DLT 流 (如 V1),程式會自動讀取檔案修改時間作為基準,將相對時間補排為絕對時間。

工具會將日誌轉換為以下格式:

```text
[Timestamp][AppID CtxID][LogLevel] Payload
```

例如:
```text
[16234747684009687][DMgr vdut][INFO] Create RootSwc singleton [root_swc.cpp:82]
```