C
Qt Cluster: Rendering and Recovery from Main UI Failure
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
// This file is part of the Qt Safe Renderer module
#ifndef CLUSTERDATABACKEND_H
#define CLUSTERDATABACKEND_H
#include <QObject>
#include <QMap>
#include <QVariant>
#ifdef QT_SERIALBUS_LIB
#include <QCanBusDevice>
#include <QCanBusFrame>
#endif
#include <QTcpServer>
#include <QTcpSocket>
class ClusterDataBackend : public QObject
{
Q_OBJECT
public:
ClusterDataBackend(QObject* parent=0);
~ClusterDataBackend();
public:
QStringList availableZones() const;
QMap<QString, QVariantMap> zoneMap() const;
void initializeAttributes();
signals:
void vehicleSpeedChanged(double vehicleSpeed, const QString &zone = QString());
void latitudeChanged(double latitude, const QString &zone = QString());
void longitudeChanged(double longitude, const QString &zone = QString());
void directionChanged(double direction, const QString &zone = QString());
void flatTireChanged(bool flatTire, const QString &zone = QString());
void doorOpenChanged(bool doorOpen, const QString &zone = QString());
void lightFailureChanged(bool lightFailure, const QString &zone = QString());
void reverseChanged(bool Reverse, const QString &zone = QString());
void leftTurnLightChanged(bool leftTurnLight, const QString &zone = QString());
void rightTurnLightChanged(bool rightTurnLight, const QString &zone = QString());
void headLightChanged(bool headLight, const QString &zone = QString());
void parkLightChanged(bool parkLight, const QString &zone = QString());
void carIdChanged(int carId, const QString &zone = QString());
void brakeChanged(bool brakeOn, const QString &zone = QString());
void engineTempChanged(int engineTemp, const QString &zone = QString());
void oilTempChanged(double oilTemp, const QString &zone = QString());
void oilPressureChanged(int oilPressure, const QString &zone = QString());
void batteryPotentialChanged(double batteryPotential, const QString &zone = QString());
void gasLevelChanged(double gasLevel, const QString &zone = QString());
void rpmChanged(int rpm, const QString &zone = QString());
void gearChanged(int gear, const QString &zone = QString());
void crashChanged(bool crash, const QString &zone = QString());
private:
#ifdef QT_SERIALBUS_LIB
void handlePGN65268(const QCanBusFrame& frame); // Tire Condition - TIRE
void handlePGN64933(const QCanBusFrame& frame); // Door Control 2 - DC2
void handlePGN64972(const QCanBusFrame& frame); // Light Control
void handlePGN61445(const QCanBusFrame& frame); // Electronic Transmission Controller 2 - ETC2
void handlePGN65265(const QCanBusFrame& frame); // Cruise Control/Vehicle Speed - CCVS
void handlePGN65267(const QCanBusFrame& frame); // vehicle position - VP
void handlePGN65256(const QCanBusFrame& frame); // vehicle direction/speed
void handlePGN65262(const QCanBusFrame& frame); // Engine Temperature 1 - ET1
void handlePGN65263(const QCanBusFrame& frame); // Engine Fluid Level/Pressure 1 - EFL/P1
void handlePGN65271(const QCanBusFrame& frame); // Vehicle Electrical Power - VEP
void handlePGN65276(const QCanBusFrame& frame); // Dash Display - DD
void handlePGN61444(const QCanBusFrame& frame); // Electronic Engine Controller 1 - EEC1
void handlePGN60928(const QCanBusFrame& frame); // Address Claimed - ACL
private slots:
void canError(QCanBusDevice::CanBusError error);
void canFramesReceived();
void canStateChanged(QCanBusDevice::CanBusDeviceState state);
#endif
public slots:
void acceptConnection();
private slots:
void updateServerProgress();
private:
#ifdef QT_SERIALBUS_LIB
QCanBusDevice* m_canDevice;
#endif
QTcpServer m_tcpServer;
QTcpSocket *m_tcpServerConnection;
double m_vehicleSpeed;
double m_latitude;
double m_longitude;
double m_direction;
bool m_flatTire;
QMap<QString,bool> m_doorOpen;
QMap<QString, QVariantMap> m_zonedFeatures;
bool m_lightFailure;
int m_gear;
char m_signalLights;
bool m_headLight;
bool m_parkLight;
int m_carId;
bool m_brake;
qint8 m_engineTemp;
double m_oilTemp;
int m_oilPressure;
double m_batteryPotential;
double m_gasLevel;
int m_rpm;
bool m_crash;
};
#endif // CLUSTERDATABACKEND_H