aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-12-29 21:52:52 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-12-29 21:52:52 +0100
commit8085261f5e086f1bbb091a4ca9ec4042e62c47a5 (patch)
treefb16d27ae17be4580cbd7846f70824003d078acb
parentfc3669937463b329a815f148106241883020388e (diff)
Works for me
-rw-r--r--cmd/experimental/main.go41
-rw-r--r--protocol.go5
-rw-r--r--protocol.txt4
3 files changed, 38 insertions, 12 deletions
diff --git a/cmd/experimental/main.go b/cmd/experimental/main.go
index 4e93d23..506cd2e 100644
--- a/cmd/experimental/main.go
+++ b/cmd/experimental/main.go
@@ -2,6 +2,7 @@ package main
import (
"log"
+ "time"
"dim13.org/anki"
"github.com/currantlabs/gatt"
@@ -65,14 +66,18 @@ func onConnect(p gatt.Peripheral, err error) {
}
}
if (c.Properties() & gatt.CharWrite) != 0 {
- //c.HandleReadFunc(onRead)
- //log.Println("Send")
- //c.SetValue([]byte{0x01, 0x18})
- //p.WriteCharacteristic(c, []byte{0x01, 0x90}, false) // sdk
- p.WriteCharacteristic(c, []byte{0x01, 0x16}, false) // ping
- p.WriteCharacteristic(c, []byte{0x01, 0x18}, false) // version
- p.WriteCharacteristic(c, []byte{0x01, 0x1a}, false) // battery
- p.WriteCharacteristic(c, []byte{0x02, 0x1d, 0xff}, true) // lights
+ //p.WriteCharacteristic(c, []byte{0x01, 0x90}, true) // sdk
+ go func(c *gatt.Characteristic) {
+ t := time.NewTicker(time.Second * 10)
+ defer t.Stop()
+ for range t.C {
+ log.Println("Ping")
+ p.WriteCharacteristic(c, []byte{0x01, 0x16}, true) // ping
+ time.Sleep(10 * time.Second)
+ }
+ }(c)
+ //p.WriteCharacteristic(c, []byte{0x01, 0x18}, true) // version
+ //p.WriteCharacteristic(c, []byte{0x01, 0x1a}, true) // battery
lc := &anki.VehicleLightConfig{}
lm := &anki.VehicleMsgLightsPattern{}
@@ -85,8 +90,9 @@ func onConnect(p gatt.Peripheral, err error) {
lb := anki.Encode(lm)
p.WriteCharacteristic(c, lb, true)
+ time.Sleep(time.Second)
ss := &anki.VehicleMsgSetSpeed{}
- ss.Set(25000, 25000)
+ ss.Set(500, 2500)
b := anki.Encode(ss)
p.WriteCharacteristic(c, b, true)
}
@@ -99,7 +105,22 @@ func onNotify(c *gatt.Characteristic, b []byte, err error) {
log.Println(c.UUID(), err)
}
id, payload := anki.SplitMsg(b)
- log.Printf("ID: %v | % X\n", id, payload)
+ switch id {
+ case anki.VehicleMsgV2CStatusUpdate:
+ su := anki.VehicleMsgStatusUpdate{}
+ anki.Decode(b, &su)
+ log.Printf("%+v\n", su)
+ case anki.VehicleMsgV2CLocalizationTransitionUpdate:
+ tu := anki.VehicleMsgLocalizationTransitionUpdate{}
+ anki.Decode(b, &tu)
+ log.Printf("%+v\n", tu)
+ case anki.VehicleMsgV2CLocalizationPositionUpdate:
+ pu := anki.VehicleLocalizationPositionUpdate{}
+ anki.Decode(b, &pu)
+ log.Printf("%+v\n", pu)
+ default:
+ log.Printf("ID: %v | % X\n", id, payload)
+ }
}
func onDisconnect(p gatt.Peripheral, err error) {
diff --git a/protocol.go b/protocol.go
index 5c39db4..e23143c 100644
--- a/protocol.go
+++ b/protocol.go
@@ -79,6 +79,11 @@ func Encode(v interface{}) []byte {
return z
}
+func Decode(b []byte, v interface{}) {
+ buf := bytes.NewBuffer(b)
+ binary.Read(buf, binary.LittleEndian, v)
+}
+
type VehicleMsgVersionResponse struct {
Size uint8
MsgID ID
diff --git a/protocol.txt b/protocol.txt
index 1f87d64..f6b94bb 100644
--- a/protocol.txt
+++ b/protocol.txt
@@ -44,7 +44,7 @@
0x40 64 CarMsgSetTestMode
0x41 65 CarMsgLaneChangeUpdate
0x42 66 CarMsgMergeReactionUpdate
-0x43 67 CarMsgDelocAutoRecoveryEntered
+0x43 67 CarMsgDelocAutoRecoveryEntered seen on track
0x44 68 CarMsgDelocAutoRecoverySuccess
0x45 69 CarMsgVehicleSpecificParameters ok
0x46 70 CarMsgSetRoadPieceInfoC
@@ -74,4 +74,4 @@
0xc9 201 Debug?
0xcf 207 CarMsgMessageCycleCount
-0xd0 208 CarMsgSteeringDiagnosticMetrics
+0xd0 208 CarMsgSteeringDiagnosticMetrics seen on track