| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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
- }
|