chore: release v0.27.12
This commit is contained in:
@@ -204,3 +204,36 @@ func TestBCDToFreqRejectsNonDecimal(t *testing.T) {
|
||||
t.Error("a short but valid BCD frame must still decode")
|
||||
}
|
||||
}
|
||||
|
||||
// A band stacking register reply, byte for byte as the rigs send it:
|
||||
// 1A 01 <band> <reg> <freq 5 LE-BCD> <mode> <filter> <data>. The payload here
|
||||
// is everything after the command byte, which is what Decoded.Data holds.
|
||||
func TestDecodeBandStack(t *testing.T) {
|
||||
// 14.074.000 MHz, USB, FIL1, data mode on — the FT8 stack on 20 m.
|
||||
frame := []byte{0x01, 0x05, 0x03, 0x00, 0x40, 0x07, 0x14, 0x00, ModeUSB, 0x01, 0x01}
|
||||
bs, ok := DecodeBandStack(frame, 0x05, 0x03)
|
||||
if !ok {
|
||||
t.Fatal("a well-formed register was rejected")
|
||||
}
|
||||
if bs.FreqHz != 14_074_000 {
|
||||
t.Errorf("freq = %d, want 14074000", bs.FreqHz)
|
||||
}
|
||||
if bs.Mode != ModeUSB || !bs.Data {
|
||||
t.Errorf("mode = 0x%02X data = %v, want USB + data", bs.Mode, bs.Data)
|
||||
}
|
||||
// The register ASKED FOR is part of the answer: a reply about another one is
|
||||
// a desynchronised read, not a frequency to send the radio to.
|
||||
if _, ok := DecodeBandStack(frame, 0x05, 0x01); ok {
|
||||
t.Error("a reply for register 3 was accepted as register 1")
|
||||
}
|
||||
if _, ok := DecodeBandStack(frame, 0x03, 0x03); ok {
|
||||
t.Error("a reply about 40 m was accepted as 20 m")
|
||||
}
|
||||
// A register without the data-mode byte is a shorter frame, not a bad one.
|
||||
if bs, ok := DecodeBandStack(frame[:10], 0x05, 0x03); !ok || bs.FreqHz != 14_074_000 || bs.Data {
|
||||
t.Errorf("short register = %+v ok=%v, want the frequency with no data flag", bs, ok)
|
||||
}
|
||||
if _, ok := DecodeBandStack([]byte{0x01, 0x05, 0x03}, 0x05, 0x03); ok {
|
||||
t.Error("a truncated frame was accepted")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user