feat(legacy): implement preset handler
This commit is contained in:
parent
ab2138be1e
commit
98fa37952d
@ -257,3 +257,76 @@ func (s *LegacyServer) handlePalm(c *gin.Context) {
|
||||
Data: map[string]any{"interface": req.Interface, "pose": req.Pose},
|
||||
})
|
||||
}
|
||||
|
||||
// handlePreset 预设姿势处理函数
|
||||
func (s *LegacyServer) handlePreset(c *gin.Context) {
|
||||
pose := c.Param("pose")
|
||||
|
||||
// 从查询参数获取接口名称和手型
|
||||
ifName := c.Query("interface")
|
||||
// handType := c.Query("handType") // TODO: 旧版 API 中声明但未使用,先放着,等 reivew 时候看看
|
||||
|
||||
if ifName == "" {
|
||||
ifName = config.Config.DefaultInterface
|
||||
}
|
||||
|
||||
// 验证接口
|
||||
if !s.mapper.IsValidInterface(ifName) {
|
||||
c.JSON(http.StatusBadRequest, define.ApiResponse{
|
||||
Status: "error",
|
||||
Error: fmt.Sprintf("无效的接口 %s,可用接口: %v", ifName, config.Config.AvailableInterfaces),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 获取对应的设备
|
||||
dev, err := s.mapper.GetDeviceForInterface(ifName)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, define.ApiResponse{
|
||||
Status: "error",
|
||||
Error: "获取设备失败:" + err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 停止当前动画
|
||||
if err := s.mapper.StopAllAnimations(ifName); err != nil {
|
||||
c.JSON(http.StatusInternalServerError, define.ApiResponse{
|
||||
Status: "error",
|
||||
Error: "停止动画失败:" + err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 获取预设姿势详细信息(用于返回具体参数)
|
||||
presetDetails, exists := dev.GetPresetDetails(pose)
|
||||
if !exists {
|
||||
c.JSON(http.StatusBadRequest, define.ApiResponse{
|
||||
Status: "error",
|
||||
Error: "无效的预设姿势",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 使用设备的预设姿势方法
|
||||
if err := dev.ExecutePreset(pose); err != nil {
|
||||
c.JSON(http.StatusBadRequest, define.ApiResponse{
|
||||
Status: "error",
|
||||
Error: "无效的预设姿势",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 获取预设姿势的描述
|
||||
description := dev.GetPresetDescription(pose)
|
||||
message := fmt.Sprintf("已设置预设姿势: %s", pose)
|
||||
if description != "" {
|
||||
message = fmt.Sprintf("已设置%s", description)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, define.ApiResponse{
|
||||
Status: "success",
|
||||
Message: message,
|
||||
Data: map[string]any{"interface": ifName, "pose": presetDetails.FingerPose},
|
||||
})
|
||||
}
|
||||
|
@ -23,9 +23,10 @@ type Device interface {
|
||||
GetAnimationEngine() *AnimationEngine // 获取设备的动画引擎
|
||||
|
||||
// --- 预设姿势相关方法 ---
|
||||
GetSupportedPresets() []string // 获取支持的预设姿势列表
|
||||
ExecutePreset(presetName string) error // 执行预设姿势
|
||||
GetPresetDescription(presetName string) string // 获取预设姿势描述
|
||||
GetSupportedPresets() []string // 获取支持的预设姿势列表
|
||||
ExecutePreset(presetName string) error // 执行预设姿势
|
||||
GetPresetDescription(presetName string) string // 获取预设姿势描述
|
||||
GetPresetDetails(presetName string) (PresetPose, bool) // 获取预设姿势详细信息
|
||||
}
|
||||
|
||||
// Command 代表一个发送给设备的指令
|
||||
|
@ -378,3 +378,8 @@ func (h *L10Hand) ExecutePreset(presetName string) error {
|
||||
func (h *L10Hand) GetPresetDescription(presetName string) string {
|
||||
return h.presetManager.GetPresetDescription(presetName)
|
||||
}
|
||||
|
||||
// GetPresetDetails 获取预设姿势详细信息
|
||||
func (h *L10Hand) GetPresetDetails(presetName string) (device.PresetPose, bool) {
|
||||
return h.presetManager.GetPreset(presetName)
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ type Device interface {
|
||||
GetSupportedPresets() []string
|
||||
ExecutePreset(presetName string) error
|
||||
GetPresetDescription(presetName string) string
|
||||
GetPresetDetails(presetName string) (PresetPose, bool)
|
||||
}
|
||||
```
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user