add tactile_a codec

This commit is contained in:
lenn
2026-04-01 18:35:22 +08:00
parent a754656ea4
commit 380394b93a
17 changed files with 564 additions and 31 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -0,0 +1,2 @@
"filename", "language", "", "comment", "blank", "total"
"Total", "-", , 0, 0, 0
1 filename language comment blank total
2 Total - 0 0 0

View File

@@ -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)

View File

@@ -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 |
+----------+----------+------------+------------+------------+------------+

View File

@@ -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
1 filename language JavaScript JSON Markdown JSON with Comments XML TypeScript Svelte Rust PostCSS HTML comment blank total
2 e:\Workspace\joyson-serial\.idea\modules.xml XML 0 0 0 0 8 0 0 0 0 0 0 0 8
3 e:\Workspace\joyson-serial\.idea\tauri-demo.iml XML 0 0 0 0 11 0 0 0 0 0 0 0 11
4 e:\Workspace\joyson-serial\README.md Markdown 0 0 34 0 0 0 0 0 0 0 0 20 54
5 e:\Workspace\joyson-serial\flowus_tools.json JSON 0 1 0 0 0 0 0 0 0 0 0 1 2
6 e:\Workspace\joyson-serial\frontend_prompt.md Markdown 0 0 189 0 0 0 0 0 0 0 0 66 255
7 e:\Workspace\joyson-serial\package-lock.json JSON 0 1957 0 0 0 0 0 0 0 0 0 1 1958
8 e:\Workspace\joyson-serial\package.json JSON 0 31 0 0 0 0 0 0 0 0 0 1 32
9 e:\Workspace\joyson-serial\src-tauri\build.rs Rust 0 0 0 0 0 0 0 3 0 0 0 1 4
10 e:\Workspace\joyson-serial\src-tauri\capabilities\default.json JSON 0 15 0 0 0 0 0 0 0 0 0 1 16
11 e:\Workspace\joyson-serial\src-tauri\src\commands\mod.rs Rust 0 0 0 0 0 0 0 2 0 0 0 1 3
12 e:\Workspace\joyson-serial\src-tauri\src\commands\serial.rs Rust 0 0 0 0 0 0 0 246 0 0 0 44 290
13 e:\Workspace\joyson-serial\src-tauri\src\commands\window.rs Rust 0 0 0 0 0 0 0 27 0 0 0 6 33
14 e:\Workspace\joyson-serial\src-tauri\src\lib.rs Rust 0 0 0 0 0 0 0 22 0 0 0 2 24
15 e:\Workspace\joyson-serial\src-tauri\src\log.rs Rust 0 0 0 0 0 0 0 34 0 0 0 2 36
16 e:\Workspace\joyson-serial\src-tauri\src\main.rs Rust 0 0 0 0 0 0 0 8 0 0 1 2 11
17 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
18 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
19 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
20 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
21 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
22 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
23 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
24 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
25 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
26 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
27 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
28 e:\Workspace\joyson-serial\src-tauri\tauri.conf.json JSON 0 36 0 0 0 0 0 0 0 0 0 1 37
29 e:\Workspace\joyson-serial\src\app.html HTML 0 0 0 0 0 0 0 0 0 13 0 1 14
30 e:\Workspace\joyson-serial\src\lib\components\CenterStage.svelte Svelte 0 0 0 0 0 0 691 0 0 0 0 96 787
31 e:\Workspace\joyson-serial\src\lib\components\ConfigPanel.svelte Svelte 0 0 0 0 0 0 398 0 0 0 0 63 461
32 e:\Workspace\joyson-serial\src\lib\components\HudPanel.svelte Svelte 0 0 0 0 0 0 861 0 0 0 0 110 971
33 e:\Workspace\joyson-serial\src\lib\components\PressureMatrixViewer.svelte Svelte 0 0 0 0 0 0 558 0 0 0 0 97 655
34 e:\Workspace\joyson-serial\src\lib\components\SignalChart.svelte Svelte 0 0 0 0 0 0 382 0 0 0 0 71 453
35 e:\Workspace\joyson-serial\src\lib\components\SummaryCurve.svelte Svelte 0 0 0 0 0 0 497 0 0 0 0 88 585
36 e:\Workspace\joyson-serial\src\lib\config\color-map.ts TypeScript 0 0 0 0 0 55 0 0 0 0 0 3 58
37 e:\Workspace\joyson-serial\src\lib\styles\theme.css PostCSS 0 0 0 0 0 0 0 0 43 0 1 7 51
38 e:\Workspace\joyson-serial\src\lib\types\hud.ts TypeScript 0 0 0 0 0 126 0 0 0 0 0 20 146
39 e:\Workspace\joyson-serial\src\routes\+layout.svelte Svelte 0 0 0 0 0 0 13 0 0 0 0 5 18
40 e:\Workspace\joyson-serial\src\routes\+layout.ts TypeScript 0 0 0 0 0 1 0 0 0 0 4 1 6
41 e:\Workspace\joyson-serial\src\routes\+page.svelte Svelte 0 0 0 0 0 0 1286 0 0 0 0 176 1462
42 e:\Workspace\joyson-serial\static\svelte.svg XML 0 0 0 0 1 0 0 0 0 0 0 0 1
43 e:\Workspace\joyson-serial\static\tauri.svg XML 0 0 0 0 6 0 0 0 0 0 0 1 7
44 e:\Workspace\joyson-serial\static\vite.svg XML 0 0 0 0 1 0 0 0 0 0 0 0 1
45 e:\Workspace\joyson-serial\svelte.config.js JavaScript 11 0 0 0 0 0 0 0 0 0 5 3 19
46 e:\Workspace\joyson-serial\tauri-event.md Markdown 0 0 374 0 0 0 0 0 0 0 0 181 555
47 e:\Workspace\joyson-serial\tsconfig.json JSON with Comments 0 0 0 14 0 0 0 0 0 0 5 1 20
48 e:\Workspace\joyson-serial\vite.config.js JavaScript 22 0 0 0 0 0 0 0 0 0 7 4 33
49 Total - 33 2040 597 14 27 182 4686 1273 43 13 94 1250 10252

File diff suppressed because one or more lines are too long

View File

@@ -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)

View File

@@ -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 |
+---------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+

16
src-tauri/Cargo.lock generated
View File

@@ -558,6 +558,21 @@ dependencies = [
"libc", "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]] [[package]]
name = "crc32fast" name = "crc32fast"
version = "1.5.0" version = "1.5.0"
@@ -3854,6 +3869,7 @@ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
"chrono", "chrono",
"crc",
"csv", "csv",
"fern", "fern",
"humantime", "humantime",

View File

@@ -32,3 +32,4 @@ log = "0.4.29"
humantime = "2.3.0" humantime = "2.3.0"
csv = "1.4.0" csv = "1.4.0"
chrono = "0.4.44" chrono = "0.4.44"
crc = "3.4.0"

View File

@@ -1,4 +1,5 @@
use crate::serial_core::{frame::TestFrame, record::Recording}; use crate::serial_core::{frame::TestFrame, record::Recording};
pub mod test; pub mod test;
pub mod tactile_a;
pub type TestRecording = Recording<TestFrame>; pub type TestRecording = Recording<TestFrame>;

View File

@@ -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<u8>,
frame_nb: u64,
}
pub struct TactileACsvExporter;
pub struct TactileACsvImporter {
}
pub struct TactileAHandler;
#[derive(Clone)]
pub struct TactileADataPacket {
pub data: Vec<i32>,
pub dts_ms: u64,
}
impl From<u8> 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<Vec<i32>> {
if data.len() % 2 == 0 {
return Err(CodecError::InvalidLength);
}
let vals: Vec<i32> = data
.chunks_exact(2)
.map(|chunk| u16::from_be_bytes(bytes))
}
}
impl Codec<TactileAFrame> for TactileACodec {
fn decode(&mut self, input: &[u8], session_started_at: std::time::Instant) -> Result<Vec<TactileAFrame>, CodecError> {
self.buffer.extend_from_slice(input);
let mut frames: Vec<TactileAFrame> = 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::<u8>::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<Vec<u8>, crate::serial_core::error::CodecError> {
todo!()
}
}
#[async_trait]
impl FrameHandler<TactileAFrame, i32> for TactileAHandler {
async fn on_frame(&mut self, frame: &TactileAFrame) -> anyhow::Result<Option<Vec<i32>>> {
match frame {
TactileARepFrame => {
}
_ => {
}
}
}
}

View File

@@ -1,13 +1,15 @@
use std::io::Read; use std::io::Read;
use std::time::Instant; 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 crate::serial_core::{codec::Codec, error::CodecError, frame::TestFrame};
use anyhow::anyhow; use anyhow::anyhow;
use async_trait::async_trait; use async_trait::async_trait;
use chrono::Local; use chrono::Local;
use csv::StringRecord; use csv::StringRecord;
use crate::serial_core::record::{write_csv, CsvExporter, CsvImporter, RecordedFrame, Recording}; 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 { pub struct TestCodec {
buffer: Vec<u8>, buffer: Vec<u8>,
} }
@@ -52,7 +54,9 @@ impl Codec<TestFrame> for TestCodec {
break; break;
} }
let payload = self.buffer[5..5 + length].to_vec(); 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::<u8>::new(&crc::CRC_8_SMBUS);
let checksum = crc8_alg.checksum(payload.as_slice());
if self.buffer[frame_length - 1] != checksum { if self.buffer[frame_length - 1] != checksum {
self.buffer.drain(0..1); self.buffer.drain(0..1);
continue; continue;
@@ -112,10 +116,6 @@ fn parse_data_frame(data: &[u8]) -> Result<Vec<i32>, CodecError> {
Ok(vals) Ok(vals)
} }
fn elapsed_millis(start_at: Instant) -> u64 {
start_at.elapsed().as_millis() as u64
}
pub struct TestCsvExporter; pub struct TestCsvExporter;
pub struct TestCsvImporter { pub struct TestCsvImporter {
channels: usize, channels: usize,

View File

@@ -10,34 +10,48 @@ pub struct TestFrame {
pub dts_ms: u64 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<u8>,
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<u8>,
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] #[async_trait]
pub trait FrameHandler<F, T>: Send { pub trait FrameHandler<F, T>: Send {
async fn on_frame(&mut self, frame: &F) -> Result<Option<Vec<T>>>; async fn on_frame(&mut self, frame: &F) -> Result<Option<Vec<T>>>;
} }
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
}

View File

@@ -7,6 +7,7 @@ pub mod frame;
pub mod model; pub mod model;
pub mod serial; pub mod serial;
pub mod record; pub mod record;
pub mod utils;
pub type TestRecording = Recording<TestFrame>; pub type TestRecording = Recording<TestFrame>;

View File

@@ -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
}