package uhf import ( "errors" "wails-app/internal/dao" ) // ErrReadTimeout 表示设备在等待下一帧期间没有收到数据,不代表连接断开。 var ErrReadTimeout = errors.New("设备读取超时") // ErrIncompleteFrame 表示收到的数据尚未组成完整协议帧,应继续等待后续数据。 var ErrIncompleteFrame = errors.New("设备帧不完整") // UHFReaderConn 统一的设备连接接口(适配多设备+消息收发) type UHFReaderConn interface { Connect() error // 建立连接 Disconnect() error // 断开连接 IsConnected() bool // 检查连接状态 SendData(data []byte) error // 发送数据(仅发送,无返回) ReadData() ([]byte, error) // 读取数据(阻塞式) SendAndRecv(data []byte) ([]byte, error) // 发送并等待响应(一问一答) } // NewReaderConn 批量创建连接(多设备扩展) func NewReaderConn(device *dao.UHFReader) (UHFReaderConn, error) { switch device.ConnectType { case "tcp": return &TCPReader{ IP: device.IPAddress, Port: device.Port, }, nil case "serial": return &SerialReader{ COMPort: device.COMPort, BaudRate: device.BaudRate, }, nil default: return nil, errors.New("不支持的连接类型:" + device.ConnectType) } } // BatchConnect 批量连接设备(多设备初始化) func BatchConnect(devices []*dao.UHFReader) map[string]error { result := make(map[string]error) for _, device := range devices { if device == nil { continue } if err := StartDeviceHandler(device); err != nil { result[device.DeviceCode] = err } } return result }