C
Event Sender: Sending Messages to Applications
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
// This file is part of the Qt Safe Renderer module
#include <QHostAddress>
#include <QSettings>
#include <QTimer>
#include <QProcess>
#include "tcpdatacontrol.h"
TCPDataControl::TCPDataControl(QObject *parent)
: DataControlInterface(parent),
m_frontLeftDoorOpen(false),
m_frontRightDoorOpen(false),
m_rearLeftDoorOpen(false),
m_rearRightDoorOpen(false),
m_hoodOpen(false),
m_trunkOpen(false),
m_headLight(false),
m_rightTurnLight(false),
m_leftTurnLight(false),
m_hazardSignal(false),
m_brake(false),
m_crash(false),
m_connection(false)
{
const QString items[] = {
"turnleft",
"turnright",
"iconCoolant",
"iconFuel",
"iconParkingBrake",
"iconTyre",
"iconBattery",
"iconSeatbelt",
"iconLamp",
"iconLights"
};
for (const QString& item : items) {
m_stringList.append(item);
}
}
TCPDataControl::~TCPDataControl()
{
m_tcpSocket.close();
}
static bool printIP = true;
void TCPDataControl::connectToServer(const QString& ip, int port)
{
// Check if a connection is already in progress
if (m_tcpSocket.state() == QAbstractSocket::ConnectedState ||
m_tcpSocket.state() == QAbstractSocket::ConnectingState) {
// Close the existing connection before starting a new one
m_tcpSocket.abort();
}
connect(&m_tcpSocket, &QAbstractSocket::stateChanged,
this, &TCPDataControl::onConnectionStateChanged);
// Emit the Connecting state
emit connectionStateChanged(Connecting);
// Set the new address
setAddress(ip, port);
if (printIP) {
printIP = false;
qDebug() << "Connecting to" << ip << ":" << port;
}
m_tcpSocket.connectToHost(ip, port);
}
void TCPDataControl::setAddress(QString ip, int port)
{
if (ip.isEmpty()) {
return;
}
if (ip != m_address) {
m_address = ip;
}
if (port != m_port) {
m_port = port;
}
}
void TCPDataControl::onConnectionStateChanged(QAbstractSocket::SocketState socketState)
{
ConnectionState connectionState = Disconnected;
if (socketState == QAbstractSocket::UnconnectedState) {
connectionState = Disconnected;
setConnectionBool(false);
} else if (socketState == QAbstractSocket::ConnectedState) {
connectionState = Connected;
setConnectionBool(true);
emit dataReset();
} else if (socketState == QAbstractSocket::ConnectingState) {
connectionState = Connecting;
}
emit connectionStateChanged(connectionState);
}
void TCPDataControl::handleTcpError(QAbstractSocket::SocketError socketError)
{
Q_UNUSED(socketError);
qWarning() << "TCP Error:" << m_tcpSocket.errorString();
}
int TCPDataControl::carId() const
{
return m_carId;
}
bool TCPDataControl::headLight() const
{
return m_headLight;
}
bool TCPDataControl::parkLight() const
{
return m_parkLight;
}
bool TCPDataControl::rightTurnLight() const
{
return m_rightTurnLight;
}
bool TCPDataControl::leftTurnLight() const
{
return m_leftTurnLight;
}
int TCPDataControl::gear() const
{
return m_gear;
}
bool TCPDataControl::lightFailure() const
{
return m_lightFailure;
}
bool TCPDataControl::frontLeftDoorOpen() const
{
return m_frontLeftDoorOpen;
}
bool TCPDataControl::frontRightDoorOpen() const
{
return m_frontRightDoorOpen;
}
bool TCPDataControl::rearLeftDoorOpen() const
{
return m_rearLeftDoorOpen;
}
bool TCPDataControl::rearRightDoorOpen() const
{
return m_rearRightDoorOpen;
}
bool TCPDataControl::hoodOpen() const
{
return m_hoodOpen;
}
bool TCPDataControl::trunkOpen() const
{
return m_trunkOpen;
}
bool TCPDataControl::flatTire() const
{
return m_flatTire;
}
double TCPDataControl::direction() const
{
return m_direction;
}
double TCPDataControl::longitude() const
{
return m_longitude;
}
double TCPDataControl::latitude() const
{
return m_latitude;
}
double TCPDataControl::vehicleSpeed() const
{
return m_vehicleSpeed;
}
bool TCPDataControl::hazardSignal() const
{
return m_hazardSignal;
}
bool TCPDataControl::brake() const
{
return m_brake;
}
double TCPDataControl::oilTemp() const
{
return m_oilTemp;
}
int TCPDataControl::oilPressure() const
{
return m_oilPressure;
}
double TCPDataControl::batteryPotential() const
{
return m_batteryPotential;
}
double TCPDataControl::gasLevel() const
{
return m_gasLevel;
}
int TCPDataControl::rpm() const
{
return m_rpm;
}
int TCPDataControl::engineTemp() const
{
return m_engineTemp;
}
bool TCPDataControl::crashArg() const
{
return m_crash;
}
void TCPDataControl::setVehicleSpeed(double vehicleSpeed)
{
if (m_vehicleSpeed == vehicleSpeed) {
return;
}
QString msg("vehicleSpeed:" + QString::number(vehicleSpeed) + " ");
write(msg.toLatin1());
m_vehicleSpeed = vehicleSpeed;
emit vehicleSpeedChanged(vehicleSpeed);
}
void TCPDataControl::setLatitude(double latitude)
{
if (m_latitude == latitude) {
return;
}
QString msg("latitude:" + QString::number(latitude) + " ");
write(msg.toLatin1(), msg.length());
m_latitude = latitude;
emit latitudeChanged(latitude);
}
void TCPDataControl::setLongitude(double longitude)
{
if (m_longitude == longitude) {
return;
}
QString msg("longitude:" + QString::number(longitude) + " ");
write(msg.toLatin1());
m_longitude = longitude;
emit longitudeChanged(longitude);
}
void TCPDataControl::setDirection(double direction)
{
if (m_direction == direction) {
return;
}
QString msg("direction:" + QString::number(direction) + " ");
write(msg.toLatin1());
m_direction = direction;
emit directionChanged(direction);
}
void TCPDataControl::setFlatTire(bool flatTire)
{
if (m_flatTire == flatTire) {
return;
}
QString msg("flatTire:" + QString::number(flatTire) + " ");
write(msg.toLatin1());
m_flatTire = flatTire;
emit flatTireChanged(flatTire);
}
void TCPDataControl::setFrontLeftDoorOpen(bool doorOpen)
{
if (m_frontLeftDoorOpen == doorOpen) {
return;
}
QString msg("frontLeftDoorOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_frontLeftDoorOpen = doorOpen;
emit frontLeftDoorOpenChanged(doorOpen);
}
void TCPDataControl::setFrontRightDoorOpen(bool doorOpen)
{
if (m_frontRightDoorOpen == doorOpen) {
return;
}
QString msg("frontRightDoorOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_frontRightDoorOpen = doorOpen;
emit frontRightDoorOpenChanged(doorOpen);
}
void TCPDataControl::setRearLeftDoorOpen(bool doorOpen)
{
if (m_rearLeftDoorOpen == doorOpen) {
return;
}
QString msg("rearLeftDoorOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_rearLeftDoorOpen = doorOpen;
emit rearLeftDoorOpenChanged(doorOpen);
}
void TCPDataControl::setHoodOpen(bool doorOpen)
{
if (m_hoodOpen == doorOpen) {
return;
}
QString msg("hoodOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_hoodOpen = doorOpen;
emit hoodOpenChanged(doorOpen);
}
void TCPDataControl::setTrunkOpen(bool doorOpen)
{
if (m_trunkOpen == doorOpen) {
return;
}
QString msg("trunkOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_trunkOpen = doorOpen;
emit rearRightDoorOpenChanged(doorOpen);
}
void TCPDataControl::setRearRightDoorOpen(bool doorOpen)
{
if (m_rearRightDoorOpen == doorOpen) {
return;
}
QString msg("rearRightDoorOpen:" + QString::number(doorOpen) + " ");
write(msg.toLatin1());
m_rearRightDoorOpen = doorOpen;
emit rearRightDoorOpenChanged(doorOpen);
}
void TCPDataControl::setLightFailure(bool lightFailure)
{
if (m_lightFailure == lightFailure) {
return;
}
QString msg("lightFailure:" + QString::number(lightFailure) + " ");
write(msg.toLatin1());
m_lightFailure = lightFailure;
emit lightFailureChanged(lightFailure);
}
void TCPDataControl::setGear(int gear)
{
if (m_gear == gear) {
return;
}
QString msg("gear:" + QString::number(gear) + " ");
write(msg.toLatin1());
m_gear = gear;
emit gearChanged(gear);
}
void TCPDataControl::setLeftTurnLight(bool leftTurnLight)
{
if (m_leftTurnLight == leftTurnLight) {
return;
}
QString msg("leftTurnLight:" + QString::number(leftTurnLight) + " ");
write(msg.toLatin1());
m_leftTurnLight = leftTurnLight;
emit leftTurnLightChanged(leftTurnLight);
}
void TCPDataControl::setRightTurnLight(bool rightTurnLight)
{
if (m_rightTurnLight == rightTurnLight) {
return;
}
QString msg("rightTurnLight:" + QString::number(rightTurnLight) + " ");
write(msg.toLatin1());
m_rightTurnLight = rightTurnLight;
emit rightTurnLightChanged(rightTurnLight);
}
void TCPDataControl::setHeadLight(bool headLight)
{
if (m_headLight == headLight) {
return;
}
QString msg("headLight:" + QString::number(headLight) + " ");
write(msg.toLatin1());
m_headLight = headLight;
emit headLightChanged(headLight);
}
void TCPDataControl::setParkLight(bool parkLight)
{
if (m_parkLight == parkLight) {
return;
}
QString msg("parkLight:" + QString::number(parkLight) + " ");
write(msg.toLatin1());
m_parkLight = parkLight;
emit parkLightChanged(parkLight);
}
void TCPDataControl::setCarId(int carId)
{
if (m_carId == carId) {
return;
}
QString msg("carId:" + QString::number(carId) + " ");
write(msg.toLatin1());
m_carId = carId;
emit carIdChanged(carId);
}
void TCPDataControl::setHazardSignal(bool hazardSignal)
{
if (m_hazardSignal == hazardSignal) {
return;
}
QString msg("hazardSignal:" + QString::number(hazardSignal) + " ");
write(msg.toLatin1());
m_hazardSignal = hazardSignal;
emit hazardSignalChanged(hazardSignal);
}
void TCPDataControl::setBrake(bool brake)
{
if (m_brake == brake) {
return;
}
QString msg("brake:" + QString::number(brake) + " ");
write(msg.toLatin1());
m_brake = brake;
emit brakeChanged(brake);
}
void TCPDataControl::setOilTemp(double oilTemp)
{
if (m_oilTemp == oilTemp) {
return;
}
QString msg("oilTemp:" + QString::number(oilTemp) + " ");
write(msg.toLatin1());
m_oilTemp = oilTemp;
emit oilTempChanged(oilTemp);
}
void TCPDataControl::setOilPressure(int oilPressure)
{
if (m_oilPressure == oilPressure) {
return;
}
QString msg("oilPressure:" + QString::number(oilPressure) + " ");
write(msg.toLatin1());
m_oilPressure = oilPressure;
emit oilPressureChanged(oilPressure);
}
void TCPDataControl::setBatteryPotential(double batteryPotential)
{
if (m_batteryPotential == batteryPotential) {
return;
}
QString msg("batteryPotential:" + QString::number(batteryPotential) + " ");
write(msg.toLatin1());
m_batteryPotential = batteryPotential;
emit batteryPotentialChanged(batteryPotential);
}
void TCPDataControl::setGasLevel(double gasLevel)
{
if (m_gasLevel == gasLevel) {
return;
}
QString msg("gasLevel:" + QString::number(gasLevel) + " ");
write(msg.toLatin1());
m_gasLevel = gasLevel;
emit gasLevelChanged(gasLevel);
}
void TCPDataControl::setRpm(int rpm)
{
if (m_rpm == rpm) {
return;
}
QString msg("rpm:" + QString::number(rpm) + " ");
write(msg.toLatin1());
m_rpm = rpm;
emit rpmChanged(rpm);
}
void TCPDataControl::setEngineTemp(int engineTemp)
{
if (m_engineTemp == engineTemp) {
return;
}
QString msg("engineTemp:" + QString::number(engineTemp) + " ");
write(msg.toLatin1());
m_engineTemp = engineTemp;
emit engineTempChanged(engineTemp);
}
void TCPDataControl::setCrash(bool crashArg)
{
if (m_crash == crashArg) {
return;
}
QString msg("crash:" + QString::number(crashArg) + " ");
write(msg.toLatin1());
m_crash = crashArg;
emit crashChanged(crashArg);
m_crash = false;
}
void TCPDataControl::write(const char *data, qint64 length)
{
if ((m_tcpSocket.state() == QTcpSocket::ConnectedState)) {
m_tcpSocket.write(data, length);
}
}
void TCPDataControl::write(const char *data)
{
if ((m_tcpSocket.state() == QTcpSocket::ConnectedState)) {
m_tcpSocket.write(data);
}
}
QVariantList TCPDataControl::getStringList() const
{
return m_stringList;
}