From 380394b93aa6e8503de24968f693b6e9f3414a87 Mon Sep 17 00:00:00 2001 From: lenn Date: Wed, 1 Apr 2026 18:35:22 +0800 Subject: [PATCH] add tactile_a codec --- .VSCodeCounter/2026-04-01_16-39-17/details.md | 62 ++++++++ .../2026-04-01_16-39-17/diff-details.md | 15 ++ .VSCodeCounter/2026-04-01_16-39-17/diff.csv | 2 + .VSCodeCounter/2026-04-01_16-39-17/diff.md | 19 +++ .VSCodeCounter/2026-04-01_16-39-17/diff.txt | 22 +++ .../2026-04-01_16-39-17/results.csv | 49 ++++++ .../2026-04-01_16-39-17/results.json | 1 + .VSCodeCounter/2026-04-01_16-39-17/results.md | 50 ++++++ .../2026-04-01_16-39-17/results.txt | 100 ++++++++++++ src-tauri/Cargo.lock | 16 ++ src-tauri/Cargo.toml | 1 + src-tauri/src/serial_core/codecs/mod.rs | 1 + src-tauri/src/serial_core/codecs/tactile_a.rs | 142 ++++++++++++++++++ src-tauri/src/serial_core/codecs/test.rs | 14 +- src-tauri/src/serial_core/frame.rs | 62 +++++--- src-tauri/src/serial_core/mod.rs | 1 + src-tauri/src/serial_core/utils.rs | 38 +++++ 17 files changed, 564 insertions(+), 31 deletions(-) create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/details.md create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/diff-details.md create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/diff.csv create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/diff.md create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/diff.txt create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/results.csv create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/results.json create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/results.md create mode 100644 .VSCodeCounter/2026-04-01_16-39-17/results.txt create mode 100644 src-tauri/src/serial_core/codecs/tactile_a.rs create mode 100644 src-tauri/src/serial_core/utils.rs diff --git a/.VSCodeCounter/2026-04-01_16-39-17/details.md b/.VSCodeCounter/2026-04-01_16-39-17/details.md new file mode 100644 index 0000000..0dc1dd4 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/details.md @@ -0,0 +1,62 @@ +# Details + +Date : 2026-04-01 16:39:17 + +Directory e:\\Workspace\\joyson-serial + +Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | +| [.idea/modules.xml](/.idea/modules.xml) | XML | 8 | 0 | 0 | 8 | +| [.idea/tauri-demo.iml](/.idea/tauri-demo.iml) | XML | 11 | 0 | 0 | 11 | +| [README.md](/README.md) | Markdown | 34 | 0 | 20 | 54 | +| [flowus\_tools.json](/flowus_tools.json) | JSON | 1 | 0 | 1 | 2 | +| [frontend\_prompt.md](/frontend_prompt.md) | Markdown | 189 | 0 | 66 | 255 | +| [package-lock.json](/package-lock.json) | JSON | 1,957 | 0 | 1 | 1,958 | +| [package.json](/package.json) | JSON | 31 | 0 | 1 | 32 | +| [src-tauri/build.rs](/src-tauri/build.rs) | Rust | 3 | 0 | 1 | 4 | +| [src-tauri/capabilities/default.json](/src-tauri/capabilities/default.json) | JSON | 15 | 0 | 1 | 16 | +| [src-tauri/src/commands/mod.rs](/src-tauri/src/commands/mod.rs) | Rust | 2 | 0 | 1 | 3 | +| [src-tauri/src/commands/serial.rs](/src-tauri/src/commands/serial.rs) | Rust | 246 | 0 | 44 | 290 | +| [src-tauri/src/commands/window.rs](/src-tauri/src/commands/window.rs) | Rust | 27 | 0 | 6 | 33 | +| [src-tauri/src/lib.rs](/src-tauri/src/lib.rs) | Rust | 22 | 0 | 2 | 24 | +| [src-tauri/src/log.rs](/src-tauri/src/log.rs) | Rust | 34 | 0 | 2 | 36 | +| [src-tauri/src/main.rs](/src-tauri/src/main.rs) | Rust | 8 | 1 | 2 | 11 | +| [src-tauri/src/serial\_core/codec.rs](/src-tauri/src/serial_core/codec.rs) | Rust | 6 | 0 | 1 | 7 | +| [src-tauri/src/serial\_core/codecs/mod.rs](/src-tauri/src/serial_core/codecs/mod.rs) | Rust | 4 | 0 | 1 | 5 | +| [src-tauri/src/serial\_core/codecs/tactile\_a.rs](/src-tauri/src/serial_core/codecs/tactile_a.rs) | Rust | 67 | 0 | 17 | 84 | +| [src-tauri/src/serial\_core/codecs/test.rs](/src-tauri/src/serial_core/codecs/test.rs) | Rust | 213 | 7 | 40 | 260 | +| [src-tauri/src/serial\_core/error.rs](/src-tauri/src/serial_core/error.rs) | Rust | 47 | 0 | 6 | 53 | +| [src-tauri/src/serial\_core/frame.rs](/src-tauri/src/serial_core/frame.rs) | Rust | 46 | 3 | 9 | 58 | +| [src-tauri/src/serial\_core/mod.rs](/src-tauri/src/serial_core/mod.rs) | Rust | 22 | 0 | 7 | 29 | +| [src-tauri/src/serial\_core/model.rs](/src-tauri/src/serial_core/model.rs) | Rust | 377 | 57 | 67 | 501 | +| [src-tauri/src/serial\_core/record.rs](/src-tauri/src/serial_core/record.rs) | Rust | 50 | 4 | 11 | 65 | +| [src-tauri/src/serial\_core/serial.rs](/src-tauri/src/serial_core/serial.rs) | Rust | 73 | 0 | 8 | 81 | +| [src-tauri/src/serial\_core/utils.rs](/src-tauri/src/serial_core/utils.rs) | Rust | 26 | 0 | 6 | 32 | +| [src-tauri/tauri.conf.json](/src-tauri/tauri.conf.json) | JSON | 36 | 0 | 1 | 37 | +| [src/app.html](/src/app.html) | HTML | 13 | 0 | 1 | 14 | +| [src/lib/components/CenterStage.svelte](/src/lib/components/CenterStage.svelte) | Svelte | 691 | 0 | 96 | 787 | +| [src/lib/components/ConfigPanel.svelte](/src/lib/components/ConfigPanel.svelte) | Svelte | 398 | 0 | 63 | 461 | +| [src/lib/components/HudPanel.svelte](/src/lib/components/HudPanel.svelte) | Svelte | 861 | 0 | 110 | 971 | +| [src/lib/components/PressureMatrixViewer.svelte](/src/lib/components/PressureMatrixViewer.svelte) | Svelte | 558 | 0 | 97 | 655 | +| [src/lib/components/SignalChart.svelte](/src/lib/components/SignalChart.svelte) | Svelte | 382 | 0 | 71 | 453 | +| [src/lib/components/SummaryCurve.svelte](/src/lib/components/SummaryCurve.svelte) | Svelte | 497 | 0 | 88 | 585 | +| [src/lib/config/color-map.ts](/src/lib/config/color-map.ts) | TypeScript | 55 | 0 | 3 | 58 | +| [src/lib/styles/theme.css](/src/lib/styles/theme.css) | PostCSS | 43 | 1 | 7 | 51 | +| [src/lib/types/hud.ts](/src/lib/types/hud.ts) | TypeScript | 126 | 0 | 20 | 146 | +| [src/routes/+layout.svelte](/src/routes/+layout.svelte) | Svelte | 13 | 0 | 5 | 18 | +| [src/routes/+layout.ts](/src/routes/+layout.ts) | TypeScript | 1 | 4 | 1 | 6 | +| [src/routes/+page.svelte](/src/routes/+page.svelte) | Svelte | 1,286 | 0 | 176 | 1,462 | +| [static/svelte.svg](/static/svelte.svg) | XML | 1 | 0 | 0 | 1 | +| [static/tauri.svg](/static/tauri.svg) | XML | 6 | 0 | 1 | 7 | +| [static/vite.svg](/static/vite.svg) | XML | 1 | 0 | 0 | 1 | +| [svelte.config.js](/svelte.config.js) | JavaScript | 11 | 5 | 3 | 19 | +| [tauri-event.md](/tauri-event.md) | Markdown | 374 | 0 | 181 | 555 | +| [tsconfig.json](/tsconfig.json) | JSON with Comments | 14 | 5 | 1 | 20 | +| [vite.config.js](/vite.config.js) | JavaScript | 22 | 7 | 4 | 33 | + +[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/diff-details.md b/.VSCodeCounter/2026-04-01_16-39-17/diff-details.md new file mode 100644 index 0000000..cea0e3d --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/diff-details.md @@ -0,0 +1,15 @@ +# Diff Details + +Date : 2026-04-01 16:39:17 + +Directory e:\\Workspace\\joyson-serial + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details + +## Files +| filename | language | code | comment | blank | total | +| :--- | :--- | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/diff.csv b/.VSCodeCounter/2026-04-01_16-39-17/diff.csv new file mode 100644 index 0000000..b7d8d75 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/diff.csv @@ -0,0 +1,2 @@ +"filename", "language", "", "comment", "blank", "total" +"Total", "-", , 0, 0, 0 \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/diff.md b/.VSCodeCounter/2026-04-01_16-39-17/diff.md new file mode 100644 index 0000000..86a18e2 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/diff.md @@ -0,0 +1,19 @@ +# Diff Summary + +Date : 2026-04-01 16:39:17 + +Directory e:\\Workspace\\joyson-serial + +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | + +[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/diff.txt b/.VSCodeCounter/2026-04-01_16-39-17/diff.txt new file mode 100644 index 0000000..96bba56 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/diff.txt @@ -0,0 +1,22 @@ +Date : 2026-04-01 16:39:17 +Directory : e:\Workspace\joyson-serial +Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines + +Languages ++----------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++----------+------------+------------+------------+------------+------------+ ++----------+------------+------------+------------+------------+------------+ + +Directories ++------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++------+------------+------------+------------+------------+------------+ ++------+------------+------------+------------+------------+------------+ + +Files ++----------+----------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++----------+----------+------------+------------+------------+------------+ +| Total | | 0 | 0 | 0 | 0 | ++----------+----------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/results.csv b/.VSCodeCounter/2026-04-01_16-39-17/results.csv new file mode 100644 index 0000000..9657d9d --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/results.csv @@ -0,0 +1,49 @@ +"filename", "language", "JavaScript", "JSON", "Markdown", "JSON with Comments", "XML", "TypeScript", "Svelte", "Rust", "PostCSS", "HTML", "comment", "blank", "total" +"e:\Workspace\joyson-serial\.idea\modules.xml", "XML", 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8 +"e:\Workspace\joyson-serial\.idea\tauri-demo.iml", "XML", 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 11 +"e:\Workspace\joyson-serial\README.md", "Markdown", 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 20, 54 +"e:\Workspace\joyson-serial\flowus_tools.json", "JSON", 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2 +"e:\Workspace\joyson-serial\frontend_prompt.md", "Markdown", 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 66, 255 +"e:\Workspace\joyson-serial\package-lock.json", "JSON", 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1958 +"e:\Workspace\joyson-serial\package.json", "JSON", 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32 +"e:\Workspace\joyson-serial\src-tauri\build.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 4 +"e:\Workspace\joyson-serial\src-tauri\capabilities\default.json", "JSON", 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16 +"e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 3 +"e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 44, 290 +"e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 6, 33 +"e:\Workspace\joyson-serial\src-tauri\src\lib.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 2, 24 +"e:\Workspace\joyson-serial\src-tauri\src\log.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 2, 36 +"e:\Workspace\joyson-serial\src-tauri\src\main.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 2, 11 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 1, 7 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 5 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 17, 84 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 7, 40, 260 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 6, 53 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 3, 9, 58 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 7, 29 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 57, 67, 501 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 4, 11, 65 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 8, 81 +"e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs", "Rust", 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 6, 32 +"e:\Workspace\joyson-serial\src-tauri\tauri.conf.json", "JSON", 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 37 +"e:\Workspace\joyson-serial\src\app.html", "HTML", 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 14 +"e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 96, 787 +"e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 63, 461 +"e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 861, 0, 0, 0, 0, 110, 971 +"e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, 0, 97, 655 +"e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 71, 453 +"e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 88, 585 +"e:\Workspace\joyson-serial\src\lib\config\color-map.ts", "TypeScript", 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 3, 58 +"e:\Workspace\joyson-serial\src\lib\styles\theme.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 1, 7, 51 +"e:\Workspace\joyson-serial\src\lib\types\hud.ts", "TypeScript", 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 20, 146 +"e:\Workspace\joyson-serial\src\routes\+layout.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 5, 18 +"e:\Workspace\joyson-serial\src\routes\+layout.ts", "TypeScript", 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 6 +"e:\Workspace\joyson-serial\src\routes\+page.svelte", "Svelte", 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 176, 1462 +"e:\Workspace\joyson-serial\static\svelte.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 +"e:\Workspace\joyson-serial\static\tauri.svg", "XML", 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 7 +"e:\Workspace\joyson-serial\static\vite.svg", "XML", 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 +"e:\Workspace\joyson-serial\svelte.config.js", "JavaScript", 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 19 +"e:\Workspace\joyson-serial\tauri-event.md", "Markdown", 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 181, 555 +"e:\Workspace\joyson-serial\tsconfig.json", "JSON with Comments", 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 5, 1, 20 +"e:\Workspace\joyson-serial\vite.config.js", "JavaScript", 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 33 +"Total", "-", 33, 2040, 597, 14, 27, 182, 4686, 1273, 43, 13, 94, 1250, 10252 \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/results.json b/.VSCodeCounter/2026-04-01_16-39-17/results.json new file mode 100644 index 0000000..adc2aaa --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/results.json @@ -0,0 +1 @@ +{"file:///e%3A/Workspace/joyson-serial/svelte.config.js":{"language":"JavaScript","code":11,"comment":5,"blank":3},"file:///e%3A/Workspace/joyson-serial/package.json":{"language":"JSON","code":31,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/tauri-event.md":{"language":"Markdown","code":374,"comment":0,"blank":181},"file:///e%3A/Workspace/joyson-serial/frontend_prompt.md":{"language":"Markdown","code":189,"comment":0,"blank":66},"file:///e%3A/Workspace/joyson-serial/package-lock.json":{"language":"JSON","code":1957,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/tsconfig.json":{"language":"JSON with Comments","code":14,"comment":5,"blank":1},"file:///e%3A/Workspace/joyson-serial/flowus_tools.json":{"language":"JSON","code":1,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/vite.config.js":{"language":"JavaScript","code":22,"comment":7,"blank":4},"file:///e%3A/Workspace/joyson-serial/src-tauri/tauri.conf.json":{"language":"JSON","code":36,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/static/tauri.svg":{"language":"XML","code":6,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/static/vite.svg":{"language":"XML","code":1,"comment":0,"blank":0},"file:///e%3A/Workspace/joyson-serial/src/routes/%2Blayout.ts":{"language":"TypeScript","code":1,"comment":4,"blank":1},"file:///e%3A/Workspace/joyson-serial/src-tauri/capabilities/default.json":{"language":"JSON","code":15,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/README.md":{"language":"Markdown","code":34,"comment":0,"blank":20},"file:///e%3A/Workspace/joyson-serial/src/routes/%2Blayout.svelte":{"language":"Svelte","code":13,"comment":0,"blank":5},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/utils.rs":{"language":"Rust","code":26,"comment":0,"blank":6},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/serial.rs":{"language":"Rust","code":73,"comment":0,"blank":8},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/record.rs":{"language":"Rust","code":50,"comment":4,"blank":11},"file:///e%3A/Workspace/joyson-serial/static/svelte.svg":{"language":"XML","code":1,"comment":0,"blank":0},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/model.rs":{"language":"Rust","code":377,"comment":57,"blank":67},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/mod.rs":{"language":"Rust","code":22,"comment":0,"blank":7},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/error.rs":{"language":"Rust","code":47,"comment":0,"blank":6},"file:///e%3A/Workspace/joyson-serial/src-tauri/build.rs":{"language":"Rust","code":3,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/frame.rs":{"language":"Rust","code":46,"comment":3,"blank":9},"file:///e%3A/Workspace/joyson-serial/src/lib/styles/theme.css":{"language":"PostCSS","code":43,"comment":1,"blank":7},"file:///e%3A/Workspace/joyson-serial/src/lib/types/hud.ts":{"language":"TypeScript","code":126,"comment":0,"blank":20},"file:///e%3A/Workspace/joyson-serial/src/lib/components/SummaryCurve.svelte":{"language":"Svelte","code":497,"comment":0,"blank":88},"file:///e%3A/Workspace/joyson-serial/src/lib/components/HudPanel.svelte":{"language":"Svelte","code":861,"comment":0,"blank":110},"file:///e%3A/Workspace/joyson-serial/src/lib/components/SignalChart.svelte":{"language":"Svelte","code":382,"comment":0,"blank":71},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/lib.rs":{"language":"Rust","code":22,"comment":0,"blank":2},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/log.rs":{"language":"Rust","code":34,"comment":0,"blank":2},"file:///e%3A/Workspace/joyson-serial/src/lib/components/CenterStage.svelte":{"language":"Svelte","code":691,"comment":0,"blank":96},"file:///e%3A/Workspace/joyson-serial/src/routes/%2Bpage.svelte":{"language":"Svelte","code":1286,"comment":0,"blank":176},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/codec.rs":{"language":"Rust","code":6,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/src/app.html":{"language":"HTML","code":13,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/codecs/mod.rs":{"language":"Rust","code":4,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/codecs/test.rs":{"language":"Rust","code":213,"comment":7,"blank":40},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/serial_core/codecs/tactile_a.rs":{"language":"Rust","code":67,"comment":0,"blank":17},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/commands/window.rs":{"language":"Rust","code":27,"comment":0,"blank":6},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/commands/serial.rs":{"language":"Rust","code":246,"comment":0,"blank":44},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/commands/mod.rs":{"language":"Rust","code":2,"comment":0,"blank":1},"file:///e%3A/Workspace/joyson-serial/src/lib/config/color-map.ts":{"language":"TypeScript","code":55,"comment":0,"blank":3},"file:///e%3A/Workspace/joyson-serial/src/lib/components/PressureMatrixViewer.svelte":{"language":"Svelte","code":558,"comment":0,"blank":97},"file:///e%3A/Workspace/joyson-serial/src/lib/components/ConfigPanel.svelte":{"language":"Svelte","code":398,"comment":0,"blank":63},"file:///e%3A/Workspace/joyson-serial/.idea/tauri-demo.iml":{"language":"XML","code":11,"comment":0,"blank":0},"file:///e%3A/Workspace/joyson-serial/.idea/modules.xml":{"language":"XML","code":8,"comment":0,"blank":0},"file:///e%3A/Workspace/joyson-serial/src-tauri/src/main.rs":{"language":"Rust","code":8,"comment":1,"blank":2}} \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/results.md b/.VSCodeCounter/2026-04-01_16-39-17/results.md new file mode 100644 index 0000000..bf11d25 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/results.md @@ -0,0 +1,50 @@ +# Summary + +Date : 2026-04-01 16:39:17 + +Directory e:\\Workspace\\joyson-serial + +Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) + +## Languages +| language | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| Svelte | 8 | 4,686 | 0 | 706 | 5,392 | +| JSON | 5 | 2,040 | 0 | 5 | 2,045 | +| Rust | 18 | 1,273 | 72 | 231 | 1,576 | +| Markdown | 3 | 597 | 0 | 267 | 864 | +| TypeScript | 3 | 182 | 4 | 24 | 210 | +| PostCSS | 1 | 43 | 1 | 7 | 51 | +| JavaScript | 2 | 33 | 12 | 7 | 52 | +| XML | 5 | 27 | 0 | 1 | 28 | +| JSON with Comments | 1 | 14 | 5 | 1 | 20 | +| HTML | 1 | 13 | 0 | 1 | 14 | + +## Directories +| path | files | code | comment | blank | total | +| :--- | ---: | ---: | ---: | ---: | ---: | +| . | 47 | 8,908 | 94 | 1,250 | 10,252 | +| . (Files) | 9 | 2,633 | 17 | 278 | 2,928 | +| .idea | 2 | 19 | 0 | 0 | 19 | +| src | 13 | 4,924 | 5 | 738 | 5,667 | +| src (Files) | 1 | 13 | 0 | 1 | 14 | +| src-tauri | 20 | 1,324 | 72 | 233 | 1,629 | +| src-tauri (Files) | 2 | 39 | 0 | 2 | 41 | +| src-tauri\\capabilities | 1 | 15 | 0 | 1 | 16 | +| src-tauri\\src | 17 | 1,270 | 72 | 230 | 1,572 | +| src-tauri\\src (Files) | 3 | 64 | 1 | 6 | 71 | +| src-tauri\\src\\commands | 3 | 275 | 0 | 51 | 326 | +| src-tauri\\src\\serial_core | 11 | 931 | 71 | 173 | 1,175 | +| src-tauri\\src\\serial_core (Files) | 8 | 647 | 64 | 115 | 826 | +| src-tauri\\src\\serial_core\\codecs | 3 | 284 | 7 | 58 | 349 | +| src\\lib | 9 | 3,611 | 1 | 555 | 4,167 | +| src\\lib\\components | 6 | 3,387 | 0 | 525 | 3,912 | +| src\\lib\\config | 1 | 55 | 0 | 3 | 58 | +| src\\lib\\styles | 1 | 43 | 1 | 7 | 51 | +| src\\lib\\types | 1 | 126 | 0 | 20 | 146 | +| src\\routes | 3 | 1,300 | 4 | 182 | 1,486 | +| static | 3 | 8 | 0 | 1 | 9 | + +Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md) \ No newline at end of file diff --git a/.VSCodeCounter/2026-04-01_16-39-17/results.txt b/.VSCodeCounter/2026-04-01_16-39-17/results.txt new file mode 100644 index 0000000..dbd6a10 --- /dev/null +++ b/.VSCodeCounter/2026-04-01_16-39-17/results.txt @@ -0,0 +1,100 @@ +Date : 2026-04-01 16:39:17 +Directory : e:\Workspace\joyson-serial +Total : 47 files, 8908 codes, 94 comments, 1250 blanks, all 10252 lines + +Languages ++--------------------+------------+------------+------------+------------+------------+ +| language | files | code | comment | blank | total | ++--------------------+------------+------------+------------+------------+------------+ +| Svelte | 8 | 4,686 | 0 | 706 | 5,392 | +| JSON | 5 | 2,040 | 0 | 5 | 2,045 | +| Rust | 18 | 1,273 | 72 | 231 | 1,576 | +| Markdown | 3 | 597 | 0 | 267 | 864 | +| TypeScript | 3 | 182 | 4 | 24 | 210 | +| PostCSS | 1 | 43 | 1 | 7 | 51 | +| JavaScript | 2 | 33 | 12 | 7 | 52 | +| XML | 5 | 27 | 0 | 1 | 28 | +| JSON with Comments | 1 | 14 | 5 | 1 | 20 | +| HTML | 1 | 13 | 0 | 1 | 14 | ++--------------------+------------+------------+------------+------------+------------+ + +Directories ++---------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| path | files | code | comment | blank | total | ++---------------------------------------------------------------------------+------------+------------+------------+------------+------------+ +| . | 47 | 8,908 | 94 | 1,250 | 10,252 | +| . (Files) | 9 | 2,633 | 17 | 278 | 2,928 | +| .idea | 2 | 19 | 0 | 0 | 19 | +| src | 13 | 4,924 | 5 | 738 | 5,667 | +| src (Files) | 1 | 13 | 0 | 1 | 14 | +| src-tauri | 20 | 1,324 | 72 | 233 | 1,629 | +| src-tauri (Files) | 2 | 39 | 0 | 2 | 41 | +| src-tauri\capabilities | 1 | 15 | 0 | 1 | 16 | +| src-tauri\src | 17 | 1,270 | 72 | 230 | 1,572 | +| src-tauri\src (Files) | 3 | 64 | 1 | 6 | 71 | +| src-tauri\src\commands | 3 | 275 | 0 | 51 | 326 | +| src-tauri\src\serial_core | 11 | 931 | 71 | 173 | 1,175 | +| src-tauri\src\serial_core (Files) | 8 | 647 | 64 | 115 | 826 | +| src-tauri\src\serial_core\codecs | 3 | 284 | 7 | 58 | 349 | +| src\lib | 9 | 3,611 | 1 | 555 | 4,167 | +| src\lib\components | 6 | 3,387 | 0 | 525 | 3,912 | +| src\lib\config | 1 | 55 | 0 | 3 | 58 | +| src\lib\styles | 1 | 43 | 1 | 7 | 51 | +| src\lib\types | 1 | 126 | 0 | 20 | 146 | +| src\routes | 3 | 1,300 | 4 | 182 | 1,486 | +| static | 3 | 8 | 0 | 1 | 9 | ++---------------------------------------------------------------------------+------------+------------+------------+------------+------------+ + +Files ++---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ +| filename | language | code | comment | blank | total | ++---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ +| e:\Workspace\joyson-serial\.idea\modules.xml | XML | 8 | 0 | 0 | 8 | +| e:\Workspace\joyson-serial\.idea\tauri-demo.iml | XML | 11 | 0 | 0 | 11 | +| e:\Workspace\joyson-serial\README.md | Markdown | 34 | 0 | 20 | 54 | +| e:\Workspace\joyson-serial\flowus_tools.json | JSON | 1 | 0 | 1 | 2 | +| e:\Workspace\joyson-serial\frontend_prompt.md | Markdown | 189 | 0 | 66 | 255 | +| e:\Workspace\joyson-serial\package-lock.json | JSON | 1,957 | 0 | 1 | 1,958 | +| e:\Workspace\joyson-serial\package.json | JSON | 31 | 0 | 1 | 32 | +| e:\Workspace\joyson-serial\src-tauri\build.rs | Rust | 3 | 0 | 1 | 4 | +| e:\Workspace\joyson-serial\src-tauri\capabilities\default.json | JSON | 15 | 0 | 1 | 16 | +| e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs | Rust | 2 | 0 | 1 | 3 | +| e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs | Rust | 246 | 0 | 44 | 290 | +| e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs | Rust | 27 | 0 | 6 | 33 | +| e:\Workspace\joyson-serial\src-tauri\src\lib.rs | Rust | 22 | 0 | 2 | 24 | +| e:\Workspace\joyson-serial\src-tauri\src\log.rs | Rust | 34 | 0 | 2 | 36 | +| e:\Workspace\joyson-serial\src-tauri\src\main.rs | Rust | 8 | 1 | 2 | 11 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codec.rs | Rust | 6 | 0 | 1 | 7 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\mod.rs | Rust | 4 | 0 | 1 | 5 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\tactile_a.rs | Rust | 67 | 0 | 17 | 84 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\codecs\test.rs | Rust | 213 | 7 | 40 | 260 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\error.rs | Rust | 47 | 0 | 6 | 53 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\frame.rs | Rust | 46 | 3 | 9 | 58 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\mod.rs | Rust | 22 | 0 | 7 | 29 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\model.rs | Rust | 377 | 57 | 67 | 501 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\record.rs | Rust | 50 | 4 | 11 | 65 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\serial.rs | Rust | 73 | 0 | 8 | 81 | +| e:\Workspace\joyson-serial\src-tauri\src\serial_core\utils.rs | Rust | 26 | 0 | 6 | 32 | +| e:\Workspace\joyson-serial\src-tauri\tauri.conf.json | JSON | 36 | 0 | 1 | 37 | +| e:\Workspace\joyson-serial\src\app.html | HTML | 13 | 0 | 1 | 14 | +| e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte | Svelte | 691 | 0 | 96 | 787 | +| e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte | Svelte | 398 | 0 | 63 | 461 | +| e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte | Svelte | 861 | 0 | 110 | 971 | +| e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte | Svelte | 558 | 0 | 97 | 655 | +| e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte | Svelte | 382 | 0 | 71 | 453 | +| e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte | Svelte | 497 | 0 | 88 | 585 | +| e:\Workspace\joyson-serial\src\lib\config\color-map.ts | TypeScript | 55 | 0 | 3 | 58 | +| e:\Workspace\joyson-serial\src\lib\styles\theme.css | PostCSS | 43 | 1 | 7 | 51 | +| e:\Workspace\joyson-serial\src\lib\types\hud.ts | TypeScript | 126 | 0 | 20 | 146 | +| e:\Workspace\joyson-serial\src\routes\+layout.svelte | Svelte | 13 | 0 | 5 | 18 | +| e:\Workspace\joyson-serial\src\routes\+layout.ts | TypeScript | 1 | 4 | 1 | 6 | +| e:\Workspace\joyson-serial\src\routes\+page.svelte | Svelte | 1,286 | 0 | 176 | 1,462 | +| e:\Workspace\joyson-serial\static\svelte.svg | XML | 1 | 0 | 0 | 1 | +| e:\Workspace\joyson-serial\static\tauri.svg | XML | 6 | 0 | 1 | 7 | +| e:\Workspace\joyson-serial\static\vite.svg | XML | 1 | 0 | 0 | 1 | +| e:\Workspace\joyson-serial\svelte.config.js | JavaScript | 11 | 5 | 3 | 19 | +| e:\Workspace\joyson-serial\tauri-event.md | Markdown | 374 | 0 | 181 | 555 | +| e:\Workspace\joyson-serial\tsconfig.json | JSON with Comments | 14 | 5 | 1 | 20 | +| e:\Workspace\joyson-serial\vite.config.js | JavaScript | 22 | 7 | 4 | 33 | +| Total | | 8,908 | 94 | 1,250 | 10,252 | ++---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+ \ No newline at end of file diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1fc874d..ad33af4 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -558,6 +558,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.5.0" @@ -3854,6 +3869,7 @@ dependencies = [ "anyhow", "async-trait", "chrono", + "crc", "csv", "fern", "humantime", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9eea26e..a6b0f0d 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -32,3 +32,4 @@ log = "0.4.29" humantime = "2.3.0" csv = "1.4.0" chrono = "0.4.44" +crc = "3.4.0" diff --git a/src-tauri/src/serial_core/codecs/mod.rs b/src-tauri/src/serial_core/codecs/mod.rs index 8724916..d4b0944 100644 --- a/src-tauri/src/serial_core/codecs/mod.rs +++ b/src-tauri/src/serial_core/codecs/mod.rs @@ -1,4 +1,5 @@ use crate::serial_core::{frame::TestFrame, record::Recording}; pub mod test; +pub mod tactile_a; pub type TestRecording = Recording; \ No newline at end of file diff --git a/src-tauri/src/serial_core/codecs/tactile_a.rs b/src-tauri/src/serial_core/codecs/tactile_a.rs new file mode 100644 index 0000000..8eed943 --- /dev/null +++ b/src-tauri/src/serial_core/codecs/tactile_a.rs @@ -0,0 +1,142 @@ +use std::time::Instant; +use crate::serial_core::error::CodecError; +use crate::serial_core::frame::{FrameHandler, TactileAFrameMetaData, TactileARepFrame, TestFrame}; +use crate::serial_core::utils::elapsed_millis; +use crate::serial_core::{codec::Codec, codecs::test::TestCodec, frame::{TactileAFrame, TactileAFrameStatusCode}}; + +const FRAME_BUFFER_MIN_LENGTH: usize = 15; + +pub struct TactileACodec { + buffer: Vec, + frame_nb: u64, +} + +pub struct TactileACsvExporter; + +pub struct TactileACsvImporter { + +} + +pub struct TactileAHandler; + +#[derive(Clone)] +pub struct TactileADataPacket { + pub data: Vec, + pub dts_ms: u64, +} + +impl From for TactileAFrameStatusCode { + fn from(value: u8) -> Self { + match value { + 0 => TactileAFrameStatusCode::Success, + _ => TactileAFrameStatusCode::Failure + } + } +} + +impl TactileACodec { + pub fn new() -> TactileACodec { + Self { + buffer: Vec::new(), + frame_nb: 0 + } + } + + pub fn parse_data_frame(data: &[u8]) -> Result> { + if data.len() % 2 == 0 { + return Err(CodecError::InvalidLength); + } + + let vals: Vec = data + .chunks_exact(2) + .map(|chunk| u16::from_be_bytes(bytes)) + } +} + +impl Codec for TactileACodec { + fn decode(&mut self, input: &[u8], session_started_at: std::time::Instant) -> Result, CodecError> { + self.buffer.extend_from_slice(input); + let mut frames: Vec = Vec::new(); + + loop { + if self.buffer.len() < FRAME_BUFFER_MIN_LENGTH { + break; + } + + let header_pos = self.buffer + .windows(2) + .position(|w| w == [0xAA, 0x55]); + + let Some(pos) = header_pos else { + self.buffer.clear(); + break; + }; + if pos > 0 { + self.buffer.drain(0..pos); + } + + if self.buffer.len() < FRAME_BUFFER_MIN_LENGTH { + break; + } + + let header = [self.buffer[0], self.buffer[1]]; + let payload_len = u16::from_le_bytes([self.buffer[2], self.buffer[3]]) as usize; + let device_addr = self.buffer[4]; + let extend_code = self.buffer[5]; + let func_code = self.buffer[6]; + let start_addr = u32::from_le_bytes([self.buffer[7],self.buffer[8],self.buffer[9],self.buffer[10]]); + let except_data_len = u16::from_le_bytes([self.buffer[11], self.buffer[12]]) as usize; + let status = TactileAFrameStatusCode::from(self.buffer[13]); + let payload = self.buffer[14..14+except_data_len].to_vec(); + let crc8_itu_alg = crc::Crc::::new(&crc::CRC_8_I_432_1); + let checksum = crc8_itu_alg.checksum(&payload.as_slice()); + let frame_length = except_data_len + FRAME_BUFFER_MIN_LENGTH; + if self.buffer[frame_length - 1] != checksum { + self.buffer.drain(0..1); + continue; + } + let dts_ms = elapsed_millis(session_started_at); + let meta: TactileAFrameMetaData = TactileAFrameMetaData { + header, + payload_len, + device_addr, + extend_code, + func_code, + start_addr, + except_data_len, + checksum, + }; + frames.push(TactileAFrame::Rep({ + TactileARepFrame { + meta, + status, + payload, + dts_ms + } + })); + + self.buffer.drain(0..frame_length); + } + + Ok(frames) + + } + + fn encode(&self, frame: &TactileAFrame) -> Result, crate::serial_core::error::CodecError> { + todo!() + } +} + +#[async_trait] +impl FrameHandler for TactileAHandler { + async fn on_frame(&mut self, frame: &TactileAFrame) -> anyhow::Result>> { + match frame { + TactileARepFrame => { + + } + _ => { + + } + } + } +} \ No newline at end of file diff --git a/src-tauri/src/serial_core/codecs/test.rs b/src-tauri/src/serial_core/codecs/test.rs index 2cf3c70..1dba7e6 100644 --- a/src-tauri/src/serial_core/codecs/test.rs +++ b/src-tauri/src/serial_core/codecs/test.rs @@ -1,13 +1,15 @@ use std::io::Read; use std::time::Instant; -use crate::serial_core::frame::{crc8, usize_to_u16_be_bytes, FrameHandler}; +use crate::serial_core::frame::{FrameHandler}; +use crate::serial_core::utils::*; use crate::serial_core::{codec::Codec, error::CodecError, frame::TestFrame}; use anyhow::anyhow; use async_trait::async_trait; use chrono::Local; use csv::StringRecord; use crate::serial_core::record::{write_csv, CsvExporter, CsvImporter, RecordedFrame, Recording}; - +use crc::{Crc, CRC_8_SMBUS}; +use crate::serial_core::utils::*; pub struct TestCodec { buffer: Vec, } @@ -52,7 +54,9 @@ impl Codec for TestCodec { break; } let payload = self.buffer[5..5 + length].to_vec(); - let checksum = crc8(payload.as_slice()); + // let checksum = crc8(payload.as_slice()); + let crc8_alg = crc::Crc::::new(&crc::CRC_8_SMBUS); + let checksum = crc8_alg.checksum(payload.as_slice()); if self.buffer[frame_length - 1] != checksum { self.buffer.drain(0..1); continue; @@ -112,10 +116,6 @@ fn parse_data_frame(data: &[u8]) -> Result, CodecError> { Ok(vals) } -fn elapsed_millis(start_at: Instant) -> u64 { - start_at.elapsed().as_millis() as u64 -} - pub struct TestCsvExporter; pub struct TestCsvImporter { channels: usize, diff --git a/src-tauri/src/serial_core/frame.rs b/src-tauri/src/serial_core/frame.rs index 330c506..42d23a6 100644 --- a/src-tauri/src/serial_core/frame.rs +++ b/src-tauri/src/serial_core/frame.rs @@ -10,34 +10,48 @@ pub struct TestFrame { pub dts_ms: u64 } +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TactileAFrameMetaData { + pub header: [u8; 2], + pub payload_len: usize, + pub device_addr: u8, + pub extend_code: u8, + pub func_code: u8, + pub start_addr: u32, + pub except_data_len: usize, + // pub status: u8, + // pub payload_data: Vec, + pub checksum: u8, + // pub dts_ms: u64, +} +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TactileAReqFrame { + pub meta: TactileAFrameMetaData, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TactileARepFrame { + pub meta: TactileAFrameMetaData, + pub status: TactileAFrameStatusCode, + pub payload: Vec, + pub dts_ms: u64 +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum TactileAFrameStatusCode { + Success, + Failure +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum TactileAFrame { + Req(TactileAReqFrame), + Rep(TactileARepFrame) +} #[async_trait] pub trait FrameHandler: Send { async fn on_frame(&mut self, frame: &F) -> Result>>; } -pub fn usize_to_u16_be_bytes(n: usize) -> [u8; 2] { - (n as u16).to_be_bytes() -} - -pub fn usize_to_u16_le_bytes(n: usize) -> [u8; 2] { - (n as u16).to_be_bytes() -} - -pub fn crc8(data: &[u8]) -> u8 { - let mut crc: u8 = 0x00; - - for &byte in data { - crc ^= byte; - for _ in 0..8 { - if (crc & 0x80) != 0 { - crc = (crc << 1) ^ 0x07; - } else { - crc <<= 1; - } - } - } - - crc -} diff --git a/src-tauri/src/serial_core/mod.rs b/src-tauri/src/serial_core/mod.rs index eacaeb8..a3d8783 100644 --- a/src-tauri/src/serial_core/mod.rs +++ b/src-tauri/src/serial_core/mod.rs @@ -7,6 +7,7 @@ pub mod frame; pub mod model; pub mod serial; pub mod record; +pub mod utils; pub type TestRecording = Recording; diff --git a/src-tauri/src/serial_core/utils.rs b/src-tauri/src/serial_core/utils.rs new file mode 100644 index 0000000..6397bf5 --- /dev/null +++ b/src-tauri/src/serial_core/utils.rs @@ -0,0 +1,38 @@ +use std::time::Instant; + +pub fn usize_to_u16_be_bytes(n: usize) -> [u8; 2] { + (n as u16).to_be_bytes() +} + +pub fn usize_to_u16_le_bytes(n: usize) -> [u8; 2] { + (n as u16).to_be_bytes() +} + +pub fn u16_to_hex_be_bytes(n: u16) -> [u8; 2] { + (n as u16).to_be_bytes() +} + +pub fn u16_to_hex_le_bytes(n: u16) -> [u8; 2] { + (n as u16).to_le_bytes() +} + +pub fn crc8(data: &[u8]) -> u8 { + let mut crc: u8 = 0x00; + + for &byte in data { + crc ^= byte; + for _ in 0..8 { + if (crc & 0x80) != 0 { + crc = (crc << 1) ^ 0x07; + } else { + crc <<= 1; + } + } + } + + crc +} + +pub fn elapsed_millis(start_at: Instant) -> u64 { + start_at.elapsed().as_millis() as u64 +} \ No newline at end of file