From ab2138be1ee29311ecca3ebad933cb4f3855d4c3 Mon Sep 17 00:00:00 2001 From: Eli Yip Date: Tue, 3 Jun 2025 09:48:05 +0800 Subject: [PATCH] feat(legacy): implement palm interfaces --- api/legacy/handlers.go | 71 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/api/legacy/handlers.go b/api/legacy/handlers.go index b23cae5..5075e6f 100644 --- a/api/legacy/handlers.go +++ b/api/legacy/handlers.go @@ -186,3 +186,74 @@ func (s *LegacyServer) handleFingers(c *gin.Context) { Data: map[string]any{"interface": req.Interface, "pose": req.Pose}, }) } + +// handlePalm 掌部姿态处理函数 +func (s *LegacyServer) handlePalm(c *gin.Context) { + var req PalmPoseRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, define.ApiResponse{ + Status: "error", + Error: "无效的掌部姿态数据:" + err.Error(), + }) + return + } + + // 验证每个值是否在范围内 + for _, v := range req.Pose { + if v < 0 || v > 255 { + c.JSON(http.StatusBadRequest, define.ApiResponse{ + Status: "error", + Error: "掌部姿态值必须在 0-255 范围内", + }) + return + } + } + + // 如果未指定接口,使用默认接口 + if req.Interface == "" { + req.Interface = config.Config.DefaultInterface + } + + // 验证接口 + if !s.mapper.IsValidInterface(req.Interface) { + c.JSON(http.StatusBadRequest, define.ApiResponse{ + Status: "error", + Error: fmt.Sprintf("无效的接口 %s,可用接口: %v", req.Interface, config.Config.AvailableInterfaces), + }) + return + } + + // 获取对应的设备 + dev, err := s.mapper.GetDeviceForInterface(req.Interface) + if err != nil { + c.JSON(http.StatusInternalServerError, define.ApiResponse{ + Status: "error", + Error: "获取设备失败:" + err.Error(), + }) + return + } + + // 停止当前动画 + if err := s.mapper.StopAllAnimations(req.Interface); err != nil { + c.JSON(http.StatusInternalServerError, define.ApiResponse{ + Status: "error", + Error: "停止动画失败:" + err.Error(), + }) + return + } + + // 设置掌部姿态 + if err := dev.SetPalmPose(req.Pose); err != nil { + c.JSON(http.StatusInternalServerError, define.ApiResponse{ + Status: "error", + Error: "发送掌部姿态失败:" + err.Error(), + }) + return + } + + c.JSON(http.StatusOK, define.ApiResponse{ + Status: "success", + Message: "掌部姿态指令发送成功", + Data: map[string]any{"interface": req.Interface, "pose": req.Pose}, + }) +}