From 987606d976bf7004dcbdbbcfb45ac31f5913f477 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 28 Dec 2016 22:18:13 +0100 Subject: More missing parts --- protocol.go | 93 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 51 insertions(+), 42 deletions(-) (limited to 'protocol.go') 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 } -- cgit v1.2.3