@@ -213,7 +213,7 @@ void addDetailStateInfos(void) {
213213 addPayload (CODE_PAS_COUNTER , ui16_time_ticks_between_pas_interrupt );
214214 addPayload (CODE_VER_SPEED_HIGH_BYTE , ui16_virtual_erps_speed >> 8 );
215215 addPayload (CODE_VER_SPEED , ui16_virtual_erps_speed );
216-
216+ addPayload ( CODE_LOCKSTATUS , ui8_lockstatus );
217217 // 9 more elements left/avail (max30)
218218}
219219
@@ -279,6 +279,23 @@ void digestConfigRequest(uint8_t configAddress, uint8_t requestedCodeLowByte, ui
279279 ui8_offroad_state = requestedValue ;
280280 addPayload (requestedCodeLowByte , ui8_offroad_state );
281281 break ;
282+ case CODE_PASSCODE :
283+ if ((ui8_lockstatus == 0 ) && (configAddress == EEPROM_ADDRESS )){
284+ // write new passcode only if unlocked
285+ ui16_passcode == ((uint16_t ) requestedValueHighByte << 8 )+ (uint16_t ) requestedValue ;
286+ eeprom_write (OFFSET_PASSCODE_HIGH_BYTE , requestedValueHighByte );
287+ eeprom_write (OFFSET_PASSCODE , requestedValue );
288+ addPayload (CODE_PASSCODE_HIGH_BYTE , ui16_aca_flags >> 8 );
289+ addPayload (requestedCodeLowByte , ui16_aca_flags );
290+ }else if ((ui8_lockstatus == 1 ) && (configAddress != EEPROM_ADDRESS ) && (ui16_passcode == (((uint16_t ) requestedValueHighByte << 8 )+ (uint16_t ) requestedValue ))){
291+ // unlock if locked and correct code
292+ ui8_lockstatus = 0 ;
293+ addPayload (CODE_PASSCODE_HIGH_BYTE , ui16_aca_flags >> 8 );
294+ addPayload (requestedCodeLowByte , ui16_aca_flags );
295+ }else {
296+ addPayload (CODE_ERROR , CODE_ERROR );
297+ }
298+ break ;
282299 case CODE_ACA_FLAGS :
283300 ui16_aca_flags = ((uint16_t ) requestedValueHighByte << 8 )+ (uint16_t ) requestedValue ;
284301 if (configAddress == EEPROM_ADDRESS ) {
0 commit comments