diff --git a/controlblock.go b/controlblock.go index ad36a98..4dfe3fd 100644 --- a/controlblock.go +++ b/controlblock.go @@ -284,7 +284,7 @@ func ParseControlBlock(data []byte) (*ControlBlock, error) { cb.Data = &Preamble{} break default: - return nil, fmt.Errorf("dmr: unknown CSBK opcode %#02x (%#06b)", cb.Opcode, cb.Opcode) + return nil, fmt.Errorf("dmr: unknown CSBK opcode %02x (%06b)", cb.Opcode, cb.Opcode) } if err := cb.Data.Parse(data); err != nil { diff --git a/data.go b/data.go index f2cc79b..049f812 100644 --- a/data.go +++ b/data.go @@ -54,6 +54,7 @@ func ParseDataBlock(data []byte, dataType uint8, confirmed bool) (*DataBlock, er return nil, fmt.Errorf("dmr: block CRC error (%#04x != %#04x)", crc, db.CRC) } } else { + db.Data = make([]byte, db.Length) copy(db.Data, data[:db.Length]) } @@ -163,7 +164,7 @@ func (df *DataFragment) DataBlocks(dataType uint8, confirm bool) ([]*DataBlock, store := int(block.Length) if df.Stored-stored < store { - store = df.Stored - store + store = df.Stored - stored } copy(block.Data, df.Data[stored:stored+store]) stored += store diff --git a/dataheader.go b/dataheader.go index c7ac1da..f0e0c5e 100644 --- a/dataheader.go +++ b/dataheader.go @@ -222,7 +222,7 @@ func (h *DataHeader) Bytes() ([]byte, error) { if h.HeaderCompression { data[0] |= B00100000 } - data[1] = (h.ServiceAccessPoint & B00001111) + data[1] = (h.ServiceAccessPoint << 4) & B11110000 data[2] = uint8(h.DstID >> 16) data[3] = uint8(h.DstID >> 8) data[4] = uint8(h.DstID) @@ -350,7 +350,7 @@ type ResponseData struct { } func (d ResponseData) String() string { - return fmt.Sprintf("response, blocks %d, type %s (%#02b %#03b), status %d", + return fmt.Sprintf("response, blocks %d, type %s (%02b %03b), status %d", d.BlocksToFollow, ResponseTypeName[d.ClassType], (d.ClassType >> 3), (d.ClassType & 0x07), d.Status) } diff --git a/dataheader_test.go b/dataheader_test.go index 19562a0..4e780f8 100644 --- a/dataheader_test.go +++ b/dataheader_test.go @@ -211,7 +211,7 @@ func TestDataHeaderShortDataDefined(t *testing.T) { t.Fatalf("decode failed: appended blocks wrong") case d.DDFormat != DDFormatUTF16: - t.Fatalf("decode failed: dd format wrong, expected UTF-16, got %d", DDFormatName[d.DDFormat]) + t.Fatalf("decode failed: dd format wrong, expected UTF-16, got %s", DDFormatName[d.DDFormat]) case d.Resync: t.Fatalf("decode failed: rsync bit wrong") diff --git a/homebrew/homebrew.go b/homebrew/homebrew.go index 479c8ac..5a6f753 100644 --- a/homebrew/homebrew.go +++ b/homebrew/homebrew.go @@ -254,7 +254,8 @@ func (h *Homebrew) WriteToPeerWithID(b []byte, id uint32) error { } func (h *Homebrew) checkRepeaterID(id []byte) bool { - return id != nil && bytes.Equal(id, h.id) + // BrandMeister release 20190421-185653 switched from upper case to lower case hex digits + return id != nil && bytes.EqualFold(id, h.id) } func (h *Homebrew) getPeer(id uint32) *Peer {