@@ -22,9 +22,69 @@ func initSerialPort() {
2222 _ = reopenSerialPort ()
2323}
2424
25+ //func reopenSerialPort() error {
26+ // if port != nil {
27+ // port.Close()
28+ // }
29+ // var err error
30+ // port, err = serial.Open(serialPortPath, defaultMode)
31+ // if err != nil {
32+ // serialLogger.Error().
33+ // Err(err).
34+ // Str("path", serialPortPath).
35+ // Interface("mode", defaultMode).
36+ // Msg("Error opening serial port")
37+ // }
38+ // return nil
39+ //}
40+ //
41+ //func handleSerialChannel(d *webrtc.DataChannel) {
42+ // scopedLogger := serialLogger.With().
43+ // Uint16("data_channel_id", *d.ID()).Logger()
44+ //
45+ // d.OnOpen(func() {
46+ // go func() {
47+ // buf := make([]byte, 1024)
48+ // for {
49+ // n, err := port.Read(buf)
50+ // if err != nil {
51+ // if err != io.EOF {
52+ // scopedLogger.Warn().Err(err).Msg("Failed to read from serial port")
53+ // }
54+ // break
55+ // }
56+ // err = d.Send(buf[:n])
57+ // if err != nil {
58+ // scopedLogger.Warn().Err(err).Msg("Failed to send serial output")
59+ // break
60+ // }
61+ // }
62+ // }()
63+ // })
64+ //
65+ // d.OnMessage(func(msg webrtc.DataChannelMessage) {
66+ // if port == nil {
67+ // return
68+ // }
69+ // _, err := port.Write(msg.Data)
70+ // if err != nil {
71+ // scopedLogger.Warn().Err(err).Msg("Failed to write to serial")
72+ // }
73+ // })
74+ //
75+ // d.OnError(func(err error) {
76+ // scopedLogger.Warn().Err(err).Msg("Serial channel error")
77+ // })
78+ //
79+ // d.OnClose(func() {
80+ // scopedLogger.Info().Msg("Serial channel closed")
81+ // })
82+ //}
83+
2584func reopenSerialPort () error {
2685 if port != nil {
2786 port .Close ()
87+ port = nil
2888 }
2989 var err error
3090 port , err = serial .Open (serialPortPath , defaultMode )
@@ -34,7 +94,12 @@ func reopenSerialPort() error {
3494 Str ("path" , serialPortPath ).
3595 Interface ("mode" , defaultMode ).
3696 Msg ("Error opening serial port" )
97+ return err
3798 }
99+ serialLogger .Info ().
100+ Str ("path" , serialPortPath ).
101+ Interface ("mode" , defaultMode ).
102+ Msg ("Serial port opened successfully" )
38103 return nil
39104}
40105
@@ -43,6 +108,14 @@ func handleSerialChannel(d *webrtc.DataChannel) {
43108 Uint16 ("data_channel_id" , * d .ID ()).Logger ()
44109
45110 d .OnOpen (func () {
111+ // 打开串口
112+ if err := reopenSerialPort (); err != nil {
113+ scopedLogger .Error ().Err (err ).Msg ("Failed to open serial port" )
114+ d .Close ()
115+ return
116+ }
117+
118+ // 串口读取协程
46119 go func () {
47120 buf := make ([]byte , 1024 )
48121 for {
@@ -53,8 +126,7 @@ func handleSerialChannel(d *webrtc.DataChannel) {
53126 }
54127 break
55128 }
56- err = d .Send (buf [:n ])
57- if err != nil {
129+ if err := d .Send (buf [:n ]); err != nil {
58130 scopedLogger .Warn ().Err (err ).Msg ("Failed to send serial output" )
59131 break
60132 }
@@ -77,6 +149,10 @@ func handleSerialChannel(d *webrtc.DataChannel) {
77149 })
78150
79151 d .OnClose (func () {
152+ if port != nil {
153+ port .Close ()
154+ port = nil
155+ }
80156 scopedLogger .Info ().Msg ("Serial channel closed" )
81157 })
82158}
0 commit comments