aboutsummaryrefslogtreecommitdiff
path: root/protocol.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-12-28 22:18:13 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-12-28 22:18:13 +0100
commit987606d976bf7004dcbdbbcfb45ac31f5913f477 (patch)
tree48de77846b9c49b964f5b83fa835829c946036ea /protocol.go
parent6cce2f71fe994d33c785541718c16fb235a09768 (diff)
More missing parts
Diffstat (limited to 'protocol.go')
-rw-r--r--protocol.go93
1 files changed, 51 insertions, 42 deletions
diff --git a/protocol.go b/protocol.go
index 6c87c98..4050574 100644
--- a/protocol.go
+++ b/protocol.go
@@ -2,77 +2,86 @@ package anki
import "encoding/binary"
-const (
- VehicleMsgMaxSize = 20
- VehicleMsgPayloadMaxSize = 18
- VehicleMsgBaseSize = 1
-)
+// VehicleMsgMaxSize = 20
+// VehicleMsgPayloadMaxSize = 18
+// VehicleMsgBaseSize = 1
+
+//go:generate stringer -type=ID
+
+type ID uint8
// Identifier for a vehicle message
const (
// BLE Connection
- VehicleMsgC2VDisconnect = 0x0d
+ VehicleMsgC2VDisconnect ID = 0x0d
// Ping request / response
- VehicleMsgC2VPingRequest = 0x16
- VehicleMsgV2CPingResponse = 0x17
+ VehicleMsgC2VPingRequest ID = 0x16
+ VehicleMsgV2CPingResponse ID = 0x17
// Messages for checking vehicle version info
- VehicleMsgC2VVersionRequest = 0x18
- VehicleMsgV2CVersionResponse = 0x19
+ VehicleMsgC2VVersionRequest ID = 0x18
+ VehicleMsgV2CVersionResponse ID = 0x19
// Baterry level
- VehicleMsgC2VBatteryLevelRequest = 0x1a
- VehicleMsgV2CBatteryLevelResponse = 0x1b
+ VehicleMsgC2VBatteryLevelRequest ID = 0x1a
+ VehicleMsgV2CBatteryLevelResponse ID = 0x1b
// Lights
- VehicleMsgC2VSetLights = 0x1d
+ VehicleMsgC2VSetLights ID = 0x1d
// Driving Commands
- VehicleMsgC2VSetSpeed = 0x24
- VehicleMsgC2VChangeLane = 0x25
- VehicleMsgC2VCancelLaneChange = 0x26
- VehicleMsgC2VTurn = 0x32
+ VehicleMsgC2VSetSpeed ID = 0x24
+ VehicleMsgC2VChangeLane ID = 0x25
+ VehicleMsgC2VCancelLaneChange ID = 0x26
+ VehicleMsgC2VTurn ID = 0x32
// Vehicle position updates
- VehicleMsgV2CLocalizationPositionUpdate = 0x27
- VehicleMsgV2CLocalizationTransitionUpdate = 0x29
- VehicleMsgV2CLocalizationIntersectionUpdate = 0x2a
- VehicleMsgV2cVehicleDelocalized = 0x2b
- VehicleMsgC2VSetOffsetFromRoadCenter = 0x2c
- VehicleMsgV2COffsetFromRoadCenterUpdate = 0x2d
+ VehicleMsgV2CLocalizationPositionUpdate ID = 0x27
+ VehicleMsgV2CLocalizationTransitionUpdate ID = 0x29
+ VehicleMsgV2CLocalizationIntersectionUpdate ID = 0x2a
+ VehicleMsgV2cVehicleDelocalized ID = 0x2b
+ VehicleMsgC2VSetOffsetFromRoadCenter ID = 0x2c
+ VehicleMsgV2COffsetFromRoadCenterUpdate ID = 0x2d
// Light Patterns
- VehicleMsgC2VLightsPattern = 0x33
+ VehicleMsgC2VLightsPattern ID = 0x33
// Vehicle Configuration Prameters
- VehicleMsgC2VSetConfigParams = 0x45
+ VehicleMsgC2VSetConfigParams ID = 0x45
// SDK Mode
- VehicleMsgC2VSDKMode = 0x90
+ VehicleMsgC2VSDKMode ID = 0x90
)
type VehicleMsg struct {
Size uint8
- MsgID uint8
- Payload [VehicleMsgMaxSize]byte
+ MsgID ID
+ Payload []uint8 // MaxSize 18
+}
+
+func SplitMsg(b []byte) (id ID, payload []byte) {
+ if len(b) < 2 {
+ return 0, nil
+ }
+ return ID(b[1]), b[2:]
}
type VehicleMsgVersionResponse struct {
Size uint8
- MsgID uint8
+ MsgID ID
Version uint32
}
type VehicleBatteryLevelResponse struct {
Size uint8
- MsgID uint8
+ MsgID ID
BatteryLevel uint16
}
type VehicleMsgSDKMode struct {
Size uint8
- MsgID uint8
+ MsgID ID
On uint8
Flags uint8
}
@@ -86,7 +95,7 @@ func (v *VehicleMsgSDKMode) Set(on, flags uint8) {
type VehicleMsgSetSpeed struct {
Size uint8
- MsgID uint8
+ MsgID ID
Speed uint16 // mm/sec
Accel uint16 // mm/secĀ²
SpeedLimit uint8 // respect road piece speed limit
@@ -114,14 +123,14 @@ const (
type VehicleMsgTurn struct {
Size uint8
- MsgID uint8
+ MsgID ID
Type uint8
Trigger uint8
}
type VehicleMsgSetOffsetFromRoadCenter struct {
Size uint8
- MsgID uint8
+ MsgID ID
Offset float32 // mm
}
@@ -133,7 +142,7 @@ func (v *VehicleMsgSetOffsetFromRoadCenter) Set(offset float32) {
type VehicleMsgChangeLane struct {
Size uint8
- MsgID uint8
+ MsgID ID
HorizontalSpeed uint16 // mm/sec
HorizontalAccel uint16 // mm/secĀ²
Offset float32 // from road center mm
@@ -158,7 +167,7 @@ const (
type VehicleLocalizationPositionUpdate struct {
Size uint8
- MsgID uint8
+ MsgID ID
LocalizationID uint8
RoadPieceID uint8
Offset float32 // from road center mm
@@ -180,7 +189,7 @@ const (
type VehicleMsgLocalizationTransitionUpdate struct {
Size uint8
- MsgID uint8
+ MsgID ID
RoadPieceIDX uint8
RoadPieceIDXPrev uint8
Offset float32 // from road center mm
@@ -211,7 +220,7 @@ const (
type VehicleMsgLocalizationIntersectionUpdate struct {
Size uint8
- MsgID uint8
+ MsgID ID
RoadPieceIDX uint8
Offset float32 // from road center mm
@@ -223,7 +232,7 @@ type VehicleMsgLocalizationIntersectionUpdate struct {
type VehicleMsgOffsetFromRoadCenterUpdate struct {
Size uint8
- MsgID uint8
+ MsgID ID
Offset float32 // from road center mm
LaneChangeID uint8
}
@@ -239,7 +248,7 @@ const (
type VehicleMsgSetLights struct {
Size uint8
- MsgID uint8
+ MsgID ID
LightMask uint8 // valid and value bits for lights
}
@@ -300,7 +309,7 @@ func (v *VehicleLightConfig) Set(channel, effect uint8, start, end uint8, cycles
type VehicleMsgLightsPattern struct {
Size uint8
- MsgID uint8
+ MsgID ID
ChannelCount uint8
ChannelConfig [3]VehicleLightConfig
}
@@ -326,7 +335,7 @@ const (
type VehicleMsgSetConfigParams struct {
Size uint8
- MsgID uint8
+ MsgID ID
SuperCodeParseMask uint8
TrackMaterial uint8
}