[refactor] Read protobuf messages
This commit is contained in:
32
part/part.go
32
part/part.go
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user