wetzoeker

8.9 — Schrijf nieuw ActivityRecord Regeling specificaties en typegoedkeuring boordcomputer taxi

Schrijf nieuw ActivityRecord

Naam | WriteNewActivityRecord

Gebruik | Chauffeurskaart

Input gegevens | ActivityRecord, ActivityDate

Resultaat | 90h 00h OK xxh xxh Foutcode van een van de gebruikte commando’s, afhankelijk van smartcard implementatie

Deze functie wordt gebruikt om een ActivityRecord toe te voegen in EF.Driver_Activity_Data.

De functie moet gevoed worden met de volgende argumenten met betrekking tot het toe te voegen ActivityRecord:

1. ActivityDate de datum (JJJJMMDD) waarop de activiteit startte c.q. gebeurtenis plaatsvond;

2. ActivityTime het tijdstip (hhmmss) waarop de activiteit startte c.q. gebeurtenis plaatsvond;

3. ActivityType: het type activiteit / gebeurtenis;

4. ManualBit: de handmatig-bit die weergeeft of het tijdstempel (datum en tijd) handmatig dan wel automatisch werd bepaald.

Deze functie moet, voorafgaand aan het daadwerkelijk toevoegen van het ActivityRecord, aan de hand van meegestuurde argumenten, het laatst in EF.Driver_Activity_Data geboekte ActivityRecord en de status van de boordcomputer bepalen of voor het ActivityRecord al dan niet een nieuw DailyRecord en/of SessionRecord moet worden aangemaakt en op welke geheugenpositie het nieuwe ActivityRecord moet worden toegevoegd. Stapsgewijs is de daarvoor te volgen logica als volgt:

1. Selecteer EF.Driver_Activity_Data met het commando Select met P1P2 = ‘04 0C’H en data = ‘E8 28 BD 08 0F A0 00 00 01 67 45 53 49 47 4E’H, gevolgd door het commando Select met P1P2 = ‘02 0C’H en data = ‘44 01’H.

2. Lees de PointerLastDayRecord met het commando Read Binary, waarbij de offset 2 is en het verwachte aantal bytes in de response 2.

Indien PointerLastDayRecord gelijk aan ‘00 00’H is, dan bestaat er (nog) geen enkel DailyRecord:

a. Roep de functie voor het toevoegen van een nieuw DailyRecord aan met ActivityDate als argument.

b. Herhaal de stappen vanaf stap 2.

Indien PointerLastDayRecord niet gelijk aan ‘00 00’H is:

a. Lees de DayRecordLength met het commando Read Binary, waarbij de offset PointerLastDayRecord is en het verwachte aantal bytes in de response 2.

b. Lees de DayRecordDate met het commando Read Binary, waarbij de offset PointerLastDayRecord + 6 is en het verwachte aantal bytes in de response 4.

Indien DayRecordDate groter is dan ActivityDate,

dan betreft dit een foutsituatie en stopt verdere verwerking.

Indien DayRecordDate kleiner is dan ActivityDate,

dan ontbreekt de gewenste DailyRecord

(hou hier ook rekening met Dagovergangen zoals beschreven in § 5.2.7 en § 7.5):

a. Roep de functie voor het toevoegen van een nieuw DailyRecord aan met ActivityDate als argument.

b. Herhaal de stappen vanaf stap 2.

Indien DayRecordDate gelijk is aan ActivityDate:

a. Lees de PointerLastSessionRecord met het commando Read Binary, waarbij de offset PointerLastDayRecord + 2 is en het verwachte aantal bytes in de response 2.

Indien de PointerLastSessionRecord gelijk aan ‘00 00’H is,

dan bevat het DailyRecord (nog) geen enkel SessionRecord:

i. Roep de functie voor het toevoegen van een nieuw SessionRecord aan.

ii. Herhaal de stappen vanaf het lezen van PointerLastSessionRecord.

Indien de PointerLastSessionRecord niet gelijk aan ‘00 00’H is:

i. Lees de PointerLastActivityRecord met het commando Read_Binary, waarbij de offset PointerLastSessionRecord is en het verwachte aantal bytes in de response 2.

Indien de PointerLastActivityRecord gelijk aan ‘00 00’H is,

dan wordt nu het eerste ActivityRecord aan het SessionRecord toegevoegd: zet de NewActivityPointer dus op PointerLastSessionRecord + Length(SessionRecordHeader).

Indien de PointerLastActivityRecord niet gelijk aan ‘00 00’H is,

dan bestaat er een eerder ActivityRecord:

a. Lees de LastActivityRecordHeader met het commando Read_Binary, waarbij de offset PointerLastActivityRecord is en het verwachte aantal bytes in de response 3.

b. Bepaal uit de eerste 5 bits van de LastActivityRecordHeader de LastActivityType.

Indien de LastActivityType gelijk is aan “Afsluiting” of “Nieuwe eindtijd”,

dan moet er een nieuwe sessie worden geboekt:

i. Roep de functie voor het toevoegen van een nieuw SessionRecord aan.

ii. Herhaal de stappen vanaf het lezen van PointerLastSessionRecord.

Indien de LastActivityType gelijk is aan “Login”, “Start werk” of “Start pauze”, maar de boordcomputer heeft geen kaartsessie meer actief of geblokkeerd,

dan moet er ook een nieuwe sessie worden geboekt:

i. Roep de functie voor het toevoegen van een nieuw SessionRecord aan.

ii. Herhaal de stappen vanaf het lezen van PointerLastSessionRecord.

Indien de LastActivityType gelijk is aan “Start werk”,

Werk dan diens Rijtijdteller voor de laatste maal bij: voer een Update Binary commando uit, waarbij de offset PointerLastActivityRecord + 3 is en de data de door de boordcomputer bijgehouden rijtijdteller; reset die laatste ook direct naar nul (0).

Zet NewActivityPointer = PointerLastActivityRecord + 6

Indien de LastActivityType NIET gelijk is aan “Start werk”,

Zet NewActivityPointer = PointerLastActivityRecord + 3

NB1. NewActivityPointer, LastActivityRecordHeader en NewActivityLength maken géén onderdeel van de structuur uit, maar zijn tijdelijke waardes in het geheugen van de boordcomputer.

NB2. Indien het LastActivityRecord een “(Start) werk” of “(Start) pauze” betreft worden met het bovenstaande algoritme de laatste 3 bytes (waarin de tijdsduur van de activiteit tijdelijk werd bijgehouden) overschreven door het nieuw toe te voegen ActivityRecord.

Voeg nu het nieuwe ActivityRecord toe in het in het huidige SessionRecord:

1. Bepaal eerst aan de hand van de ActivityType de lengte van het nieuwe ActivityRecord:

a. Indien “(Start) werk”, dan NewActivityLength = 9;

b. Indien “(Start) pauze”, dan NewActivityLength = 6;

c. Indien anders, dan NewActivityLength = 3;

2. Bepaal dan aan de hand van NewActivityPointer + NewActivityLength of er nog voldoende vrije ruimte resteert in EF.Driver_Activity_Data en ruim zo nodig een of meer van de oudste DailyRecords op (zie ook 5.3).

3. Voer een Update Binary commando uit, waarbij de offset PointerLastSessionRecord is en de data NewActivityPointer (hiermee wordt PointerLastActivityRecord bijgewerkt).

4. Voer een Update Binary commando uit, waarbij de offset NewActivityPointer is en de data bestaat uit 3 bytes:

a. 5 bits ActivityType: het als argument gegeven type activiteit / gebeurtenis;

b. 1 bit ManualBit: de als argument gegeven handmatig-bit;

c. 1 bit RijdenBit: de bit die aangeeft of de auto NU rijdt (‘1’B) of stilstaat (‘0’B);

d. 17 bits ActivityTime: het als argument gegeven (start)tijdstip.

5. Indien de nieuwe activiteit een “(Start) werk” of “(Start) pauze” betreft:

a. Voer een Update Binary commando uit, waarbij de offset PointerLastSessionRecord + 2 is en de data NewActivityPointer (hiermee wordt PointerLastPWActivityRecord bijgewerkt);

b. Voer een Update Binary commando uit, waarbij de offset NewActivityPointer + 3 is en de data bestaat uit 3 bytes gelijk aan ‘00 00 00’H;

c. Reset op de boordcomputer de tijdsduurteller naar nul (0) seconden;

d. Indien de nieuwe activiteit een “(Start) werk” betreft:

i. Voer een Update Binary commando uit, waarbij de offset NewActivityPointer + 6 is en de data bestaat uit 3 bytes gelijk aan ‘00 00 00’H;

ii. Reset op de boordcomputer de rijtijdteller naar nul (0) seconden.

6. Voer een Update Binary commando uit met offset is PointerLastDayRecord en als data DayRecordLength + NewActivityLength (hiermee wordt DayRecordLength bijgewerkt).

Voer tot slot nog de procedure uit voor het door de boordcomputer ondertekenen van het aangepaste SessionRecord, zoals beschreven in § 5.4.

Regeling
Regeling specificaties en typegoedkeuring boordcomputer taxi
Soort
Ministeriële regeling
Geldend vanaf
19-12-2020
BWB-id
BWBR0027945
Versie
2020-12-19_0

In de hele regeling · Officiële tekst op wetten.overheid.nl