增加待机报文缓存,无网状态也能执行待机任务;投影仪指令结果以设备状态为准

This commit is contained in:
2025-04-29 13:48:35 +08:00
parent 40293e5e9b
commit e1384504f1
13 changed files with 266 additions and 32 deletions

View File

@@ -111,6 +111,7 @@ func (c *Client) sendCommand(command string) (string, error) {
return result, nil
}
// PowerOn 打开投影机
func (c *Client) PowerOn() (string, error) {
err := c.connect()
if err != nil {
@@ -131,6 +132,7 @@ func (c *Client) PowerOn() (string, error) {
return response, nil
}
// PowerOff 关闭投影机
func (c *Client) PowerOff() (string, error) {
err := c.connect()
if err != nil {
@@ -151,6 +153,79 @@ func (c *Client) PowerOff() (string, error) {
return response, nil
}
// PowerOnSync 打开投影机
func (c *Client) PowerOnSync() (string, error) {
_, err := c.GetStatus()
if err != nil {
return "", err
}
_, _ = c.PowerOn()
// 轮询检查投影机状态,直到打开成功
for {
status, err := c.GetStatus()
if err != nil {
return "", err
}
if status == "1" {
return "投影机已打开", nil
} else {
// 如果投影机处于关闭状态,则尝试重新打开
_, _ = c.PowerOn()
}
time.Sleep(1 * time.Second)
}
}
// PowerOffSync 关闭投影机
func (c *Client) PowerOffSync() (string, error) {
_, err := c.GetStatus()
if err != nil {
return "", err
}
_, _ = c.PowerOff()
// 轮询检查投影机状态,直到关闭成功
for {
status, err := c.GetStatus()
if err != nil {
return "", err
}
if status == "0" {
return "投影机已关闭", nil
} else {
// 如果投影机处于打开状态,则尝试重新关闭
_, _ = c.PowerOff()
}
time.Sleep(1 * time.Second)
}
}
// GetStatus 获取投影机状态
func (c *Client) GetStatus() (string, error) {
err := c.connect()
if err != nil {
return "", fmt.Errorf("连接异常: %w", err)
}
defer c.close()
response, err := c.sendCommand("POWR ?")
if err != nil {
return "", err
}
if !strings.Contains("0123", response) {
return response, fmt.Errorf("unexpected response: %s", response)
}
return response, nil
}
func (c *Client) close() {
if c.conn != nil {
c.conn.Close()