Installing the Front Assist Camera

One of the most significant retrofits for me. This retrofit adds the following useful functions:

  • lane keeping assist
  • automatic high beam
  • Traffic Jam Assist – automatic start and stop of movement in traffic jams
  • road sign recognition with display on the cockpit
  • pACC – predictive adaptive cruise control, the cruise speed is based on the standard infotainment map data and road signs
  • it’s also a requirement for matrix headlights (I don’t have those yet)

Back when the car was bought in the US, I already planned to install a camera sooner or later, and since then I started gathering the components for this retrofit:

  • camera 3Q0980654L + wiring
  • black cap 8V0907299A 4PK for the mirror on the Sportback body
  • black cap 8V0907299 4PK for the mirror on the Sportback body
  • fuse tap

I bought the camera on Allegro, and everything else on AliExpress. In the end I ended up with this set:

The biggest challenge in this retrofit is the camera mount — if your car didn’t originally have a camera from the factory, there are two paths:

  1. buy an aftermarket camera mount on AliExpress that attaches slightly to the side of the rearview mirror. The downside of this option is that there can be camera calibration issues, and a second downside — it looks a bit sketchy from outside.
  2. the second option is to replace the windshield with a new one that already has the camera mount built in.

I recently talked to a friend whose windshield was cracked and who was about to replace it, so I offered him mine (it was in fairly good condition), and I’d buy myself a new original one with the camera mount.

To find the right glass I opened ETKA and, using the PR code QK1, found the one I needed:

The glass I needed for the Sportback body turned out to be part number 8V3845099Q NVB, but when I ordered it from the factory, it turned out that a new revision, 8V3845099AQ NVB, had appeared since August 2023. I had a not-so-recent ETKA. I checked in an ETKA with more up-to-date databases, and yes, that’s correct:

After ordering, I waited a month for delivery. Once the glass arrived, I went to have it installed the very next day.

Technicians were called in and they cut out the old glass fairly quickly

While my old glass was being moved to my friend’s car, I decided to run the wiring. For that I disassembled the left A-pillar and the sill, and laid the wiring. At the camera location, you need to enlarge the cut in the headliner, since there are additional wires going to the camera. A utility knife makes this easy.

Out of ignorance I also ran the “ground” wire there, but there’s no dedicated ground point on the headliner — properly it should be grounded near the pillar or the sill. Since I didn’t want to redo all the wiring, I took the ground from the panoramic roof open button. There’s also a nuance with the wires to the auto-dimming mirror. Since it will now sit lower, the wire to it will be under tension, so it needs to be lengthened or you need to try pulling it a bit out from under the headliner — I managed to pull mine out a bit.

After laying the wiring, I told the technicians they could start installing the new windshield. There’s nothing complicated there — they applied the adhesive, degreased the installation area, and set the glass in place.

Then you need to wait at least 2 hours for the adhesive to dry. Overall the adhesive takes a week to fully cure; the car can be used, but very carefully: no driving on cobblestones, no speeding over speed bumps, no hitting potholes, no washing the windshield with a high-pressure washer.

I had a couple of free hours at the shop while the adhesive dried, and I used that time to connect the wiring at the sill. Below is the diagram and a table of what goes where:

ModuleColorPinModulePin
Camerabrown5Ground (GND)left sill
Camerabrown10Camera area heater2
Camerared-yellow4Camera area heater1
Cameraorange-brown2Connector “D” at left foot6
Cameraorange-gray8Connector “D” at left foot5
Cameraorange-white7ACC radar5
Cameraorange-brown1ACC radar6
Camerablack-red6Fuse box32

Connector “D” from the table, on the diagram
Connector “D” (black) from the table, in real life

Probably the hardest part of the wiring is running the 2 CAN bus wires from the camera to the adaptive cruise radar under the hood. I routed these wires through the special grommet near the driver’s feet, which is also where I ran the wires for PLA and the Soundaktor.

The next hardest part is probably disassembling the left sill, where you also need to remove the hood release handle.

After connecting all the wires, the dashboard immediately said the car had detected the camera — but how? The camera hadn’t been coded yet, but the car must have picked up a CAN message from it.

Before starting the coding, you need to load the parameter set. My camera is a 3Q0980654L with firmware 0610 H11, and the parameter set was the following: with lane keeping 60+ sec + Traffic Jam Assist.

Next, everything needed to be coded:

19 Gateway
Adaptation:
A5 Front sensor for drivers assistant systems → Enable
16 Steering column electronics
Adaptation:
Driver assist systems button installed → Apply
44 Steering assist
Long coding:
Byte 01 – Bit 3 (Heading_control_assist): Activate
17 Instrument cluster
Long coding:
Byte 04 – Bit 6 (Lane_assist): Activate
Byte 11 – Bit 1 (Lane_assist_BAP): Activate
Byte 05 – Bit 2 (traffic_sign_display): Activate
5F Multimedia
Adaptation:
Car_Function_List_BAP_Gen2:
- LDW_HCA_0x19: activated
- LDW_HCA_0x19_msg_bus: Terminal 15
- traffic_sign_recognition_0x21: Activate
- traffic_sign_recognition_0x21_msg_bus: CAN_Extended (Extended data bus)
Car_Function_Adaptations_Gen2:
- menu_display_Lane_Departure_Warning: Activate
- menu_display_Lane_Departure_Warning_over_threshold_high: Activate
- menu_display_road_sign_identification: Activate
- menu_display_road_sign_identification_over_threshold_high: Activate
76 (10) Park assist
Long coding:
Lane keeping assist, linked to steering assist Byte 3 – Bit 5 (HeadingControl Unterstutzung Auswahl): Activate (Spurhalteassistent aktiviert)
13 Adaptive cruise 
Long coding:
Byte 03 – Bit 6 (Front_camera): Installed
03 ABS 
Long coding:
Byte 29 – Bit 5 (Electromechanical parking brake): activate (emergenay braking)
3C Lane change assist 
Long coding:
Lane_Departure_Warning_System:_with_Lane_Departure_Warning_System Front_Sensors_Driver_Assistance_System:_with_Front_Sensors_Driver_Assistance_System → Apply
A5 Front sensor for drivers assistant systems
Long coding:
[LO]_Brand: [VO]_Audi
[LO]_Class: [VO]_A
[LO]_Generation: [VO]_Generation_7
[LO]_Bodystyle: [VO]_Limousine_hatchback // Body style
[LO]_Expansion: [VO]_Not_coded
[LO]_Production_region: [VO]_EU
[LO]_Country_variant: [VO]_Europe
[LO]_Chassis: [VO]_Steel_springs // Suspension
[LO]_Steering_bar: [VO]_Dynamic_steering_bar
[LO]_Windshield: [VO]_Heat_protecting_glass
[LO]_Traffic_side: [VO]_Right_traffic
[LO]_PSD_Version: [VO]_PSD_15 // pACC predictive data version (PSD_14 for MHS2)
[LO]_Navigation: [VO]_MIB_High // Infotainment type
[LO]_AAG: [VO]_Not_coded // If a tow hitch is fitted
[LO]_SWA: [VO]_Coded // If Side Assist is fitted
[LO]_ACC: [VO]_Coded // If ACC is fitted
[LO]_Pedestrian_break: [VO]_Not_coded
[LO]_Blind_spot_detection: [VO]_Coded
[LO]_Rain_light_sensor: [VO]_Coded
[LO]_Main_unit: [VO]_enabled
[LO]_PLA: [VO]_Coded
[LO]_ESP: [VO]_Coded
[LO]_Personalize_VZE: [VO]_Per_VZE_coded
[LN]_Lan_assist_system_mode: [VN]_Selection_over_menu
[LO]_Personalized_key: [VO]_Version_0.1
[LO]_Networking_variant: [VO]_MQBB // Platform
[LO]_Radar_interface: [VO]_Coded
[LO]_Perso_HC: [VO]_Last_setting // Remembers the selected mode when the ignition is turned off
[LO]_Point_of_intervention: [VN]_early_setting_over_menu // Enables adaptive lane guidance (ALG)
[LO]_LaneAssist_AGW_output: [VO]_enabled
[LO]_Lane_assist_off_text: [VO]_disabled
[LO]_Emergency_Assist: [VO]_EA_Variant_2
[LO]_VZE: [VO]_Coded // Road sign recognition
[LO]_HC_mob_line: [VO]_Coded // Lane centering (?)
[LO]_HC: [VO]_Coded
[LO]_FCWP_default_on_prewarning: [VO]_last_mode
[LO]_FCWP_delivery_status_prewarning: [VO]_off
[LO]_FCWP_extended_prewarning_settings: [VO]_Not_coded
[LO]_FCWP_warning_indicator: [VO]_Not_coded
[LO]_FCWP: [VO]_Not_coded
[LO]_FLA_Additional_High_Beam: [VO]_no_Additional_High_Beam
[LO]_FLA_Headinglight_type: [VO]_LED // If LED headlights
[LO]_Mains_frequency: [VO]_50_Hz
[LO]_AFS_coding_Light_Assist: [VO]_High_Beam_Assist // Auto high beam
[LO]_HC_LONGPRESS: [VO]_Not_Coded // Assist activation via long press (Audi only)

For Traffic Jam Assist to work for ~10 sec, the parking sensor block’s part number needs to start with 5QA… and the ACC block firmware needs to be at least 0780 H10-11; the ACC block also needs the following coding:

Block 13 → Coding: Byte 11 – Bit 0 (Pretriggertime_reduction): Deactivate → Apply

Since I didn’t have a calibration target board, I found someone who already had a calibrated camera on an A3 Sportback and entered the calibration values manually. Also, since sign recognition doesn’t work properly in my country (Ukraine), I had to select the country manually (Par_country_mode: Manuel), matching the closest traffic rules — that turned out to be Sweden (205). You can experiment with other countries too:

  • 54 — Croatia (50/80/130)
  • 56 — Cyprus (50/80/100)
  • 57 — Czechia (50/90/130)
  • 58 — Denmark (50/80/110)
  • 68 — Estonia (50/90/90)
  • 73 — Finland (50/80/100)
  • 74 — France (50/90/110)
  • 82 — Germany (50/100/∞)
  • 85 — Greece (50/90/120)
  • 118 — Latvia (50/90/110)
  • 124 — Lithuania (50/90/130)
  • 125 — Luxembourg (50/90/110)
  • 172 — Poland (50/60, 90/100, 120/140)
  • 173 — Portugal (50/90/120)
  • 177 — Romania (50/90/130)
  • 178 — Russia (60/90/110)
  • 197 — Spain (50/90/120)
  • 205 — Sweden (50/90/110)
  • 206 — Switzerland (50/80/120)
A5 Front sensor for drivers assistant systems
Adaptations (in developer mode, password 89687):
[VN]_Road_sign_recognition_fusion_mode:
[LN]_Road_sign_recognition_fusion_mode: [VN]_Road_Sign_Fusion
[VO]_Adaptation_tsr:
[LO]_Par_relevance_mode: [VO]_enabled
[LO]_Par_country_mode: [VO]_Manuel
[LO]_Par_country_code_RSR: 68
[LO]_Par_country_code_VZF: 68
[VN]_Productionmode deactivate:
[LN]_Productionmode_deactivate: [VN]_deactivate
[VN]_Calibration_target_positions:
[LN]_Target_1_calibration_mark_1_x_coordinate: 2 360 [UN]_mm
[LN]_Target_1_calibration_mark_1_y_coordinate: 742 [UN]_mm
[LN]_Target_1_calibration_mark_1_z_coordinate: 1 597 [UN]_mm
[LN]_Target_1_calibration_mark_2_x_coordinate: 2 360 [UN]_mm
[LN]_Target_1_calibration_mark_2_y_coordinate: -742 [UN]_mm
[LN]_Target_1_calibration_mark_2_z_coordinate: 1 597 [UN]_mm
[LN]_Target_1_calibration_mark_3_x_coordinate: 2 360 [UN]_mm
[LN]_Target_1_calibration_mark_3_y_coordinate: 742 [UN]_mm
[LN]_Target_1_calibration_mark_3_z_coordinate: 1 003 [UN]_mm
[LN]_Target_1_calibration_mark_4_x_coordinate: 2 360 [UN]_mm
[LN]_Target_1_calibration_mark_4_y_coordinate: -742 [UN]_mm
[LN]_Target_1_calibration_mark_4_z_coordinate: 1 003 [UN]_mm
[VN]_BAP_personalisation:
[LN]_BAP_personalisation: [VN]_activated
[VN]_Body_height_wheelhouse_edge:
[LN]_Body height wheelhouse edge front left: 660 [UN]_mm
[LN]_Body height wheelhouse edge front right: 660 [UN]_mm
[LN]_Body height wheelhouse edge rear left: 670 [UN]_mm
[LN]_Body height wheelhouse edge rear right: 670 [UN]_mm
[VN]_Lane_departure_warning_speed_limit_for_trailer_operation:
[LN]_Lane_departure_warning_speed_limit_for_trailer_operation: 300 [UN]_km/h
[VO]_standstill_mode:
[LN]_standstill_mode: [VN]_not_activated
[VN]_Lane_assist_warning_intensity:
[LN]_Lane_assist_warning_intensity: [VN]_Selection_over_menu
[VN]_Activation of Development Messages:
[LO]_Activation_of_development_messages_internal: [VN]_not_active
[LO]_Activation_of_development_messages_HCA_state: [VN]_not_active
[LO]_Activation_of_development_messages_HCA_lane: [VN]_not_active
[LO]_Activation_of_development_messages_EHR: [VN]_not_active
[LO]_Activation_of_development_messages_VZF/TSR: [VN]_not_active
[LO]_Activation_of_development_messages_WLA: [VN]_not_active
[LO]_Activation_of_development_messages_lane: [VN]_not_active
[LO]_Activation_of_development_messages_reserved: [VN]_not_active
[VO]_Xcp_interface:
[LN]_Par_xcp_interface: [VN]_not_activated
[VO]_Mask_error_reactions_for_development:
[LN]_par_Mask_error_reactions_for_development: [VN]_not_activated
[VN]_Initial_calibration_result:
[LN]_Pitch_angle: 1,194 [UN]_°
[LN]_Yaw_angle: 1,027 [UN]_°
[LN]_Roll_angle: -1,001 [UN]_°
[LN]_Camera_height: 1 287 [UN]_mm
[VN]_Productionmode:
[LN]_Productionmode: [VN]_not activated
[VN]_Roller_Test_Stand_Mode:
[LN]_RM_Set_Level: [VN]_not_activated
[VN]_Personalisation_point_of_intervention:
[LN]_Personalisation_point_of_intervention: [VN]_last_setting
[VN]_Calibration_Board_Distance:
[LN]_Calibration_Board_Distance: 1 500 [UN]_mm
[VN]_Axle_offset_adaption:
[LN]_Vehicle_Tranversal_Position_Front_Axle: 0 [UN]_mm
[LN]_Vehicle_Tranversal_Position_Rear_Axle: 0 [UN]_mm
[VN]_Lane_assist_on_state:
[LN]_Lane_assist_on_state: [VN]_On_setting_over_menu
[VO]_Masked_fault_classes:
[LN]_par_Masked_fault_classes_1: 255
[LN]_par_Masked_fault_classes_2: 255
[LN]_par_Masked_fault_classes_3: 255
[LN]_par_Masked_fault_classes_4: 255
[VO]_WLA_adjustment:
[LO]_BrightnessThreshold_active: 1
[LO]_BrightnessThreshold_passive: 20

After all the coding and adaptations, everything worked!