From 8085261f5e086f1bbb091a4ca9ec4042e62c47a5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 29 Dec 2016 21:52:52 +0100 Subject: Works for me --- cmd/experimental/main.go | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) (limited to 'cmd') 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) { -- cgit v1.2.3