reader_interface.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package uhf
  2. import (
  3. "errors"
  4. "wails-app/internal/dao"
  5. )
  6. // ErrReadTimeout 表示设备在等待下一帧期间没有收到数据,不代表连接断开。
  7. var ErrReadTimeout = errors.New("设备读取超时")
  8. // ErrIncompleteFrame 表示收到的数据尚未组成完整协议帧,应继续等待后续数据。
  9. var ErrIncompleteFrame = errors.New("设备帧不完整")
  10. // UHFReaderConn 统一的设备连接接口(适配多设备+消息收发)
  11. type UHFReaderConn interface {
  12. Connect() error // 建立连接
  13. Disconnect() error // 断开连接
  14. IsConnected() bool // 检查连接状态
  15. SendData(data []byte) error // 发送数据(仅发送,无返回)
  16. ReadData() ([]byte, error) // 读取数据(阻塞式)
  17. SendAndRecv(data []byte) ([]byte, error) // 发送并等待响应(一问一答)
  18. }
  19. // NewReaderConn 批量创建连接(多设备扩展)
  20. func NewReaderConn(device *dao.UHFReader) (UHFReaderConn, error) {
  21. switch device.ConnectType {
  22. case "tcp":
  23. return &TCPReader{
  24. IP: device.IPAddress,
  25. Port: device.Port,
  26. }, nil
  27. case "serial":
  28. return &SerialReader{
  29. COMPort: device.COMPort,
  30. BaudRate: device.BaudRate,
  31. }, nil
  32. default:
  33. return nil, errors.New("不支持的连接类型:" + device.ConnectType)
  34. }
  35. }
  36. // BatchConnect 批量连接设备(多设备初始化)
  37. func BatchConnect(devices []*dao.UHFReader) map[string]error {
  38. result := make(map[string]error)
  39. for _, device := range devices {
  40. if device == nil {
  41. continue
  42. }
  43. if err := StartDeviceHandler(device); err != nil {
  44. result[device.DeviceCode] = err
  45. }
  46. }
  47. return result
  48. }