Skip to content

Commit

Permalink
Terminal: ported
Browse files Browse the repository at this point in the history
  • Loading branch information
tehmaze committed Dec 18, 2015
1 parent 127463d commit 86fa21d
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions terminal/terminal.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ type Slot struct {
blocks []*dmr.DataBlock
blocksExpected int
blocksReceived int
header dmr.DataHeader
header *dmr.DataHeader
}
voice struct {
lastFrame uint8
Expand Down Expand Up @@ -165,8 +165,7 @@ func (t *Terminal) dataBlock(p *dmr.Packet, db *dmr.DataBlock) error {
if slot.data.header == nil {
return errors.New("terminal: logic error, header is nil?!")
}
h := slot.data.header.CommonHeader()
if h.ResponseRequested {
if slot.data.header.ResponseRequested {
// Only confirmed data blocks have serial numbers stored in them.
if int(db.Serial) < len(slot.data.blocks) {
slot.data.blocks[db.Serial] = db
Expand Down Expand Up @@ -201,7 +200,7 @@ func (t *Terminal) dataBlockAssemble(p *dmr.Packet) error {
}

if errorsFound {
_, responseOk := slot.data.header.(*dmr.ResponseDataHeader)
_, responseOk := slot.data.header.Data.(*dmr.ResponseData)
switch {
case responseOk:
t.debugf(p, "found erroneous blocks, not sending out ACK for response")
Expand All @@ -222,7 +221,7 @@ func (t *Terminal) dataBlockAssemble(p *dmr.Packet) error {

if fragment.Stored > 0 {
// Response with data blocks? That must be a selective ACK
if _, ok := slot.data.header.(*dmr.ResponseDataHeader); ok {
if _, ok := slot.data.header.Data.(*dmr.ResponseData); ok {
// FIXME(pd0mz): deal with this shit
return nil
}
Expand All @@ -232,7 +231,7 @@ func (t *Terminal) dataBlockAssemble(p *dmr.Packet) error {
}

// If we are not waiting for an ack, then the data session ended
if !slot.data.header.CommonHeader().ResponseRequested {
if !slot.data.header.ResponseRequested {
return t.dataCallEnd(p)
}
}
Expand All @@ -248,7 +247,7 @@ func (t *Terminal) dataBlockComplete(p *dmr.Packet, f *dmr.DataFragment) error {
ddformat = dmr.DDFormatUTF16
)

switch slot.data.header.CommonHeader().ServiceAccessPoint {
switch slot.data.header.ServiceAccessPoint {
case dmr.ServiceAccessPointIPBasedPacketData:
t.debugf(p, "SAP IP based packet data (not implemented)")
break
Expand All @@ -259,7 +258,7 @@ func (t *Terminal) dataBlockComplete(p *dmr.Packet, f *dmr.DataFragment) error {
data = f.Data[2:] // Hytera has a 2 byte pre-padding
size = f.Stored - 2 - 4 // Leave out the CRC

if sdd, ok := slot.data.header.(*dmr.ShortDataDefinedDataHeader); ok {
if sdd, ok := slot.data.header.Data.(*dmr.ShortDataDefinedData); ok {
ddformat = sdd.DDFormat
}
break
Expand Down Expand Up @@ -449,14 +448,14 @@ func (t *Terminal) handleData(p *dmr.Packet) error {
slot.rxSequence = 0

t.debugf(p, "data header: %T", h)
switch ht := h.(type) {
case dmr.ShortDataDefinedDataHeader:
if ht.FullMessage {
slot.fullMessageBlocks = int(ht.AppendedBlocks)
switch d := h.Data.(type) {
case dmr.ShortDataDefinedData:
if d.FullMessage {
slot.fullMessageBlocks = int(d.AppendedBlocks)
slot.data.blocks = make([]*dmr.DataBlock, slot.fullMessageBlocks)
t.debugf(p, "expecting %d data block", slot.fullMessageBlocks)
}
slot.data.blocksExpected = int(ht.AppendedBlocks)
slot.data.blocksExpected = int(d.AppendedBlocks)
err = t.dataCallStart(p)
break

Expand Down Expand Up @@ -494,7 +493,7 @@ func (t *Terminal) handleRate34Data(p *dmr.Packet) error {
return err
}

db, err := dmr.ParseDataBlock(data, dmr.Rate34Data, slot.data.header.CommonHeader().ResponseRequested)
db, err := dmr.ParseDataBlock(data, dmr.Rate34Data, slot.data.header.ResponseRequested)
if err != nil {
return err
}
Expand Down

0 comments on commit 86fa21d

Please sign in to comment.