I have built your driver and bench tested it, and it seems to work, but there are some aspects of the driver that don't seem right.
It seems to be trying to calculate true-airspeed, which is not the job of the AP_Airspeed library. In ArduPilot the AP_Airspeed library is supposed to return EAS, then the AP_Baro library provides a function to get the EAS2TAS ratio. Then when airspeed is used the appropriate value is used. So for speed scaling of surfaces EAS is used. For navigation purposes we use TAS.
I'm also puzzled as to why it is doing the corrections on the final airspeed rather than on the differential pressure. The backend drivers are supposed to give a differential pressure then it is the job of the frontend to convert that differential pressure to EAS. By doing it in the way your driver has done it the ARSPD_RATIO parameter is not used, which means the automatic calibration for positional error in the pitot won't be possible.
Can you explain a bit more about the correction factors?