Documentation ¶
Index ¶
- Constants
- Variables
- func UnmarshalTLV(data []byte, inter interface{}) (verified bool, err error)
- func UnmarshalTV(data []byte, inter interface{}) (verified bool, err error)
- type ActivityChangeInfo
- type Address
- type BCDString
- type CalibrationPurpose
- type Card
- type CardActivityDailyRecord
- type CardActivityLengthRange
- type CardApprovalNumber
- type CardBorderCrossingRecord
- type CardBorderCrossings
- type CardChipIdentification
- type CardControlActivityDataRecord
- type CardCurrentUse
- type CardDriverActivityFirstGen
- type CardDriverActivitySecondGen
- type CardDrivingLicenceInformation
- type CardEventDataFirstGen
- type CardEventDataSecondGen
- type CardEventRecord
- type CardFaultDataFirstGen
- type CardFaultDataSecondGen
- type CardFaultRecord
- type CardIccIdentificationFirstGen
- type CardIccIdentificationSecondGen
- type CardIdentification
- type CardIdentificationAndDriverCardHolderIdentification
- type CardLoadTypeEntries
- type CardLoadTypeEntryRecord
- type CardLoadUnloadOperations
- type CardLoadUnloadRecord
- type CardNumber
- type CardPlaceAuthDailyWorkPeriod
- type CardPlaceDailyWorkPeriodFirstGen
- type CardPlaceDailyWorkPeriodSecondGen
- type CardSlotNumber
- type CardSlotsStatus
- type CardSlotsStatusRecordArray
- type CardStructureVersion
- type CardVehicleRecordFirstGen
- type CardVehicleRecordSecondGen
- type CardVehicleUnitRecord
- type CardVehicleUnitsUsed
- type CardVehiclesUsedFirstGen
- type CardVehiclesUsedSecondGen
- type CertificateContent
- type CertificateFirstGen
- type CertificateHolderAuthorisation
- type CertificateSecondGen
- type CertificationAuthorityKID
- type ControlType
- type CountryCode
- type CurrentDateTime
- type CurrentDateTimeRecordArray
- type DailyPresenceCounter
- type DateOfDayDownloaded
- type DateOfDayDownloadedRecordArray
- type Datef
- type DecodedActivityChangeInfo
- type DecodedCertificateFirstGen
- type DecodedCertificateSecondGen
- type DecodedSignatureFirstGen
- type DecodedSignatureSecondGen
- type Distance
- type DownloadInterfaceVersion
- type DriverCardApplicationIdentificationFirstGen
- type DriverCardApplicationIdentificationSecondGen
- type DriverCardApplicationIdentificationSecondGenV2
- type DriverCardHolderIdentification
- type DrivingLicenceNumber
- type EmbedderIcAssemblerId
- type EntryTypeDailyWorkPeriodFirstGen
- type EntryTypeDailyWorkPeriodSecondGen
- type EquipmentType
- type EventFaultRecordPurpose
- type EventFaultType
- type ExtendedSealIdentifier
- type ExtendedSerialNumberFirstGen
- type ExtendedSerialNumberSecondGen
- type FullCardNumber
- type FullCardNumberAndGeneration
- type GNSSAccumulatedDriving
- type GNSSAccumulatedDrivingRecord
- type GNSSAccuracy
- type GNSSAuthAccumulatedDriving
- type GNSSAuthStatusADRecord
- type GNSSPlaceAuthRecord
- type GNSSPlaceRecord
- type Generation
- type GeoCoordinates
- type HolderName
- type KConstantOfRecordingEquipment
- type KeyIdentifier
- type LTyreCircumference
- type Language
- type LastCardDownload
- type LengthOfFollowingData
- type LoadType
- type ManualInputFlag
- type ManufacturerCode
- type ManufacturerSpecificEventFaultData
- type MemberStateCertificateFirstGen
- type MemberStateCertificateRecordArray
- type MemberStateCertificateSecondGen
- type MonthYear
- type Name
- type NationAlpha
- type NationNumeric
- type NoOfBorderCrossingRecords
- type NoOfCardPlaceRecordsFirstGen
- type NoOfCardPlaceRecordsSecondGen
- type NoOfCardVehicleRecords
- type NoOfCardVehicleUnitRecords
- type NoOfEventsPerType
- type NoOfFaultsPerType
- type NoOfGNSSADRecords
- type NoOfLoadTypeEntryRecords
- type NoOfLoadUnloadRecords
- type NoOfSpecificConditionRecords
- type OdometerShort
- type OdometerValueMidnight
- type OdometerValueMidnightRecordArray
- type OperationType
- type OverspeedNumber
- type PlaceAuthRecord
- type PlaceAuthStatusRecord
- type PlaceRecordFirstGen
- type PlaceRecordSecondGen
- type PositionAuthenticationStatus
- type PreviousVehicleInfoFirstGen
- type PreviousVehicleInfoSecondGen
- type PublicKey
- type RSAKeyModulus
- type RSAKeyPrivateExponent
- type RSAKeyPublicExponent
- type RecordType
- type RegionNumeric
- type RemoteCommunicationModuleSerialNumber
- type SealDataVu
- type SealRecord
- type SensorApprovalNumberFirstGen
- type SensorApprovalNumberSecondGen
- type SensorExternalGNSSApprovalNumber
- type SensorExternalGNSSCoupledRecord
- type SensorGNSSCouplingDate
- type SensorGNSSSerialNumber
- type SensorPaired
- type SensorPairedRecord
- type SensorPairingDate
- type SensorSerialNumberFirstGen
- type SensorSerialNumberSecondGen
- type SignatureFirstGen
- type SignatureRecordArray
- type SignatureSecondGen
- type SimilarEventsNumber
- type SpecificConditionRecord
- type SpecificConditionType
- type SpecificConditionsFirstGen
- type SpecificConditionsSecondGen
- type Speed
- type SpeedAuthorised
- type SpeedAverage
- type SpeedMax
- type TachographCardsGen1Suppression
- type TimeReal
- type TyreSize
- type VehicleIdentificationNumber
- type VehicleIdentificationNumberRecordArray
- type VehicleRegistrationIdentification
- type VehicleRegistrationIdentificationRecordArray
- type VehicleRegistrationNumber
- type VehicleRegistrationNumberOrIdentificationRecordArray
- type VehicleRegistrationNumberRecordArray
- type Vu
- type VuAbility
- type VuActivitiesFirstGen
- type VuActivitiesSecondGen
- type VuActivitiesSecondGenV2
- type VuActivityDailyDataFirstGen
- type VuActivityDailyRecordArray
- type VuApprovalNumberFirstGen
- type VuApprovalNumberSecondGen
- type VuBorderCrossingRecord
- type VuBorderCrossingRecordArray
- type VuCalibrationData
- type VuCalibrationRecordArray
- type VuCalibrationRecordArrayV2
- type VuCalibrationRecordFirstGen
- type VuCalibrationRecordSecondGen
- type VuCalibrationRecordSecondGenV2
- type VuCardIWData
- type VuCardIWRecordArray
- type VuCardIWRecordFirstGen
- type VuCardIWRecordSecondGen
- type VuCardRecord
- type VuCardRecordArray
- type VuCertificateFirstGen
- type VuCertificateRecordArray
- type VuCertificateSecondGen
- type VuCompanyLocksDataFirstGen
- type VuCompanyLocksRecordArray
- type VuCompanyLocksRecordFirstGen
- type VuCompanyLocksRecordSecondGen
- type VuConfiguration
- type VuConfigurationLengthRange
- type VuControlActivityDataFirstGen
- type VuControlActivityRecordArray
- type VuControlActivityRecordFirstGen
- type VuControlActivityRecordSecondGen
- type VuDataBlockCounter
- type VuDetailedSpeedBlock
- type VuDetailedSpeedBlockRecordArray
- type VuDetailedSpeedData
- type VuDetailedSpeedFirstGen
- type VuDetailedSpeedSecondGen
- type VuDigitalMapVersion
- type VuDownloadActivityDataFirstGen
- type VuDownloadActivityDataRecordArray
- type VuDownloadActivityDataSecondGen
- type VuDownloadablePeriod
- type VuDownloadablePeriodRecordArray
- type VuEventData
- type VuEventRecordArray
- type VuEventRecordFirstGen
- type VuEventRecordSecondGen
- type VuEventsAndFaultsFirstGen
- type VuEventsAndFaultsSecondGen
- type VuEventsAndFaultsSecondGenV2
- type VuFaultData
- type VuFaultRecordArray
- type VuFaultRecordFirstGen
- type VuFaultRecordSecondGen
- type VuGNSSADRecord
- type VuGNSSADRecordArray
- type VuGNSSADRecordArrayV2
- type VuGNSSADRecordV2
- type VuGNSSMaximalTimeDifference
- type VuITSConsentRecord
- type VuITSConsentRecordArray
- type VuIdentificationFirstGen
- type VuIdentificationRecordArray
- type VuIdentificationRecordArrayV2
- type VuIdentificationSecondGen
- type VuIdentificationSecondGenV2
- type VuLoadUnloadRecord
- type VuLoadUnloadRecordArray
- type VuManufacturerAddress
- type VuManufacturerName
- type VuManufacturingDate
- type VuOverSpeedingControlData
- type VuOverSpeedingControlDataRecordArray
- type VuOverSpeedingEventData
- type VuOverSpeedingEventRecordArray
- type VuOverSpeedingEventRecordFirstGen
- type VuOverSpeedingEventRecordSecondGen
- type VuOverviewFirstGen
- type VuOverviewSecondGen
- type VuOverviewSecondGenV2
- type VuPartNumber
- type VuPlaceDailyWorkPeriodDataFirstGen
- type VuPlaceDailyWorkPeriodRecordArray
- type VuPlaceDailyWorkPeriodRecordArrayV2
- type VuPlaceDailyWorkPeriodRecordFirstGen
- type VuPlaceDailyWorkPeriodRecordSecondGen
- type VuPlaceDailyWorkPeriodRecordSecondGenV2
- type VuPowerSupplyInterruptionRecord
- type VuPowerSupplyInterruptionRecordArray
- type VuRtcTime
- type VuSensorExternalGNSSCoupledRecordArray
- type VuSensorPairedRecordArray
- type VuSerialNumberFirstGen
- type VuSerialNumberSecondGen
- type VuSoftInstallationDate
- type VuSoftwareIdentification
- type VuSoftwareVersion
- type VuSpecificConditionDataFirstGen
- type VuSpecificConditionRecordArray
- type VuTechnicalDataFirstGen
- type VuTechnicalDataSecondGen
- type VuTechnicalDataSecondGenV2
- type VuTimeAdjustmentData
- type VuTimeAdjustmentRecordArray
- type VuTimeAdjustmentRecordFirstGen
- type VuTimeAdjustmentRecordSecondGen
- type WVehicleCharacteristicConstant
Constants ¶
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 ¶
var PKsFirstGen = make(map[uint64]DecodedCertificateFirstGen)
global map of all decoded certificates by the key identification
var PKsSecondGen = make(map[uint64]DecodedCertificateSecondGen)
Functions ¶
func UnmarshalTLV ¶
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 ¶
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 (a ActivityChangeInfo) Decode() DecodedActivityChangeInfo
func (ActivityChangeInfo) MarshalJSON ¶
func (a ActivityChangeInfo) MarshalJSON() ([]byte, error)
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 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 (a CardDriverActivityFirstGen) Decode() []CardActivityDailyRecord
func (CardDriverActivityFirstGen) DecodeForward ¶
func (a CardDriverActivityFirstGen) DecodeForward() []CardActivityDailyRecord
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 (a CardDriverActivitySecondGen) Decode() []CardActivityDailyRecord
func (CardDriverActivitySecondGen) DecodeForward ¶
func (a CardDriverActivitySecondGen) DecodeForward() []CardActivityDailyRecord
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 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 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 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 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 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 EntryTypeDailyWorkPeriodSecondGen ¶
type EntryTypeDailyWorkPeriodSecondGen byte // same as first gen, but 2 additional values for gnss
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 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 GeoCoordinates ¶
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 KeyIdentifier ¶
type KeyIdentifier struct {
CertificationAuthorityKID CertificationAuthorityKID
}
Appendix 1 2.86
type Language ¶
type Language [2]byte
Appendix 1 2.88
func (Language) MarshalJSON ¶
func (*Language) UnmarshalJSON ¶
type LastCardDownload ¶
type LastCardDownload struct { Verified bool `aper:"-" json:"verified"` LastCardDownLoad TimeReal `json:"last_card_download"` }
Appendix 1 2.89
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) MarshalJSON ¶
type NationAlpha ¶
type NationAlpha [3]byte
Appendix 1 2.100
func (NationAlpha) MarshalJSON ¶
func (n NationAlpha) MarshalJSON() ([]byte, error)
type NoOfCardPlaceRecordsSecondGen ¶
type NoOfCardPlaceRecordsSecondGen uint16
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 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 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 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 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 ¶
func (n SensorExternalGNSSApprovalNumber) String() 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 (s *SignatureFirstGen) Decode(cert CertificateFirstGen) error
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 SpecificConditionRecord ¶
type SpecificConditionRecord struct { EntryTime TimeReal `json:"entry_time"` SpecificConditionType SpecificConditionType `json:"specific_condition_type"` }
Appendix 1 2.152
type SpecificConditionsFirstGen ¶
type SpecificConditionsFirstGen struct { Verified bool `aper:"-" json:"verified"` SpecificConditionRecords []SpecificConditionRecord `aper:"size=56" 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 TimeReal ¶
type TimeReal struct {
Timedata [4]byte
}
Appendix 1 2.162
func (TimeReal) MarshalJSON ¶
type VehicleIdentificationNumber ¶
type VehicleIdentificationNumber [17]byte
Appendix 1 2.164
func (VehicleIdentificationNumber) MarshalJSON ¶
func (n VehicleIdentificationNumber) MarshalJSON() ([]byte, error)
func (VehicleIdentificationNumber) String ¶
func (n VehicleIdentificationNumber) String() 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 ¶
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 ¶
func (v VehicleRegistrationNumberOrIdentificationRecordArray) MarshalJSON() ([]byte, error)
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 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 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 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 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 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"` }