增加待机报文缓存,无网状态也能执行待机任务;投影仪指令结果以设备状态为准
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user