Documentation ¶
Index ¶
- Constants
- Variables
- func VinCheck(vin string) (bool, string)
- type Bin
- func (bin *Bin) Bytes() ([]byte, error)
- func (bin *Bin) CRC32() string
- func (bin *Bin) ClearDTCS()
- func (bin *Bin) DeleteKey(keyno int) error
- func (fw *Bin) Dump()
- func (bin *Bin) GetFactoryProgrammingDate() (time.Time, error)
- func (bin *Bin) GetProgrammingDate() (time.Time, error)
- func (bin *Bin) GetSasOpt() bool
- func (bin *Bin) Json() ([]byte, error)
- func (bin *Bin) MD5() string
- func (bin *Bin) ModelYear() string
- func (fw *Bin) Pretty()
- func (bin *Bin) SetConfVer(ver uint32)
- func (bin *Bin) SetKeyCount(keys uint8) error
- func (bin *Bin) SetKeyErrorCount(value uint8) error
- func (bin *Bin) SetKeyID(keyno uint8, value []byte) error
- func (bin *Bin) SetPin(hexstring string) error
- func (bin *Bin) SetPinBytes(pin []byte) error
- func (bin *Bin) SetProgrammingID(no int, value string) error
- func (bin *Bin) SetSasOpt(opt bool)
- func (bin *Bin) SetSyncData(no uint8, data []byte) error
- func (bin *Bin) Unmarry()
- func (bin *Bin) Validate() error
- func (bin *Bin) XORBytes() ([]byte, error)
- type Const1
- type DiagnosticData
- type KeyID
- type Keys
- type OptionRemoteFrequency
- type Options
- type OptionsResult
- type Opts
- type PSK
- type Pin
- type SASCalibration
- type Sync
- type UnknownData1
- type UnknownData2
- type UnknownData5
- type UnknownData7
- type UnknownData8
- type UnknownData9
- type Vin
Constants ¶
View Source
const IsoDate = "2006-01-02"
Variables ¶
View Source
var (
Debug = false
)
Functions ¶
Types ¶
type Bin ¶
type Bin struct { ProgrammingDate []byte `bin:"len:4" json:"programming_date"` // BCD Binary-Coded Decimal yyyy-mm-dd SasOption uint8 `bin:"len:1" json:"sas_option"` // Steering Angle Sensor 0x03 = true UnknownBytes1 []byte `bin:"len:6" json:"unknown_bytes_1"` PartNo1 uint32 `bin:"len:4" json:"partno1"` // End model (HW+SW) PartNo1Rev string `bin:"len:2" json:"partno1_rev"` ConfigurationVersion uint32 `bin:"len:4" json:"configuration_version"` PnBase1 uint32 `bin:"len:4" json:"pnbase1"` // Base model (HW+boot) PnBase1Rev string `bin:"len:2" json:"pnbase1_rev"` Vin Vin `bin:"len:30" json:"vin"` ProgrammingID []string `bin:"len:3,[len:10]" json:"programming_id"` // 3 last sps progrmming ids's groups of 10 characters each. 30 bytes DiagnosticData DiagnosticData `bin:"len:88" json:"unknown_data_3"` Pin Pin `bin:"len:20" json:"pin"` Options Options `bin:"len:4" json:"unknown_data_4"` UnknownData1 UnknownData1 `bin:"len:44" json:"unknown_data_1"` Const1 Const1 `bin:"len:10" json:"const1"` Keys Keys `bin:"len:74" json:"keys"` UnknownData5 UnknownData5 `bin:"len:25" json:"unknown_data_5"` Sync Sync `bin:"len:66" json:"sync"` UnknownData7 UnknownData7 `bin:"len:14" json:"unknown_data_7"` UnknownData8 UnknownData8 `bin:"len:8" json:"unknown_data_8"` UnknownData9 UnknownData9 `bin:"len:7" json:"unknown_data_9"` UnknownData2 UnknownData2 `bin:"len:14" json:"unknown_data_2"` SnSticker []byte `bin:"len:5" json:"snsticker"` // BCD FactoryProgrammingDate []byte `bin:"len:3" json:"factory_programming_date"` // Reversed BCD date dd-mm-yy UnknownBytes2 []byte `bin:"len:3" json:"unknown_bytes_2"` DelphiPN uint32 `bin:"le,len:4" json:"delphipn"` // Little endian, Delphi part number UnknownBytes3 []byte `bin:"len:2" json:"unknown_bytes_3"` PartNo uint32 `bin:"le,len:4" json:"partno"` // Little endian, SAAB part number (factory?) UnknownData14 []byte `bin:"len:3" json:"unknown_data_14"` PSK PSK `bin:"len:14" json:"psk"` SASCalibration SASCalibration `bin:"len:12" json:"sas_calibration"` EOF byte `bin:"len:1" json:"eof"` }
Cim eeprom layout
func MustLoadBytes ¶
Load byte array and validate it directly
func (*Bin) GetFactoryProgrammingDate ¶ added in v0.2.7
func (*Bin) GetProgrammingDate ¶ added in v0.2.7
func (*Bin) SetConfVer ¶
func (*Bin) SetKeyCount ¶ added in v0.2.3
Set key count
func (*Bin) SetKeyErrorCount ¶ added in v0.2.3
func (*Bin) SetPinBytes ¶ added in v0.2.3
type Const1 ¶
type DiagnosticData ¶ added in v0.2.8
type DiagnosticData struct { Data1_1 []byte `bin:"len:14" json:"data1_1"` DTCS1 []byte `bin:"len:14" json:"dtcs1"` Data1_2 []byte `bin:"len:14" json:"data1_2"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1" ` Data2_1 []byte `bin:"len:14" json:"data2_1"` DTCS2 []byte `bin:"len:14" json:"dtcs2"` Data2_2 []byte `bin:"len:14" json:"data2_2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` }
func (*DiagnosticData) Crc16 ¶ added in v0.2.8
func (u *DiagnosticData) Crc16() (uint16, uint16)
func (*DiagnosticData) Validate ¶ added in v0.3.2
func (u *DiagnosticData) Validate() error
type Keys ¶
type Keys struct { IskHI1 []byte `bin:"len:4" json:"isk_hi1"` IskLO1 []byte `bin:"len:2" json:"isk_lo1"` Data1 []KeyID `bin:"len:5,[len:4]" json:"data1"` Count1 uint8 `bin:"len:1" json:"count1"` Constant1 []byte `bin:"len:7" json:"constant1"` Errors1 uint8 `bin:"len:1" json:"errors1"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1"` IskHI2 []byte `bin:"len:4" json:"isk_hi2"` IskLO2 []byte `bin:"len:2" json:"isk_lo2"` Data2 []KeyID `bin:"len:5,[len:4]" json:"data2"` Count2 uint8 `bin:"len:1" json:"count2"` Constant2 []byte `bin:"len:7" json:"constant2"` Errors2 uint8 `bin:"len:1" json:"errors2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` // CRC16 MCRF4XX } // 74 bytes
func (*Keys) SetISKHigh ¶ added in v0.2.2
type OptionRemoteFrequency ¶ added in v0.3.2
type OptionRemoteFrequency int
var ( OptionRemoteFrequency433MHzOr315MHzLongDistance OptionRemoteFrequency = 0 OptionRemoteFrequency315MHzShortDistance OptionRemoteFrequency = 1 )
func (*OptionRemoteFrequency) String ¶ added in v0.3.2
func (orf *OptionRemoteFrequency) String() string
type Options ¶ added in v0.2.8
type Options struct { Data uint16 `bin:"le,len:2" json:"data"` Checksum uint16 `bin:"le,len:2" json:"checksum"` }
func (*Options) GetOptions ¶ added in v0.3.2
func (opts *Options) GetOptions() *OptionsResult
type OptionsResult ¶ added in v0.3.2
type OptionsResult struct { Unknown1 bool SteeringWheelControlls bool SentronicControlls bool RemoteFrequency OptionRemoteFrequency Unknown2 bool RainSensor bool CruiseControl bool AutomaticTransmission bool Unknown3 bool Facelift bool Unknown4 bool RearWiper bool }
func (*OptionsResult) Byte ¶ added in v0.3.2
func (o *OptionsResult) Byte() uint16
func (*OptionsResult) String ¶ added in v0.3.2
func (o *OptionsResult) String() string
type PSK ¶
type Pin ¶
type Pin struct { Data1 []byte `bin:"len:4" json:"data1"` Unknown1 []byte `bin:"len:4" json:"unknown1"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1"` Data2 []byte `bin:"len:4" json:"data2"` Unknown2 []byte `bin:"len:4" json:"unknown2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` } // 20 bytes
0xb4 and 0xb5 are also counters - both separate, byte 1 and byte 2 in Data
type SASCalibration ¶
type SASCalibration struct { Data1 []byte `bin:"len:4" json:"data1"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1"` Data2 []byte `bin:"len:4" json:"data2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` }
func (*SASCalibration) Crc16 ¶
func (u *SASCalibration) Crc16() (uint16, uint16)
func (*SASCalibration) Set ¶
func (u *SASCalibration) Set(data []byte) error
func (*SASCalibration) Validate ¶ added in v0.3.2
func (u *SASCalibration) Validate() error
type Sync ¶
type Sync struct { Data [][]byte `bin:"len:5,[len:4]" json:"data"` Checksum uint16 `bin:"le,len:2" json:"checksum"` Bank1 [][]byte `bin:"len:5,[len:4]" json:"data1"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1"` Bank2 [][]byte `bin:"len:5,[len:4]" json:"data2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` } // 66 bytes
type UnknownData1 ¶
type UnknownData1 struct { Data1 []byte `bin:"len:20"` Checksum1 uint16 `bin:"le,len:2"` Data2 []byte `bin:"len:20"` Checksum2 uint16 `bin:"le,len:2"` }
func (*UnknownData1) Crc16 ¶
func (u *UnknownData1) Crc16() (uint16, uint16)
func (*UnknownData1) Validate ¶ added in v0.3.2
func (u *UnknownData1) Validate() error
type UnknownData2 ¶
type UnknownData2 struct { Data1 []byte `bin:"len:5"` Checksum1 uint16 `bin:"le,len:2"` Data2 []byte `bin:"len:5"` Checksum2 uint16 `bin:"le,len:2"` }
func (*UnknownData2) Crc16 ¶
func (u *UnknownData2) Crc16() (uint16, uint16)
func (*UnknownData2) Validate ¶ added in v0.3.2
func (u *UnknownData2) Validate() error
type UnknownData5 ¶
type UnknownData5 struct { Data []byte `bin:"len:23" json:"data"` Checksum uint16 `bin:"le,len:2" json:"checksum"` }
func (*UnknownData5) Crc16 ¶
func (u *UnknownData5) Crc16() uint16
func (*UnknownData5) Validate ¶ added in v0.3.2
func (u *UnknownData5) Validate() error
type UnknownData7 ¶
type UnknownData7 struct { Data1 []byte `bin:"len:5" json:"data1"` Checksum1 uint16 `bin:"le,len:2" json:"checksum1"` Data2 []byte `bin:"len:5" json:"data2"` Checksum2 uint16 `bin:"le,len:2" json:"checksum2"` }
address 1a6 (last byte) changed with region setting - 1 = EU, 0 = GB
func (*UnknownData7) Crc16 ¶
func (u *UnknownData7) Crc16() (uint16, uint16)
func (*UnknownData7) Validate ¶ added in v0.3.2
func (u *UnknownData7) Validate() error
type UnknownData8 ¶
type UnknownData8 struct { Data []byte `bin:"len:6" json:"data"` Checksum uint16 `bin:"le,len:2" json:"checksum"` }
func (*UnknownData8) Crc16 ¶
func (u *UnknownData8) Crc16() uint16
func (*UnknownData8) Validate ¶ added in v0.3.2
func (u *UnknownData8) Validate() error
type UnknownData9 ¶
type UnknownData9 struct { Data []byte `bin:"len:5" json:"data"` Checksum uint16 `bin:"le,len:2" json:"checksum"` }
func (*UnknownData9) Crc16 ¶
func (u *UnknownData9) Crc16() uint16
func (*UnknownData9) Validate ¶ added in v0.3.2
func (u *UnknownData9) Validate() error
type Vin ¶
type Vin struct { Data string `bin:"len:17" json:"data"` // Vin as ASCII AddCounter uint8 `bin:"len:1" json:"value"` // unknown value, seems to be a counter? Unknown []byte `bin:"len:9" json:"unknown"` SpsCount uint8 `bin:"len:1" json:"spscount"` Checksum uint16 `bin:"le,len:2" json:"checksum"` // CRC16 MCRF4XX } // 30 bytes
func (*Vin) SetAddCounter ¶ added in v0.3.2
func (*Vin) SetSpsCount ¶
Click to show internal directories.
Click to hide internal directories.