diff --git a/libs/egts/egts_pkg_test.go b/libs/egts/egts_pkg_test.go index c09335b..4194359 100644 --- a/libs/egts/egts_pkg_test.go +++ b/libs/egts/egts_pkg_test.go @@ -57,7 +57,7 @@ func TestEgtsPackagePosData_Encode(t *testing.T) { AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, }, @@ -123,7 +123,7 @@ func TestEgtsPackagePosData_Decode(t *testing.T) { AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, }, @@ -189,7 +189,7 @@ func TestFullCycleCoding(t *testing.T) { AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, }, @@ -260,10 +260,10 @@ func TestRebuildCycleCoding(t *testing.T) { AltitudeSign: 0, Speed: 34, Direction: 172, - Odometer: []byte{0xbf, 0x00, 0x00}, + Odometer: 191, DigitalInputs: 144, Source: 0, - Altitude: []byte{0x1e, 0x00, 0x00}, + Altitude: 30, }, }, RecordData{ @@ -347,10 +347,10 @@ func TestRebuildOID(t *testing.T) { AltitudeSign: 0, Speed: 34, Direction: 172, - Odometer: []byte{0xbf, 0x00, 0x00}, + Odometer: 191, DigitalInputs: 144, Source: 0, - Altitude: []byte{0x1e, 0x00, 0x00}, + Altitude: 30, }, }, RecordData{ diff --git a/libs/egts/egts_sr_pos_data.go b/libs/egts/egts_sr_pos_data.go index 777a7eb..3f823db 100644 --- a/libs/egts/egts_sr_pos_data.go +++ b/libs/egts/egts_sr_pos_data.go @@ -26,10 +26,10 @@ type SrPosData struct { AltitudeSign uint8 `json:"ALTS"` Speed uint16 `json:"SPD"` Direction byte `json:"DIR"` - Odometer []byte `json:"ODM"` + Odometer uint32 `json:"ODM"` DigitalInputs byte `json:"DIN"` Source byte `json:"SRC"` - Altitude []byte `json:"ALT"` + Altitude uint32 `json:"ALT"` SourceData int16 `json:"SRCD"` } @@ -106,7 +106,8 @@ func (e *SrPosData) Decode(content []byte) error { if _, err = buf.Read(bytesTmpBuf); err != nil { return fmt.Errorf("Не удалось получить пройденное расстояние (пробег) в км: %v", err) } - e.Odometer = bytesTmpBuf + bytesTmpBuf = append(bytesTmpBuf, 0x00) + e.Odometer = binary.LittleEndian.Uint32(bytesTmpBuf) if e.DigitalInputs, err = buf.ReadByte(); err != nil { return fmt.Errorf("Не удалось получить битовые флаги, определяют состояние основных дискретных входов: %v", err) @@ -117,10 +118,11 @@ func (e *SrPosData) Decode(content []byte) error { } if e.ALTE == "1" { + bytesTmpBuf = []byte{0, 0, 0, 0} if _, err = buf.Read(bytesTmpBuf); err != nil { return fmt.Errorf("Не удалось получить высоту над уровнем моря: %v", err) } - e.Altitude = bytesTmpBuf + e.Altitude = binary.LittleEndian.Uint32(bytesTmpBuf) } //TODO: разобраться с разбором SourceData @@ -176,7 +178,9 @@ func (e *SrPosData) Encode() ([]byte, error) { return result, fmt.Errorf("Не удалось записать направление движения: %v", err) } - if _, err = buf.Write(e.Odometer); err != nil { + bytesTmpBuf := make([]byte, 4) + binary.LittleEndian.PutUint32(bytesTmpBuf, e.Odometer) + if _, err = buf.Write(bytesTmpBuf[:3]); err != nil { return result, fmt.Errorf("Не удалось запсиать пройденное расстояние (пробег) в км: %v", err) } @@ -189,7 +193,9 @@ func (e *SrPosData) Encode() ([]byte, error) { } if e.ALTE == "1" { - if _, err = buf.Write(e.Altitude); err != nil { + bytesTmpBuf = []byte{0, 0, 0, 0} + binary.LittleEndian.PutUint32(bytesTmpBuf, e.Altitude) + if _, err = buf.Write(bytesTmpBuf[:3]); err != nil { return result, fmt.Errorf("Не удалось записать высоту над уровнем моря: %v", err) } } diff --git a/libs/egts/egts_sr_pos_data_test.go b/libs/egts/egts_sr_pos_data_test.go index d0244d6..f714941 100644 --- a/libs/egts/egts_sr_pos_data_test.go +++ b/libs/egts/egts_sr_pos_data_test.go @@ -25,7 +25,7 @@ var ( AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, } diff --git a/libs/egts/record_data_test.go b/libs/egts/record_data_test.go index 0937ea5..4829693 100644 --- a/libs/egts/record_data_test.go +++ b/libs/egts/record_data_test.go @@ -30,7 +30,7 @@ func TestRecordDataSet_Encode(t *testing.T) { AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, }, @@ -65,7 +65,7 @@ func TestRecordDataSet_Decode(t *testing.T) { AltitudeSign: 0, Speed: 200, Direction: 172, - Odometer: []byte{0x01, 0x00, 0x00}, + Odometer: 1, DigitalInputs: 0, Source: 0, },