77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"fiskerinc.com/modules/grpc/kafka_grpc"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type CANBusFrame struct {
|
|
EpochUsec int64 `json:"epoch_usec"`
|
|
ID int `json:"id"`
|
|
Data string `json:"data"`
|
|
}
|
|
type CANBusMessageRaw struct {
|
|
EpochUsec int64 `json:"epoch_usec"`
|
|
Dropped int `json:"dropped"`
|
|
Filtered int `json:"filtered"`
|
|
Frames []CANBusFrame `json:"frames"`
|
|
}
|
|
type CarDataBatchPayloadRaw struct {
|
|
Handler string `json:"handler"`
|
|
Data CANBusMessageRaw `json:"data"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
// CarDataBatchPayload is a payload received from T.Rex
|
|
//
|
|
// it contains batches of CANMessages (can.go)
|
|
type CarDataBatchPayload struct {
|
|
Handler string `json:"handler"`
|
|
Data CANBusMessage `json:"data"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
func (c *CarDataBatchPayload) Marshal() ([]byte, error) {
|
|
data, err := json.Marshal(*c)
|
|
return data, errors.WithStack(err)
|
|
|
|
}
|
|
|
|
func (c *CarDataBatchPayload) Unmarshal(data []byte) error {
|
|
err := json.Unmarshal(data, c)
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
func (c *CarDataBatchPayload) ToGrpc(data MessageRawJSON, vin string) (*kafka_grpc.GRPC_BatchPayload, error) {
|
|
var payload CANBusMessageRaw
|
|
err := json.Unmarshal(data.Data, &payload)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
frames := make([]*kafka_grpc.GRPC_CANFrame, len(payload.Frames))
|
|
msg := kafka_grpc.GRPC_CANData{
|
|
EpochUsec: payload.EpochUsec,
|
|
Dropped: int32(payload.Dropped),
|
|
Filtered: int32(payload.Filtered),
|
|
Frames: frames,
|
|
Vin: vin,
|
|
}
|
|
|
|
for i, frame := range payload.Frames {
|
|
msg.Frames[i] = &kafka_grpc.GRPC_CANFrame{
|
|
Epoch: frame.EpochUsec,
|
|
ID: int32(frame.ID),
|
|
Value: []byte(frame.Data),
|
|
}
|
|
}
|
|
batch_payload := kafka_grpc.GRPC_BatchPayload{
|
|
Handler: data.Handler,
|
|
Data: &msg,
|
|
Version: data.Version,
|
|
}
|
|
return &batch_payload, nil
|
|
}
|