Files
cloud-services/pkg/common/car_ecu.go

103 lines
3.9 KiB
Go

package common
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"fiskerinc.com/modules/common/dbbasemodel"
)
type CarECU struct {
VIN string `json:"vin,omitempty" pg:",unique:vin_ecu" validate:"required,vin"`
ECU string `json:"ecu" pg:",unique:vin_ecu" validate:"required,max=100"`
Version string `json:"sw_version" validate:"max=255"`
SerialNumber string `json:"serial_number,omitempty" validate:"max=1024"`
HWVersion string `json:"hw_version,omitempty" validate:"max=1024"`
BootLoaderVersion string `json:"boot_loader_version,omitempty" validate:"max=1024"`
Fingerprint string `json:"fingerprint,omitempty" validate:"max=1024"`
// cloud/attendant/handlers/car_update_state.go JSON message config was renamed to code_data_string
Config string `json:"code_data_string,omitempty" pg:"code_data_string" validate:"max=2048"` // config was renamed to code_data_string
Vendor string `json:"vendor,omitempty" validate:"max=1024"`
SupplierSWVersion string `json:"supplier_sw_version,omitempty" validate:"max=1024"`
Epoch_usec int64 `json:"epoch_usec" pg:"epoch_usec"`
ASSYNumber string `json:"assy_number,omitempty" pg:"assy_number"`
dbbasemodel.DBModelBase
}
func (c *CarECU) CacheKey() string {
return fmt.Sprintf("%s:%s", c.VIN, c.ECU)
}
func (c *CarECU) HashValues() string {
data := []byte(fmt.Sprintf("%s:%s:%s:%s:%s:%s:%s:%s:%s", c.Version, c.SerialNumber, c.HWVersion, c.BootLoaderVersion, c.Fingerprint, c.Config, c.Vendor, c.SupplierSWVersion, c.ASSYNumber))
hash := sha256.Sum256(data)
signature := hex.EncodeToString(hash[:])
return signature
}
// Ensure we always have the correct car_ecu name for OTA
func (c *CarECU) TransformECUName() {
replacement, ok := OTAUpdateECUReplacement[c.ECU]
if ok {
c.ECU = replacement
}
}
type CarECUFilter struct {
VIN string
ECUs []string
Search string
Unique bool
FlashPackNumberExist bool
HWVersionRequired bool // Ensure that the hw_version has a value. This may not retrieve the latest entry for the ecu, but until we find out why hw_versions are being inserted as empty
}
type CarFlashpackVersion struct {
Flashpack string `json:"flashpack" validate:"required,numeric"`
CarModel string `json:"car_model" validate:"required"`
CarTrim string `json:"car_trim" validate:"required"`
CarYear int `json:"car_year" validate:"required"`
CarECUName string `json:"car_ecu_name" validate:"required"`
CarECUVersion string `json:"car_ecu_version" validate:"required"`
dbbasemodel.DBModelBase
}
type CarECUVersion struct {
CarECUName string `json:"car_ecu_name"`
CarECUVersion string `json:"car_ecu_version"`
}
type CarFlashpackVersionRequest struct {
Flashpack string `json:"flashpack" validate:"required,numeric"`
CarModel string `json:"car_model" validate:"required"`
CarTrim string `json:"car_trim" validate:"required"`
CarYear int `json:"car_year" validate:"required"`
}
type ECUVersionRequest struct {
CarECUName string `json:"car_ecu_name" validate:"required"`
CarECUVersion string `json:"car_ecu_version" validate:"required"`
}
type CarFlashpackVersionAddRequest struct {
Flashpack string `json:"flashpack" validate:"required,numeric"`
CarModel string `json:"car_model" validate:"required"`
CarTrim string `json:"car_trim" validate:"required"`
CarYear int `json:"car_year" validate:"required"`
ECUVersions []ECUVersionRequest `json:"ecu_versions" validate:"required"`
}
type CarFlashpackVersionResponse struct {
Flashpack string `json:"flashpack"`
CarModel string `json:"car_model"`
CarTrim string `json:"car_trim"`
CarYear int `json:"car_year"`
}
type CarFlashpackVersionInfoResponse struct {
Flashpack string `json:"flashpack"`
NextFlashpack string `json:"next_flashpack"`
ECUVersions []CarECUVersion `json:"ecu_versions"`
}