aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-12-30 13:22:26 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-12-30 13:22:26 +0100
commit03fae13a609c0d9f653406a134032fc1f0c9db46 (patch)
tree855a8f8e83c0e563cf3d7727ac011309f81c9c43
parent7e62f728fe33fd81ccadf11eca43d424a9260d09 (diff)
Split prettyprinting
-rw-r--r--cmd/experimental/main.go2
-rw-r--r--protocol.go71
-rw-r--r--protocol2.go29
-rw-r--r--types.go59
4 files changed, 83 insertions, 78 deletions
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,
+ )
+}