Merge pull request #45 from bclermont/patch-1

Improve MK2 frames handling
This commit is contained in:
Nicholas Thompson
2026-02-17 08:39:20 +02:00
committed by GitHub

View File

@@ -43,6 +43,7 @@ const (
const ( const (
infoFrameHeader = 0x20 infoFrameHeader = 0x20
frameHeader = 0xff frameHeader = 0xff
bootupFrameHeader = 0x0
) )
const ( const (
@@ -164,6 +165,7 @@ func (m *mk2Ser) readByte() byte {
// Adds error to error slice. // Adds error to error slice.
func (m *mk2Ser) addError(err error) { func (m *mk2Ser) addError(err error) {
logrus.Errorf("Mk2 serial slice error: %q", err.Error())
if m.info.Errors == nil { if m.info.Errors == nil {
m.info.Errors = make([]error, 0) m.info.Errors = make([]error, 0)
} }
@@ -183,9 +185,11 @@ func (m *mk2Ser) updateReport() {
// Checks for valid frame and chooses decoding. // Checks for valid frame and chooses decoding.
func (m *mk2Ser) handleFrame(l byte, frame []byte) { func (m *mk2Ser) handleFrame(l byte, frame []byte) {
logrus.Debugf("frame %#v", frame) logrus.Debugf("[handleFrame] frame %#v", frame)
if checkChecksum(l, frame[0], frame[1:]) { if checkChecksum(l, frame[0], frame[1:]) {
switch frame[0] { switch frame[0] {
case bootupFrameHeader:
m.setTarget()
case frameHeader: case frameHeader:
switch frame[1] { switch frame[1] {
case vFrame: case vFrame:
@@ -196,10 +200,14 @@ func (m *mk2Ser) handleFrame(l byte, frame []byte) {
m.scaleDecode(frame[2:]) m.scaleDecode(frame[2:])
case commandReadRAMResponse: case commandReadRAMResponse:
m.stateDecode(frame[2:]) m.stateDecode(frame[2:])
default:
logrus.Warnf("[handleFrame] invalid winmonFrame %v", frame[2:])
} }
case ledFrame: case ledFrame:
m.ledDecode(frame[2:]) m.ledDecode(frame[2:])
default:
logrus.Warnf("[handleFrame] invalid frameHeader %v", frame[1])
} }
case infoFrameHeader: case infoFrameHeader:
@@ -208,10 +216,14 @@ func (m *mk2Ser) handleFrame(l byte, frame []byte) {
m.dcDecode(frame[1:]) m.dcDecode(frame[1:])
case acL1InfoFrame: case acL1InfoFrame:
m.acDecode(frame[1:]) m.acDecode(frame[1:])
default:
logrus.Warnf("[handleFrame] invalid infoFrameHeader %v", frame[5])
} }
default:
logrus.Warnf("[handleFrame] Invalid frame %v", frame[0])
} }
} else { } else {
logrus.Errorf("Invalid incoming frame checksum: %x", frame) logrus.Errorf("[handleFrame] Invalid incoming frame checksum: %x", frame)
m.frameLock = false m.frameLock = false
} }
} }