From cd538abd9a3084c974c9b43ea7de2f8e19e8db36 Mon Sep 17 00:00:00 2001 From: wangqiyang Date: Tue, 11 Aug 2026 10:36:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E9=BD=90=E4=BB=BB=E5=8A=A1=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E6=BC=94=E7=A4=BA=E6=8E=A5=E5=8F=A3=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/m9zTtyApi/automatic_mode_demo.go | 15 ++++++ .../m9zTtyApi/automatic_mode_demo_test.go | 34 +++++++++++- internal/module/m9zTtyApi/read.go | 54 +++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/internal/module/m9zTtyApi/automatic_mode_demo.go b/internal/module/m9zTtyApi/automatic_mode_demo.go index 3e266af..09410bd 100644 --- a/internal/module/m9zTtyApi/automatic_mode_demo.go +++ b/internal/module/m9zTtyApi/automatic_mode_demo.go @@ -92,6 +92,11 @@ func (s *automaticModeDemoStore) getStartTask(mode uint8) m9z.ControlTask { return cloneAutomaticControlTask(s.startTasks[normalizeAutomaticMode(mode)]) } +func (s *automaticModeDemoStore) getStartTaskProgram(mode uint8) (*m9z.TaskProgram, error) { + normalizedMode := normalizeAutomaticMode(mode) + return m9z.ControlTaskToTaskProgram(s.getStartTask(normalizedMode), normalizedMode) +} + func (s *automaticModeDemoStore) setStartTask(mode uint8, task m9z.ControlTask) { s.mu.Lock() defer s.mu.Unlock() @@ -104,6 +109,11 @@ func (s *automaticModeDemoStore) getStopTask(mode uint8) m9z.ControlTask { return cloneAutomaticControlTask(s.stopTasks[normalizeAutomaticMode(mode)]) } +func (s *automaticModeDemoStore) getStopTaskProgram(mode uint8) (*m9z.TaskProgram, error) { + normalizedMode := normalizeAutomaticMode(mode) + return m9z.ControlTaskToTaskProgram(s.getStopTask(normalizedMode), normalizedMode) +} + func (s *automaticModeDemoStore) setStopTask(mode uint8, task m9z.ControlTask) { s.mu.Lock() defer s.mu.Unlock() @@ -116,6 +126,11 @@ func (s *automaticModeDemoStore) getMiddleTask(mode uint8) m9z.MiddleControlTask return cloneAutomaticMiddleTask(s.middleTasks[normalizeAutomaticMode(mode)]) } +func (s *automaticModeDemoStore) getMiddleTaskProgram(mode uint8) (*m9z.TaskProgram, error) { + normalizedMode := normalizeAutomaticMode(mode) + return m9z.MiddleControlTaskToTaskProgram(s.getMiddleTask(normalizedMode), normalizedMode) +} + func (s *automaticModeDemoStore) setMiddleTask(mode uint8, task m9z.MiddleControlTask) { s.mu.Lock() defer s.mu.Unlock() diff --git a/internal/module/m9zTtyApi/automatic_mode_demo_test.go b/internal/module/m9zTtyApi/automatic_mode_demo_test.go index 7a4e1d3..511c1b8 100644 --- a/internal/module/m9zTtyApi/automatic_mode_demo_test.go +++ b/internal/module/m9zTtyApi/automatic_mode_demo_test.go @@ -1,6 +1,10 @@ package m9zApi -import "testing" +import ( + "testing" + + "tgk-touch/internal/library/m9z" +) func TestAutomaticModeDemoStoreReturnsCopies(t *testing.T) { store := newAutomaticModeDemoStore() @@ -37,3 +41,31 @@ func TestNormalizeAutomaticMode(t *testing.T) { t.Fatalf("normalizeAutomaticMode(3) = %d, want 0", got) } } + +func TestAutomaticModeDemoStoreBuildsTaskPrograms(t *testing.T) { + store := newAutomaticModeDemoStore() + + programs := map[string]func(uint8) (*m9z.TaskProgram, error){ + "start": store.getStartTaskProgram, + "middle": store.getMiddleTaskProgram, + "stop": store.getStopTaskProgram, + } + + for name, build := range programs { + t.Run(name, func(t *testing.T) { + program, err := build(1) + if err != nil { + t.Fatalf("build %s demo task program failed: %v", name, err) + } + if program == nil { + t.Fatalf("%s demo task program is nil", name) + } + if program.Index != 1 { + t.Fatalf("%s demo task program index = %d, want 1", name, program.Index) + } + if len(program.Instructions) == 0 { + t.Fatalf("%s demo task program should include instructions", name) + } + }) + } +} diff --git a/internal/module/m9zTtyApi/read.go b/internal/module/m9zTtyApi/read.go index 0259300..1e3c90f 100644 --- a/internal/module/m9zTtyApi/read.go +++ b/internal/module/m9zTtyApi/read.go @@ -316,6 +316,24 @@ func getDeviceSunRiseTime(rpc towgo.JsonRpcConnection) { // 读取开始任务 (优化指令 CMD=0x13) func getStartTask(rpc towgo.JsonRpcConnection) { + if automaticModeUseDemoAPI { + getStartTaskDemo(rpc) + return + } + getStartTaskReal(rpc) +} + +func getStartTaskDemo(rpc towgo.JsonRpcConnection) { + var p automaticModeTaskReq + rpc.ReadParams(&p) + program, err := automaticModeDemo.getStartTaskProgram(p.Mode) + if err != nil { + panic(err) + } + rpc.WriteResult(program) +} + +func getStartTaskReal(rpc towgo.JsonRpcConnection) { var p struct { CommUid string `json:"comm_uid"` Mode uint8 `json:"mode"` // 0x00-0x02 @@ -343,6 +361,24 @@ func getStartTask(rpc towgo.JsonRpcConnection) { // 读取中间任务 (优化指令 CMD=0x14) func getMiddleTaskRead(rpc towgo.JsonRpcConnection) { + if automaticModeUseDemoAPI { + getMiddleTaskReadDemo(rpc) + return + } + getMiddleTaskReadReal(rpc) +} + +func getMiddleTaskReadDemo(rpc towgo.JsonRpcConnection) { + var p automaticModeTaskReq + rpc.ReadParams(&p) + program, err := automaticModeDemo.getMiddleTaskProgram(p.Mode) + if err != nil { + panic(err) + } + rpc.WriteResult(program) +} + +func getMiddleTaskReadReal(rpc towgo.JsonRpcConnection) { var p struct { CommUid string `json:"comm_uid"` Mode uint8 `json:"mode"` // 0x00-0x02 @@ -361,6 +397,24 @@ func getMiddleTaskRead(rpc towgo.JsonRpcConnection) { // 读取结束任务 (优化指令 CMD=0x15) func getStopTaskRead(rpc towgo.JsonRpcConnection) { + if automaticModeUseDemoAPI { + getStopTaskReadDemo(rpc) + return + } + getStopTaskReadReal(rpc) +} + +func getStopTaskReadDemo(rpc towgo.JsonRpcConnection) { + var p automaticModeTaskReq + rpc.ReadParams(&p) + program, err := automaticModeDemo.getStopTaskProgram(p.Mode) + if err != nil { + panic(err) + } + rpc.WriteResult(program) +} + +func getStopTaskReadReal(rpc towgo.JsonRpcConnection) { var p struct { CommUid string `json:"comm_uid"` Mode uint8 `json:"mode"` // 0x00-0x02