kappanhang/serialstream.go

74 lines
1.3 KiB
Go

package main
import (
"github.com/nonoo/kappanhang/log"
)
type serialStream struct {
common streamCommon
serialPort serialPortStruct
deinitNeededChan chan bool
deinitFinishedChan chan bool
}
func (s *serialStream) handleRead(r []byte) {
}
func (s *serialStream) loop() {
for {
select {
case r := <-s.common.readChan:
s.handleRead(r)
case <-s.deinitNeededChan:
s.deinitFinishedChan <- true
return
}
}
}
func (s *serialStream) start(devName string) error {
if err := s.serialPort.init(devName); err != nil {
return err
}
if err := s.common.sendPkt3(); err != nil {
return err
}
if err := s.common.waitForPkt4Answer(); err != nil {
return err
}
if err := s.common.sendPkt6(); err != nil {
return err
}
if err := s.common.waitForPkt6Answer(); err != nil {
return err
}
log.Print("stream started")
s.common.pkt7.startPeriodicSend(&s.common, 1, false)
s.deinitNeededChan = make(chan bool)
s.deinitFinishedChan = make(chan bool)
go s.loop()
return nil
}
func (s *serialStream) init() error {
if err := s.common.init("serial", 50002); err != nil {
return err
}
return nil
}
func (s *serialStream) deinit() {
if s.deinitNeededChan != nil {
s.deinitNeededChan <- true
<-s.deinitFinishedChan
}
s.common.deinit()
s.serialPort.deinit()
}