C
Qt Quick Ultralite Automotive Cluster Demo
// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial #ifndef DRIVETRAIN_H #define DRIVETRAIN_H #include <stdint.h> namespace Simulation { class Drivetrain { public: struct DriveData { float speed; float rpm; int gear; float odo; float range; float battery; float fuel; float coolantTemp; }; struct Config { static const int MAX_GEARS = 10; float maxSpeed; float maxRpm; float minRpm; float shiftUpAtRpm; float shiftDownAtRpm; float tireCircumference; // cm float diffRatio; int gearNum; float gearRatios[MAX_GEARS]; float batteryFillRatio; float batteryDrainRatio; float coolantHeatRatio; float coolantCooldownRatio; float optimalTemp; float maxTemp; float maxRange; }; Drivetrain(const Config &config); void update(uint32_t tick, float acceleration); void updateCruiseControl(uint32_t tick, float targetSpeed); void reset(); void resetOdo(float value = 0); void resetBattery(float value = 0); float getSpeed(float rpm, int gear) const; float getRpm(float speed, int gear) const; const DriveData &getDriveData() const { return _data; } private: float updateRpm(uint32_t tick, float acceleration); void updateGearShift(uint32_t tick, float prevRpm, float acceleration); void updateSpeed(); void applySpeedLimit(); void updateOdo(uint32_t tick); void updateRange(); void updateBattery(uint32_t tick, float acceleration); void updateFuelLevel(); void updateCoolantTemp(uint32_t tick, float acceleration); void shiftGear(int delta); DriveData _data; const Config _config; uint32_t _constSpeedTime; }; } // namespace Simulation #endif // DRIVETRAIN_H