[refactor] Read protobuf messages

This commit is contained in:
2020-01-01 19:30:34 +01:00
parent 0c318d7e09
commit 572201a213
350 changed files with 248653 additions and 90 deletions

View File

@ -2,12 +2,12 @@ package part
import (
"fmt"
"github.com/cyrilix/robocar-base/mqttdevice"
"github.com/cyrilix/robocar-base/service"
"github.com/cyrilix/robocar-base/types"
"github.com/cyrilix/robocar-led/led"
"github.com/cyrilix/robocar-protobuf/go/events"
mqtt "github.com/eclipse/paho.mqtt.golang"
"log"
"github.com/golang/protobuf/proto"
log "github.com/sirupsen/logrus"
"sync"
"time"
)
@ -19,7 +19,7 @@ func NewPart(client mqtt.Client, driveModeTopic, recordTopic string) *LedPart {
onDriveModeTopic: driveModeTopic,
onRecordTopic: recordTopic,
muDriveMode: sync.Mutex{},
m: types.DriveModeInvalid,
m: events.DriveMode_INVALID,
muRecord: sync.Mutex{},
recordEnabled: false,
}
@ -33,7 +33,7 @@ type LedPart struct {
onRecordTopic string
muDriveMode sync.Mutex
m types.DriveMode
m events.DriveMode
muRecord sync.Mutex
recordEnabled bool
}
@ -56,13 +56,18 @@ func (p *LedPart) Stop() {
}
func (p *LedPart) onDriveMode(_ mqtt.Client, message mqtt.Message) {
m := types.ParseString(string(message.Payload()))
switch m {
case types.DriveModeUser:
var driveModeMessage events.DriveModeMessage
err := proto.Unmarshal(message.Payload(), &driveModeMessage)
if err != nil {
log.Errorf("unable to unmarchal %T message: %v", driveModeMessage, err)
return
}
switch driveModeMessage.GetDriveMode() {
case events.DriveMode_USER:
p.led.SetRed(0)
p.led.SetGreen(255)
p.led.SetBlue(0)
case types.DriveModePilot:
case events.DriveMode_PILOT:
p.led.SetRed(0)
p.led.SetGreen(0)
p.led.SetBlue(255)
@ -70,13 +75,13 @@ func (p *LedPart) onDriveMode(_ mqtt.Client, message mqtt.Message) {
}
func (p *LedPart) onRecord(client mqtt.Client, message mqtt.Message) {
mqttValue := mqttdevice.NewMqttValue(message.Payload())
rec, err := mqttValue.BoolValue()
var switchRecord events.SwitchRecordMessage
err := proto.Unmarshal(message.Payload(), &switchRecord)
if err != nil {
log.Printf("unable to convert message payload '%v' to bool: %v", message.Payload(), err)
log.Errorf("unable to unmarchal %T message: %v", switchRecord, err)
return
}
if rec {
if switchRecord.GetEnabled() {
p.led.SetBlink(2)
} else {
p.led.SetBlink(0)
@ -95,4 +100,3 @@ func (p *LedPart) registerCallbacks() error {
}
return nil
}

View File

@ -3,6 +3,7 @@ package part
import (
"github.com/cyrilix/robocar-base/mqttdevice"
"github.com/cyrilix/robocar-base/testtools"
"github.com/cyrilix/robocar-protobuf/go/events"
mqtt "github.com/eclipse/paho.mqtt.golang"
"testing"
"time"
@ -41,9 +42,9 @@ func TestLedPart_OnDriveMode(t *testing.T) {
msg mqtt.Message
red, green, blue int
}{
{testtools.NewFakeMessage("drive", mqttdevice.NewMqttValue("user")), 0, 255, 0},
{testtools.NewFakeMessage("drive", mqttdevice.NewMqttValue("pilot")), 0, 0, 255},
{testtools.NewFakeMessage("drive", mqttdevice.NewMqttValue("invalid")), 0, 0, 255},
{testtools.NewFakeMessageFromProtobuf("drive", &events.DriveModeMessage{DriveMode: events.DriveMode_USER}), 0, 255, 0},
{testtools.NewFakeMessageFromProtobuf("drive", &events.DriveModeMessage{DriveMode: events.DriveMode_PILOT}), 0, 0, 255},
{testtools.NewFakeMessageFromProtobuf("drive", &events.DriveModeMessage{DriveMode: events.DriveMode_INVALID}), 0, 0, 255},
}
for _, c := range cases {
@ -84,10 +85,10 @@ func TestLedPart_OnRecord(t *testing.T) {
record bool
blink bool
}{
{testtools.NewFakeMessage("record", mqttdevice.NewMqttValue(false)), true, false},
{testtools.NewFakeMessage("record", mqttdevice.NewMqttValue(true)), false, true},
{testtools.NewFakeMessage("record", mqttdevice.NewMqttValue(false)), true, false},
{testtools.NewFakeMessage("record", mqttdevice.NewMqttValue(true)), false, true},
{testtools.NewFakeMessageFromProtobuf("record", &events.SwitchRecordMessage{Enabled: false}), true, false},
{testtools.NewFakeMessageFromProtobuf("record", &events.SwitchRecordMessage{Enabled: true}), false, true},
{testtools.NewFakeMessageFromProtobuf("record", &events.SwitchRecordMessage{Enabled: false}), true, false},
{testtools.NewFakeMessageFromProtobuf("record", &events.SwitchRecordMessage{Enabled: true}), false, true},
}
for _, c := range cases {