From 03fae13a609c0d9f653406a134032fc1f0c9db46 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 30 Dec 2016 13:22:26 +0100 Subject: Split prettyprinting --- cmd/experimental/main.go | 2 +- protocol.go | 71 ++++++++++-------------------------------------- protocol2.go | 29 ++++++-------------- types.go | 59 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 78 deletions(-) create mode 100644 types.go diff --git a/cmd/experimental/main.go b/cmd/experimental/main.go index e82a366..2bccb08 100644 --- a/cmd/experimental/main.go +++ b/cmd/experimental/main.go @@ -99,7 +99,7 @@ func onConnect(p gatt.Peripheral, err error) { time.Sleep(5 * time.Second) log.Println("Set speed") ss := &anki.VehicleMsgSetSpeed{} - ss.Set(anki.Speed(100*i), 1000) + ss.Set(anki.MMperSec(100*i), 1000) b := anki.Encode(ss) p.WriteCharacteristic(c, b, true) } diff --git a/protocol.go b/protocol.go index 3317f55..6f2ee38 100644 --- a/protocol.go +++ b/protocol.go @@ -3,7 +3,6 @@ package anki import ( "bytes" "encoding/binary" - "fmt" "log" ) @@ -11,10 +10,6 @@ import ( // VehicleMsgPayloadMaxSize = 18 // VehicleMsgBaseSize = 1 -//go:generate stringer -type=ID - -type ID uint8 - // Identifier for a vehicle message const ( // BLE Connection @@ -98,12 +93,6 @@ type VehicleMsgVersionResponse struct { Version uint32 } -type MilliVolt uint16 - -func (v MilliVolt) String() string { - return fmt.Sprintf("%6.4fV", float64(v)/1000.0) -} - type VehicleMsgBatteryLevelResponse struct { Size uint8 MsgID ID @@ -124,27 +113,15 @@ func (v *VehicleMsgSDKMode) Set(on uint8, flags uint8) { v.Flags = flags } -type Accel uint16 - -func (a Accel) String() string { - return fmt.Sprintf("%5.3fm/s²", float64(a)/1000.0) -} - -type Speed uint16 - -func (s Speed) String() string { - return fmt.Sprintf("%5.3fm/s", float64(s)/1000.0) -} - type VehicleMsgSetSpeed struct { Size uint8 MsgID ID - Speed Speed // mm/sec - Accel Accel // mm/sec² - SpeedLimit uint8 // respect road piece speed limit + Speed MMperSec // mm/sec + Accel MMperSecSQ // mm/sec² + SpeedLimit Bool // respect road piece speed limit } -func (v *VehicleMsgSetSpeed) Set(speed Speed, accel Accel) { +func (v *VehicleMsgSetSpeed) Set(speed MMperSec, accel MMperSecSQ) { v.Size = uint8(binary.Size(v) - 1) v.MsgID = VehicleMsgC2VSetSpeed v.Speed = speed @@ -195,12 +172,6 @@ type VehicleMsgSetOffsetFromRoadCenter struct { Offset Offset // mm } -type Offset float32 - -func (c Offset) String() string { - return fmt.Sprintf("%4.1fmm", c) -} - func (v *VehicleMsgSetOffsetFromRoadCenter) Set(offset Offset) { v.Size = uint8(binary.Size(v) - 1) v.MsgID = VehicleMsgC2VSetOffsetFromRoadCenter @@ -210,14 +181,14 @@ func (v *VehicleMsgSetOffsetFromRoadCenter) Set(offset Offset) { type VehicleMsgChangeLane struct { Size uint8 MsgID ID - HorizontalSpeed Speed // mm/sec - HorizontalAccel Accel // mm/sec² - Offset Offset // from road center mm + HorizontalSpeed MMperSec // mm/sec + HorizontalAccel MMperSecSQ // mm/sec² + Offset Offset // from road center mm HopIntent uint8 Tag uint8 } -func (v *VehicleMsgChangeLane) Set(hspeed Speed, haccel Accel, offset Offset) { +func (v *VehicleMsgChangeLane) Set(hspeed MMperSec, haccel MMperSecSQ, offset Offset) { v.Size = uint8(binary.Size(v) - 1) v.MsgID = VehicleMsgC2VChangeLane v.HorizontalSpeed = hspeed @@ -225,8 +196,6 @@ func (v *VehicleMsgChangeLane) Set(hspeed Speed, haccel Accel, offset Offset) { v.Offset = offset } -type Flags uint8 - const ( ParseflagsMaskNumBits Flags = 0x0f ParseflagsMaskInvertedColor Flags = 0x80 @@ -234,34 +203,22 @@ const ( ParseflagsMaskReverseDriving Flags = 0x20 ) -func (f Flags) String() string { - return fmt.Sprintf("{Bits: %d InvColor: %t RevParse: %t RevDrive: %t}", - f&ParseflagsMaskNumBits, - f&ParseflagsMaskInvertedColor != 0, - f&ParseflagsMaskReverseParsing != 0, - f&ParseflagsMaskReverseDriving != 0, - ) -} - type VehicleLocalizationPositionUpdate struct { Size uint8 MsgID ID LocalizationID uint8 RoadPieceID uint8 - Offset Offset // from road center mm - Speed Speed // mm/sec + Offset Offset // from road center mm + Speed MMperSec // mm/sec ParsingFlags Flags // ACK commands received LastRecvLaneChangeCmdID uint8 LastExecLaneChangeCmdID uint8 - LastDesiredHorizontalSpeed Speed // mm/sec - LastDesiredSpeed Speed // mm/sec + LastDesiredHorizontalSpeed MMperSec // mm/sec + LastDesiredSpeed MMperSec // mm/sec } -//go:generate stringer -type=Direction -type Direction uint8 - // VehicleDrivingDirection const ( Forward Direction = iota @@ -280,8 +237,8 @@ type VehicleMsgLocalizationTransitionUpdate struct { // ACK commands received LastRecvLaneChangeCmdID uint8 LastExecLaneChangeCmdID uint8 - LastDesiredHorizontalSpeed Speed // mm/sec - LastDesiredSpeed Speed // mm/sec + LastDesiredHorizontalSpeed MMperSec // mm/sec + LastDesiredSpeed MMperSec // mm/sec // track grade detection UphillCounter uint8 diff --git a/protocol2.go b/protocol2.go index e578c9c..6e71b0c 100644 --- a/protocol2.go +++ b/protocol2.go @@ -1,10 +1,5 @@ package anki -import ( - "fmt" - "time" -) - const ( VehicleMsgV2CSpeedUpdate ID = 0x36 VehicleMsgV2CStatusUpdate ID = 0x3f @@ -20,9 +15,9 @@ const ( type VehicleMsgSpeedUpdate struct { Size uint8 MsgID ID - DesiredSpeed Speed // mm/sec - Accel Accel // mm/sec² -- missing on older firmware - CurrentSpeed Speed // mm/sec -- missing on older firmware + DesiredSpeed MMperSec // mm/sec + Accel MMperSecSQ // mm/sec² -- missing on older firmware + CurrentSpeed MMperSec // mm/sec -- missing on older firmware } // 05 3F 01 00 01 00 @@ -41,8 +36,8 @@ type VehicleMsgLaneChangeUpdate struct { MsgID ID CurrentOffsetFromRoadCenter float32 TargetOffsetFromRoadCenter float32 - HorizontalSpeed Speed - VerticalSpeed Speed + HorizontalSpeed MMperSec + VerticalSpeed MMperSec LaneChangeID uint8 } @@ -50,14 +45,8 @@ type VehicleMsgLaneChangeUpdate struct { type VehicleMsgCollisionDetected struct { Size uint8 MsgID ID - WasSideOnCollision uint8 - WasFrontBackCollision uint8 -} - -type UT uint32 - -func (u UT) String() string { - return fmt.Sprintf("%v", time.Duration(u)*time.Microsecond) + WasSideOnCollision Bool + WasFrontBackCollision Bool } // 0B 86 11 00 26 08 00 00 13 10 00 00 cchii @@ -65,8 +54,8 @@ type VehicleMsgCycleOvertime struct { Size uint8 MsgID ID NumOvertimeCycles uint16 - AverageCycleTime UT // µsec - MaxCycleTime UT // µsec + AverageCycleTime MicroSec // µsec + MaxCycleTime MicroSec // µsec } // ID(201) | 04 15 03 00 00 diff --git a/types.go b/types.go new file mode 100644 index 0000000..121deba --- /dev/null +++ b/types.go @@ -0,0 +1,59 @@ +package anki + +import ( + "fmt" + "time" +) + +//go:generate stringer -type=ID +type ID uint8 + +//go:generate stringer -type=Direction +type Direction uint8 + +type MicroSec uint32 + +func (v MicroSec) String() string { + return fmt.Sprintf("%v", time.Duration(v)*time.Microsecond) +} + +type MilliVolt uint16 + +func (v MilliVolt) String() string { + return fmt.Sprintf("%6.4fV", float64(v)/1000.0) +} + +type Bool uint8 + +func (v Bool) String() string { + return fmt.Sprintf("%t", v != 0) +} + +type MMperSecSQ uint16 + +func (v MMperSecSQ) String() string { + return fmt.Sprintf("%5.3fm/s²", float64(v)/1000.0) +} + +type MMperSec uint16 + +func (v MMperSec) String() string { + return fmt.Sprintf("%5.3fm/s", float64(v)/1000.0) +} + +type Offset float32 + +func (c Offset) String() string { + return fmt.Sprintf("%4.1fmm", c) +} + +type Flags uint8 + +func (f Flags) String() string { + return fmt.Sprintf("{Bits: %d InvColor: %t RevParse: %t RevDrive: %t}", + f&ParseflagsMaskNumBits, + f&ParseflagsMaskInvertedColor != 0, + f&ParseflagsMaskReverseParsing != 0, + f&ParseflagsMaskReverseDriving != 0, + ) +} -- cgit v1.2.3