decoder

package
v0.0.0-...-83b9e66 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 13, 2024 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RecordTypeActivityChangeInfo                = 0x01
	RecordTypeCardSlotsStatus                   = 0x02
	RecordTypeCurrentDateTime                   = 0x03
	RecordTypeMemberStateCertificate            = 0x04
	RecordTypeOdometerValueMidnight             = 0x05
	RecordTypeDateOfDayDownloaded               = 0x06
	RecordTypeSensorPaired                      = 0x07
	RecordTypeSignature                         = 0x08
	RecordTypeSpecificConditionRecord           = 0x09
	RecordTypeVehicleIdentificationNumber       = 0x0a
	RecordTypeVehicleRegistrationNumber         = 0x0b
	RecordTypeVuCalibrationRecord               = 0x0c
	RecordTypeVuCardIWRecord                    = 0x0d
	RecordTypeVuCardRecord                      = 0x0e
	RecordTypeVuCertificate                     = 0x0f
	RecordTypeVuCompanyLocksRecord              = 0x10
	RecordTypeVuControlActivityRecord           = 0x11
	RecordTypeVuDetailedSpeedBlock              = 0x12
	RecordTypeVuDownloadablePeriod              = 0x13
	RecordTypeVuDownloadActivityData            = 0x14
	RecordTypeVuEventRecord                     = 0x15
	RecordTypeVuGNSSADRecord                    = 0x16
	RecordTypeVuITSConsentRecord                = 0x17
	RecordTypeVuFaultRecord                     = 0x18
	RecordTypeVuIdentification                  = 0x19
	RecordTypeVuOverSpeedingControlData         = 0x1a
	RecordTypeVuOverSpeedingEventRecord         = 0x1b
	RecordTypeVuPlaceDailyWorkPeriodRecord      = 0x1c
	RecordTypeVuTimeAdjustmentGNSSRecord        = 0x1d
	RecordTypeVuTimeAdjustmentRecord            = 0x1e
	RecordTypeVuPowerSupplyInterruptionRecord   = 0x1f
	RecordTypeSensorPairedRecord                = 0x20
	RecordTypeSensorExternalGNSSCoupledRecord   = 0x21
	RecordTypeVuBorderCrossingRecord            = 0x22
	RecordTypeVuLoadUnloadRecord                = 0x23
	RecordTypeVehicleRegistrationIdentification = 0x24
)

Variables

global map of all decoded certificates by the key identification

Functions

func UnmarshalTLV

func UnmarshalTLV(data []byte, inter interface{}) (verified bool, err error)

UnmarshalTLV decodes the bytes in data into inter. It also verifies the data based on the signatures and certificates, if possible. The data is tag-length-value encoded and the structure given by the "tv" tags in the struct. This function is meant to decode driver card data. inter needs to be a pointer, otherwise the code will panic!

func UnmarshalTV

func UnmarshalTV(data []byte, inter interface{}) (verified bool, err error)

inter needs to be a pointer, otherwise the code will panic! returns true if the contents are verified

Types

type ActivityChangeInfo

type ActivityChangeInfo [2]byte

Appendix 1 2.1

func (ActivityChangeInfo) Decode

func (ActivityChangeInfo) MarshalJSON

func (a ActivityChangeInfo) MarshalJSON() ([]byte, error)

type Address

type Address struct {
	CodePage byte
	Address  [35]byte
}

Appendix 1 2.2

func (Address) MarshalJSON

func (a Address) MarshalJSON() ([]byte, error)

func (Address) String

func (a Address) String() string

type BCDString

type BCDString []byte

Appendix 1 2.7

func (BCDString) Decode

func (bcd BCDString) Decode() (int, error)

func (BCDString) MarshalJSON

func (bcd BCDString) MarshalJSON() ([]byte, error)

type CalibrationPurpose

type CalibrationPurpose byte

Appendix 1 2.8

type Card

type Card struct {
	CardIccIdentificationFirstGen                                         CardIccIdentificationFirstGen                       `tlv:"tag=0x000200" json:"card_icc_identification_1,omitempty"`
	CardIccIdentificationFirstGenSignature                                SignatureFirstGen                                   `tlv:"tag=0x000201" json:"card_icc_identification_1_sig,omitempty"`
	CardIccIdentificationSecondGen                                        CardIccIdentificationSecondGen                      `tlv:"tag=0x000202" json:"card_icc_identification_2,omitempty"`
	CardIccIdentificationSecondGenSignature                               SignatureSecondGen                                  `tlv:"tag=0x000203" json:"card_icc_identification_2_sig,omitempty"`
	CardChipIdentificationFirstGen                                        CardChipIdentification                              `tlv:"tag=0x000500" json:"card_chip_identification_1,omitempty"`
	CardChipIdentificationFirstGenSignature                               SignatureFirstGen                                   `tlv:"tag=0x000501" json:"card_chip_identification_1_sig,omitempty"`
	CardChipIdentificationSecondGen                                       CardChipIdentification                              `tlv:"tag=0x000502" json:"card_chip_identification_2,omitempty"`
	CardChipIdentificationSecondGenSignature                              SignatureSecondGen                                  `tlv:"tag=0x000503" json:"card_chip_identification_2_sig,omitempty"`
	DriverCardApplicationIdentificationFirstGen                           DriverCardApplicationIdentificationFirstGen         `tlv:"tag=0x050100" json:"driver_card_application_identification_1,omitempty"`
	DriverCardApplicationIdentificationFirstGenSignature                  SignatureFirstGen                                   `tlv:"tag=0x050101" json:"driver_card_application_identification_1_sig,omitempty"`
	DriverCardApplicationIdentificationSecondGen                          DriverCardApplicationIdentificationSecondGen        `tlv:"tag=0x050102" json:"driver_card_application_identification_2,omitempty"`
	DriverCardApplicationIdentificationSecondGenSignature                 SignatureSecondGen                                  `tlv:"tag=0x050103" json:"driver_card_application_identification_2_sig,omitempty"`
	CardEventDataFirstGen                                                 CardEventDataFirstGen                               `tlv:"tag=0x050200" json:"card_event_data_1,omitempty"`
	CardEventDataFirstGenSignature                                        SignatureFirstGen                                   `tlv:"tag=0x050201" json:"card_event_data_1_sig,omitempty"`
	CardEventDataSecondGen                                                CardEventDataSecondGen                              `tlv:"tag=0x050202" json:"card_event_data_2,omitempty"`
	CardEventDataSecondGenSignature                                       SignatureSecondGen                                  `tlv:"tag=0x050203" json:"card_event_data_2_sig,omitempty"`
	CardFaultDataFirstGen                                                 CardFaultDataFirstGen                               `tlv:"tag=0x050300" json:"card_fault_data_1,omitempty"`
	CardFaultDataFirstGenSignature                                        SignatureFirstGen                                   `tlv:"tag=0x050301" json:"card_fault_data_1_sig,omitempty"`
	CardFaultDataSecondGen                                                CardFaultDataSecondGen                              `tlv:"tag=0x050302" json:"card_fault_data_2,omitempty"`
	CardFaultDataSecondGenSignature                                       SignatureSecondGen                                  `tlv:"tag=0x050303" json:"card_fault_data_2_sig,omitempty"`
	CardDriverActivityFirstGen                                            CardDriverActivityFirstGen                          `tlv:"tag=0x050400" json:"card_driver_activity_1,omitempty"`
	CardDriverActivityFirstGenSignature                                   SignatureFirstGen                                   `tlv:"tag=0x050401" json:"card_driver_activity_1_sig,omitempty"`
	CardDriverActivitySecondGen                                           CardDriverActivitySecondGen                         `tlv:"tag=0x050402" json:"card_driver_activity_2,omitempty"`
	CardDriverActivitySecondGenSignature                                  SignatureSecondGen                                  `tlv:"tag=0x050403" json:"card_driver_activity_2_sig,omitempty"`
	CardVehiclesUsedFirstGen                                              CardVehiclesUsedFirstGen                            `tlv:"tag=0x050500" json:"card_vehicles_used_1,omitempty"`
	CardVehiclesUsedFirstGenSignature                                     SignatureFirstGen                                   `tlv:"tag=0x050501" json:"card_vehicles_used_1_sig,omitempty"`
	CardVehiclesUsedSecondGen                                             CardVehiclesUsedSecondGen                           `tlv:"tag=0x050502" json:"card_vehicles_used_2,omitempty"`
	CardVehiclesUsedSecondGenSignature                                    SignatureSecondGen                                  `tlv:"tag=0x050503" json:"card_vehicles_used_2_sig,omitempty"`
	CardPlaceDailyWorkPeriodFirstGen                                      CardPlaceDailyWorkPeriodFirstGen                    `tlv:"tag=0x050600" json:"card_place_daily_work_period_1,omitempty"`
	CardPlaceDailyWorkPeriodFirstGenSignature                             SignatureFirstGen                                   `tlv:"tag=0x050601" json:"card_place_daily_work_period_1_sig,omitempty"`
	CardPlaceDailyWorkPeriodSecondGen                                     CardPlaceDailyWorkPeriodSecondGen                   `tlv:"tag=0x050602" json:"card_place_daily_work_period_2,omitempty"`
	CardPlaceDailyWorkPeriodSecondGenSignature                            SignatureSecondGen                                  `tlv:"tag=0x050603" json:"card_place_daily_work_period_2_sig,omitempty"`
	CardCurrentUseFirstGen                                                CardCurrentUse                                      `tlv:"tag=0x050700" json:"card_current_use_1,omitempty"`
	CardCurrentUseFirstGenSignature                                       SignatureFirstGen                                   `tlv:"tag=0x050701" json:"card_current_use_1_sig,omitempty"`
	CardCurrentUseSecondGen                                               CardCurrentUse                                      `tlv:"tag=0x050702" json:"card_current_use_2,omitempty"`
	CardCurrentUseSecondGenSignature                                      SignatureSecondGen                                  `tlv:"tag=0x050703" json:"card_current_use_2_sig,omitempty"`
	CardControlActivityDataRecordFirstGen                                 CardControlActivityDataRecord                       `tlv:"tag=0x050800" json:"card_control_activity_data_record_1,omitempty"`
	CardControlActivityDataRecordFirstGenSignature                        SignatureFirstGen                                   `tlv:"tag=0x050801" json:"card_control_activity_data_record_1_sig,omitempty"`
	CardControlActivityDataRecordSecondGen                                CardControlActivityDataRecord                       `tlv:"tag=0x050802" json:"card_control_activity_data_record_2,omitempty"`
	CardControlActivityDataRecordSecondGenSignature                       SignatureSecondGen                                  `tlv:"tag=0x050803" json:"card_control_activity_data_record_2_sig,omitempty"`
	LastCardDownloadFirstGen                                              LastCardDownload                                    `tlv:"tag=0x050e00" json:"last_card_download_1,omitempty"`
	LastCardDownloadFirstGenSignature                                     SignatureFirstGen                                   `tlv:"tag=0x050e01" json:"last_card_download_1_sig,omitempty"`
	LastCardDownloadSecondGen                                             LastCardDownload                                    `tlv:"tag=0x050e02" json:"last_card_download_2,omitempty"`
	LastCardDownloadSecondGenSignature                                    SignatureSecondGen                                  `tlv:"tag=0x050e03" json:"last_card_download_2_sig,omitempty"`
	CardIdentificationAndDriverCardHolderIdentificationFirstGen           CardIdentificationAndDriverCardHolderIdentification `tlv:"tag=0x052000" json:"card_identification_and_driver_card_holder_identification_1,omitempty"`
	CardIdentificationAndDriverCardHolderIdentificationFirstGenSignature  SignatureFirstGen                                   `tlv:"tag=0x052001" json:"card_identification_and_driver_card_holder_identification_1_sig,omitempty"`
	CardIdentificationAndDriverCardHolderIdentificationSecondGen          CardIdentificationAndDriverCardHolderIdentification `tlv:"tag=0x052002" json:"card_identification_and_driver_card_holder_identification_2,omitempty"`
	CardIdentificationAndDriverCardHolderIdentificationSecondGenSignature SignatureSecondGen                                  `tlv:"tag=0x052003" json:"card_identification_and_driver_card_holder_identification_2_sig,omitempty"`
	CardDrivingLicenceInformationFirstGen                                 CardDrivingLicenceInformation                       `tlv:"tag=0x052100" json:"card_driving_licence_information_1,omitempty"`
	CardDrivingLicenceInformationFirstGenSignature                        SignatureFirstGen                                   `tlv:"tag=0x052101" json:"card_driving_licence_information_1_sig,omitempty"`
	CardDrivingLicenceInformationSecondGen                                CardDrivingLicenceInformation                       `tlv:"tag=0x052102" json:"card_driving_licence_information_2,omitempty"`
	CardDrivingLicenceInformationSecondGenSignature                       SignatureSecondGen                                  `tlv:"tag=0x052103" json:"card_driving_licence_information_2_sig,omitempty"`
	SpecificConditionsFirstGen                                            SpecificConditionsFirstGen                          `tlv:"tag=0x052200" json:"specific_conditions_1,omitempty"`
	SpecificConditionsFirstGenSignature                                   SignatureFirstGen                                   `tlv:"tag=0x052201" json:"specific_conditions_1_sig,omitempty"`
	SpecificConditionsSecondGen                                           SpecificConditionsSecondGen                         `tlv:"tag=0x052202" json:"specific_conditions_2,omitempty"`
	SpecificConditionsSecondGenSignature                                  SignatureSecondGen                                  `tlv:"tag=0x052203" json:"specific_conditions_2_sig,omitempty"`
	CardVehicleUnitsUsed                                                  CardVehicleUnitsUsed                                `tlv:"tag=0x052302" json:"card_vehicle_units_used,omitempty"`
	CardVehicleUnitsUsedSignature                                         SignatureSecondGen                                  `tlv:"tag=0x052303" json:"card_vehicle_units_used_sig,omitempty"`
	GNSSAccumulatedDriving                                                GNSSAccumulatedDriving                              `tlv:"tag=0x052402" json:"gnss_accumulated_driving,omitempty"`
	GNSSAccumulatedDrivingSignature                                       SignatureSecondGen                                  `tlv:"tag=0x052403" json:"gnss_accumulated_driving_sig,omitempty"`
	DriverCardApplicationIdentificationSecondGenV2                        DriverCardApplicationIdentificationSecondGenV2      `tlv:"tag=0x052502" json:"driver_card_application_identification_v2,omitempty"`
	DriverCardApplicationIdentificationSecondGenV2Signature               SignatureSecondGen                                  `tlv:"tag=0x052503" json:"driver_card_application_identification_v2_sig,omitempty"`
	CardPlaceAuthDailyWorkPeriod                                          CardPlaceAuthDailyWorkPeriod                        `tlv:"tag=0x052602" json:"card_place_auth_daily_work_period,omitempty"`
	CardPlaceAuthDailyWorkPeriodSignature                                 SignatureSecondGen                                  `tlv:"tag=0x052603" json:"card_place_auth_daily_work_period_sig,omitempty"`
	GNSSAuthAccumulatedDriving                                            GNSSAuthAccumulatedDriving                          `tlv:"tag=0x052702" json:"gnss_auth_accumulated_driving,omitempty"`
	GNSSAuthAccumulatedDrivingSignature                                   SignatureSecondGen                                  `tlv:"tag=0x052703" json:"gnss_auth_accumulated_driving_sig,omitempty"`
	CardBorderCrossings                                                   CardBorderCrossings                                 `tlv:"tag=0x052802" json:"card_border_crossings,omitempty"`
	CardBorderCrossingsSignature                                          SignatureSecondGen                                  `tlv:"tag=0x052803" json:"card_border_crossings_sig,omitempty"`
	CardLoadUnloadOperations                                              CardLoadUnloadOperations                            `tlv:"tag=0x052902" json:"card_load_unload_operations,omitempty"`
	CardLoadUnloadOperationsSignature                                     SignatureSecondGen                                  `tlv:"tag=0x052903" json:"card_load_unload_operations_sig,omitempty"`
	CardLoadTypeEntries                                                   CardLoadTypeEntries                                 `tlv:"tag=0x053002" json:"card_load_type_entries,omitempty"`
	CardLoadTypeEntriesSignature                                          SignatureSecondGen                                  `tlv:"tag=0x053003" json:"card_load_type_entries_sig,omitempty"`
	VuConfiguration                                                       VuConfiguration                                     `tlv:"tag=0x054002" json:"vu_configuration,omitempty"`
	VuConfigurationSignature                                              SignatureSecondGen                                  `tlv:"tag=0x054003" json:"vu_configuration_sig,omitempty"`
	CardCertificateFirstGen                                               CertificateFirstGen                                 `tlv:"tag=0xc10000" json:"card_certificate,omitempty"`
	CardMACertificate                                                     CertificateSecondGen                                `tlv:"tag=0xc10002" json:"card_ma_certificate,omitempty"`
	CardSignCertificate                                                   CertificateSecondGen                                `tlv:"tag=0xc10102" json:"card_sign_certificate,omitempty"`
	MemberStateCertificateFirstGen                                        CertificateFirstGen                                 `tlv:"tag=0xc10800" json:"member_state_certificate,omitempty"`
	CACertificate                                                         CertificateSecondGen                                `tlv:"tag=0xc10802" json:"ca_certificate,omitempty"`
	LinkCertificateSecondGen                                              CertificateSecondGen                                `tlv:"tag=0xc10902" json:"link_certificate,omitempty"`
}

data blocks are 3 bytes tag (first 2 bytes are the smart data EF FID, with an added "00" or "01"; "00" is the actual data and "01" is the signature. "02" and "03" are added for 2nd generation data ("02") and signature ("03")) 2 bytes length (big endian) - payload length in bytes after these 5 bytes follow <length> bytes of payload which is to be parsed note that both 1st and 2nd gen data blocks may be present on the same data! this definition is extracted from Appendix 2, 4.1 and 4.2.1

func (*Card) SignCertificateFirstGen

func (c *Card) SignCertificateFirstGen() CertificateFirstGen

func (*Card) SignCertificateSecondGen

func (c *Card) SignCertificateSecondGen() CertificateSecondGen

type CardActivityDailyRecord

type CardActivityDailyRecord struct {
	ActivityPreviousRecordLength CardActivityLengthRange `json:"activity_previous_record_length"`
	ActivityRecordLength         CardActivityLengthRange `aper:"structuresize" json:"activity_record_length"`
	ActivityRecordDate           TimeReal                `json:"activity_record_date"`
	ActivityDailyPresenceCounter DailyPresenceCounter    `aper:"size=2" json:"activity_daily_presence_counter"`
	ActivityDayDistance          Distance                `json:"activity_day_distance"`
	ActivityChangeInfo           []ActivityChangeInfo    `aper:"size=1..1440" json:"activity_change_info"`
}

Appendix 1 2.9

type CardActivityLengthRange

type CardActivityLengthRange uint16

Appendix 1 2.10

type CardApprovalNumber

type CardApprovalNumber [8]byte

Appendix 1 2.11

func (CardApprovalNumber) MarshalJSON

func (n CardApprovalNumber) MarshalJSON() ([]byte, error)

func (CardApprovalNumber) String

func (n CardApprovalNumber) String() string

type CardBorderCrossingRecord

type CardBorderCrossingRecord struct {
	Verified             bool                `aper:"-" json:"verified"`
	CountryLeft          NationNumeric       `json:"country_left"`
	CountryEntered       NationNumeric       `json:"country_entered"`
	GNNSPlaceAuthRecord  GNSSPlaceAuthRecord `json:"gnss_place_auth_record"`
	VehicleOdometerValue OdometerShort       `json:"vehicle_odometer_value"`
}

Appendix 1 2.11b

type CardBorderCrossings

type CardBorderCrossings struct {
	Verified                          bool                       `aper:"-" json:"verified"`
	BorderCrossingPointerNewestRecord NoOfBorderCrossingRecords  `json:"border_crossing_pointer_newest_record"`
	CardBorderCrossingRecords         []CardBorderCrossingRecord `aper:"size=NoOfBorderCrossingRecords" json:"card_border_crossing_records"`
}

Appendix 1 2.11a

type CardChipIdentification

type CardChipIdentification struct {
	Verified                 bool    `aper:"-" json:"verified"`
	IcSerialNumber           [4]byte `json:"ic_serial_number"`           // tag with fixed len optional
	IcManufacturingReference [4]byte `json:"ic_manufacturing_reference"` // tag with fixed len optional
}

Appendix 1 2.13

type CardControlActivityDataRecord

type CardControlActivityDataRecord struct {
	Verified                   bool                              `aper:"-" json:"verified"`
	ControlType                ControlType                       `json:"control_type"`
	ControlTime                TimeReal                          `json:"control_time"`
	ControlCardNumber          FullCardNumber                    `json:"control_card_number"`
	ControlVehicleRegistration VehicleRegistrationIdentification `json:"control_vehicle_registration"`
	ControlDownloadPeriodBegin TimeReal                          `json:"control_download_period_begin"`
	ControlDownloadPeriodEnd   TimeReal                          `json:"control_download_period_end"`
}

Appendix 1 2.15

type CardCurrentUse

type CardCurrentUse struct {
	Verified           bool                              `aper:"-" json:"verified"`
	SessionOpenTime    TimeReal                          `json:"session_open_time"`
	SessionOpenVehicle VehicleRegistrationIdentification `json:"session_open_vehicle"`
}

Appendix 1 2.16

type CardDriverActivityFirstGen

type CardDriverActivityFirstGen struct {
	Verified                       bool                    `aper:"-" json:"verified"`
	ActivityPointerOldestDayRecord CardActivityLengthRange `json:"activity_pointer_oldest_day_record"`
	ActivityPointerNewestRecord    CardActivityLengthRange `json:"activity_pointer_newest_record"`
	ActivityDailyRecords           []byte                  `aper:"size=1..ActivityStructureLengthFirstGen" json:"activity_daily_records"` // actually, it is []CardActivityDailyRecord, but not aligned and cyclic (wrapping around at the end). The actual size is given by the outer structure (or by ActivityStructureLength, a global value)
}

Appendix 1 2.17

func (CardDriverActivityFirstGen) Decode

func (CardDriverActivityFirstGen) DecodeForward

func (CardDriverActivityFirstGen) MarshalJSON

func (a CardDriverActivityFirstGen) MarshalJSON() ([]byte, error)

type CardDriverActivitySecondGen

type CardDriverActivitySecondGen struct {
	Verified                       bool                    `aper:"-" json:"verified"`
	ActivityPointerOldestDayRecord CardActivityLengthRange `json:"activity_pointer_oldest_day_record"`
	ActivityPointerNewestRecord    CardActivityLengthRange `json:"activity_pointer_newest_record"`
	ActivityDailyRecords           []byte                  `aper:"size=1..ActivityStructureLengthSecondGen" json:"activity_daily_records"` // actually, it is []CardActivityDailyRecord, but not aligned and cyclic (wrapping around at the end). The actual size is given by the outer structure (or by ActivityStructureLength, a global value)
}

func (CardDriverActivitySecondGen) Decode

func (CardDriverActivitySecondGen) DecodeForward

theoretically, this also works. In practice, it seems this data may be corrupted and it is safer to start decoding from the end (method Decode()) backwards, since every record contains the current and the previous length

func (CardDriverActivitySecondGen) MarshalJSON

func (a CardDriverActivitySecondGen) MarshalJSON() ([]byte, error)

type CardDrivingLicenceInformation

type CardDrivingLicenceInformation struct {
	Verified                       bool                 `aper:"-" json:"verified"`
	DrivingLicenceIssuingAuthority Name                 `json:"driving_licence_issuing_authority"`
	DrivingLicenceIssuingNation    NationNumeric        `json:"driving_licence_issuing_nation"`
	DrivingLicenceNumber           DrivingLicenceNumber `json:"driving_licence_number"`
}

Appendix 1 2.18

type CardEventDataFirstGen

type CardEventDataFirstGen struct {
	Verified              bool `aper:"-" json:"verified"`
	CardEventRecordsArray [6]struct {
		CardEventRecords []CardEventRecord `aper:"size=NoOfEventsPerTypeFirstGen" json:"card_event_records"`
	} `json:"card_event_records_array"`
}

Appendix 1 2.19

type CardEventDataSecondGen

type CardEventDataSecondGen struct {
	Verified              bool `aper:"-" json:"verified"`
	CardEventRecordsArray [11]struct {
		CardEventRecords []CardEventRecord `aper:"size=NoOfEventsPerTypeSecondGen" json:"card_event_records"`
	} `json:"card_event_records_array"`
}

type CardEventRecord

type CardEventRecord struct {
	EventType                byte                              `json:"event_type"`
	EventBeginTime           TimeReal                          `json:"event_begin_time"`
	EventEndTime             TimeReal                          `json:"event_end_time"`
	EventVehicleRegistration VehicleRegistrationIdentification `json:"event_vehicle_registration"`
}

Appendix 1 2.20

type CardFaultDataFirstGen

type CardFaultDataFirstGen struct {
	Verified              bool `aper:"-" json:"verified"`
	CardFaultRecordsArray [2]struct {
		CardFaultRecords []CardFaultRecord `aper:"size=NoOfFaultsPerTypeFirstGen" json:"card_fault_records"`
	} `json:"card_fault_records_array"`
}

Appendix 1 2.21

type CardFaultDataSecondGen

type CardFaultDataSecondGen struct {
	Verified              bool `aper:"-" json:"verified"`
	CardFaultRecordsArray [2]struct {
		CardFaultRecords []CardFaultRecord `aper:"size=NoOfFaultsPerTypeSecondGen" json:"card_fault_records"`
	} `json:"card_fault_records_array"`
}

type CardFaultRecord

type CardFaultRecord struct {
	FaultType                EventFaultType                    `json:"fault_type"`
	FaultBeginTime           TimeReal                          `json:"fault_begin_time"`
	FaultEndTime             TimeReal                          `json:"fault_end_time"`
	FaultVehicleRegistration VehicleRegistrationIdentification `json:"fault_vehicle_registration"`
}

Appendix 1 2.22

type CardIccIdentificationFirstGen

type CardIccIdentificationFirstGen struct {
	Verified                 bool                         `aper:"-" json:"verified"`
	ClockStop                byte                         `json:"clock_stop"`
	CardExtendedSerialNumber ExtendedSerialNumberFirstGen `json:"card_extended_serial_number"`
	CardApprovalNumber       CardApprovalNumber           `json:"card_approval_number"`
	CardPersonaliserID       ManufacturerCode             `json:"card_personaliser_id"`
	EmbedderIcAssemblerId    EmbedderIcAssemblerId        `json:"embedder_ic_assembler_id"`
	IcIdentifier             [2]byte                      `json:"ic_identifier"`
}

Appendix 1 2.23

type CardIccIdentificationSecondGen

type CardIccIdentificationSecondGen struct {
	Verified                 bool                          `aper:"-" json:"verified"`
	ClockStop                byte                          `json:"clock_stop"`
	CardExtendedSerialNumber ExtendedSerialNumberSecondGen `json:"card_extended_serial_number"`
	CardApprovalNumber       CardApprovalNumber            `json:"card_approval_number"`
	CardPersonaliserID       ManufacturerCode              `json:"card_personaliser_id"`
	EmbedderIcAssemblerId    EmbedderIcAssemblerId         `json:"embedder_ic_assembler_id"`
	IcIdentifier             [2]byte                       `json:"ic_identifier"`
}

functionally identical to first gen, only the field "type" in the ExtendedSerialNumber struct is now of type "EquipmentType" (the underlying data is the same though, it is one byte)

type CardIdentification

type CardIdentification struct {
	CardIssuingMemberState   NationNumeric `json:"card_issuing_member_state"`
	CardNumber               CardNumber    `json:"card_number"`
	CardIssuingAuthorityName Name          `json:"card_issuing_authority_name"`
	CardIssueDate            TimeReal      `json:"card_issue_date"`
	CardValidityBegin        TimeReal      `json:"card_validity_begin"`
	CardExpiryDate           TimeReal      `json:"card_expiry_date"`
}

Appendix 1 2.24

type CardIdentificationAndDriverCardHolderIdentification

type CardIdentificationAndDriverCardHolderIdentification struct {
	Verified                       bool                           `aper:"-" json:"verified"`
	CardIdentification             CardIdentification             `json:"card_identification"`
	DriverCardHolderIdentification DriverCardHolderIdentification `json:"driver_card_holder_identification"`
}

helper structure derived from Appendix 7 4.2

type CardLoadTypeEntries

type CardLoadTypeEntries struct {
	Verified                         bool                      `aper:"-" json:"verified"`
	LoadTypeEntryPointerNewestRecord NoOfLoadTypeEntryRecords  `json:"load_type_entry_pointer_newest_record"`
	CardLoadTypeEntryRecords         []CardLoadTypeEntryRecord `aper:"size=NoOfLoadTypeRecords" json:"card_load_type_entry_records"`
}

Appendix 1 2.24a

type CardLoadTypeEntryRecord

type CardLoadTypeEntryRecord struct {
	Timestamp       TimeReal `json:"timestamp"`
	LoadTypeEntered LoadType `json:"load_type_entered"`
}

Appendix 1 2.24b

type CardLoadUnloadOperations

type CardLoadUnloadOperations struct {
	Verified                      bool                   `aper:"-" json:"verified"`
	LoadUnloadPointerNewestRecord NoOfLoadUnloadRecords  `json:"load_unload_pointer_newest_record"`
	CardLoadUnloadRecords         []CardLoadUnloadRecord `aper:"size=NoOfLoadUnloadRecords" json:"card_load_unload_records"`
}

Appendix 1 2.24c

type CardLoadUnloadRecord

type CardLoadUnloadRecord struct {
	Timestamp            TimeReal            `json:"timestamp"`
	OperationType        OperationType       `json:"operation_type"`
	GNSSPlaceAuthRecord  GNSSPlaceAuthRecord `json:"gnss_place_auth_record"`
	VehicleOdometerValue OdometerShort       `json:"vehicle_odometer_value"`
}

Appendix 1 2.24d

type CardNumber

type CardNumber [16]byte // actually a choice of two 16 bytes structs which basically consist of the identification and 2 or 3 index numbers

Appendix 1 2.26

func (CardNumber) MarshalJSON

func (n CardNumber) MarshalJSON() ([]byte, error)

func (CardNumber) String

func (n CardNumber) String() string

type CardPlaceAuthDailyWorkPeriod

type CardPlaceAuthDailyWorkPeriod struct {
	Verified                     bool                          `aper:"-" json:"verified"`
	PlaceAuthPointerNewestRecord NoOfCardPlaceRecordsSecondGen `json:"place_auth_pointer_newest_record"`
	PlaceAuthStatusRecords       []PlaceAuthStatusRecord       `aper:"size=NoOfCardPlaceRecordsSecondGen" json:"place_auth_status_records"`
}

Appendix 1 2.26a

type CardPlaceDailyWorkPeriodFirstGen

type CardPlaceDailyWorkPeriodFirstGen struct {
	Verified                 bool                         `aper:"-" json:"verified"`
	PlacePointerNewestRecord NoOfCardPlaceRecordsFirstGen `json:"place_pointer_newest_record"`
	PlaceRecords             []PlaceRecordFirstGen        `aper:"size=NoOfCardPlaceRecordsFirstGen" json:"place_records"`
}

Appendix 1 2.27

type CardPlaceDailyWorkPeriodSecondGen

type CardPlaceDailyWorkPeriodSecondGen struct {
	Verified                 bool                          `aper:"-" json:"verified"`
	PlacePointerNewestRecord NoOfCardPlaceRecordsSecondGen `json:"place_pointer_newest_record"`
	PlaceRecords             []PlaceRecordSecondGen        `aper:"size=NoOfCardPlaceRecordsSecondGen" json:"place_records"`
}

type CardSlotNumber

type CardSlotNumber byte

Appendix 1 2.33

type CardSlotsStatus

type CardSlotsStatus byte

Appendix 1 2.34 B'ccccdddd' B'cccc' - codriver slot B'dddd' - driver slot B'0000' - no card is inserted B'0001' - a driver card is inserted B'0010' - a workshop card is inserted B'0011' - a control card is inserted B'0100' - a company card is inserted

type CardSlotsStatusRecordArray

type CardSlotsStatusRecordArray struct {
	RecordType  RecordType        `json:"record_type"`
	RecordSize  uint16            `json:"record_size"`
	NoOfRecords uint16            `json:"no_of_records"`
	Records     []CardSlotsStatus `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.35

type CardStructureVersion

type CardStructureVersion [2]byte

Appendix 1 2.36

type CardVehicleRecordFirstGen

type CardVehicleRecordFirstGen struct {
	VehicleOdometerBegin OdometerShort                     `json:"vehicle_odometer_begin"`
	VehicleOdometerEnd   OdometerShort                     `json:"vehicle_odometer_end"`
	VehicleFirstUse      TimeReal                          `json:"vehicle_first_use"`
	VehicleLastUse       TimeReal                          `json:"vehicle_last_use"`
	VehicleRegistration  VehicleRegistrationIdentification `json:"vehicle_registration"`
	VuDataBlockCounter   VuDataBlockCounter                `aper:"size=2" json:"vu_data_block_counter"`
}

Appendix 1 2.37

type CardVehicleRecordSecondGen

type CardVehicleRecordSecondGen struct {
	VehicleOdometerBegin        OdometerShort                     `json:"vehicle_odometer_begin"`
	VehicleOdometerEnd          OdometerShort                     `json:"vehicle_odometer_end"`
	VehicleFirstUse             TimeReal                          `json:"vehicle_first_use"`
	VehicleLastUse              TimeReal                          `json:"vehicle_last_use"`
	VehicleRegistration         VehicleRegistrationIdentification `json:"vehicle_registration"`
	VuDataBlockCounter          VuDataBlockCounter                `aper:"size=2" json:"vu_data_block_counter"`
	VehicleIdentificationNumber VehicleIdentificationNumber       `json:"vehicle_identification_number"`
}

type CardVehicleUnitRecord

type CardVehicleUnitRecord struct {
	TimeStamp         TimeReal          `json:"time_stamp"`
	ManufacturerCode  ManufacturerCode  `json:"manufacturer_code"`
	DeviceID          byte              `json:"device_id"`
	VuSoftwareVersion VuSoftwareVersion `json:"vu_software_version"`
}

Appendix 1 2.39

type CardVehicleUnitsUsed

type CardVehicleUnitsUsed struct {
	Verified                       bool                       `aper:"-" json:"verified"`
	VehicleUnitPointerNewestRecord NoOfCardVehicleUnitRecords `json:"vehicle_unit_pointer_newest_record"`
	CardVehicleUnitRecords         []CardVehicleUnitRecord    `aper:"size=NoOfCardVehicleUnitRecords" json:"card_vehicle_unit_records"`
}

Appendix 1 2.40

type CardVehiclesUsedFirstGen

type CardVehiclesUsedFirstGen struct {
	Verified                   bool                        `aper:"-" json:"verified"`
	VehiclePointerNewestRecord NoOfCardVehicleRecords      `json:"vehicle_pointer_newest_record"`
	CardVehicleRecords         []CardVehicleRecordFirstGen `aper:"size=NoOfCardVehicleRecordsFirstGen" json:"card_vehicle_records"`
}

Appendix 1 2.38

type CardVehiclesUsedSecondGen

type CardVehiclesUsedSecondGen struct {
	Verified                   bool                         `aper:"-" json:"verified"`
	VehiclePointerNewestRecord NoOfCardVehicleRecords       `json:"vehicle_pointer_newest_record"`
	CardVehicleRecords         []CardVehicleRecordSecondGen `aper:"size=NoOfCardVehicleRecordsSecondGen" json:"card_vehicle_records"`
}

type CertificateContent

type CertificateContent struct {
	CertificateProfileIdentifier    byte
	CertificationAuthorityReference KeyIdentifier
	CertificateHolderAuthorisation  CertificateHolderAuthorisation
	CertificateEndOfValidity        TimeReal
	CertificateHolderReference      KeyIdentifier
	PublicKey                       PublicKey
}

Appendix 1 2.42

type CertificateFirstGen

type CertificateFirstGen struct {
	DecodedCertificate *DecodedCertificateFirstGen `aper:"-" json:"-"`
	Certificate        [194]byte                   `json:"certificate,omitempty"`
}

Appendix 1 2.41

func (*CertificateFirstGen) Decode

func (c *CertificateFirstGen) Decode() error

func (CertificateFirstGen) MarshalJSON

func (c CertificateFirstGen) MarshalJSON() ([]byte, error)

func (*CertificateFirstGen) UnmarshalJSON

func (c *CertificateFirstGen) UnmarshalJSON(data []byte) error

type CertificateHolderAuthorisation

type CertificateHolderAuthorisation struct {
	TachographApplicationID [6]byte       // fix: 1st gen: FF 54 41 43 48 4F 2nd gen: FF 53 4D 52 44 54
	EquipmentType           EquipmentType // 0 for member state certificate
}

Appendix 1 2.43

type CertificateSecondGen

type CertificateSecondGen struct {
	DecodedCertificate *DecodedCertificateSecondGen `aper:"-" json:"-"`                                 // make sure this is not the last field in the struct
	Certificate        []byte                       `aper:"size=204..341" json:"certificate,omitempty"` // see 2.41.: 204..341 bytes
}

func (*CertificateSecondGen) Decode

func (c *CertificateSecondGen) Decode() error

func (CertificateSecondGen) MarshalJSON

func (c CertificateSecondGen) MarshalJSON() ([]byte, error)

func (*CertificateSecondGen) UnmarshalJSON

func (c *CertificateSecondGen) UnmarshalJSON(data []byte) error

type CertificationAuthorityKID

type CertificationAuthorityKID struct {
	NationNumeric   NationNumeric
	NationAlpha     NationAlpha
	KeySerialNumber byte
	AdditionalInfo  [2]byte // or FF FF
	CaIdentifier    byte    // fix 01
}

Appendix 1 2.45

type ControlType

type ControlType byte

Appendix 1 2.53

type CountryCode

type CountryCode [2]byte // helper type for json marshaling

func (CountryCode) MarshalJSON

func (c CountryCode) MarshalJSON() ([]byte, error)

func (CountryCode) String

func (c CountryCode) String() string

type CurrentDateTime

type CurrentDateTime TimeReal

Appendix 1 2.54

func (CurrentDateTime) Decode

func (d CurrentDateTime) Decode() time.Time

func (CurrentDateTime) MarshalJSON

func (d CurrentDateTime) MarshalJSON() ([]byte, error)

type CurrentDateTimeRecordArray

type CurrentDateTimeRecordArray struct {
	RecordType  RecordType        `json:"record_type"`
	RecordSize  uint16            `json:"record_size"`
	NoOfRecords uint16            `json:"no_of_records"`
	Records     []CurrentDateTime `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.55

type DailyPresenceCounter

type DailyPresenceCounter BCDString

Appendix 1 2.56

func (DailyPresenceCounter) Decode

func (c DailyPresenceCounter) Decode() (int, error)

func (DailyPresenceCounter) MarshalJSON

func (c DailyPresenceCounter) MarshalJSON() ([]byte, error)

type DateOfDayDownloaded

type DateOfDayDownloaded TimeReal

Appendix 1 2.58

func (DateOfDayDownloaded) Decode

func (d DateOfDayDownloaded) Decode() time.Time

func (DateOfDayDownloaded) MarshalJSON

func (d DateOfDayDownloaded) MarshalJSON() ([]byte, error)

type DateOfDayDownloadedRecordArray

type DateOfDayDownloadedRecordArray struct {
	RecordType  RecordType            `json:"record_type"`
	RecordSize  uint16                `json:"record_size"`
	NoOfRecords uint16                `json:"no_of_records"`
	Records     []DateOfDayDownloaded `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.59

type Datef

type Datef struct {
	Year  BCDString `aper:"size=2" json:"year"`
	Month BCDString `aper:"size=1" json:"month"`
	Day   BCDString `aper:"size=1" json:"day"`
}

Appendix 1 2.57

type DecodedActivityChangeInfo

type DecodedActivityChangeInfo struct {
	Driver      bool `json:"driver"`
	Team        bool `json:"team"`
	CardPresent bool `json:"card_present"`
	WorkType    byte `json:"work_type"` // 0 - break, 1 - on duty, 2 - work, 3 - drive
	Minutes     int  `json:"minutes"`
}

type DecodedCertificateFirstGen

type DecodedCertificateFirstGen struct {
	CertificateHolderReference    uint64
	CertificateAuthorityReference uint64
	EndOfValidity                 time.Time
	RsaModulus                    *big.Int
	RsaExponent                   *big.Int
}

this is actually a usable version of CertificateContent (see below)

func (DecodedCertificateFirstGen) Perform

func (cert DecodedCertificateFirstGen) Perform(data []byte) []byte

type DecodedCertificateSecondGen

type DecodedCertificateSecondGen struct {
	CertificateBody struct {
		CertificateProfileIdentifier   byte
		CertificateAuthorityReference  uint64
		CertificateHolderAuthorisation [7]byte
		PublicKey                      struct {
			DomainParameters asn1.ObjectIdentifier
			PublicPoint      struct {
				X *big.Int
				Y *big.Int
			}
		}
		CertificateHolderReference uint64
		CertificateEffectiveDate   time.Time
		CertificateExpirationDate  time.Time
	}
	ECCCertificateSignature struct {
		R *big.Int
		S *big.Int
	}
	Valid bool
}

type DecodedSignatureFirstGen

type DecodedSignatureFirstGen struct {
	Sha1 [20]byte `json:"sha1"` // we only keep the sha1 of a correctly decoded signature
}

type DecodedSignatureSecondGen

type DecodedSignatureSecondGen struct {
	R *big.Int
	S *big.Int
}

type Distance

type Distance uint16 // km

Appendix 1 2.60

type DownloadInterfaceVersion

type DownloadInterfaceVersion struct {
	Verified                 bool    `aper:"-" json:"verified"`
	DownloadInterfaceVersion [2]byte `aper:"global" json:"download_interface_version"`
}

Appendix 1 2.60a

type DriverCardApplicationIdentificationFirstGen

type DriverCardApplicationIdentificationFirstGen struct {
	Verified                        bool                         `aper:"-" json:"verified"`
	TypeOfTachographCardId          EquipmentType                `json:"type_of_tachograph_card_id"`
	CardStructureVersion            CardStructureVersion         `json:"card_structure_version"`
	NoOfEventsPerTypeFirstGen       NoOfEventsPerType            `aper:"global" json:"no_of_events_per_type"`
	NoOfFaultsPerTypeFirstGen       NoOfFaultsPerType            `aper:"global" json:"no_of_faults_per_type"`
	ActivityStructureLengthFirstGen CardActivityLengthRange      `aper:"global" json:"activity_structure_length"` // this is actually a data-global value and needs to be accessed from other blocks
	NoOfCardVehicleRecordsFirstGen  NoOfCardVehicleRecords       `aper:"global" json:"no_of_card_vehicle_records"`
	NoOfCardPlaceRecordsFirstGen    NoOfCardPlaceRecordsFirstGen `aper:"global" json:"no_of_card_place_records"`
}

Appendix 1 2.61

type DriverCardApplicationIdentificationSecondGen

type DriverCardApplicationIdentificationSecondGen struct {
	Verified                         bool                          `aper:"-" json:"verified"`
	TypeOfTachographCardId           EquipmentType                 `json:"type_of_tachograph_card_id"`
	CardStructureVersion             CardStructureVersion          `json:"card_structure_version"`
	NoOfEventsPerTypeSecondGen       NoOfEventsPerType             `aper:"global" json:"no_of_events_per_type"`
	NoOfFaultsPerTypeSecondGen       NoOfFaultsPerType             `aper:"global" json:"no_of_faults_per_type"`
	ActivityStructureLengthSecondGen CardActivityLengthRange       `aper:"global" json:"activity_structure_length"`
	NoOfCardVehicleRecordsSecondGen  NoOfCardVehicleRecords        `aper:"global" json:"no_of_card_vehicle_records"`
	NoOfCardPlaceRecordsSecondGen    NoOfCardPlaceRecordsSecondGen `aper:"global" json:"no_of_card_place_records"`
	NoOfGNSSADRecords                NoOfGNSSADRecords             `aper:"global" json:"no_of_gnss_ad_records"`
	NoOfSpecificConditionRecords     NoOfSpecificConditionRecords  `aper:"global" json:"no_of_specific_condition_records"`
	NoOfCardVehicleUnitRecords       NoOfCardVehicleUnitRecords    `aper:"global" json:"no_of_card_vehicle_unit_records"`
}

type DriverCardApplicationIdentificationSecondGenV2

type DriverCardApplicationIdentificationSecondGenV2 struct {
	Verified                   bool                       `aper:"-" json:"verified"`
	LengthOfFollowingData      LengthOfFollowingData      `aper:"global" json:"length_of_following_data"`
	NoOfBorderCrossingRecords  NoOfBorderCrossingRecords  `aper:"global" json:"no_of_border_crossing_records"`
	NoOfLoadUnloadRecords      NoOfLoadUnloadRecords      `aper:"global" json:"no_of_load_unload_records"`
	NoOfLoadTypeEntryRecords   NoOfLoadTypeEntryRecords   `aper:"global" json:"no_of_load_type_entry_records"`
	VuConfigurationLengthRange VuConfigurationLengthRange `aper:"global" json:"vu_configuration_length_range"`
}

Appendix 1 2.61a

type DriverCardHolderIdentification

type DriverCardHolderIdentification struct {
	CardHolderName              HolderName `json:"card_holder_name"`
	CardHolderBirthDate         Datef      `json:"card_holder_birth_date"`
	CardHolderPreferredLanguage Language   `json:"card_holder_preferred_language"`
}

Appendix 1 2.62

type DrivingLicenceNumber

type DrivingLicenceNumber [16]byte // helper type to provide json marshal

func (DrivingLicenceNumber) MarshalJSON

func (n DrivingLicenceNumber) MarshalJSON() ([]byte, error)

func (DrivingLicenceNumber) String

func (n DrivingLicenceNumber) String() string

type EmbedderIcAssemblerId

type EmbedderIcAssemblerId struct {
	CountryCode             CountryCode `json:"country_code"`
	ModuleEmbedder          BCDString   `aper:"size=2" json:"module_embedder"`
	ManufacturerInformation byte        `json:"manufacturer_information"`
}

Appendix 1 2.65

type EntryTypeDailyWorkPeriodFirstGen

type EntryTypeDailyWorkPeriodFirstGen byte

Appendix 1 2.66

type EntryTypeDailyWorkPeriodSecondGen

type EntryTypeDailyWorkPeriodSecondGen byte // same as first gen, but 2 additional values for gnss

type EquipmentType

type EquipmentType byte

Appendix 1 2.67

type EventFaultRecordPurpose

type EventFaultRecordPurpose byte

Appendix 1 2.69

type EventFaultType

type EventFaultType byte

Appendix 1 2.70

type ExtendedSealIdentifier

type ExtendedSealIdentifier struct {
	ManufacturerCode [2]byte `json:"manufacturer_code"`
	SealIdentifier   [8]byte `json:"seal_identifier"` // according to changes doc
}

Appendix 1 2.71

type ExtendedSerialNumberFirstGen

type ExtendedSerialNumberFirstGen struct {
	SerialNumber     uint32           `json:"serial_number"`
	MonthYear        MonthYear        `aper:"size=2" json:"month_year"`
	Type             byte             `json:"type"`
	ManufacturerCode ManufacturerCode `json:"manufacturer_code"`
}

Appendix 1 2.72

type ExtendedSerialNumberSecondGen

type ExtendedSerialNumberSecondGen struct {
	SerialNumber     uint32           `json:"serial_number"`
	MonthYear        MonthYear        `aper:"size=2" json:"month_year"`
	Type             EquipmentType    `json:"type"`
	ManufacturerCode ManufacturerCode `json:"manufacturer_code"`
}

type FullCardNumber

type FullCardNumber struct {
	CardType               EquipmentType `json:"card_type"`
	CardIssuingMemberState NationNumeric `json:"card_issuing_member_state"`
	CardNumber             CardNumber    `json:"card_number"`
}

Appendix 1 2.73

type FullCardNumberAndGeneration

type FullCardNumberAndGeneration struct {
	FullCardNumber FullCardNumber `json:"full_card_number"`
	Generation     Generation     `json:"generation"`
}

Appendix 1 2.74

type GNSSAccumulatedDriving

type GNSSAccumulatedDriving struct {
	Verified                      bool                           `aper:"-" json:"verified"`
	GNSSADPointerNewestRecord     NoOfGNSSADRecords              `json:"gnss_ad_pointer_newest_record"`
	GNSSAccumulatedDrivingRecords []GNSSAccumulatedDrivingRecord `aper:"size=NoOfGNSSADRecords" json:"gnss_accumulated_driving_records"`
}

Appendix 1 2.78

type GNSSAccumulatedDrivingRecord

type GNSSAccumulatedDrivingRecord struct {
	TimeStamp            TimeReal        `json:"time_stamp"`
	GNSSPlaceRecord      GNSSPlaceRecord `json:"gnss_place_record"`
	VehicleOdometerValue OdometerShort   `json:"vehicle_odometer_value"`
}

Appendix 1 2.79

type GNSSAccuracy

type GNSSAccuracy byte

Appendix 1 2.77

type GNSSAuthAccumulatedDriving

type GNSSAuthAccumulatedDriving struct {
	Verified                      bool                     `aper:"-" json:"verified"`
	GNSSAuthADPointerNewestRecord NoOfGNSSADRecords        `json:"gnss_auth_ad_pointer_newest_record"`
	GNSSAuthStatusADRecords       []GNSSAuthStatusADRecord `aper:"size=NoOfGNSSADRecords" json:"gnss_auth_status_ad_records"`
}

Appendix 1 2.79a

type GNSSAuthStatusADRecord

type GNSSAuthStatusADRecord struct {
	TimeStamp            TimeReal                     `json:"time_stamp"`
	AuthenticationStatus PositionAuthenticationStatus `json:"authentication_status"`
}

Appendix 1 2.79b

type GNSSPlaceAuthRecord

type GNSSPlaceAuthRecord struct {
	TimeStamp            TimeReal                     `json:"time_stamp"`
	GNSSAccuracy         GNSSAccuracy                 `json:"gnss_accuracy"`
	GeoCoordinates       GeoCoordinates               `json:"geo_coordinates"`
	AuthenticationStatus PositionAuthenticationStatus `json:"authentication_status"`
}

Appendix 1 2.79c

type GNSSPlaceRecord

type GNSSPlaceRecord struct {
	TimeStamp      TimeReal       `json:"time_stamp"`
	GNSSAccuracy   GNSSAccuracy   `json:"gnss_accuracy"`
	GeoCoordinates GeoCoordinates `json:"geo_coordinates"`
}

Appendix 1 2.80

type Generation

type Generation byte

Appendix 1 2.75

type GeoCoordinates

type GeoCoordinates struct {
	Latitude  [3]byte
	Longitude [3]byte
}

Appendix 1 2.76

func (GeoCoordinates) Decode

func (g GeoCoordinates) Decode() (lon float64, lat float64)

func (GeoCoordinates) MarshalJSON

func (g GeoCoordinates) MarshalJSON() ([]byte, error)

func (*GeoCoordinates) UnmarshalJSON

func (g *GeoCoordinates) UnmarshalJSON(data []byte) error

type HolderName

type HolderName struct {
	HolderSurname    Name `json:"holder_surname"`
	HolderFirstNames Name `json:"holder_first_names"`
}

Appendix 1 2.83

type KConstantOfRecordingEquipment

type KConstantOfRecordingEquipment uint16

Appendix 1 2.85

type KeyIdentifier

type KeyIdentifier struct {
	CertificationAuthorityKID CertificationAuthorityKID
}

Appendix 1 2.86

type LTyreCircumference

type LTyreCircumference uint16

Appendix 1 2.91

type Language

type Language [2]byte

Appendix 1 2.88

func (Language) MarshalJSON

func (l Language) MarshalJSON() ([]byte, error)

func (Language) String

func (l Language) String() string

func (*Language) UnmarshalJSON

func (l *Language) UnmarshalJSON(data []byte) error

type LastCardDownload

type LastCardDownload struct {
	Verified         bool     `aper:"-" json:"verified"`
	LastCardDownLoad TimeReal `json:"last_card_download"`
}

Appendix 1 2.89

type LengthOfFollowingData

type LengthOfFollowingData uint16

Appendix 1 2.89a

type LoadType

type LoadType uint8

Appendix 1 2.90a

type ManualInputFlag

type ManualInputFlag byte

Appendix 1 2.93

type ManufacturerCode

type ManufacturerCode byte

Appendix 1 2.94

type ManufacturerSpecificEventFaultData

type ManufacturerSpecificEventFaultData struct {
	ManufacturerCode              ManufacturerCode `json:"manufacturer_code"`
	ManufacturerSpecificErrorCode [3]byte          `json:"manufacturer_specific_error_code"`
}

Appendix 1 2.95

type MemberStateCertificateFirstGen

type MemberStateCertificateFirstGen CertificateFirstGen

Appendix 1 2.96

func (MemberStateCertificateFirstGen) MarshalJSON

func (c MemberStateCertificateFirstGen) MarshalJSON() ([]byte, error)

type MemberStateCertificateRecordArray

type MemberStateCertificateRecordArray struct {
	RecordType  RecordType                        `json:"record_type"`
	RecordSize  uint16                            `json:"record_size"`
	NoOfRecords uint16                            `json:"no_of_records"`
	Records     []MemberStateCertificateSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.97

type MemberStateCertificateSecondGen

type MemberStateCertificateSecondGen CertificateSecondGen

func (MemberStateCertificateSecondGen) MarshalJSON

func (c MemberStateCertificateSecondGen) MarshalJSON() ([]byte, error)

type MonthYear

type MonthYear BCDString // helper type for json marshaling

func (MonthYear) Decode

func (my MonthYear) Decode() (month int, year int)

func (MonthYear) MarshalJSON

func (my MonthYear) MarshalJSON() ([]byte, error)

type Name

type Name struct {
	CodePage byte
	Name     [35]byte
}

Appendix 1 2.99

func (Name) MarshalJSON

func (n Name) MarshalJSON() ([]byte, error)

func (Name) String

func (n Name) String() string

type NationAlpha

type NationAlpha [3]byte

Appendix 1 2.100

func (NationAlpha) MarshalJSON

func (n NationAlpha) MarshalJSON() ([]byte, error)

type NationNumeric

type NationNumeric byte

Appendix 1 2.101

type NoOfBorderCrossingRecords

type NoOfBorderCrossingRecords uint16

Appendix 1 2.101a

type NoOfCardPlaceRecordsFirstGen

type NoOfCardPlaceRecordsFirstGen byte

Appendix 1 2.104

type NoOfCardPlaceRecordsSecondGen

type NoOfCardPlaceRecordsSecondGen uint16

type NoOfCardVehicleRecords

type NoOfCardVehicleRecords uint16

Appendix 1 2.105

type NoOfCardVehicleUnitRecords

type NoOfCardVehicleUnitRecords uint16

Appendix 1 2.106

type NoOfEventsPerType

type NoOfEventsPerType byte

Appendix 1 2.109

type NoOfFaultsPerType

type NoOfFaultsPerType byte

Appendix 1 2.110

type NoOfGNSSADRecords

type NoOfGNSSADRecords uint16

Appendix 1 2.111

type NoOfLoadTypeEntryRecords

type NoOfLoadTypeEntryRecords uint16

Appendix 1 2.112a

type NoOfLoadUnloadRecords

type NoOfLoadUnloadRecords uint16

Appendix 1 2.111a

type NoOfSpecificConditionRecords

type NoOfSpecificConditionRecords uint16

Appendix 1 2.112

type OdometerShort

type OdometerShort [3]byte

Appendix 1 2.113

func (OdometerShort) Decode

func (o OdometerShort) Decode() int

func (OdometerShort) MarshalJSON

func (o OdometerShort) MarshalJSON() ([]byte, error)

func (*OdometerShort) UnmarshalJSON

func (o *OdometerShort) UnmarshalJSON(data []byte) error

type OdometerValueMidnight

type OdometerValueMidnight OdometerShort

Appendix 1 2.114

func (OdometerValueMidnight) Decode

func (v OdometerValueMidnight) Decode() int

func (OdometerValueMidnight) MarshalJSON

func (v OdometerValueMidnight) MarshalJSON() ([]byte, error)

func (*OdometerValueMidnight) UnmarshalJSON

func (v *OdometerValueMidnight) UnmarshalJSON(data []byte) error

type OdometerValueMidnightRecordArray

type OdometerValueMidnightRecordArray struct {
	RecordType  RecordType              `json:"record_type"`
	RecordSize  uint16                  `json:"record_size"`
	NoOfRecords uint16                  `json:"no_of_records"`
	Records     []OdometerValueMidnight `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.115

type OperationType

type OperationType uint8

Appendix 1 2.114a

type OverspeedNumber

type OverspeedNumber byte

Appendix 1 2.116

type PlaceAuthRecord

type PlaceAuthRecord struct {
	EntryTime                TimeReal                         `json:"entry_time"`
	EntryTypeDailyWorkPeriod EntryTypeDailyWorkPeriodFirstGen `json:"entry_type_daily_work_period"`
	DailyWorkPeriodCountry   NationNumeric                    `json:"daily_work_period_country"`
	DailyWorkPeriodRegion    RegionNumeric                    `json:"daily_work_period_region"`
	VehicleOdometerValue     OdometerShort                    `json:"vehicle_odometer_value"`
	EntryGNSSPlaceAuthRecord GNSSPlaceAuthRecord              `json:"entry_gnss_place_auth_record"`
}

Appendix 1 2.116a

type PlaceAuthStatusRecord

type PlaceAuthStatusRecord struct {
	EntryTime            TimeReal                     `json:"entry_time"`
	AuthenticationStatus PositionAuthenticationStatus `json:"authentication_status"`
}

Appendix 1 2.116b

type PlaceRecordFirstGen

type PlaceRecordFirstGen struct {
	EntryTime                TimeReal                         `json:"entry_time"`
	EntryTypeDailyWorkPeriod EntryTypeDailyWorkPeriodFirstGen `json:"entry_type_daily_work_period"`
	DailyWorkPeriodCountry   NationNumeric                    `json:"daily_work_period_country"`
	DailyWorkPeriodRegion    RegionNumeric                    `json:"daily_work_period_region"`
	VehicleOdometerValue     OdometerShort                    `json:"vehicle_odometer_value"`
}

Appendix 1 2.117

type PlaceRecordSecondGen

type PlaceRecordSecondGen struct {
	EntryTime                TimeReal                         `json:"entry_time"`
	EntryTypeDailyWorkPeriod EntryTypeDailyWorkPeriodFirstGen `json:"entry_type_daily_work_period"`
	DailyWorkPeriodCountry   NationNumeric                    `json:"daily_work_period_country"`
	DailyWorkPeriodRegion    RegionNumeric                    `json:"daily_work_period_region"`
	VehicleOdometerValue     OdometerShort                    `json:"vehicle_odometer_value"`
	EntryGNSSPlaceRecord     GNSSPlaceRecord                  `json:"entry_gnss_place_record"`
}

type PositionAuthenticationStatus

type PositionAuthenticationStatus byte

Appendix 1 2.117a

type PreviousVehicleInfoFirstGen

type PreviousVehicleInfoFirstGen struct {
	VehicleRegistrationIdentification VehicleRegistrationIdentification `json:"vehicle_registration_identification"`
	CardWithdrawalTime                TimeReal                          `json:"card_withdrawal_time"`
}

Appendix 1 2.118

type PreviousVehicleInfoSecondGen

type PreviousVehicleInfoSecondGen struct {
	VehicleRegistrationIdentification VehicleRegistrationIdentification `json:"vehicle_registration_identification"`
	CardWithdrawalTime                TimeReal                          `json:"card_withdrawal_time"`
	VuGeneration                      Generation                        `json:"vu_generation"`
}

type PublicKey

type PublicKey struct {
	RsaKeyModulus        RSAKeyModulus
	RsaKeyPublicExponent RSAKeyPublicExponent
}

Appendix 1 2.119

type RSAKeyModulus

type RSAKeyModulus [128]byte

Appendix 1 2.124

type RSAKeyPrivateExponent

type RSAKeyPrivateExponent [128]byte

Appendix 1 2.125

type RSAKeyPublicExponent

type RSAKeyPublicExponent [8]byte

Appendix 1 2.126

type RecordType

type RecordType byte

Appendix 1 2.120

type RegionNumeric

type RegionNumeric byte

Appendix 1 2.122

type RemoteCommunicationModuleSerialNumber

type RemoteCommunicationModuleSerialNumber ExtendedSerialNumberSecondGen

Appendix 1 2.123

type SealDataVu

type SealDataVu [5]struct {
	SealRecord SealRecord `json:"seal_record"`
}

Appendix 1 2.129

type SealRecord

type SealRecord struct {
	EquipmentType          EquipmentType          `json:"equipment_type"`
	ExtendedSealIdentifier ExtendedSealIdentifier `json:"extended_seal_identifier"`
}

Appendix 1 2.130

type SensorApprovalNumberFirstGen

type SensorApprovalNumberFirstGen [8]byte

Appendix 1 2.131

type SensorApprovalNumberSecondGen

type SensorApprovalNumberSecondGen [16]byte

type SensorExternalGNSSApprovalNumber

type SensorExternalGNSSApprovalNumber [16]byte

Appendix 1 2.132

func (SensorExternalGNSSApprovalNumber) MarshalJSON

func (n SensorExternalGNSSApprovalNumber) MarshalJSON() ([]byte, error)

func (SensorExternalGNSSApprovalNumber) String

type SensorExternalGNSSCoupledRecord

type SensorExternalGNSSCoupledRecord struct {
	SensorSerialNumber   SensorGNSSSerialNumber           `json:"sensor_serial_number"`
	SensorApprovalNumber SensorExternalGNSSApprovalNumber `json:"sensor_approval_number"`
	SensorCouplingDate   SensorGNSSCouplingDate           `json:"sensor_coupling_date"`
}

Appendix 1 2.133

type SensorGNSSCouplingDate

type SensorGNSSCouplingDate TimeReal

Appendix 1 2.138

func (SensorGNSSCouplingDate) Decode

func (d SensorGNSSCouplingDate) Decode() time.Time

func (SensorGNSSCouplingDate) MarshalJSON

func (d SensorGNSSCouplingDate) MarshalJSON() ([]byte, error)

type SensorGNSSSerialNumber

type SensorGNSSSerialNumber ExtendedSerialNumberSecondGen

Appendix 1 2.139

type SensorPaired

type SensorPaired struct {
	SensorSerialNumber     SensorSerialNumberFirstGen   `json:"sensor_serial_number"`
	SensorApprovalNumber   SensorApprovalNumberFirstGen `json:"sensor_approval_number"`
	SensorPairingDateFirst SensorPairingDate            `json:"sensor_pairing_date_first"`
}

Appendix 1 2.144

type SensorPairedRecord

type SensorPairedRecord struct {
	SensorSerialNumber   SensorSerialNumberSecondGen   `json:"sensor_serial_number"`
	SensorApprovalNumber SensorApprovalNumberSecondGen `json:"sensor_approval_number"`
	SensorPairingDate    SensorPairingDate             `json:"sensor_pairing_date"`
}

Appendix 1 2.145

type SensorPairingDate

type SensorPairingDate TimeReal

Appendix 1 2.146

func (SensorPairingDate) Decode

func (d SensorPairingDate) Decode() time.Time

func (SensorPairingDate) MarshalJSON

func (d SensorPairingDate) MarshalJSON() ([]byte, error)

type SensorSerialNumberFirstGen

type SensorSerialNumberFirstGen ExtendedSerialNumberFirstGen

Appendix 1 2.148

type SensorSerialNumberSecondGen

type SensorSerialNumberSecondGen ExtendedSerialNumberSecondGen

type SignatureFirstGen

type SignatureFirstGen struct {
	DecodedSignature *DecodedSignatureFirstGen `aper:"-" json:"-"`
	Signature        [128]byte                 `json:"signature,omitempty"` // tag with fixed len optional
}

Appendix 1 2.149

func (*SignatureFirstGen) Decode

func (*SignatureFirstGen) Verify

func (s *SignatureFirstGen) Verify(cert CertificateFirstGen, data []byte) (bool, error)

type SignatureRecordArray

type SignatureRecordArray struct {
	RecordType  RecordType           `json:"record_type"`
	RecordSize  uint16               `json:"record_size"`
	NoOfRecords uint16               `json:"no_of_records"`
	Records     []SignatureSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.150

type SignatureSecondGen

type SignatureSecondGen struct {
	DecodedSignature *DecodedSignatureSecondGen `aper:"-" json:"-"`
	Signature        []byte                     `aper:"size=64..132" json:"signature,omitempty"`
}

func (*SignatureSecondGen) Decode

func (s *SignatureSecondGen) Decode(byteLen int) error

func (*SignatureSecondGen) Verify

func (s *SignatureSecondGen) Verify(cert CertificateSecondGen, data []byte) (bool, error)

type SimilarEventsNumber

type SimilarEventsNumber byte

Appendix 1 2.151

type SpecificConditionRecord

type SpecificConditionRecord struct {
	EntryTime             TimeReal              `json:"entry_time"`
	SpecificConditionType SpecificConditionType `json:"specific_condition_type"`
}

Appendix 1 2.152

type SpecificConditionType

type SpecificConditionType byte

Appendix 1 2.154

type SpecificConditionsFirstGen

type SpecificConditionsFirstGen struct {
	Verified                     bool                         `aper:"-" json:"verified"`
	ConditionPointerNewestRecord NoOfSpecificConditionRecords `json:"condition_pointer_newest_record"`
	SpecificConditionRecords     []SpecificConditionRecord    `json:"specific_condition_records"`
}

Appendix 1 2.153

type SpecificConditionsSecondGen

type SpecificConditionsSecondGen struct {
	Verified                     bool                         `aper:"-" json:"verified"`
	ConditionPointerNewestRecord NoOfSpecificConditionRecords `json:"condition_pointer_newest_record"`
	SpecificConditionRecords     []SpecificConditionRecord    `aper:"size=NoOfSpecificConditionRecords" json:"specific_condition_records"`
}

type Speed

type Speed byte

Appendix 1 2.155

type SpeedAuthorised

type SpeedAuthorised Speed

Appendix 1 2.156

type SpeedAverage

type SpeedAverage Speed

Appendix 1 2.157

type SpeedMax

type SpeedMax Speed

Appendix 1 2.158

type TachographCardsGen1Suppression

type TachographCardsGen1Suppression uint16

Appendix 1 2.158a

type TimeReal

type TimeReal struct {
	Timedata [4]byte
}

Appendix 1 2.162

func (TimeReal) Decode

func (t TimeReal) Decode() time.Time

func (TimeReal) MarshalJSON

func (t TimeReal) MarshalJSON() ([]byte, error)

type TyreSize

type TyreSize [15]byte

Appendix 1 2.163

func (TyreSize) MarshalJSON

func (t TyreSize) MarshalJSON() ([]byte, error)

func (TyreSize) String

func (t TyreSize) String() string

type VehicleIdentificationNumber

type VehicleIdentificationNumber [17]byte

Appendix 1 2.164

func (VehicleIdentificationNumber) MarshalJSON

func (n VehicleIdentificationNumber) MarshalJSON() ([]byte, error)

func (VehicleIdentificationNumber) String

func (*VehicleIdentificationNumber) UnmarshalJSON

func (n *VehicleIdentificationNumber) UnmarshalJSON(data []byte) error

type VehicleIdentificationNumberRecordArray

type VehicleIdentificationNumberRecordArray struct {
	RecordType  RecordType                    `json:"record_type"`
	RecordSize  uint16                        `json:"record_size"`
	NoOfRecords uint16                        `json:"no_of_records"`
	Records     []VehicleIdentificationNumber `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.165

type VehicleRegistrationIdentification

type VehicleRegistrationIdentification struct {
	VehicleRegistrationNation NationNumeric             `json:"vehicle_registration_nation"`
	VehicleRegistrationNumber VehicleRegistrationNumber `json:"vehicle_registration_number"`
}

Appendix 1 2.166

type VehicleRegistrationIdentificationRecordArray

type VehicleRegistrationIdentificationRecordArray struct {
	RecordType  RecordType                          `json:"record_type"`
	RecordSize  uint16                              `json:"record_size"`
	NoOfRecords uint16                              `json:"no_of_records"`
	Records     []VehicleRegistrationIdentification `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.166a

type VehicleRegistrationNumber

type VehicleRegistrationNumber struct {
	CodePage         byte
	VehicleRegNumber [13]byte
}

Appendix 1 2.167

func (VehicleRegistrationNumber) MarshalJSON

func (n VehicleRegistrationNumber) MarshalJSON() ([]byte, error)

func (VehicleRegistrationNumber) String

func (n VehicleRegistrationNumber) String() string

type VehicleRegistrationNumberOrIdentificationRecordArray

type VehicleRegistrationNumberOrIdentificationRecordArray struct {
	RecordType                        RecordType                          `json:"record_type"`
	RecordSize                        uint16                              `json:"record_size"`
	NoOfRecords                       uint16                              `json:"no_of_records"`
	RecordsRegistrationNumber         []VehicleRegistrationNumber         `aper:"cond=RecordType==11,size=NoOfRecords,elementsize=RecordSize" json:"records_registration_number"`
	RecordsRegistrationIdentification []VehicleRegistrationIdentification `aper:"cond=RecordType==36,size=NoOfRecords,elementsize=RecordSize" json:"records_registration_identification"`
}

this is a terrible hack and workaround for the difference between the specs (as of July 2021 -> 2nd Gen has VehicleRegistrationIdentificationRecordArray, 2nd Gen V2 has VehicleRegistrationNumberRecordArray. Personally, I suppose it should be the other way around.) and the specs (as of February 2020 -> 2nd Gen has VehicleRegistrationNumberRecordArray, 2nd Gen V2 not there yet) and the actual data this array is supposed to support either VehicleRegistrationNumber or VehicleRegistrationIdentification and it marshals to one of the two types.

func (VehicleRegistrationNumberOrIdentificationRecordArray) MarshalJSON

type VehicleRegistrationNumberRecordArray

type VehicleRegistrationNumberRecordArray struct {
	RecordType  RecordType                  `json:"record_type"`
	RecordSize  uint16                      `json:"record_size"`
	NoOfRecords uint16                      `json:"no_of_records"`
	Records     []VehicleRegistrationNumber `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.168

type Vu

type Vu struct {
	VuDownloadInterfaceVersion   DownloadInterfaceVersion       `tv:"tag=0x7600" json:"vu_download_interface_version"`
	VuOverviewFirstGen           VuOverviewFirstGen             `tv:"tag=0x7601" json:"vu_overview_1"`
	VuOverviewSecondGen          VuOverviewSecondGen            `tv:"tag=0x7621" json:"vu_overview_2"`
	VuOverviewSecondGenV2        VuOverviewSecondGenV2          `tv:"tag=0x7631" json:"vu_overview_2_v2"`
	VuActivitiesFirstGen         []VuActivitiesFirstGen         `tv:"tag=0x7602" json:"vu_activities_1"`
	VuActivitiesSecondGen        []VuActivitiesSecondGen        `tv:"tag=0x7622" json:"vu_activities_2"`
	VuActivitiesSecondGenV2      []VuActivitiesSecondGenV2      `tv:"tag=0x7632" json:"vu_activities_2_v2"`
	VuEventsAndFaultsFirstGen    []VuEventsAndFaultsFirstGen    `tv:"tag=0x7603" json:"vu_events_and_faults_1"`
	VuEventsAndFaultsSecondGen   []VuEventsAndFaultsSecondGen   `tv:"tag=0x7623" json:"vu_events_and_faults_2"`
	VuEventsAndFaultsSecondGenV2 []VuEventsAndFaultsSecondGenV2 `tv:"tag=0x7633" json:"vu_events_and_faults_2_v2"`
	VuDetailedSpeedFirstGen      []VuDetailedSpeedFirstGen      `tv:"tag=0x7604" json:"vu_detailed_speed_1"`
	VuDetailedSpeedSecondGen     []VuDetailedSpeedSecondGen     `tv:"tag=0x7624" json:"vu_detailed_speed_2"`
	// No VuDetailedSpeedSecondGenV2! According to the specs, the tag 7634 does not exist
	VuTechnicalDataFirstGen    []VuTechnicalDataFirstGen    `tv:"tag=0x7605" json:"vu_technical_data_1"`
	VuTechnicalDataSecondGen   []VuTechnicalDataSecondGen   `tv:"tag=0x7625" json:"vu_technical_data_2"`
	VuTechnicalDataSecondGenV2 []VuTechnicalDataSecondGenV2 `tv:"tag=0x7635" json:"vu_technical_data_2_v2"`
}

VU data specs not in tlv format, but in tv (and the tags are only 2 bytes) defined in Appendix 7, 2.2.6 note that there is no assumption in the docs about how many of each of the tags appear in the vu data, so we restrict to *one* overview block in order to allow only *one* signing certificate, but do not restrict the number of all other blocks (in real data, there are regularly multiple blocks of the same type) also, there is no assumption about if there are both first and second generation data in the same dataset, so we do allow it.

func (*Vu) SignCertificateFirstGen

func (v *Vu) SignCertificateFirstGen() CertificateFirstGen

SignCertificateFirstGen returns the CertificateFirstGen to verify the signature of the first generation blocks in the Vu data it also decodes all known certificates and inserts them into the global certificate store PKsFirstGen

func (*Vu) SignCertificateSecondGen

func (v *Vu) SignCertificateSecondGen() CertificateSecondGen

SignCertificateSecondGen returns the CertificateSecondGen to verify the signature of the second generation blocks in the Vu data it also decodes all known certificates and inserts them into the global certificate store PKsSecondGen

type VuAbility

type VuAbility byte

Appendix 1 2.169

type VuActivitiesFirstGen

type VuActivitiesFirstGen struct {
	Verified                   bool                               `aper:"-" json:"verified"`
	TimeReal                   TimeReal                           `json:"time_real"`
	OdometerValueMidnight      OdometerValueMidnight              `json:"odometer_value_midnight"`
	VuCardIWData               VuCardIWData                       `json:"vu_card_iw_data"`
	VuActivityDailyData        VuActivityDailyDataFirstGen        `json:"vu_activity_daily_data"`
	VuPlaceDailyWorkPeriodData VuPlaceDailyWorkPeriodDataFirstGen `json:"vu_place_daily_work_period_data"`
	VuSpecificConditionData    VuSpecificConditionDataFirstGen    `json:"vu_specific_condition_data"`
	Signature                  SignatureFirstGen                  `json:"signature"`
}

func (VuActivitiesFirstGen) VerifyFirstGen

func (a VuActivitiesFirstGen) VerifyFirstGen(cert CertificateFirstGen, data []byte) (bool, error)

type VuActivitiesSecondGen

type VuActivitiesSecondGen struct {
	Verified                          bool                              `aper:"-" json:"verified"`
	DateOfDayDownloadedRecordArray    DateOfDayDownloadedRecordArray    `json:"date_of_day_downloaded_record_array"`
	OdometerValueMidnightRecordArray  OdometerValueMidnightRecordArray  `json:"odometer_value_midnight_record_array"`
	VuCardIWRecordArray               VuCardIWRecordArray               `json:"vu_card_iw_record_array"`
	VuActivityDailyRecordArray        VuActivityDailyRecordArray        `json:"vu_activity_daily_record_array"`
	VuPlaceDailyWorkPeriodRecordArray VuPlaceDailyWorkPeriodRecordArray `json:"vu_place_daily_work_period_record_array"`
	VuGNSSADRecordArray               VuGNSSADRecordArray               `json:"vu_gnss_ad_record_array"`
	VuSpecificConditionRecordArray    VuSpecificConditionRecordArray    `json:"vu_specific_condition_record_array"`
	SignatureRecordArray              SignatureRecordArray              `json:"signature_record_array"`
}

func (VuActivitiesSecondGen) VerifySecondGen

func (a VuActivitiesSecondGen) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuActivitiesSecondGenV2

type VuActivitiesSecondGenV2 struct {
	Verified                          bool                                `aper:"-" json:"verified"`
	DateOfDayDownloadedRecordArray    DateOfDayDownloadedRecordArray      `json:"date_of_day_downloaded_record_array"`
	OdometerValueMidnightRecordArray  OdometerValueMidnightRecordArray    `json:"odometer_value_midnight_record_array"`
	VuCardIWRecordArray               VuCardIWRecordArray                 `json:"vu_card_iw_record_array"`
	VuActivityDailyRecordArray        VuActivityDailyRecordArray          `json:"vu_activity_daily_record_array"`
	VuPlaceDailyWorkPeriodRecordArray VuPlaceDailyWorkPeriodRecordArrayV2 `json:"vu_place_daily_work_period_record_array"`
	VuGNSSADRecordArray               VuGNSSADRecordArrayV2               `json:"vu_gnss_ad_record_array"`
	VuSpecificConditionRecordArray    VuSpecificConditionRecordArray      `json:"vu_specific_condition_record_array"`
	VuBorderCrossingRecordArray       VuBorderCrossingRecordArray         `json:"vu_border_crossing_record_array"`
	VuLoadUnloadRecordArray           VuLoadUnloadRecordArray             `json:"vu_load_unload_record_array"`
	SignatureRecordArray              SignatureRecordArray                `json:"signature_record_array"`
}

func (VuActivitiesSecondGenV2) VerifySecondGen

func (a VuActivitiesSecondGenV2) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuActivityDailyDataFirstGen

type VuActivityDailyDataFirstGen struct {
	NoOfActivityChanges uint16               `json:"no_of_activity_changes"`
	ActivityChangeInfo  []ActivityChangeInfo `aper:"size=NoOfActivityChanges" json:"activity_change_info"`
}

Appendix 1 2.170

type VuActivityDailyRecordArray

type VuActivityDailyRecordArray struct {
	RecordType  RecordType           `json:"record_type"`
	RecordSize  uint16               `json:"record_size"`
	NoOfRecords uint16               `json:"no_of_records"`
	Records     []ActivityChangeInfo `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.171

type VuApprovalNumberFirstGen

type VuApprovalNumberFirstGen [8]byte

Appendix 1 2.172

func (VuApprovalNumberFirstGen) MarshalJSON

func (n VuApprovalNumberFirstGen) MarshalJSON() ([]byte, error)

func (VuApprovalNumberFirstGen) String

func (n VuApprovalNumberFirstGen) String() string

type VuApprovalNumberSecondGen

type VuApprovalNumberSecondGen [16]byte

func (VuApprovalNumberSecondGen) MarshalJSON

func (n VuApprovalNumberSecondGen) MarshalJSON() ([]byte, error)

func (VuApprovalNumberSecondGen) String

func (n VuApprovalNumberSecondGen) String() string

type VuBorderCrossingRecord

type VuBorderCrossingRecord struct {
	CardNumberAndGenDriverSlot   FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot"`
	CardNumberAndGenCodriverSlot FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot"`
	CountryLeft                  NationNumeric               `json:"country_left"`
	CountryEntered               NationNumeric               `json:"country_entered"`
	GNSSPlaceAuthRecord          GNSSPlaceAuthRecord         `json:"gnss_place_auth_record"`
	VehicleOdometerValue         OdometerShort               `json:"vehicle_odometer_value"`
}

Appendix 1 2.203a

type VuBorderCrossingRecordArray

type VuBorderCrossingRecordArray struct {
	RecordType  RecordType               `json:"record_type"`
	RecordSize  uint16                   `json:"record_size"`
	NoOfRecords uint16                   `json:"no_of_records"`
	Records     []VuBorderCrossingRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.203b

type VuCalibrationData

type VuCalibrationData struct {
	NoOfVuCalibrationRecords byte                          `json:"no_of_vu_calibration_records"`
	VuCalibrationRecords     []VuCalibrationRecordFirstGen `aper:"size=NoOfVuCalibrationRecords" json:"vu_calibration_records"`
}

Appendix 1 2.173

type VuCalibrationRecordArray

type VuCalibrationRecordArray struct {
	RecordType  RecordType                     `json:"record_type"`
	RecordSize  uint16                         `json:"record_size"`
	NoOfRecords uint16                         `json:"no_of_records"`
	Records     []VuCalibrationRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.175

type VuCalibrationRecordArrayV2

type VuCalibrationRecordArrayV2 struct {
	RecordType  RecordType                       `json:"record_type"`
	RecordSize  uint16                           `json:"record_size"`
	NoOfRecords uint16                           `json:"no_of_records"`
	Records     []VuCalibrationRecordSecondGenV2 `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

not explicitely defined, but since there is a VuCalibrationRecordsSecondGenV2, we need it

type VuCalibrationRecordFirstGen

type VuCalibrationRecordFirstGen struct {
	CalibrationPurpose                CalibrationPurpose                `json:"calibration_purpose"`
	WorkshopName                      Name                              `json:"workshop_name"`
	WorkshopAddress                   Address                           `json:"workshop_address"`
	WorkshopCardNumber                FullCardNumber                    `json:"workshop_card_number"`
	WorkshopCardExpiryDate            TimeReal                          `json:"workshop_card_expiry_date"`
	VehicleIdentificationNumber       VehicleIdentificationNumber       `json:"vehicle_identification_number"`
	VehicleRegistrationIdentification VehicleRegistrationIdentification `json:"vehicle_registration_identification"`
	WVehicleCharacteristicConstant    WVehicleCharacteristicConstant    `json:"w_vehicle_characteristic_constant"`
	KConstantOfRecordingEquipment     KConstantOfRecordingEquipment     `json:"k_constant_of_recording_equipment"`
	LTyreCircumference                LTyreCircumference                `json:"l_tyre_circumference"`
	TyreSize                          TyreSize                          `json:"tyre_size"`
	AuthorisedSpeed                   SpeedAuthorised                   `json:"authorised_speed"`
	OldOdometerValue                  OdometerShort                     `json:"old_odometer_value"`
	NewOdometerValue                  OdometerShort                     `json:"new_odometer_value"`
	OldTimeValue                      TimeReal                          `json:"old_time_value"`
	NewTimeValue                      TimeReal                          `json:"new_time_value"`
	NextCalibrationDate               TimeReal                          `json:"next_calibration_date"`
}

Appendix 1 2.174

type VuCalibrationRecordSecondGen

type VuCalibrationRecordSecondGen struct {
	CalibrationPurpose                CalibrationPurpose                `json:"calibration_purpose"`
	WorkshopName                      Name                              `json:"workshop_name"`
	WorkshopAddress                   Address                           `json:"workshop_address"`
	WorkshopCardNumber                FullCardNumber                    `json:"workshop_card_number"`
	WorkshopCardExpiryDate            TimeReal                          `json:"workshop_card_expiry_date"`
	VehicleIdentificationNumber       VehicleIdentificationNumber       `json:"vehicle_identification_number"`
	VehicleRegistrationIdentification VehicleRegistrationIdentification `json:"vehicle_registration_identification"`
	WVehicleCharacteristicConstant    WVehicleCharacteristicConstant    `json:"w_vehicle_characteristic_constant"`
	KConstantOfRecordingEquipment     KConstantOfRecordingEquipment     `json:"k_constant_of_recording_equipment"`
	LTyreCircumference                LTyreCircumference                `json:"l_tyre_circumference"`
	TyreSize                          TyreSize                          `json:"tyre_size"`
	AuthorisedSpeed                   SpeedAuthorised                   `json:"authorised_speed"`
	OldOdometerValue                  OdometerShort                     `json:"old_odometer_value"`
	NewOdometerValue                  OdometerShort                     `json:"new_odometer_value"`
	OldTimeValue                      TimeReal                          `json:"old_time_value"`
	NewTimeValue                      TimeReal                          `json:"new_time_value"`
	NextCalibrationDate               TimeReal                          `json:"next_calibration_date"`
	SealDataVu                        SealDataVu                        `json:"seal_data_vu"`
}

type VuCalibrationRecordSecondGenV2

type VuCalibrationRecordSecondGenV2 struct {
	CalibrationPurpose                CalibrationPurpose                    `json:"calibration_purpose"`
	WorkshopName                      Name                                  `json:"workshop_name"`
	WorkshopAddress                   Address                               `json:"workshop_address"`
	WorkshopCardNumber                FullCardNumber                        `json:"workshop_card_number"`
	WorkshopCardExpiryDate            TimeReal                              `json:"workshop_card_expiry_date"`
	VehicleIdentificationNumber       VehicleIdentificationNumber           `json:"vehicle_identification_number"`
	VehicleRegistrationIdentification VehicleRegistrationIdentification     `json:"vehicle_registration_identification"`
	WVehicleCharacteristicConstant    WVehicleCharacteristicConstant        `json:"w_vehicle_characteristic_constant"`
	KConstantOfRecordingEquipment     KConstantOfRecordingEquipment         `json:"k_constant_of_recording_equipment"`
	LTyreCircumference                LTyreCircumference                    `json:"l_tyre_circumference"`
	TyreSize                          TyreSize                              `json:"tyre_size"`
	AuthorisedSpeed                   SpeedAuthorised                       `json:"authorised_speed"`
	OldOdometerValue                  OdometerShort                         `json:"old_odometer_value"`
	NewOdometerValue                  OdometerShort                         `json:"new_odometer_value"`
	OldTimeValue                      TimeReal                              `json:"old_time_value"`
	NewTimeValue                      TimeReal                              `json:"new_time_value"`
	NextCalibrationDate               TimeReal                              `json:"next_calibration_date"`
	SensorSerialNumber                SensorSerialNumberSecondGen           `json:"sensor_serial_number"`
	SensorGNSSSerialNumber            SensorGNSSSerialNumber                `json:"sensor_gnss_serial_number"`
	RCMSerialNumber                   RemoteCommunicationModuleSerialNumber `json:"rcm_serial_number"`
	SealDataVu                        SealDataVu                            `json:"seal_data_vu"`
	ByDefaultLoadType                 LoadType                              `json:"by_default_load_type"`
	CalibrationCountry                NationNumeric                         `json:"calibration_country"`
	CalibrationCountryTimestamp       TimeReal                              `json:"calibration_country_timestamp"`
}

type VuCardIWData

type VuCardIWData struct {
	NoOfIWRecords   uint16                   `json:"no_of_iw_records"`
	VuCardIWRecords []VuCardIWRecordFirstGen `aper:"size=NoOfIWRecords" json:"vu_card_iw_records"`
}

Appendix 1 2.176

type VuCardIWRecordArray

type VuCardIWRecordArray struct {
	RecordType  RecordType                `json:"record_type"`
	RecordSize  uint16                    `json:"record_size"`
	NoOfRecords uint16                    `json:"no_of_records"`
	Records     []VuCardIWRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.178

type VuCardIWRecordFirstGen

type VuCardIWRecordFirstGen struct {
	CardHolderName                   HolderName                  `json:"card_holder_name"`
	FullCardNumber                   FullCardNumber              `json:"full_card_number"`
	CardExpiryDate                   TimeReal                    `json:"card_expiry_date"`
	CardInsertionTime                TimeReal                    `json:"card_insertion_time"`
	VehicleOdometerValueAtInsertion  OdometerShort               `json:"vehicle_odometer_value_at_insertion"`
	CardSlotNumber                   CardSlotNumber              `json:"card_slot_number"`
	CardWithdrawalTime               TimeReal                    `json:"card_withdrawal_time"`
	VehicleOdometerValueAtWithdrawal OdometerShort               `json:"vehicle_odometer_value_at_withdrawal"`
	PreviousVehicleInfo              PreviousVehicleInfoFirstGen `json:"previous_vehicle_info"`
	ManualInputFlag                  ManualInputFlag             `json:"manual_input_flag"`
}

Appendix 1 2.177

type VuCardIWRecordSecondGen

type VuCardIWRecordSecondGen struct {
	CardHolderName                   HolderName                   `json:"card_holder_name"`
	FullCardNumberAndGeneration      FullCardNumberAndGeneration  `json:"full_card_number_and_generation"`
	CardExpiryDate                   TimeReal                     `json:"card_expiry_date"`
	CardInsertionTime                TimeReal                     `json:"card_insertion_time"`
	VehicleOdometerValueAtInsertion  OdometerShort                `json:"vehicle_odometer_value_at_insertion"`
	CardSlotNumber                   CardSlotNumber               `json:"card_slot_number"`
	CardWithdrawalTime               TimeReal                     `json:"card_withdrawal_time"`
	VehicleOdometerValueAtWithdrawal OdometerShort                `json:"vehicle_odometer_value_at_withdrawal"`
	PreviousVehicleInfo              PreviousVehicleInfoSecondGen `json:"previous_vehicle_info"`
	ManualInputFlag                  ManualInputFlag              `json:"manual_input_flag"`
}

type VuCardRecord

type VuCardRecord struct {
	CardNumberAndGenerationInformation FullCardNumberAndGeneration   `json:"card_number_and_generation_information"`
	CardExtendedSerialNumber           ExtendedSerialNumberSecondGen `json:"card_extended_serial_number"`
	CardStructureVersion               CardStructureVersion          `json:"card_stucture_version"`
	CardNumber                         CardNumber                    `json:"card_number"`
}

Appendix 1 2.179

type VuCardRecordArray

type VuCardRecordArray struct {
	RecordType  RecordType     `json:"record_type"`
	RecordSize  uint16         `json:"record_size"`
	NoOfRecords uint16         `json:"no_of_records"`
	Records     []VuCardRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.180

type VuCertificateFirstGen

type VuCertificateFirstGen CertificateFirstGen

Appendix 1 2.181

func (VuCertificateFirstGen) MarshalJSON

func (c VuCertificateFirstGen) MarshalJSON() ([]byte, error)

type VuCertificateRecordArray

type VuCertificateRecordArray struct {
	RecordType  RecordType               `json:"record_type"`
	RecordSize  uint16                   `json:"record_size"`
	NoOfRecords uint16                   `json:"no_of_records"`
	Records     []VuCertificateSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.182

type VuCertificateSecondGen

type VuCertificateSecondGen CertificateSecondGen

func (VuCertificateSecondGen) MarshalJSON

func (c VuCertificateSecondGen) MarshalJSON() ([]byte, error)

type VuCompanyLocksDataFirstGen

type VuCompanyLocksDataFirstGen struct {
	NoOfLocks             byte                           `json:"no_of_locks"`
	VuCompanyLocksRecords []VuCompanyLocksRecordFirstGen `aper:"size=NoOfLocks" json:"vu_company_locks_records"`
}

Appendix 1 2.183

type VuCompanyLocksRecordArray

type VuCompanyLocksRecordArray struct {
	RecordType  RecordType                      `json:"record_type"`
	RecordSize  uint16                          `json:"record_size"`
	NoOfRecords uint16                          `json:"no_of_records"`
	Records     []VuCompanyLocksRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.185

type VuCompanyLocksRecordFirstGen

type VuCompanyLocksRecordFirstGen struct {
	LockInTime        TimeReal       `json:"lock_in_time"`
	LockOutTime       TimeReal       `json:"lock_out_time"`
	CompanyName       Name           `json:"company_name"`
	CompanyAddress    Address        `json:"company_address"`
	CompanyCardNumber FullCardNumber `json:"company_card_number"`
}

Appendix 1 2.184

type VuCompanyLocksRecordSecondGen

type VuCompanyLocksRecordSecondGen struct {
	LockInTime                     TimeReal                    `json:"lock_in_time"`
	LockOutTime                    TimeReal                    `json:"lock_out_time"`
	CompanyName                    Name                        `json:"company_name"`
	CompanyAddress                 Address                     `json:"company_address"`
	CompanyCardNumberAndGeneration FullCardNumberAndGeneration `json:"company_card_number_and_generation"`
}

type VuConfiguration

type VuConfiguration struct {
	Verified      bool   `aper:"-" json:"verified"`
	Configuration []byte `aper:"size=VuConfigurationLengthRange" json:"configuration"`
}

there is absolutely no information of how this looks like in the specs, so it is just a bunch of bytes the length is fixed according to the specs to 3072 bytes, which is the contents of the VuConfigurationLengthRange field

type VuConfigurationLengthRange

type VuConfigurationLengthRange uint16

Appendix 1 2.185a

type VuControlActivityDataFirstGen

type VuControlActivityDataFirstGen struct {
	NoOfControls             byte                              `json:"no_of_controls"`
	VuControlActivityRecords []VuControlActivityRecordFirstGen `aper:"size=NoOfControls" json:"vu_control_activity_records"`
}

Appendix 1 2.186

type VuControlActivityRecordArray

type VuControlActivityRecordArray struct {
	RecordType  RecordType                         `json:"record_type"`
	RecordSize  uint16                             `json:"record_size"`
	NoOfRecords uint16                             `json:"no_of_records"`
	Records     []VuControlActivityRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.188

type VuControlActivityRecordFirstGen

type VuControlActivityRecordFirstGen struct {
	ControlType             ControlType    `json:"control_type"`
	ControlTime             TimeReal       `json:"control_time"`
	ControlCardNumber       FullCardNumber `json:"control_card_number"`
	DownloadPeriodBeginTime TimeReal       `json:"download_period_begin_time"`
	DownloadPeriodEndTime   TimeReal       `json:"download_period_end_time"`
}

Appendix 1 2.187

type VuControlActivityRecordSecondGen

type VuControlActivityRecordSecondGen struct {
	ControlType                    ControlType                 `json:"control_type"`
	ControlTime                    TimeReal                    `json:"control_time"`
	ControlCardNumberAndGeneration FullCardNumberAndGeneration `json:"control_card_number_and_generation"`
	DownloadPeriodBeginTime        TimeReal                    `json:"download_period_begin_time"`
	DownloadPeriodEndTime          TimeReal                    `json:"download_period_end_time"`
}

type VuDataBlockCounter

type VuDataBlockCounter BCDString

Appendix 1 2.189

func (VuDataBlockCounter) Decode

func (bc VuDataBlockCounter) Decode() (int, error)

func (VuDataBlockCounter) MarshalJSON

func (bc VuDataBlockCounter) MarshalJSON() ([]byte, error)

func (*VuDataBlockCounter) UnmarshalJSON

func (bc *VuDataBlockCounter) UnmarshalJSON(data []byte) error

type VuDetailedSpeedBlock

type VuDetailedSpeedBlock struct {
	SpeedBlockBeginDate TimeReal  `json:"speed_block_begin_date"`
	SpeedsPerSecond     [60]Speed `json:"speeds_per_second"`
}

Appendix 1 2.190

type VuDetailedSpeedBlockRecordArray

type VuDetailedSpeedBlockRecordArray struct {
	RecordType  RecordType             `json:"record_type"`
	RecordSize  uint16                 `json:"record_size"`
	NoOfRecords uint16                 `json:"no_of_records"`
	Records     []VuDetailedSpeedBlock `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.191

type VuDetailedSpeedData

type VuDetailedSpeedData struct {
	NoOfSpeedBlocks       uint16                 `json:"no_of_speed_blocks"`
	VuDetailedSpeedBlocks []VuDetailedSpeedBlock `aper:"size=NoOfSpeedBlocks" json:"vu_detailed_speed_blocks"`
}

Appendix 1 2.192

type VuDetailedSpeedFirstGen

type VuDetailedSpeedFirstGen struct {
	Verified            bool                `aper:"-" json:"verified"`
	VuDetailedSpeedData VuDetailedSpeedData `json:"vu_detailed_speed_data"`
	Signature           SignatureFirstGen   `json:"signature"`
}

func (VuDetailedSpeedFirstGen) VerifyFirstGen

func (s VuDetailedSpeedFirstGen) VerifyFirstGen(cert CertificateFirstGen, data []byte) (bool, error)

type VuDetailedSpeedSecondGen

type VuDetailedSpeedSecondGen struct {
	Verified                        bool                            `aper:"-" json:"verified"`
	VuDetailedSpeedBlockRecordArray VuDetailedSpeedBlockRecordArray `json:"vu_detailed_speed_block_record_array"`
	SignatureRecordArray            SignatureRecordArray            `json:"signature_record_array"`
}

func (VuDetailedSpeedSecondGen) VerifySecondGen

func (s VuDetailedSpeedSecondGen) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuDigitalMapVersion

type VuDigitalMapVersion [12]byte

Appendix 1 2.192a

func (VuDigitalMapVersion) MarshalJSON

func (m VuDigitalMapVersion) MarshalJSON() ([]byte, error)

func (VuDigitalMapVersion) String

func (m VuDigitalMapVersion) String() string

type VuDownloadActivityDataFirstGen

type VuDownloadActivityDataFirstGen struct {
	DownloadingTime       TimeReal       `json:"downloading_time"`
	FullCardNumber        FullCardNumber `json:"full_card_number"`
	CompanyOrWorkshopName Name           `json:"company_or_workshop_name"`
}

Appendix 1 2.195

type VuDownloadActivityDataRecordArray

type VuDownloadActivityDataRecordArray struct {
	RecordType  RecordType                        `json:"record_type"`
	RecordSize  uint16                            `json:"record_size"`
	NoOfRecords uint16                            `json:"no_of_records"`
	Records     []VuDownloadActivityDataSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.196

type VuDownloadActivityDataSecondGen

type VuDownloadActivityDataSecondGen struct {
	DownloadingTime             TimeReal                    `json:"downloading_time"`
	FullCardNumberAndGeneration FullCardNumberAndGeneration `json:"full_card_number_and_generation"`
	CompanyOrWorkshopName       Name                        `json:"company_or_workshop_name"`
}

type VuDownloadablePeriod

type VuDownloadablePeriod struct {
	MinDownloadableTime TimeReal `json:"min_downloadable_time"`
	MaxDownloadableTime TimeReal `json:"max_downloadable_time"`
}

Appendix 1 2.193

type VuDownloadablePeriodRecordArray

type VuDownloadablePeriodRecordArray struct {
	RecordType  RecordType             `json:"record_type"`
	RecordSize  uint16                 `json:"record_size"`
	NoOfRecords uint16                 `json:"no_of_records"`
	Records     []VuDownloadablePeriod `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.194

type VuEventData

type VuEventData struct {
	NoOfVuEvents   byte                    `json:"no_of_vu_events"`
	VuEventRecords []VuEventRecordFirstGen `aper:"size=NoOfVuEvents" json:"vu_event_records"`
}

Appendix 1 2.197

type VuEventRecordArray

type VuEventRecordArray struct {
	RecordType  RecordType               `json:"record_type"`
	RecordSize  uint16                   `json:"record_size"`
	NoOfRecords uint16                   `json:"no_of_records"`
	Records     []VuEventRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.199

type VuEventRecordFirstGen

type VuEventRecordFirstGen struct {
	EventType                   EventFaultType          `json:"event_type"`
	EventRecordPurpose          EventFaultRecordPurpose `json:"event_record_purpose"`
	EventBeginTime              TimeReal                `json:"event_begin_time"`
	EventEndTime                TimeReal                `json:"event_end_time"`
	CardNumberDriverSlotBegin   FullCardNumber          `json:"card_number_driver_slot_begin"`
	CardNumberCodriverSlotBegin FullCardNumber          `json:"card_number_codriver_slot_begin"`
	CardNumberDriverSlotEnd     FullCardNumber          `json:"card_number_driver_slot_end"`
	CardNumberCodriverSlotEnd   FullCardNumber          `json:"card_number_codriver_slot_end"`
	SimilarEventsNumber         SimilarEventsNumber     `json:"similar_events_number"`
}

Appendix 1 2.198

type VuEventRecordSecondGen

type VuEventRecordSecondGen struct {
	EventType                          EventFaultType                     `json:"event_type"`
	EventRecordPurpose                 EventFaultRecordPurpose            `json:"event_record_purpose"`
	EventBeginTime                     TimeReal                           `json:"event_begin_time"`
	EventEndTime                       TimeReal                           `json:"event_end_time"`
	CardNumberAndGenDriverSlotBegin    FullCardNumberAndGeneration        `json:"card_number_and_gen_driver_slot_begin"`
	CardNumberAndGenCodriverSlotBegin  FullCardNumberAndGeneration        `json:"card_number_and_gen_codriver_slot_begin"`
	CardNumberAndGenDriverSlotEnd      FullCardNumberAndGeneration        `json:"card_number_and_gen_driver_slot_end"`
	CardNumberAndGenCodriverSlotEnd    FullCardNumberAndGeneration        `json:"card_number_and_gen_codriver_slot_end"`
	SimilarEventsNumber                SimilarEventsNumber                `json:"similar_events_number"`
	ManufacturerSpecificEventFaultData ManufacturerSpecificEventFaultData `json:"manufacturer_specific_event_fault_data"`
}

type VuEventsAndFaultsFirstGen

type VuEventsAndFaultsFirstGen struct {
	Verified                  bool                      `aper:"-" json:"verified"`
	VuFaultData               VuFaultData               `json:"vu_fault_data"`
	VuEventData               VuEventData               `json:"vu_event_data"`
	VuOverSpeedingControlData VuOverSpeedingControlData `json:"vu_over_speeding_control_data"`
	VuOverSpeedingEventData   VuOverSpeedingEventData   `json:"vu_over_speeding_event_data"`
	VuTimeAdjustmentData      VuTimeAdjustmentData      `json:"vu_time_adjustment_data"`
	Signature                 SignatureFirstGen         `json:"signature"`
}

func (VuEventsAndFaultsFirstGen) VerifyFirstGen

func (ef VuEventsAndFaultsFirstGen) VerifyFirstGen(cert CertificateFirstGen, data []byte) (bool, error)

type VuEventsAndFaultsSecondGen

type VuEventsAndFaultsSecondGen struct {
	Verified                             bool                                 `aper:"-" json:"verified"`
	VuFaultRecordArray                   VuFaultRecordArray                   `json:"vu_fault_record_array"`
	VuEventRecordArray                   VuEventRecordArray                   `json:"vu_event_record_array"`
	VuOverSpeedingControlDataRecordArray VuOverSpeedingControlDataRecordArray `json:"vu_over_speeding_control_data_record_array"`
	VuOverSpeedingEventRecordArray       VuOverSpeedingEventRecordArray       `json:"vu_over_speeding_event_record_array"`
	VuTimeAdjustmentRecordArray          VuTimeAdjustmentRecordArray          `json:"vu_time_adjustment_record_array"`
	// VuTimeAdjustmentGNSSRecordArray      VuTimeAdjustmentGNSSRecordArray // change according to docs
	SignatureRecordArray SignatureRecordArray `json:"signature_record_array"`
}

func (VuEventsAndFaultsSecondGen) VerifySecondGen

func (ef VuEventsAndFaultsSecondGen) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuEventsAndFaultsSecondGenV2

type VuEventsAndFaultsSecondGenV2 struct {
	Verified                             bool                                 `aper:"-" json:"verified"`
	VuFaultRecordArray                   VuFaultRecordArray                   `json:"vu_fault_record_array"`
	VuEventRecordArray                   VuEventRecordArray                   `json:"vu_event_record_array"`
	VuOverSpeedingControlDataRecordArray VuOverSpeedingControlDataRecordArray `json:"vu_over_speeding_control_data_record_array"`
	VuOverSpeedingEventRecordArray       VuOverSpeedingEventRecordArray       `json:"vu_over_speeding_event_record_array"`
	VuTimeAdjustmentRecordArray          VuTimeAdjustmentRecordArray          `json:"vu_time_adjustment_record_array"`
	SignatureRecordArray                 SignatureRecordArray                 `json:"signature_record_array"`
}

afaik there is no actual difference in the structure, only the EventFaultType has been extended in V2

func (VuEventsAndFaultsSecondGenV2) VerifySecondGen

func (ef VuEventsAndFaultsSecondGenV2) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuFaultData

type VuFaultData struct {
	NoOfVuFaults   byte                    `json:"no_of_vu_faults"`
	VuFaultRecords []VuFaultRecordFirstGen `aper:"size=NoOfVuFaults" json:"vu_fault_records"`
}

Appendix 1 2.200

type VuFaultRecordArray

type VuFaultRecordArray struct {
	RecordType  RecordType               `json:"record_type"`
	RecordSize  uint16                   `json:"record_size"`
	NoOfRecords uint16                   `json:"no_of_records"`
	Records     []VuFaultRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.202

type VuFaultRecordFirstGen

type VuFaultRecordFirstGen struct {
	FaultType                   EventFaultType          `json:"fault_type"`
	FaultRecordPurpose          EventFaultRecordPurpose `json:"fault_record_purpose"`
	FaultBeginTime              TimeReal                `json:"fault_begin_time"`
	FaultEndTime                TimeReal                `json:"fault_end_time"`
	CardNumberDriverSlotBegin   FullCardNumber          `json:"card_number_driver_slot_begin"`
	CardNumberCodriverSlotBegin FullCardNumber          `json:"card_number_codriver_slot_begin"`
	CardNumberDriverSlotEnd     FullCardNumber          `json:"card_number_driver_slot_end"`
	CardNumberCodriverSlotEnd   FullCardNumber          `json:"card_number_codriver_slot_end"`
}

Appendix 1 2.201

type VuFaultRecordSecondGen

type VuFaultRecordSecondGen struct {
	FaultType                          EventFaultType                     `json:"fault_type"`
	FaultRecordPurpose                 EventFaultRecordPurpose            `json:"fault_record_purpose"`
	FaultBeginTime                     TimeReal                           `json:"fault_begin_time"`
	FaultEndTime                       TimeReal                           `json:"fault_end_time"`
	CardNumberAndGenDriverSlotBegin    FullCardNumberAndGeneration        `json:"card_number_and_gen_driver_slot_begin"`
	CardNumberAndGenCodriverSlotBegin  FullCardNumberAndGeneration        `json:"card_number_and_gen_codriver_slot_begin"`
	CardNumberAndGenDriverSlotEnd      FullCardNumberAndGeneration        `json:"card_number_and_gen_driver_slot_end"`
	CardNumberAndGenCodriverSlotEnd    FullCardNumberAndGeneration        `json:"card_number_and_gen_codriver_slot_end"`
	ManufacturerSpecificEventFaultData ManufacturerSpecificEventFaultData `json:"manufacturer_specific_event_fault_data"`
}

type VuGNSSADRecord

type VuGNSSADRecord struct {
	TimeStamp                    TimeReal                    `json:"time_stamp"`
	CardNumberAndGenDriverSlot   FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot"`
	CardNumberAndGenCodriverSlot FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot"`
	GNSSPlaceRecord              GNSSPlaceRecord             `json:"gnss_place_record"`
	VehicleOdometerValue         OdometerShort               `json:"vehicle_odometer_value"` // addition from correction document
}

Appendix 1 2.203

type VuGNSSADRecordArray

type VuGNSSADRecordArray struct {
	RecordType  RecordType       `json:"record_type"`
	RecordSize  uint16           `json:"record_size"`
	NoOfRecords uint16           `json:"no_of_records"`
	Records     []VuGNSSADRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.204

type VuGNSSADRecordArrayV2

type VuGNSSADRecordArrayV2 struct {
	RecordType  RecordType         `json:"record_type"`
	RecordSize  uint16             `json:"record_size"`
	NoOfRecords uint16             `json:"no_of_records"`
	Records     []VuGNSSADRecordV2 `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

not explicitely mentioned, but VuGNSSADRecordV2 exists

type VuGNSSADRecordV2

type VuGNSSADRecordV2 struct {
	TimeStamp                    TimeReal                    `json:"time_stamp"`
	CardNumberAndGenDriverSlot   FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot"`
	CardNumberAndGenCodriverSlot FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot"`
	GNSSPlaceAuthRecord          GNSSPlaceAuthRecord         `json:"gnss_place_auth_record"`
	VehicleOdometerValue         OdometerShort               `json:"vehicle_odometer_value"` // addition from correction document
}

type VuGNSSMaximalTimeDifference

type VuGNSSMaximalTimeDifference uint16

Appendix 1 2.204a

type VuITSConsentRecord

type VuITSConsentRecord struct {
	CardNumberAndGen FullCardNumberAndGeneration `json:"card_number_and_gen"`
	Consent          byte                        `json:"consent"` // boolean
}

Appendix 1 2.207

type VuITSConsentRecordArray

type VuITSConsentRecordArray struct {
	RecordType  RecordType           `json:"record_type"`
	RecordSize  uint16               `json:"record_size"`
	NoOfRecords uint16               `json:"no_of_records"`
	Records     []VuITSConsentRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.208

type VuIdentificationFirstGen

type VuIdentificationFirstGen struct {
	VuManufacturerName       VuManufacturerName       `json:"vu_manufacturer_name"`
	VuManufacturerAddress    VuManufacturerAddress    `json:"vu_manufacturer_address"`
	VuPartNumber             VuPartNumber             `json:"vu_part_number"`
	VuSerialNumber           VuSerialNumberFirstGen   `json:"vu_serial_number"`
	VuSoftwareIdentification VuSoftwareIdentification `json:"vu_software_identification"`
	VuManufacturingDate      VuManufacturingDate      `json:"vu_manufacturing_date"`
	VuApprovalNumber         VuApprovalNumberFirstGen `json:"vu_approval_number"`
}

Appendix 1 2.205

type VuIdentificationRecordArray

type VuIdentificationRecordArray struct {
	RecordType  RecordType                  `json:"record_type"`
	RecordSize  uint16                      `json:"record_size"`
	NoOfRecords uint16                      `json:"no_of_records"`
	Records     []VuIdentificationSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.206

type VuIdentificationRecordArrayV2

type VuIdentificationRecordArrayV2 struct {
	RecordType  RecordType                    `json:"record_type"`
	RecordSize  uint16                        `json:"record_size"`
	NoOfRecords uint16                        `json:"no_of_records"`
	Records     []VuIdentificationSecondGenV2 `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

not explicitely listed, but required since the is a "V2" version

type VuIdentificationSecondGen

type VuIdentificationSecondGen struct {
	VuManufacturerName       VuManufacturerName        `json:"vu_manufacturer_name"`
	VuManufacturerAddress    VuManufacturerAddress     `json:"vu_manufacturer_address"`
	VuPartNumber             VuPartNumber              `json:"vu_part_number"`
	VuSerialNumber           VuSerialNumberSecondGen   `json:"vu_serial_number"`
	VuSoftwareIdentification VuSoftwareIdentification  `json:"vu_software_identification"`
	VuManufacturingDate      VuManufacturingDate       `json:"vu_manufacturing_date"`
	VuApprovalNumber         VuApprovalNumberSecondGen `json:"vu_approval_number"`
	VuGeneration             Generation                `json:"vu_generation"`
	VuAbility                VuAbility                 `json:"vu_ability"`
}

type VuIdentificationSecondGenV2

type VuIdentificationSecondGenV2 struct {
	VuManufacturerName       VuManufacturerName        `json:"vu_manufacturer_name"`
	VuManufacturerAddress    VuManufacturerAddress     `json:"vu_manufacturer_address"`
	VuPartNumber             VuPartNumber              `json:"vu_part_number"`
	VuSerialNumber           VuSerialNumberSecondGen   `json:"vu_serial_number"`
	VuSoftwareIdentification VuSoftwareIdentification  `json:"vu_software_identification"`
	VuManufacturingDate      VuManufacturingDate       `json:"vu_manufacturing_date"`
	VuApprovalNumber         VuApprovalNumberSecondGen `json:"vu_approval_number"`
	VuGeneration             Generation                `json:"vu_generation"`
	VuAbility                VuAbility                 `json:"vu_ability"`
	VuDigitalMapVersion      VuDigitalMapVersion       `json:"vu_digital_map_version"`
}

type VuLoadUnloadRecord

type VuLoadUnloadRecord struct {
	TimeStamp                    TimeReal                    `json:"time_stamp"`
	OperationType                OperationType               `json:"operation_type"`
	CardNumberAndGenDriverSlot   FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot"`
	CardNumberAndGenCodriverSlot FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot"`
	GNSSPlaceAuthRecord          GNSSPlaceAuthRecord         `json:"gnss_place_auth_record"`
	VehicleOdometerValue         OdometerShort               `json:"vehicle_odometer_value"`
}

Appendix 1 2.208a

type VuLoadUnloadRecordArray

type VuLoadUnloadRecordArray struct {
	RecordType  RecordType           `json:"record_type"`
	RecordSize  uint16               `json:"record_size"`
	NoOfRecords uint16               `json:"no_of_records"`
	Records     []VuLoadUnloadRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.208b

type VuManufacturerAddress

type VuManufacturerAddress Address

Appendix 1 2.209

func (VuManufacturerAddress) MarshalJSON

func (a VuManufacturerAddress) MarshalJSON() ([]byte, error)

func (VuManufacturerAddress) String

func (a VuManufacturerAddress) String() string

type VuManufacturerName

type VuManufacturerName Name

Appendix 1 2.210

func (VuManufacturerName) MarshalJSON

func (n VuManufacturerName) MarshalJSON() ([]byte, error)

func (VuManufacturerName) String

func (n VuManufacturerName) String() string

type VuManufacturingDate

type VuManufacturingDate TimeReal

Appendix 1 2.211

func (VuManufacturingDate) Decode

func (d VuManufacturingDate) Decode() time.Time

func (VuManufacturingDate) MarshalJSON

func (d VuManufacturingDate) MarshalJSON() ([]byte, error)

type VuOverSpeedingControlData

type VuOverSpeedingControlData struct {
	LastOverspeedControlTime TimeReal        `json:"last_overspeed_control_time"`
	FirstOverspeedSince      TimeReal        `json:"first_overspeed_since"`
	NumberOfOverspeedSince   OverspeedNumber `json:"number_of_overspeed_since"`
}

Appendix 1 2.212

type VuOverSpeedingControlDataRecordArray

type VuOverSpeedingControlDataRecordArray struct {
	RecordType  RecordType                  `json:"record_type"`
	RecordSize  uint16                      `json:"record_size"`
	NoOfRecords uint16                      `json:"no_of_records"`
	Records     []VuOverSpeedingControlData `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.213

type VuOverSpeedingEventData

type VuOverSpeedingEventData struct {
	NoOfOvVuOverSpeedingEvents byte                                `json:"no_of_vu_over_speeding_events"`
	VuOverSpeedingEventRecords []VuOverSpeedingEventRecordFirstGen `aper:"size=NoOfOvVuOverSpeedingEvents" json:"vu_over_speeding_event_records"`
}

Appendix 1 2.214

type VuOverSpeedingEventRecordArray

type VuOverSpeedingEventRecordArray struct {
	RecordType  RecordType                           `json:"record_type"`
	RecordSize  uint16                               `json:"record_size"`
	NoOfRecords uint16                               `json:"no_of_records"`
	Records     []VuOverSpeedingEventRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.216

type VuOverSpeedingEventRecordFirstGen

type VuOverSpeedingEventRecordFirstGen struct {
	EventType                 EventFaultType          `json:"event_type"`
	EventRecordPurpose        EventFaultRecordPurpose `json:"event_record_purpose"`
	EventBeginTime            TimeReal                `json:"event_begin_time"`
	EventEndTime              TimeReal                `json:"event_end_time"`
	MaxSpeedValue             SpeedMax                `json:"max_speed_value"`
	AverageSpeedValue         SpeedAverage            `json:"average_speed_value"`
	CardNumberDriverSlotBegin FullCardNumber          `json:"card_number_driver_slot_begin"`
	SimilarEventsNumber       SimilarEventsNumber     `json:"similar_events_number"`
}

Appendix 1 2.215

type VuOverSpeedingEventRecordSecondGen

type VuOverSpeedingEventRecordSecondGen struct {
	EventType                       EventFaultType              `json:"event_type"`
	EventRecordPurpose              EventFaultRecordPurpose     `json:"event_record_purpose"`
	EventBeginTime                  TimeReal                    `json:"event_begin_time"`
	EventEndTime                    TimeReal                    `json:"event_end_time"`
	MaxSpeedValue                   SpeedMax                    `json:"max_speed_value"`
	AverageSpeedValue               SpeedAverage                `json:"average_speed_value"`
	CardNumberAndGenDriverSlotBegin FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot_begin"`
	SimilarEventsNumber             SimilarEventsNumber         `json:"similar_events_number"`
}

type VuOverviewFirstGen

type VuOverviewFirstGen struct {
	Verified                          bool                              `aper:"-" json:"verified"`
	MemberStateCertificate            MemberStateCertificateFirstGen    `json:"member_state_certificate"`
	VuCertificate                     VuCertificateFirstGen             `json:"vu_certificate"`
	VehicleIdentificationNumber       VehicleIdentificationNumber       `json:"vehicle_identification_number"`
	VehicleRegistrationIdentification VehicleRegistrationIdentification `json:"vehicle_registration_identification"`
	CurrentDateTime                   CurrentDateTime                   `json:"current_date_time"`
	VuDownloadablePeriod              VuDownloadablePeriod              `json:"vu_downloadable_period"`
	CardSlotsStatus                   CardSlotsStatus                   `json:"card_slots_status"`
	VuDownloadActivityData            VuDownloadActivityDataFirstGen    `json:"vu_download_activity_data"`
	VuCompanyLocksData                VuCompanyLocksDataFirstGen        `json:"vu_company_locks_data"`
	VuControlActivityData             VuControlActivityDataFirstGen     `json:"vu_control_activity_data"`
	Signature                         SignatureFirstGen                 `json:"signature"`
}

func (VuOverviewFirstGen) VerifyFirstGen

func (ov VuOverviewFirstGen) VerifyFirstGen(cert CertificateFirstGen, data []byte) (bool, error)

type VuOverviewSecondGen

type VuOverviewSecondGen struct {
	Verified                               bool                                   `aper:"-" json:"verified"`
	MemberStateCertificateRecordArray      MemberStateCertificateRecordArray      `json:"member_state_certificate_record_array"`
	VuCertificateRecordArray               VuCertificateRecordArray               `json:"vu_certificate_record_array"`
	VehicleIdentificationNumberRecordArray VehicleIdentificationNumberRecordArray `json:"vehicle_identification_number_record_array"`
	VehicleRegistrationNumberRecordArray   VehicleRegistrationNumberRecordArray   `json:"vehicle_registration_number_record_array"`
	CurrentDateTimeRecordArray             CurrentDateTimeRecordArray             `json:"current_date_time_record_array"`
	VuDownloadablePeriodRecordArray        VuDownloadablePeriodRecordArray        `json:"vu_downloadable_period_record_array"`
	CardSlotsStatusRecordArray             CardSlotsStatusRecordArray             `json:"card_slots_status_record_array"`
	VuDownloadActivityDataRecordArray      VuDownloadActivityDataRecordArray      `json:"vu_download_activity_data_record_array"`
	VuCompanyLocksRecordArray              VuCompanyLocksRecordArray              `json:"vu_company_locks_record_array"`
	VuControlActivityRecordArray           VuControlActivityRecordArray           `json:"vu_control_activity_record_array"`
	SignatureRecordArray                   SignatureRecordArray                   `json:"signature_record_array"`
}

func (VuOverviewSecondGen) VerifySecondGen

func (ov VuOverviewSecondGen) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuOverviewSecondGenV2

type VuOverviewSecondGenV2 struct {
	Verified                                     bool                                         `aper:"-" json:"verified"`
	MemberStateCertificateRecordArray            MemberStateCertificateRecordArray            `json:"member_state_certificate_record_array"`
	VuCertificateRecordArray                     VuCertificateRecordArray                     `json:"vu_certificate_record_array"`
	VehicleIdentificationNumberRecordArray       VehicleIdentificationNumberRecordArray       `json:"vehicle_identification_number_record_array"`
	VehicleRegistrationIdentificationRecordArray VehicleRegistrationIdentificationRecordArray `json:"vehicle_registration_identification_record_array"`
	CurrentDateTimeRecordArray                   CurrentDateTimeRecordArray                   `json:"current_date_time_record_array"`
	VuDownloadablePeriodRecordArray              VuDownloadablePeriodRecordArray              `json:"vu_downloadable_period_record_array"`
	CardSlotsStatusRecordArray                   CardSlotsStatusRecordArray                   `json:"card_slots_status_record_array"`
	VuDownloadActivityDataRecordArray            VuDownloadActivityDataRecordArray            `json:"vu_download_activity_data_record_array"`
	VuCompanyLocksRecordArray                    VuCompanyLocksRecordArray                    `json:"vu_company_locks_record_array"`
	VuControlActivityRecordArray                 VuControlActivityRecordArray                 `json:"vu_control_activity_record_array"`
	SignatureRecordArray                         SignatureRecordArray                         `json:"signature_record_array"`
}

afaik no structural change except for VehicleRegistrationIdentificationRecordArray -> VehicleRegistrationNumberRecordArray

func (VuOverviewSecondGenV2) VerifySecondGen

func (ov VuOverviewSecondGenV2) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuPartNumber

type VuPartNumber [16]byte

Appendix 1 2.217

func (VuPartNumber) MarshalJSON

func (n VuPartNumber) MarshalJSON() ([]byte, error)

func (VuPartNumber) String

func (n VuPartNumber) String() string

type VuPlaceDailyWorkPeriodDataFirstGen

type VuPlaceDailyWorkPeriodDataFirstGen struct {
	NoOfPlaceRecords              byte                                   `json:"no_of_place_records"`
	VuPlaceDailyWorkPeriodRecords []VuPlaceDailyWorkPeriodRecordFirstGen `aper:"size=NoOfPlaceRecords" json:"vu_place_daily_work_period_records"`
}

Appendix 1 2.218

type VuPlaceDailyWorkPeriodRecordArray

type VuPlaceDailyWorkPeriodRecordArray struct {
	RecordType  RecordType                              `json:"record_type"`
	RecordSize  uint16                                  `json:"record_size"`
	NoOfRecords uint16                                  `json:"no_of_records"`
	Records     []VuPlaceDailyWorkPeriodRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.220

type VuPlaceDailyWorkPeriodRecordArrayV2

type VuPlaceDailyWorkPeriodRecordArrayV2 struct {
	RecordType  RecordType                                `json:"record_type"`
	RecordSize  uint16                                    `json:"record_size"`
	NoOfRecords uint16                                    `json:"no_of_records"`
	Records     []VuPlaceDailyWorkPeriodRecordSecondGenV2 `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

not explicitely mentioned, but VuPlaceDailyWorkPeriodRecordSecondGenV2 exists

type VuPlaceDailyWorkPeriodRecordFirstGen

type VuPlaceDailyWorkPeriodRecordFirstGen struct {
	FullCardNumber FullCardNumber      `json:"full_card_number"`
	PlaceRecord    PlaceRecordFirstGen `json:"place_record"`
}

Appendix 1 2.219

type VuPlaceDailyWorkPeriodRecordSecondGen

type VuPlaceDailyWorkPeriodRecordSecondGen struct {
	FullCardNumberAndGeneration FullCardNumberAndGeneration `json:"full_card_number_and_generation"`
	PlaceRecord                 PlaceRecordSecondGen        `json:"place_record"`
}

type VuPlaceDailyWorkPeriodRecordSecondGenV2

type VuPlaceDailyWorkPeriodRecordSecondGenV2 struct {
	FullCardNumberAndGeneration FullCardNumberAndGeneration `json:"full_card_number_and_generation"`
	PlaceAuthRecord             PlaceAuthRecord             `json:"place_auth_record"`
}

type VuPowerSupplyInterruptionRecord

type VuPowerSupplyInterruptionRecord struct {
	EventType                         EventFaultType              `json:"event_type"`
	EventRecordPurpose                EventFaultRecordPurpose     `json:"event_record_purpose"`
	EventBeginTime                    TimeReal                    `json:"event_begin_time"`
	EventEndTime                      TimeReal                    `json:"event_end_time"`
	CardNumberAndGenDriverSlotBegin   FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot_begin"`
	CardNumberAndGenDriverSlotEnd     FullCardNumberAndGeneration `json:"card_number_and_gen_driver_slot_end"`
	CardNumberAndGenCodriverSlotBegin FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot_begin"`
	CardNumberAndGenCodriverSlotEnd   FullCardNumberAndGeneration `json:"card_number_and_gen_codriver_slot_end"`
	SimilarEventsNumber               SimilarEventsNumber         `json:"similar_events_number"`
}

Appendix 1 2.240

type VuPowerSupplyInterruptionRecordArray

type VuPowerSupplyInterruptionRecordArray struct {
	RecordType  RecordType                        `json:"record_type"`
	RecordSize  uint16                            `json:"record_size"`
	NoOfRecords uint16                            `json:"no_of_records"`
	Records     []VuPowerSupplyInterruptionRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.241

type VuRtcTime

type VuRtcTime TimeReal

Appendix 1 2.222a

type VuSensorExternalGNSSCoupledRecordArray

type VuSensorExternalGNSSCoupledRecordArray struct {
	RecordType  RecordType                        `json:"record_type"`
	RecordSize  uint16                            `json:"record_size"`
	NoOfRecords uint16                            `json:"no_of_records"`
	Records     []SensorExternalGNSSCoupledRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.242

type VuSensorPairedRecordArray

type VuSensorPairedRecordArray struct {
	RecordType  RecordType           `json:"record_type"`
	RecordSize  uint16               `json:"record_size"`
	NoOfRecords uint16               `json:"no_of_records"`
	Records     []SensorPairedRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.243

type VuSerialNumberFirstGen

type VuSerialNumberFirstGen ExtendedSerialNumberFirstGen

Appendix 1 2.223

type VuSerialNumberSecondGen

type VuSerialNumberSecondGen ExtendedSerialNumberSecondGen

type VuSoftInstallationDate

type VuSoftInstallationDate TimeReal

Appendix 1 2.224

func (VuSoftInstallationDate) Decode

func (d VuSoftInstallationDate) Decode() time.Time

func (VuSoftInstallationDate) MarshalJSON

func (d VuSoftInstallationDate) MarshalJSON() ([]byte, error)

type VuSoftwareIdentification

type VuSoftwareIdentification struct {
	VuSoftwareVersion      VuSoftwareVersion      `json:"vu_software_version"`
	VuSoftInstallationDate VuSoftInstallationDate `json:"vu_soft_installation_date"`
}

Appendix 1 2.225

type VuSoftwareVersion

type VuSoftwareVersion [4]byte

Appendix 1 2.226

type VuSpecificConditionDataFirstGen

type VuSpecificConditionDataFirstGen struct {
	NoOfSpecificConditionRecords uint16                    `json:"no_of_specific_condition_records"`
	SpecificConditionRecords     []SpecificConditionRecord `aper:"size=NoOfSpecificConditionRecords" json:"specific_condition_records"`
}

Appendix 1 2.227

type VuSpecificConditionRecordArray

type VuSpecificConditionRecordArray struct {
	RecordType  RecordType                `json:"record_type"`
	RecordSize  uint16                    `json:"record_size"`
	NoOfRecords uint16                    `json:"no_of_records"`
	Records     []SpecificConditionRecord `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.228

type VuTechnicalDataFirstGen

type VuTechnicalDataFirstGen struct {
	Verified          bool                     `aper:"-" json:"verified"`
	VuIdentification  VuIdentificationFirstGen `json:"vu_identification"`
	SensorPaired      SensorPaired             `json:"sensor_paired"`
	VuCalibrationData VuCalibrationData        `json:"vu_calibration_data"`
	Signature         SignatureFirstGen        `json:"signature"`
}

func (VuTechnicalDataFirstGen) VerifyFirstGen

func (t VuTechnicalDataFirstGen) VerifyFirstGen(cert CertificateFirstGen, data []byte) (bool, error)

type VuTechnicalDataSecondGen

type VuTechnicalDataSecondGen struct {
	Verified                               bool                                   `aper:"-" json:"verified"`
	VuIdentificationRecordArray            VuIdentificationRecordArray            `json:"vu_identification_record_array"`
	VuSensorPairedRecordArray              VuSensorPairedRecordArray              `json:"vu_sensor_paired_record_array"`
	VuSensorExternalGNSSCoupledRecordArray VuSensorExternalGNSSCoupledRecordArray `json:"vu_sensor_external_gnss_coupled_record_array"`
	VuCalibrationRecordArray               VuCalibrationRecordArray               `json:"vu_calibration_record_array"`
	VuCardRecordArray                      VuCardRecordArray                      `json:"vu_card_record_array"`
	VuITSConsentRecordArray                VuITSConsentRecordArray                `json:"vu_its_consent_record_array"`
	VuPowerSupplyInterruptionRecordArray   VuPowerSupplyInterruptionRecordArray   `json:"vu_power_supply_interruption_record_array"`
	SignatureRecordArray                   SignatureRecordArray                   `json:"signature_record_array"`
}

func (VuTechnicalDataSecondGen) VerifySecondGen

func (t VuTechnicalDataSecondGen) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuTechnicalDataSecondGenV2

type VuTechnicalDataSecondGenV2 struct {
	Verified                               bool                                   `aper:"-" json:"verified"`
	VuIdentificationRecordArray            VuIdentificationRecordArrayV2          `json:"vu_identification_record_array"`
	VuSensorPairedRecordArray              VuSensorPairedRecordArray              `json:"vu_sensor_paired_record_array"`
	VuSensorExternalGNSSCoupledRecordArray VuSensorExternalGNSSCoupledRecordArray `json:"vu_sensor_external_gnss_coupled_record_array"`
	VuCalibrationRecordArray               VuCalibrationRecordArrayV2             `json:"vu_calibration_record_array"`
	VuCardRecordArray                      VuCardRecordArray                      `json:"vu_card_record_array"`
	VuITSConsentRecordArray                VuITSConsentRecordArray                `json:"vu_its_consent_record_array"`
	VuPowerSupplyInterruptionRecordArray   VuPowerSupplyInterruptionRecordArray   `json:"vu_power_supply_interruption_record_array"`
	SignatureRecordArray                   SignatureRecordArray                   `json:"signature_record_array"`
}

func (VuTechnicalDataSecondGenV2) VerifySecondGen

func (t VuTechnicalDataSecondGenV2) VerifySecondGen(cert CertificateSecondGen, data []byte) (bool, error)

type VuTimeAdjustmentData

type VuTimeAdjustmentData struct {
	NoOfVuTimeAdjRecords    byte                             `json:"no_of_vu_time_adj_records"`
	VuTimeAdjustmentRecords []VuTimeAdjustmentRecordFirstGen `aper:"size=NoOfVuTimeAdjRecords" json:"vu_time_adjustment_records"`
}

Appendix 1 2.229

type VuTimeAdjustmentRecordArray

type VuTimeAdjustmentRecordArray struct {
	RecordType  RecordType                        `aper:"expected=0x1e" json:"record_type"`
	RecordSize  uint16                            `json:"record_size"`
	NoOfRecords uint16                            `json:"no_of_records"`
	Records     []VuTimeAdjustmentRecordSecondGen `aper:"size=NoOfRecords,elementsize=RecordSize" json:"records"`
}

Appendix 1 2.233

type VuTimeAdjustmentRecordFirstGen

type VuTimeAdjustmentRecordFirstGen struct {
	OldTimeValue       TimeReal       `json:"old_time_value"`
	NewTimeValue       TimeReal       `json:"new_time_value"`
	WorkshopName       Name           `json:"workshop_name"`
	WorkshopAddress    Address        `json:"workshop_address"`
	WorkshopCardNumber FullCardNumber `json:"workshop_card_number"`
}

Appendix 1 2.232

type VuTimeAdjustmentRecordSecondGen

type VuTimeAdjustmentRecordSecondGen struct {
	OldTimeValue                    TimeReal                    `json:"old_time_value"`
	NewTimeValue                    TimeReal                    `json:"new_time_value"`
	WorkshopName                    Name                        `json:"workshop_name"`
	WorkshopAddress                 Address                     `json:"workshop_address"`
	WorkshopCardNumberAndGeneration FullCardNumberAndGeneration `json:"workshop_card_number_and_generation"`
}

type WVehicleCharacteristicConstant

type WVehicleCharacteristicConstant uint16

Appendix 1 2.239

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL