Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
112
pkg/common/can.go
Normal file
112
pkg/common/can.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"fiskerinc.com/modules/grpc/kafka_grpc"
|
||||
)
|
||||
|
||||
// CANFrame provides struct for can bus messages
|
||||
type CANFrame struct {
|
||||
TimestampUSec int `json:"epoch_usec" parquet:"name=epoch_usec, type=INT64"`
|
||||
ID int `json:"id" parquet:"name=id, type=INT32"`
|
||||
Data string `json:"data" parquet:"name=data, type=BYTE_ARRAY"`
|
||||
}
|
||||
|
||||
type CANBusMessage struct {
|
||||
EpochUsec int `json:"epoch_usec"`
|
||||
Dropped int `json:"dropped"`
|
||||
Filtered int `json:"filtered"`
|
||||
Frames []CANFrame `json:"frames"`
|
||||
}
|
||||
|
||||
// CANSignal provides struct for parsed can bus messages
|
||||
type CANSignal struct {
|
||||
VIN string `json:"vin"`
|
||||
Timestamp float64 `json:"timestamp" parquet:"name=timestamp, type=FLOAT"`
|
||||
ID int `json:"id" parquet:"name=id, type=INT32"`
|
||||
Name string `json:"name" parquet:"name=name, type=BYTE_ARRAY"`
|
||||
Value float64 `json:"value" parquet:"name=value, type=FLOAT"`
|
||||
Description string `json:"description,omitempty"`
|
||||
}
|
||||
|
||||
type CANSignalExport struct {
|
||||
VIN string `json:"vin"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Name string `json:"name"`
|
||||
Value float64 `json:"value"`
|
||||
TimestampInMilli int64 `json:"tm"`
|
||||
}
|
||||
|
||||
// "missing destination name \"BCM_FrntDrDoorLockSts\" in *common.CANSignal"
|
||||
type CANSignalQuery struct {
|
||||
VIN string `json:"vin" validate:"required"`
|
||||
TimestampStart float64 `json:"timestamp_start" validate:"required"`
|
||||
TimestampEnd float64 `json:"timestamp_end" validate:"required"`
|
||||
Offset int `json:"offset"`
|
||||
Limit int `json:"limit"`
|
||||
SelectAll bool `json:"select_all"`
|
||||
CanSignals []string `json:"can_signals"`
|
||||
}
|
||||
|
||||
type ExportCANSignalQuery struct {
|
||||
VIN string `json:"vin" validate:"required"`
|
||||
TimestampStart int64 `json:"timestamp_start" validate:"required"`
|
||||
TimestampEnd int64 `json:"timestamp_end" validate:"required"`
|
||||
Offset int `json:"offset"`
|
||||
Limit int `json:"limit"`
|
||||
SelectAll bool `json:"select_all"`
|
||||
CanSignals []string `json:"can_signals"`
|
||||
}
|
||||
|
||||
type CANSignalNameList struct {
|
||||
Signal_Name string `json:"signal_name"`
|
||||
}
|
||||
|
||||
type CANSignalData struct {
|
||||
cansignals []CANSignal `json:"cansignals"`
|
||||
}
|
||||
|
||||
type CANSignalBatchPayload struct {
|
||||
Data CANSignalData `json:"data"`
|
||||
}
|
||||
|
||||
// CANFilter provides struct for filtering can messages based on ID
|
||||
type CANFilter struct {
|
||||
CANID string `json:"can_id" bson:"can_id" validate:"required,can_id"`
|
||||
Interval *int `json:"interval,omitempty" bson:"interval" validate:"omitempty,gte=0"`
|
||||
EdgeMask *BinaryHex `json:"edge_mask,omitempty" bson:"edge_mask,omitempty" validate:"omitempty,lte=10000"`
|
||||
}
|
||||
|
||||
// CANFilterWithFleet is used only for rendering vehicle's fleets' filters.
|
||||
type CANFilterWithFleet struct {
|
||||
CANID string `json:"can_id" bson:"can_id" validate:"required,can_id"`
|
||||
Interval *int `json:"interval,omitempty" bson:"interval" validate:"gte=0"`
|
||||
Fleet string `json:"fleet,omitempty" bson:"fleet,omitempty"`
|
||||
EdgeMask *BinaryHex `json:"edge_mask,omitempty" bson:"edge_mask,omitempty" validate:"omitempty,lte=10000"`
|
||||
}
|
||||
|
||||
func (c *CANSignalBatchPayload) ToGrpc(data []CANSignal) *kafka_grpc.GRPC_CANSignalBatchPayload {
|
||||
grpccansignals := make([]*kafka_grpc.GRPC_CANSignal, len(data))
|
||||
|
||||
msg := kafka_grpc.GRPC_CANSignalData{
|
||||
Cansignals: grpccansignals,
|
||||
}
|
||||
|
||||
for i, cs := range data {
|
||||
msg.Cansignals[i] = &kafka_grpc.GRPC_CANSignal{
|
||||
Vin: cs.VIN,
|
||||
Timestamp: cs.Timestamp,
|
||||
Id: int32(cs.ID),
|
||||
Name: cs.Name,
|
||||
Value: cs.Value,
|
||||
Description: cs.Description,
|
||||
}
|
||||
}
|
||||
|
||||
batchPayload := kafka_grpc.GRPC_CANSignalBatchPayload{
|
||||
Data: &msg,
|
||||
}
|
||||
|
||||
return &batchPayload
|
||||
}
|
||||
Reference in New Issue
Block a user