PID hpp: brewblox-firmware/Pid.hpp at develop · BrewBlox/brewblox-firmware · GitHub
PID cpp: brewblox-firmware/Pid.cpp at develop · BrewBlox/brewblox-firmware · GitHub
PWM hpp: brewblox-firmware/ActuatorPwm.hpp at develop · BrewBlox/brewblox-firmware · GitHub
PWM cpp: brewblox-firmware/ActuatorPwm.cpp at develop · BrewBlox/brewblox-firmware · GitHub
I suspect that the source code by itself is less than helpful.
If required, a basic explanation of PID control can be found at PID for Dummies - Control Solutions
In our case, the PID does not directly control the digital actuator: It controls an analog actuator, typically a PWM. The PID output can be pretty much whatever, but the effective range for a PWM is 0-100.
The PWM controls the digital actuator.
The old BrewPi software used to have a setting for estimated overshoot. This was made obsolete by improvements to the generic PID calculation. Overshoot correction is fully handled by the Td/derivative part.
The old BrewPi software also used to have a separate PID for air temp and beer temp. The beer temp PID used air temp as a black box heater / cooler by adjusting the air temp setpoint.
The air temp PID would use the heater/cooler to bring the air temp to the temperature desired by the beer temp PID.
With the new software, we found that this approach is no longer required. A PID can accurately adjust beer temp by using the heater / cooler directly.
There are setups where this indirect approach is still useful (eg. HERMS HLT), so it is still supported. Documentation can be found at Brewblox control chains | Brewblox