diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..40c0bc402bb869fbb5772076a04c4e20a87ed499 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,27 @@ +# This file is a template, and might need editing before it works on your project. +# use the official gcc image, based on debian +# can use verions as well, like gcc:5.2 +# see https://hub.docker.com/_/gcc/ +image: dock0/arch +build: + stage: build + # instead of calling g++ directly you can also use some build toolkit like make + # install the necessary build tools when needed + variables: + GIT_SUBMODULE_STRATEGY: recursive + + before_script: + - pacman -Syu --noconfirm + - pacman -S base-devel --noconfirm + - pacman -S qt5-base --noconfirm + - pacman -S qt5-serialport --noconfirm + - whereis qmake + + script: + - echo $PATH + - whereis qmake + - make + + artifacts: + paths: + - release/CANtoWIFI diff --git a/CANtoWIFI b/CANtoWIFI deleted file mode 100755 index 2962a1c6c07bd582d0cbc7670bd4705d6079b082..0000000000000000000000000000000000000000 Binary files a/CANtoWIFI and /dev/null differ diff --git a/CANtoWIFI.pro b/CANtoWIFI.pro index 58db2e7eb29a31e46bd2f6fb347436f109a8eec7..a7b5b4bf141ea6106a6deeb2a8f3639196290392 100644 --- a/CANtoWIFI.pro +++ b/CANtoWIFI.pro @@ -2,12 +2,13 @@ QT -= gui QT += network QT += serialport -CONFIG += c++11 console +CONFIG += c++17 console CONFIG += silent +CONFIG += sdk_no_version_check QMAKE_CC = g++ -QMAKE_CXXFLAGS += -std=c++11 +QMAKE_CXXFLAGS += -std=c++17 # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked deprecated (the exact warnings @@ -18,11 +19,6 @@ QMAKE_CXXFLAGS += -std=c++11 SOURCES += \ main.cpp \ - COM/Comsguy.cpp \ - COM/LogPlay.cpp \ - COM/LogRec.cpp \ - COM/SerialPort.cpp \ - COM/UdpSocket.cpp \ can-ids/Devices/LOGGER_CAN.C \ can-ids/Devices/AHRS_CAN.c \ can-ids/Devices/ARM_CAN.c \ @@ -41,16 +37,15 @@ SOURCES += \ can-ids/Devices/TE_CAN.c \ can-ids/CAN_IDs.c \ can-ids/table.c \ - COM/COM.cpp + COM/COM.cpp \ + COM/ComsGirl.cpp \ + COM/UdpSendSock.cpp \ + COM/UdpReceiveSock.cpp \ + COM/LogPlay.cpp \ + COM/LogRec.cpp \ + COM/SerialPort.cpp HEADERS += \ - COM/COM.h \ - COM/Comsguy.h \ - COM/LogPlay.h \ - COM/LogRec.h \ - COM/SerialPort.hpp \ - COM/UdpSocket.h \ - moc_predefs.h \ can-ids/Devices/AHRS_CAN.h \ can-ids/Devices/ARM_CAN.h \ can-ids/Devices/BMS_MASTER_CAN.h \ @@ -71,7 +66,13 @@ HEADERS += \ can-ids/DOC/tablec.jinja \ can-ids/CAN_IDs.h \ can-ids/table.h \ - moc_predefs.h + COM/COM.hpp \ + COM/LogPlay.hpp \ + COM/LogRec.hpp \ + COM/SerialPort.hpp \ + COM/ComsGirl.hpp \ + COM/UdpSendSock.hpp \ + COM/UdpReceiveSock.hpp DISTFILES += \ can-ids/README.md \ diff --git a/COM/COM.cpp b/COM/COM.cpp index cdb0988b2bbe4823ed42ca9027eab82cca11d6c0..3ebac2db415a58716ac84ac6ff459964421a22f4 100644 --- a/COM/COM.cpp +++ b/COM/COM.cpp @@ -1,4 +1,4 @@ -#include "COM.h" +#include "COM.hpp" COM::COM() { @@ -15,15 +15,15 @@ int COM::close(void) delete this; } -int COM::send(CANdata) +int COM::send(CANmessage) { return 0; } -std::pair<int, CANdata> COM::pop(void) +std::pair<int, CANmessage> COM::pop(void) { - std::pair<int, CANdata> package; + std::pair<int, CANmessage> package; return package; } diff --git a/COM/COM.h b/COM/COM.hpp similarity index 82% rename from COM/COM.h rename to COM/COM.hpp index 1156f7f50a1bc6dec2d23dbd55fe9b8d49e5d23f..fa3f92578fb0bd9edff071dc387b9b024af89ebb 100644 --- a/COM/COM.h +++ b/COM/COM.hpp @@ -30,14 +30,17 @@ public: COM(); virtual bool open(QString); virtual int close(void); - virtual int send(CANdata msg); - virtual std::pair<int, CANdata> pop(void); + virtual int send(CANmessage msg); + virtual std::pair<int, CANmessage> pop(void); public slots: virtual void read(void); private: +signals: + void closing(void); + }; #endif // COM_H diff --git a/COM/ComsGirl.cpp b/COM/ComsGirl.cpp new file mode 100644 index 0000000000000000000000000000000000000000..58c862a05d4f206a9b2d652ba96a26f2b15c33ba --- /dev/null +++ b/COM/ComsGirl.cpp @@ -0,0 +1,152 @@ +#include "ComsGirl.hpp" + +ComsGirl::ComsGirl(Source source, + Input Input, + Output Output, + LoggerStatus Logger, + NameOption NameOption) +{ + + MsgCounter = 0; + switch (source) { + case Serial: + printf("Source COM is Serial\n"); + SourceCOM = new SerialPort; + if (NameOption == CustomNames) { + printf("Available Ports:\n"); + for (int i=0; i < QSerialPortInfo::availablePorts().size(); i++) + printf("%d -> %s\n",i,qPrintable(QSerialPortInfo::availablePorts().at(i).portName())); + printf("Type SerialPort index: "); + int Input; + std::cin >> Input; + DeviceName = QSerialPortInfo::availablePorts().at(Input).portName(); + }; + if (DeviceName.isEmpty()) + DeviceName = DEFAULT_SOURCE_NAME_LINUX; + SourceCOM->open(DeviceName); + connect(SourceCOM,SIGNAL(new_messages(int)),this,SLOT(broadcast_messages(int))); + break; + case SPI: + break; + case Kvaser: + break; + }; + + printf("########################################################\n"); + + switch (Logger) { + case Off: + printf("Log recorder offline!\n"); + break; + case On: + LoggerCOM = new LogRec; + if (NameOption == CustomNames) { + printf("Type Logger File Name: "); + char Input; + std::cin >> Input; + LoggerName = Input; + }; + if (LoggerName.isEmpty()) + LoggerName = DEFAULT_LOG_FILE_NAME; + if (LoggerName.isEmpty()) + LoggerName = QString(QDateTime::currentDateTime().toString().prepend("/home/pi/Desktop/")); + LoggerCOM->open(LoggerName); + //connect(SourceCOM,SIGNAL(send_to_log(CANmessage)),LoggerCOM,SLOT(send(CANmessage))); + break; + }; + + printf("########################################################\n"); + + switch (Input) { + case Void: + break; + case UdpReceiver: + qDebug("Receiving through UDP"); + InputCOM = new UdpReceiveSock; + if (NameOption == CustomNames) { + printf("Available IPs:\n"); + for (int i=0; i < QNetworkInterface::allAddresses().size(); i++) + printf("%d -> %s\n",i,qPrintable(QNetworkInterface::allAddresses().at(i).toString())); + printf("Type IP: "); + char Input; + std::cin >> Input; + InputIP4 = Input; + printf("Type Port: "); + std::cin >> Input; + InputIP4.append(":"); + InputIP4.append(Input); + }; + if (InputIP4.isEmpty()) { + InputIP4 = DEFAULT_OUTPUT_ADRESS; + InputIP4.append(":"); + InputIP4.append(DEFAULT_INPUT_PORT); + } + InputCOM->open(InputIP4); + break; + case TcpReceiver: + //InputCOM = new TcpReceivSock; + break; + }; + + connect(InputCOM,SIGNAL(new_messages(int)),this,SLOT(rebroadcast_messages(int))); + connect(this,SIGNAL(rebroadcast_package(CANmessage)),SourceCOM,SLOT(send(CANmessage))); + + switch (Output) { + case None: + printf("No Output"); + break; + case UdpSender: + qDebug("Sending through UDP"); + OutputCOM = new UdpSendSock; + if (NameOption == CustomNames) { + printf("Available IPs:\n"); + for (int i=0; i < QNetworkInterface::allAddresses().size(); i++) + printf("%d -> %s\n",i,qPrintable(QNetworkInterface::allAddresses().at(i).toString())); + printf("Type IP: "); + char Input; + std::cin >> Input; + OutputIP4 = Input; + printf("Type Port: "); + std::cin >> Input; + OutputIP4.append(":"); + OutputIP4.append(Input); + }; + if (OutputIP4.isEmpty()) { + OutputIP4 = DEFAULT_OUTPUT_ADRESS; + OutputIP4.append(":"); + OutputIP4.append(DEFAULT_OUTPUT_PORT); + } + OutputCOM->open(OutputIP4); + break; + case TcpSender: + // OutputCOM = new TcpSendSock; + break; + }; + + connect(this,SIGNAL(broadcast_package(CANmessage)),OutputCOM,SLOT(send(CANmessage))); + + printf("########################################################\n"); +} + +void ComsGirl::broadcast_messages(int){ + MsgCounter++; + std::pair<int,CANmessage> package; + package = SourceCOM->pop(); + CANdata message = package.second.candata; + if (package.second.candata.sid==1) { + package.second.candata.data[1] = static_cast<uint16_t>(MsgCounter-1); + MsgCounter = 0; + } + emit broadcast_package(package.second); +} + +void ComsGirl::rebroadcast_messages(int){ + //MsgCounter++; + std::pair<int,CANmessage> package; + package = InputCOM->pop(); +// if (package.second.candata.sid==1) { +// package.second.candata.data[1] = static_cast<uint16_t>(MsgCounter-1); +// MsgCounter = 0; +// } + emit rebroadcast_package(package.second); +} diff --git a/COM/ComsGirl.hpp b/COM/ComsGirl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a95eeba13429f126876344fc11d9b6384cbf5465 --- /dev/null +++ b/COM/ComsGirl.hpp @@ -0,0 +1,83 @@ +#ifndef COMSGIRL_HPP +#define COMSGIRL_HPP + +// QT Classes to include +#include <QObject> +#include <QThread> +// C++ Classes to include +#include <iostream> + +// Local Classes to include +#include "COM.hpp" +#include "SerialPort.hpp" +#include "LogRec.hpp" +#include "UdpSendSock.hpp" +#include "UdpReceiveSock.hpp" + +// Default values for program automation +#define DEFAULT_SOURCE_NAME_LINUX "tty.usbmodem14101" +#define DEFAULT_LOG_FILE_NAME "" +#define DEFAULT_INPUT_ADDRESS "127.0.0.1" +#define DEFAULT_INPUT_PORT "4001" +#define DEFAULT_OUTPUT_ADRESS "255.255.255.255" +#define DEFAULT_OUTPUT_PORT "4000" + +class ComsGirl : public QObject +{ + Q_OBJECT + +public: + typedef enum _Source { + Serial = 0, + SPI = 1, + Kvaser = 2, + } Source; + typedef enum _LoggerStatus { + Off = 0, + On = 1 + } LoggerStatus ; + typedef enum _Input { + Void = 0, + UdpReceiver = 1, + TcpReceiver = 2, + } Input ; + typedef enum _Output { + None = 0, + UdpSender = 1, + TcpSender = 2, + } Output ; + typedef enum _NameOption { + DefaultNames = 0, + CustomNames = 1 + } NameOption ; + + explicit ComsGirl(Source, + Input, + Output, + LoggerStatus, + NameOption); + +public slots: + void broadcast_messages(int); + void rebroadcast_messages(int); + +private: + int MsgCounter; + COM *SourceCOM; + QString DeviceName; + COM *InputCOM; + QString InputIP4; + QString InputPort; + COM *OutputCOM; + QString OutputIP4; + QString OutputPort; + COM *LoggerCOM; + QString LoggerName; + +signals: + void broadcast_package(CANmessage); + void rebroadcast_package(CANmessage); + +}; + +#endif // COMSGIRL_H diff --git a/COM/Comsguy.cpp b/COM/Comsguy.cpp deleted file mode 100644 index fc76fc807b6ca88bc73e7c0a3367fd0f800fe819..0000000000000000000000000000000000000000 --- a/COM/Comsguy.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "COM/Comsguy.h" - - -Comsguy::Comsguy(QObject *parent) : QObject(parent) -{ - AllPorts = new LogRec; -} - -Comsguy::~Comsguy() { - return; -} - -void Comsguy::updateCOM(PortType type, QString target, QString secondtarget) -{ - switch (type) { - case Start: - CurrentCOM[target] = new SerialPort; - open(target); - break; - case Close: - if (secondtarget.compare("All")==0) { - AllPorts->close(); - } else if (!CurrentCOM.empty()) { - close(target); - } - break; - case Wifi: - CurrentCOM[target] = new UdpSocket; - connect(this,SIGNAL(broadcast_arrival_of_CAN_message(CANdata)), - CurrentCOM.values(target).at(CurrentCOM.values(target).size()-1),SLOT(send(CANdata))); - break; -// case LogReader: -// CurrentCOM[target] = new LogPlay; -// open(target); -// break; - case LogRecorder: - if (secondtarget.compare("All")==0) { - AllPorts->open(target); - connect(this,SIGNAL(broadcast_arrival_of_CAN_message(CANdata)),AllPorts,SLOT(send(CANdata))); - } else { - CurrentCOM.insertMulti(secondtarget, new LogRec); - CurrentCOM.values(secondtarget).at(0)->open(target); - connect(CurrentCOM.values(secondtarget).at(1),SIGNAL(send_to_log(CANdata)),CurrentCOM.values(secondtarget).at(0),SLOT(send(CANdata))); - emit Com_Status(CurrentCOM.keys()); - } - break; - case KvaserLog: - CurrentCOM[target] = new SerialPort; - open(target); - break; - case KvaserSerial: - CurrentCOM[target] = new SerialPort; - open(target); - break; - } -} - -void Comsguy::send(CANdata msg) -{ - foreach (QString Key, CurrentCOM.uniqueKeys()) - CurrentCOM.values(Key).at(CurrentCOM.values(Key).size()-1)->send(msg); -} - -void Comsguy::open(QString target){ - if (!CurrentCOM.contains(target)) { - return; - } - if (CurrentCOM.value(target)->open(target)) { - connect(CurrentCOM.values(target).at(CurrentCOM.values(target).size()-1), SIGNAL(new_messages(int)), this, SLOT(broadcast_messages(void))); - this->close("(none)"); - emit Com_Status(CurrentCOM.keys()); - } else { - printf("%s","Error! - Unable to open device port."); - } -} - -void Comsguy::close(QString target){ - if (target.startsWith("[LOGREC] ")) { - target.replace(QString("[LOGREC] "), QString("")); - CurrentCOM.values(target).at(0)->close(); - CurrentCOM.take(target); - } else { - foreach (COM *device, CurrentCOM.values(target)) - device->close(); - CurrentCOM.remove(target); - } - emit Com_Status(CurrentCOM.keys()); -} - -void Comsguy::broadcast_messages() -{ - foreach (QString Key, CurrentCOM.uniqueKeys()) { - std::pair<int, CANdata> package; - package = CurrentCOM.values(Key).at(CurrentCOM.values(Key).size()-1)->pop(); - emit broadcast_arrival_of_CAN_message(package.second); - } -} diff --git a/COM/Comsguy.h b/COM/Comsguy.h deleted file mode 100644 index 79bce2d833095d36c421e41492709b031ca610fb..0000000000000000000000000000000000000000 --- a/COM/Comsguy.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef COMSGUY_H -#define COMSGUY_H - -#include <QObject> -#include <QTextStream> -#include <QFile> -#include <QString> -#include <QMap> - -#include "COM/COM.h" -#include "COM/SerialPort.hpp" -#include "COM/LogRec.h" -#include "COM/UdpSocket.h" -#include "can-ids/CAN_IDs.h" -#include "can-ids/Devices/INTERFACE_CAN.h" - -namespace Ui { - class Comsguy; -} - -typedef enum _PortType { - Start = -1, - Close = 0, - Serial = 1, - Wifi = 2, - LogRecorder = 3, - LogRecorderStatus = 4, - LogReader = 5, - KvaserLog = 6, - KvaserSerial = 7, - -} PortType; - -class Comsguy : public QObject -{ - Q_OBJECT - -public: - explicit Comsguy(QObject *parent = nullptr); - ~Comsguy(void); - bool _linked; - -public slots: - void close(QString); - void updateCOM(PortType,QString,QString); - -private slots: - void open(QString); - void send(CANdata); - //void write(QString string); - void broadcast_messages(); - //void broadcast_raw_messages(void); - -private: - COM *Temp; - LogRec *AllPorts; - QMap<QString, COM*> CurrentCOM; - bool LogRecStatus; - -signals: - void broadcast_arrival_of_CAN_message(CANdata); - void Com_Status(QList<QString>); - //void broadcast_arrival_of_raw_CAN_message(QByteArray); -}; - -#endif // COMSGUY_H diff --git a/COM/LogPlay.cpp b/COM/LogPlay.cpp index e42b17aca9ac3f7cecff90d1be69638993820397..2cbb39c2817b69443cd5368c2449848d3f02d6a0 100644 --- a/COM/LogPlay.cpp +++ b/COM/LogPlay.cpp @@ -1,4 +1,4 @@ -#include "LogPlay.h" +#include "LogPlay.hpp" LogPlay::LogPlay() { diff --git a/COM/LogPlay.h b/COM/LogPlay.hpp similarity index 90% rename from COM/LogPlay.h rename to COM/LogPlay.hpp index 07dbe0e82008e504105183c6bd5829326570f0de..f41cb60455abb0fe83d9f51736ce9df0cb4f84ad 100644 --- a/COM/LogPlay.h +++ b/COM/LogPlay.hpp @@ -1,7 +1,7 @@ #ifndef LOGPLAY_H #define LOGPLAY_H -#include "COM/COM.h" +#include "COM.hpp" #include <QObject> diff --git a/COM/LogRec.cpp b/COM/LogRec.cpp index 364e5c520c8eea1f06679df90a487ac1b3412cca..554735874a3fa20f0c2b069ceb2e526fd57d2604 100644 --- a/COM/LogRec.cpp +++ b/COM/LogRec.cpp @@ -1,4 +1,4 @@ -#include "LogRec.h" +#include "LogRec.hpp" LogRec::LogRec() { @@ -8,11 +8,8 @@ LogRec::LogRec() bool LogRec::open(const QString filename) { time = time.currentDateTime(); - if (filename.isEmpty()) { - _logfile.setFileName(QDateTime::currentDateTime().toString()); - } else { - _logfile.setFileName(filename); - } + qDebug() << filename; + _logfile.setFileName(filename); if(_logfile.open(QIODevice::Append | QIODevice::Text)){ @@ -40,12 +37,12 @@ int LogRec::close(void) return 0; } -int LogRec::send(CANdata msg) +int LogRec::send(CANmessage msg) { char log_string[512]; - - sprintf(log_string, "%u,%u,%u,%u,%u,%u", msg.sid, msg.dlc, msg.data[0], - msg.data[1], msg.data[2], msg.data[3]); // msg.timestamp + sprintf(log_string, "%u,%u,%u,%u,%u,%u\n", msg.candata.sid, msg.candata.dlc, msg.candata.data[0], + msg.candata.data[1], msg.candata.data[2], msg.candata.data[3]); // msg.timestamp + qDebug() << log_string; _logstream << log_string << "\n"; // Do not flush here!!! Computer would be bogged down flushing every message return 0; diff --git a/COM/LogRec.h b/COM/LogRec.hpp similarity index 90% rename from COM/LogRec.h rename to COM/LogRec.hpp index 2095349790fd7f20964e6b564840ab64a76de730..8f04f4f151a69791e32c113a0ce964ea47eaebc2 100644 --- a/COM/LogRec.h +++ b/COM/LogRec.hpp @@ -1,7 +1,7 @@ #ifndef LOGREC_H #define LOGREC_H -#include "COM/COM.h" +#include "COM.hpp" #include <QObject> #include <QTimer> @@ -26,7 +26,7 @@ public: virtual int close(void) override; public slots: - virtual int send(CANdata msg) override; + virtual int send(CANmessage msg) override; virtual void read(void) override; private: diff --git a/COM/SerialPort.cpp b/COM/SerialPort.cpp index 73c6a179b1d28d09ec85f267e00c9c069d4683c3..7955224a616c58410e727190a52a54924d48a78c 100644 --- a/COM/SerialPort.cpp +++ b/COM/SerialPort.cpp @@ -104,37 +104,47 @@ void SerialPort::handleError(QSerialPort::SerialPortError error) { switch (error){ case QSerialPort::NoError: + //restore->stop(); break; case QSerialPort::DeviceNotFoundError: fprintf(stderr, "Unexpected Error, Device Not Found\n"); + //restore->start(3000); break; case QSerialPort::PermissionError: fprintf(stderr, "Really Sorry, But you lack the permissions\n"); + //restore->start(3000); break; case QSerialPort::OpenError: fprintf(stderr, "Unexpected Error while opening the port\n"); + //restore->start(3000); break; case QSerialPort::NotOpenError: fprintf(stderr, "Unexpected Error is the device open?\n"); + //restore->start(3000); break; case QSerialPort::WriteError: fprintf(stderr, "Error while writing, closing port...\n"); + //restore->start(3000); close(); break; case QSerialPort::ReadError: fprintf(stderr, "Error while reading, closing port...\n"); + //restore->start(3000); close(); break; case QSerialPort::ResourceError: fprintf(stderr, "Resource Error. Did you remove the device? closing port...\n"); + //restore->start(3000); close(); break; case QSerialPort::UnsupportedOperationError: fprintf(stderr, "Dont you ping of death me!!...\n"); + //restore->start(3000); close(); - break; + break; default: fprintf(stderr, "I cant handle this, closing port...\n"); + //restore->start(3000); close(); break; } @@ -147,7 +157,7 @@ void SerialPort::handleError(QSerialPort::SerialPortError error) * Desc: Opens and configures the serial port. * Starts worker thread to read from the port. **********************************************************************/ -bool SerialPort::open(const QString portname) +bool SerialPort::open(const QString port) { // reopens port rather than creating another file descriptor every time open is issued if (_status != 0){ @@ -178,6 +188,7 @@ bool SerialPort::open(const QString portname) **********************************************************************/ int SerialPort::close(void){ + delete restore; int err = 0; @@ -221,7 +232,7 @@ void remove_white_space(QStringList *CanMessageList_temp){ void SerialPort::read(void) { - unsigned int valid_messages = 0; + int valid_messages = 0; memset(aux_buffer, 0, aux_buffer_size); // read can't be blocking or thread may never quit before another one is issued! @@ -240,8 +251,7 @@ void SerialPort::read(void) emit new_raw(); continue; } - printf("%d\n",CanMessageList.size()); - if (CanMessageList.size() == 6) { + if (CanMessageList.size() == 6 || CanMessageList.size() == 7) { valid_messages++; } else @@ -259,8 +269,18 @@ void SerialPort::read(void) for (int i=0; i<4; i++) { msg.data[i] = CanMessageList.at(i+2).toInt(); } + + CANmessage Msg; + + Msg.candata = msg; + if (CanMessageList.size() == 7) { + Msg.timestamp = CanMessageList.at(6).toInt(); + } else { + Msg.timestamp = 0; + } + //_queueLkc.lock(); - _queue.push(msg); + _queue.push(Msg); //_queueLkc.unlock(); if (valid_messages) { @@ -275,7 +295,7 @@ void SerialPort::read(void) // Yet, another good itoa implementation // // returns: the length of the number string -int base10_to_string(uint8_t *sp, int value) +uint16_t base10_to_string(uint8_t *sp, int value) { uint8_t tmp[16];// be careful with the length of the buffer uint8_t *tp = tmp; @@ -299,7 +319,7 @@ int base10_to_string(uint8_t *sp, int value) *tp++ = i + 'a' - 10; } - int len = tp - tmp; + uint16_t len = tp - tmp; if (sign) { @@ -319,39 +339,39 @@ int base10_to_string(uint8_t *sp, int value) * Return: exit status * Desc: Send CAN message to UART. **********************************************************************/ -int SerialPort::send(CANdata msg) +int SerialPort::send(CANmessage msg) { - uint8_t message[256]; - uint8_t aux[256]; - uint16_t i=0, len=0; - - len = base10_to_string(aux, msg.sid); - strcpy((char *) (message+i), (char *) aux); - i += len; - message[i++] = ','; - len = base10_to_string(aux, msg.dlc); - strcpy((char *)(message+i), (char *)aux); - i+=len; - message[i++] = ','; - len = base10_to_string(aux, msg.data[0]); - strcpy((char *) (message+i), (char *) aux); - i+=len; - message[i++] = ','; - len = base10_to_string(aux, msg.data[1]); - strcpy((char *) (message+i), (char *) aux); - i+=len; - message[i++] = ','; - len = base10_to_string(aux, msg.data[2]); - strcpy((char *) (message+i), (char *) aux); - i+=len; - message[i++] = ','; - len = base10_to_string(aux, msg.data[3]); - strcpy((char *) (message+i), (char *) aux); - i+=len; - message[i] = '\n'; - message[i+1] = '\0'; - - return _writePort((const unsigned char *)message, i+1); +uint8_t message[256]; +uint8_t aux[256]; +uint16_t i=0, len=0; + +len = base10_to_string(aux, msg.candata.sid); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i += len; +message[i++] = ','; +len = base10_to_string(aux, msg.candata.dlc); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i+=len; +message[i++] = ','; +len = base10_to_string(aux, msg.candata.data[0]); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i+=len; +message[i++] = ','; +len = base10_to_string(aux, msg.candata.data[1]); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i+=len; +message[i++] = ','; +len = base10_to_string(aux, msg.candata.data[2]); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i+=len; +message[i++] = ','; +len = base10_to_string(aux, msg.candata.data[3]); +strcpy(reinterpret_cast<char *>(message+i),reinterpret_cast<char *>(aux)); +i+=len; +message[i] = '\n'; +message[i+1] = '\0'; + +return _writePort(reinterpret_cast<const unsigned char *>(message), i+1); } @@ -361,13 +381,13 @@ int SerialPort::send(CANdata msg) * Return: exit status * Desc: Send byte sequence to UART. **********************************************************************/ -int SerialPort::_writePort(const unsigned char *data, unsigned int n){ - +int SerialPort::_writePort(const unsigned char *data, unsigned int n) +{ if(!_status){ return -1; } - if(serial.write((char *)data, (qint64)n)!=n){ + if(serial.write(const_cast<char *>(reinterpret_cast<const char *>(data)), static_cast<qint64>(n))!=n){ return -1; } @@ -404,9 +424,9 @@ void SerialPort::standard_ID_mode(void){ * Return: - * Desc: Returns and pops from internal queue one CAN message **********************************************************************/ -std::pair<int, CANdata> SerialPort::pop(void){ +std::pair<int, CANmessage> SerialPort::pop(void){ - std::pair<int, CANdata> package; + std::pair<int, CANmessage> package; package.first = 0; @@ -417,7 +437,6 @@ std::pair<int, CANdata> SerialPort::pop(void){ else{ package.first = -1; } - emit send_to_log(package.second); return package; } @@ -477,7 +496,7 @@ int SerialPort::_CRC_verify(const unsigned char *data, const unsigned int index, return -1; } -void SerialPort::set_message_to_queue(CANdata msg) +void SerialPort::set_message_to_queue(CANmessage msg) { _queue.push(msg); emit new_messages(1); diff --git a/COM/SerialPort.hpp b/COM/SerialPort.hpp index 31dbb109779e1fee866dcb96d96e8b0d60565f9b..ad1534fe62468fcf466738e9b25bbfeeb762eb8b 100644 --- a/COM/SerialPort.hpp +++ b/COM/SerialPort.hpp @@ -23,7 +23,7 @@ #ifndef SERIALPORT_H #define SERIALPORT_H -#include "COM/COM.h" +#include "COM.hpp" namespace Ui { class SerialPort; @@ -43,7 +43,7 @@ private: volatile int _status; std::thread _worker; - std::queue<CANdata> _queue; + std::queue<CANmessage> _queue; QMutex _queueLkc; unsigned char _CRC_calculate(const unsigned char *data, const unsigned int index, const unsigned int buffersize, unsigned int n); @@ -60,7 +60,8 @@ private: unsigned int W_caret; unsigned int R_caret; - + QString portname; + QTimer *restore; public: SerialPort(void); @@ -71,7 +72,6 @@ public: virtual bool open(const QString portname) override; virtual int close(void) override; - virtual int send(CANdata msg) override; int _writePort(const unsigned char *data, unsigned int n); @@ -79,20 +79,20 @@ public: void standard_ID_mode(void); QByteArray pop_raw_data(void); - void set_message_to_queue(CANdata msg); - virtual std::pair<int, CANdata> pop(void) override; + void set_message_to_queue(CANmessage msg); + virtual std::pair<int, CANmessage> pop(void) override; int debug_status; signals: void new_messages(int n); - void send_to_log(CANdata); + void send_to_log(CANmessage); void aborting(void); void new_raw(void); public slots: - void handleError(QSerialPort::SerialPortError error); - + void handleError(QSerialPort::SerialPortError error); virtual void read(void) override; + virtual int send(CANmessage) override; }; diff --git a/COM/TcpServer.h b/COM/TcpServer.hpp similarity index 100% rename from COM/TcpServer.h rename to COM/TcpServer.hpp diff --git a/COM/UdpReceiveSock.cpp b/COM/UdpReceiveSock.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9f0b5eb92680716cda45d2a6ef2ab1f617e39f2c --- /dev/null +++ b/COM/UdpReceiveSock.cpp @@ -0,0 +1,77 @@ +#include "UdpReceiveSock.hpp" + +UdpReceiveSock::UdpReceiveSock() +{ +} + +bool UdpReceiveSock::open(QString Add) +{ + printf("udp open\n"); + udpsocket = new QUdpSocket(this); + udpsocket->bind(Add.section(":",1,1).toUShort(),QUdpSocket::ShareAddress); + connect(udpsocket,SIGNAL(readyRead(void)),this,SLOT(read(void))); + return true; + +} + +void UdpReceiveSock::read(void) +{ + while (udpsocket->hasPendingDatagrams()) { + QByteArray datagramreceive; + // while (udpsocket-> hasPendingDatagrams()) { + datagramreceive.resize(int(udpsocket->pendingDatagramSize())); + udpsocket->readDatagram(datagramreceive.data(),datagramreceive.size()); + auto received = QVariant(datagramreceive.data()).toString().split('\n'); + foreach (QString Msg, received) { + qDebug() << Msg; + MsgList.enqueue(Msg); + emit new_messages(1); + } + } +} + +int UdpReceiveSock::send(CANmessage msg) +{ + datagramsend.resize(6); + datagramsend[0] = static_cast<char>(msg.candata.sid); + datagramsend[1] = msg.candata.dlc; + datagramsend[2] = static_cast<char>(msg.candata.data[0]); + datagramsend[3] = static_cast<char>(msg.candata.data[1]); + datagramsend[4] = static_cast<char>(msg.candata.data[2]); + datagramsend[5] = static_cast<char>(msg.candata.data[3]); + + udpsocket->write(datagramsend); + return 0; +} + +std::pair<int, CANmessage> UdpReceiveSock::pop() +{ + std::pair<int, CANmessage> package; + CANmessage msg; + + datagram = MsgList.dequeue(); + + msg.candata.sid = datagram.section("/",0,0).toUShort(); + msg.candata.dlc = datagram.section("/",1,1).toUShort(); + msg.candata.data[0] = datagram.section("/",2,2).toUShort(); + msg.candata.data[1] = datagram.section("/",3,3).toUShort(); + msg.candata.data[2] = datagram.section("/",4,4).toUShort(); + msg.candata.data[3] = datagram.section("/",5,5).toUShort(); + + if (datagram.section("/",0,0).compare("1")==0 ) { + // Send back my count + } + + package.first = 1; + package.second = msg; + return package; + + //} +} + +int UdpReceiveSock::close() +{ + udpsocket->~QUdpSocket(); + delete this; + return 0; +} diff --git a/COM/UdpReceiveSock.hpp b/COM/UdpReceiveSock.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a88ead7f1194738dcdc08984c28d9e55092f5763 --- /dev/null +++ b/COM/UdpReceiveSock.hpp @@ -0,0 +1,35 @@ +#ifndef UDPRECEIVESOCK_HPP +#define UDPRECEIVESOCK_HPP + +#include "COM.hpp" + +namespace Ui { + class UdpReceiveSock; +} + +class UdpReceiveSock : public COM +{ + Q_OBJECT + +public: + UdpReceiveSock(); + virtual bool open(QString) override; + virtual int close(void) override; + virtual std::pair<int, CANmessage> pop(void) override; + +public slots: + virtual int send(CANmessage) override; + virtual void read(void) override; + +private: + QQueue<QString> MsgList; + QUdpSocket *udpsocket; + QByteArray datagramsend; + QByteArray datagramreceive; + QString datagram; + +signals: + void new_messages(int); +}; + +#endif // UDPRRECEIVEOCK_HPP diff --git a/COM/UdpSendSock.cpp b/COM/UdpSendSock.cpp new file mode 100644 index 0000000000000000000000000000000000000000..df4f05424bea5b1fa05dbfaface3820ea0c7f8f5 --- /dev/null +++ b/COM/UdpSendSock.cpp @@ -0,0 +1,38 @@ +#include "UdpSendSock.hpp" + +UdpSendSock::UdpSendSock() +{ + datagram = new char[256]; + count = 0; + return; +} + +bool UdpSendSock::open(QString Add) +{ + udpsocket = new QUdpSocket; + IP4Address = Add.section(":",0,0); + Port = Add.section(":",1,1).toUShort(); + return true; +} + +int UdpSendSock::send(CANmessage msg) +{ + datagram.sprintf("%d/%d/%d/%d/%d/%d\n", msg.candata.sid, msg.candata.dlc, msg.candata.data[0], msg.candata.data[1], msg.candata.data[2], msg.candata.data[3]); + datagram_list.append(datagram); + count++; + + if (count==75) { + udpsocket->writeDatagram(QVariant(datagram_list).toByteArray(), QHostAddress::Broadcast, Port); + datagram_list.clear(); + count = 0; + } + return 1; +} + +int UdpSendSock::close() +{ + udpsocket->~QUdpSocket(); + delete this; + emit closing(); + return 1; +} diff --git a/COM/UdpSendSock.hpp b/COM/UdpSendSock.hpp new file mode 100644 index 0000000000000000000000000000000000000000..90ca131b3f22d5230e7d8a9a6e95202a9f9611cd --- /dev/null +++ b/COM/UdpSendSock.hpp @@ -0,0 +1,35 @@ +#ifndef UDPSENDSOCK_H +#define UDPSENDSOCK_H + +#include "COM.hpp" + +namespace Ui { + class UdpReceiveSock; +} + +class UdpSendSock : public COM +{ + Q_OBJECT + +public: + UdpSendSock(); + virtual bool open(QString) override; + virtual int close(void) override; + +public slots: + virtual int send(CANmessage) override; + +private: + QStringList datagram_list; + QUdpSocket *udpsocket; + QString IP4Address; + quint16 Port; + QString datagram; + int count; + +signals: + void new_messages(int); + void closing(void); +}; + +#endif // UDPSENDSOCK_H diff --git a/COM/UdpSocket.cpp b/COM/UdpSocket.cpp deleted file mode 100644 index 176837df40e285100e2d6c0c58aeabff11711e52..0000000000000000000000000000000000000000 --- a/COM/UdpSocket.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "UdpSocket.h" - -UdpSocket::UdpSocket() -{ - return; -} - -bool UdpSocket::open(QString) -{ - udpsocket = new QUdpSocket(this); - - datagramsend.resize(10); - - connect(udpsocket,SIGNAL(disconnected()),this,SLOT(establishConection())); - connect(udpsocket,SIGNAL(readyRead(void)),this,SLOT(read(void))); -} - -void UdpSocket::read(void) -{ - printf("read\n"); - while (udpsocket->hasPendingDatagrams()) { - emit new_messages(1); - } - emit new_messages(0); -} - -int UdpSocket::send(CANdata msg) -{ - printf("send\n"); - - printf("%d %d %d %d %d %d\n", msg.sid, msg.dlc, msg.data[0], msg.data[1], msg.data[2], msg.data[3]); - char *datagram = (char *) malloc(256); - printf("malloc\n"); - sprintf(datagram, "%d%d%d%d%d\n", msg.sid, msg.dlc, msg.data[0], msg.data[1], msg.data[2]); - printf("datagram\n"); - QByteArray *some_datagram = new QByteArray(datagram); - printf("qbytearray\n"); - - printf("init datagram"); - if (udpsocket->state() == QAbstractSocket::BoundState) - udpsocket->writeDatagram(*some_datagram, QHostAddress::Broadcast, 45454); - printf("send datagram\n"); - return 1; -} - -std::pair<int, CANdata> UdpSocket::pop() -{ - CANdata msg; - QByteArray datagramreceive; - // while (udpsocket->hasPendingDatagrams()) { - datagramreceive.resize(int(udpsocket->pendingDatagramSize())); - udpsocket->readDatagram(datagramreceive.data(),datagramreceive.size()); - - qDebug()<<datagramreceive.data(); - //} -} - -int UdpSocket::close() -{ - udpsocket->~QUdpSocket(); - delete this; - return 0; -} diff --git a/COM/UdpSocket.h b/COM/UdpSocket.h deleted file mode 100644 index 4790b8447512522e40761e9327e141bc255fabe0..0000000000000000000000000000000000000000 --- a/COM/UdpSocket.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef UDPSOCKET_H -#define UDPSOCKET_H - -#include "COM.h" - -namespace Ui { - class UdpSocket; -} - -class UdpSocket : public COM -{ - Q_OBJECT - -public: - UdpSocket(); - virtual bool open(QString) override; - virtual int close(void) override; - virtual std::pair<int, CANdata> pop(void) override; - -public slots: - virtual int send(CANdata) override; - virtual void read(void) override; - -private: - QUdpSocket *udpsocket; - QByteArray datagramsend; - QByteArray datagramreceive; - -signals: - void new_messages(int); -}; - -#endif // UDPSOCKET_H diff --git a/Makefile.txt b/Makefile.txt new file mode 100644 index 0000000000000000000000000000000000000000..30b9cc760c6d7e21255f52e14de75bd34d242dd4 --- /dev/null +++ b/Makefile.txt @@ -0,0 +1,43 @@ +# Makefile to support qtcreator and manual compilation. +# REMEMBER TO DISABLE SHADOW BUILD IN QTCREATOR PROJECTS +TARGET := CANtoWIFI + +.PHONY: release debug ccache clean + +# Get number of logical cores on Linux and on macOS. +OS := $(shell uname -s) +ifeq ($(OS),Darwin) + NPROC := $(shell sysctl -n hw.ncpu) +else + NPROC := $(shell nproc) +endif + +qmake_all: release + +release: + @ mkdir -p release + cd release && qmake $(QMAKE_OPTS) .. + cd release && $(MAKE) -f Makefile -j$(NPROC) + # Copy the resulting executable or .app so that qtcreator uses it + cp -f -r release/CANtoWIFI* . &>/dev/null || true + +debug: + @ mkdir -p debug + cd debug && qmake $(QMAKE_OPTS) .. CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug + cd debug && $(MAKE) -f Makefile -j$(NPROC) + # Copy the resulting executable or .app so that qtcreator uses it + cp -f -r debug/CANtoWIFI* . &>/dev/null || true + +ccache: + @ mkdir -p release + cd release && qmake $(QMAKE_OPTS) .. QMAKE_CXX="ccache g++" + cd release && $(MAKE) -f Makefile -j$(NPROC) + +run: release + ./release/$(TARGET) + +valgrind: release + valgrind ./release/$(TARGET) + +clean: + rm -rf release debug diff --git a/compile/moc_predefs.h b/compile/moc_predefs.h new file mode 100644 index 0000000000000000000000000000000000000000..1b5f129bb7a60ea41bbfaef53d3585ad99d00a23 --- /dev/null +++ b/compile/moc_predefs.h @@ -0,0 +1,390 @@ +#define OBJC_NEW_PROPERTIES 1 +#define _LP64 1 +#define __APPLE_CC__ 6000 +#define __APPLE__ 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_SEQ_CST 5 +#define __BIGGEST_ALIGNMENT__ 16 +#define __BLOCKS__ 1 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __CHAR16_TYPE__ unsigned short +#define __CHAR32_TYPE__ unsigned int +#define __CHAR_BIT__ 8 +#define __CLANG_ATOMIC_BOOL_LOCK_FREE 2 +#define __CLANG_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __CLANG_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __CLANG_ATOMIC_CHAR_LOCK_FREE 2 +#define __CLANG_ATOMIC_INT_LOCK_FREE 2 +#define __CLANG_ATOMIC_LLONG_LOCK_FREE 2 +#define __CLANG_ATOMIC_LONG_LOCK_FREE 2 +#define __CLANG_ATOMIC_POINTER_LOCK_FREE 2 +#define __CLANG_ATOMIC_SHORT_LOCK_FREE 2 +#define __CLANG_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __CONSTANT_CFSTRINGS__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __DBL_DENORM_MIN__ 4.9406564584124654e-324 +#define __DBL_DIG__ 15 +#define __DBL_EPSILON__ 2.2204460492503131e-16 +#define __DBL_HAS_DENORM__ 1 +#define __DBL_HAS_INFINITY__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __DBL_MANT_DIG__ 53 +#define __DBL_MAX_10_EXP__ 308 +#define __DBL_MAX_EXP__ 1024 +#define __DBL_MAX__ 1.7976931348623157e+308 +#define __DBL_MIN_10_EXP__ (-307) +#define __DBL_MIN_EXP__ (-1021) +#define __DBL_MIN__ 2.2250738585072014e-308 +#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__ +#define __DEPRECATED 1 +#define __DYNAMIC__ 1 +#define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 101100 +#define __EXCEPTIONS 1 +#define __FINITE_MATH_ONLY__ 0 +#define __FLT16_DECIMAL_DIG__ 5 +#define __FLT16_DENORM_MIN__ 5.9604644775390625e-8F16 +#define __FLT16_DIG__ 3 +#define __FLT16_EPSILON__ 9.765625e-4F16 +#define __FLT16_HAS_DENORM__ 1 +#define __FLT16_HAS_INFINITY__ 1 +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __FLT16_MANT_DIG__ 11 +#define __FLT16_MAX_10_EXP__ 4 +#define __FLT16_MAX_EXP__ 15 +#define __FLT16_MAX__ 6.5504e+4F16 +#define __FLT16_MIN_10_EXP__ (-13) +#define __FLT16_MIN_EXP__ (-14) +#define __FLT16_MIN__ 6.103515625e-5F16 +#define __FLT_DECIMAL_DIG__ 9 +#define __FLT_DENORM_MIN__ 1.40129846e-45F +#define __FLT_DIG__ 6 +#define __FLT_EPSILON__ 1.19209290e-7F +#define __FLT_EVAL_METHOD__ 0 +#define __FLT_HAS_DENORM__ 1 +#define __FLT_HAS_INFINITY__ 1 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MANT_DIG__ 24 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT_MAX_EXP__ 128 +#define __FLT_MAX__ 3.40282347e+38F +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT_MIN_EXP__ (-125) +#define __FLT_MIN__ 1.17549435e-38F +#define __FLT_RADIX__ 2 +#define __FXSR__ 1 +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __GNUC_GNU_INLINE__ 1 +#define __GNUC_MINOR__ 2 +#define __GNUC_PATCHLEVEL__ 1 +#define __GNUC__ 4 +#define __GNUG__ 4 +#define __GXX_ABI_VERSION 1002 +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __GXX_RTTI 1 +#define __GXX_WEAK__ 1 +#define __INT16_C_SUFFIX__ +#define __INT16_FMTd__ "hd" +#define __INT16_FMTi__ "hi" +#define __INT16_MAX__ 32767 +#define __INT16_TYPE__ short +#define __INT32_C_SUFFIX__ +#define __INT32_FMTd__ "d" +#define __INT32_FMTi__ "i" +#define __INT32_MAX__ 2147483647 +#define __INT32_TYPE__ int +#define __INT64_C_SUFFIX__ LL +#define __INT64_FMTd__ "lld" +#define __INT64_FMTi__ "lli" +#define __INT64_MAX__ 9223372036854775807LL +#define __INT64_TYPE__ long long int +#define __INT8_C_SUFFIX__ +#define __INT8_FMTd__ "hhd" +#define __INT8_FMTi__ "hhi" +#define __INT8_MAX__ 127 +#define __INT8_TYPE__ signed char +#define __INTMAX_C_SUFFIX__ L +#define __INTMAX_FMTd__ "ld" +#define __INTMAX_FMTi__ "li" +#define __INTMAX_MAX__ 9223372036854775807L +#define __INTMAX_TYPE__ long int +#define __INTMAX_WIDTH__ 64 +#define __INTPTR_FMTd__ "ld" +#define __INTPTR_FMTi__ "li" +#define __INTPTR_MAX__ 9223372036854775807L +#define __INTPTR_TYPE__ long int +#define __INTPTR_WIDTH__ 64 +#define __INT_FAST16_FMTd__ "hd" +#define __INT_FAST16_FMTi__ "hi" +#define __INT_FAST16_MAX__ 32767 +#define __INT_FAST16_TYPE__ short +#define __INT_FAST32_FMTd__ "d" +#define __INT_FAST32_FMTi__ "i" +#define __INT_FAST32_MAX__ 2147483647 +#define __INT_FAST32_TYPE__ int +#define __INT_FAST64_FMTd__ "ld" +#define __INT_FAST64_FMTi__ "li" +#define __INT_FAST64_MAX__ 9223372036854775807L +#define __INT_FAST64_TYPE__ long int +#define __INT_FAST8_FMTd__ "hhd" +#define __INT_FAST8_FMTi__ "hhi" +#define __INT_FAST8_MAX__ 127 +#define __INT_FAST8_TYPE__ signed char +#define __INT_LEAST16_FMTd__ "hd" +#define __INT_LEAST16_FMTi__ "hi" +#define __INT_LEAST16_MAX__ 32767 +#define __INT_LEAST16_TYPE__ short +#define __INT_LEAST32_FMTd__ "d" +#define __INT_LEAST32_FMTi__ "i" +#define __INT_LEAST32_MAX__ 2147483647 +#define __INT_LEAST32_TYPE__ int +#define __INT_LEAST64_FMTd__ "ld" +#define __INT_LEAST64_FMTi__ "li" +#define __INT_LEAST64_MAX__ 9223372036854775807L +#define __INT_LEAST64_TYPE__ long int +#define __INT_LEAST8_FMTd__ "hhd" +#define __INT_LEAST8_FMTi__ "hhi" +#define __INT_LEAST8_MAX__ 127 +#define __INT_LEAST8_TYPE__ signed char +#define __INT_MAX__ 2147483647 +#define __LDBL_DECIMAL_DIG__ 21 +#define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L +#define __LDBL_DIG__ 18 +#define __LDBL_EPSILON__ 1.08420217248550443401e-19L +#define __LDBL_HAS_DENORM__ 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __LDBL_MANT_DIG__ 64 +#define __LDBL_MAX_10_EXP__ 4932 +#define __LDBL_MAX_EXP__ 16384 +#define __LDBL_MAX__ 1.18973149535723176502e+4932L +#define __LDBL_MIN_10_EXP__ (-4931) +#define __LDBL_MIN_EXP__ (-16381) +#define __LDBL_MIN__ 3.36210314311209350626e-4932L +#define __LITTLE_ENDIAN__ 1 +#define __LONG_LONG_MAX__ 9223372036854775807LL +#define __LONG_MAX__ 9223372036854775807L +#define __LP64__ 1 +#define __MACH__ 1 +#define __MMX__ 1 +#define __NO_INLINE__ 1 +#define __NO_MATH_INLINES 1 +#define __OBJC_BOOL_IS_BOOL 0 +#define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3 +#define __OPENCL_MEMORY_SCOPE_DEVICE 2 +#define __OPENCL_MEMORY_SCOPE_SUB_GROUP 4 +#define __OPENCL_MEMORY_SCOPE_WORK_GROUP 1 +#define __OPENCL_MEMORY_SCOPE_WORK_ITEM 0 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __ORDER_PDP_ENDIAN__ 3412 +#define __PIC__ 2 +#define __POINTER_WIDTH__ 64 +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __PTRDIFF_FMTd__ "ld" +#define __PTRDIFF_FMTi__ "li" +#define __PTRDIFF_MAX__ 9223372036854775807L +#define __PTRDIFF_TYPE__ long int +#define __PTRDIFF_WIDTH__ 64 +#define __REGISTER_PREFIX__ +#define __SCHAR_MAX__ 127 +#define __SHRT_MAX__ 32767 +#define __SIG_ATOMIC_MAX__ 2147483647 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __SIZEOF_DOUBLE__ 8 +#define __SIZEOF_FLOAT__ 4 +#define __SIZEOF_INT128__ 16 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __SIZEOF_LONG_LONG__ 8 +#define __SIZEOF_LONG__ 8 +#define __SIZEOF_POINTER__ 8 +#define __SIZEOF_PTRDIFF_T__ 8 +#define __SIZEOF_SHORT__ 2 +#define __SIZEOF_SIZE_T__ 8 +#define __SIZEOF_WCHAR_T__ 4 +#define __SIZEOF_WINT_T__ 4 +#define __SIZE_FMTX__ "lX" +#define __SIZE_FMTo__ "lo" +#define __SIZE_FMTu__ "lu" +#define __SIZE_FMTx__ "lx" +#define __SIZE_MAX__ 18446744073709551615UL +#define __SIZE_TYPE__ long unsigned int +#define __SIZE_WIDTH__ 64 +#define __SSE2_MATH__ 1 +#define __SSE2__ 1 +#define __SSE3__ 1 +#define __SSE_MATH__ 1 +#define __SSE__ 1 +#define __SSP__ 1 +#define __SSSE3__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL +#define __STDC_HOSTED__ 1 +#define __STDC_NO_THREADS__ 1 +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 +#define __STDC__ 1 +#define __UINT16_C_SUFFIX__ +#define __UINT16_FMTX__ "hX" +#define __UINT16_FMTo__ "ho" +#define __UINT16_FMTu__ "hu" +#define __UINT16_FMTx__ "hx" +#define __UINT16_MAX__ 65535 +#define __UINT16_TYPE__ unsigned short +#define __UINT32_C_SUFFIX__ U +#define __UINT32_FMTX__ "X" +#define __UINT32_FMTo__ "o" +#define __UINT32_FMTu__ "u" +#define __UINT32_FMTx__ "x" +#define __UINT32_MAX__ 4294967295U +#define __UINT32_TYPE__ unsigned int +#define __UINT64_C_SUFFIX__ ULL +#define __UINT64_FMTX__ "llX" +#define __UINT64_FMTo__ "llo" +#define __UINT64_FMTu__ "llu" +#define __UINT64_FMTx__ "llx" +#define __UINT64_MAX__ 18446744073709551615ULL +#define __UINT64_TYPE__ long long unsigned int +#define __UINT8_C_SUFFIX__ +#define __UINT8_FMTX__ "hhX" +#define __UINT8_FMTo__ "hho" +#define __UINT8_FMTu__ "hhu" +#define __UINT8_FMTx__ "hhx" +#define __UINT8_MAX__ 255 +#define __UINT8_TYPE__ unsigned char +#define __UINTMAX_C_SUFFIX__ UL +#define __UINTMAX_FMTX__ "lX" +#define __UINTMAX_FMTo__ "lo" +#define __UINTMAX_FMTu__ "lu" +#define __UINTMAX_FMTx__ "lx" +#define __UINTMAX_MAX__ 18446744073709551615UL +#define __UINTMAX_TYPE__ long unsigned int +#define __UINTMAX_WIDTH__ 64 +#define __UINTPTR_FMTX__ "lX" +#define __UINTPTR_FMTo__ "lo" +#define __UINTPTR_FMTu__ "lu" +#define __UINTPTR_FMTx__ "lx" +#define __UINTPTR_MAX__ 18446744073709551615UL +#define __UINTPTR_TYPE__ long unsigned int +#define __UINTPTR_WIDTH__ 64 +#define __UINT_FAST16_FMTX__ "hX" +#define __UINT_FAST16_FMTo__ "ho" +#define __UINT_FAST16_FMTu__ "hu" +#define __UINT_FAST16_FMTx__ "hx" +#define __UINT_FAST16_MAX__ 65535 +#define __UINT_FAST16_TYPE__ unsigned short +#define __UINT_FAST32_FMTX__ "X" +#define __UINT_FAST32_FMTo__ "o" +#define __UINT_FAST32_FMTu__ "u" +#define __UINT_FAST32_FMTx__ "x" +#define __UINT_FAST32_MAX__ 4294967295U +#define __UINT_FAST32_TYPE__ unsigned int +#define __UINT_FAST64_FMTX__ "lX" +#define __UINT_FAST64_FMTo__ "lo" +#define __UINT_FAST64_FMTu__ "lu" +#define __UINT_FAST64_FMTx__ "lx" +#define __UINT_FAST64_MAX__ 18446744073709551615UL +#define __UINT_FAST64_TYPE__ long unsigned int +#define __UINT_FAST8_FMTX__ "hhX" +#define __UINT_FAST8_FMTo__ "hho" +#define __UINT_FAST8_FMTu__ "hhu" +#define __UINT_FAST8_FMTx__ "hhx" +#define __UINT_FAST8_MAX__ 255 +#define __UINT_FAST8_TYPE__ unsigned char +#define __UINT_LEAST16_FMTX__ "hX" +#define __UINT_LEAST16_FMTo__ "ho" +#define __UINT_LEAST16_FMTu__ "hu" +#define __UINT_LEAST16_FMTx__ "hx" +#define __UINT_LEAST16_MAX__ 65535 +#define __UINT_LEAST16_TYPE__ unsigned short +#define __UINT_LEAST32_FMTX__ "X" +#define __UINT_LEAST32_FMTo__ "o" +#define __UINT_LEAST32_FMTu__ "u" +#define __UINT_LEAST32_FMTx__ "x" +#define __UINT_LEAST32_MAX__ 4294967295U +#define __UINT_LEAST32_TYPE__ unsigned int +#define __UINT_LEAST64_FMTX__ "lX" +#define __UINT_LEAST64_FMTo__ "lo" +#define __UINT_LEAST64_FMTu__ "lu" +#define __UINT_LEAST64_FMTx__ "lx" +#define __UINT_LEAST64_MAX__ 18446744073709551615UL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __UINT_LEAST8_FMTX__ "hhX" +#define __UINT_LEAST8_FMTo__ "hho" +#define __UINT_LEAST8_FMTu__ "hhu" +#define __UINT_LEAST8_FMTx__ "hhx" +#define __UINT_LEAST8_MAX__ 255 +#define __UINT_LEAST8_TYPE__ unsigned char +#define __USER_LABEL_PREFIX__ _ +#define __VERSION__ "4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)" +#define __WCHAR_MAX__ 2147483647 +#define __WCHAR_TYPE__ int +#define __WCHAR_WIDTH__ 32 +#define __WINT_MAX__ 2147483647 +#define __WINT_TYPE__ int +#define __WINT_WIDTH__ 32 +#define __amd64 1 +#define __amd64__ 1 +#define __apple_build_version__ 10001145 +#define __block __attribute__((__blocks__(byref))) +#define __clang__ 1 +#define __clang_major__ 10 +#define __clang_minor__ 0 +#define __clang_patchlevel__ 0 +#define __clang_version__ "10.0.0 (clang-1000.11.45.5)" +#define __core2 1 +#define __core2__ 1 +#define __cplusplus 201103L +#define __cpp_alias_templates 200704 +#define __cpp_attributes 200809 +#define __cpp_constexpr 200704 +#define __cpp_decltype 200707 +#define __cpp_delegating_constructors 200604 +#define __cpp_exceptions 199711 +#define __cpp_inheriting_constructors 201511 +#define __cpp_initializer_lists 200806 +#define __cpp_lambdas 200907 +#define __cpp_nsdmi 200809 +#define __cpp_range_based_for 200907 +#define __cpp_raw_strings 200710 +#define __cpp_ref_qualifiers 200710 +#define __cpp_rtti 199711 +#define __cpp_rvalue_references 200610 +#define __cpp_static_assert 200410 +#define __cpp_threadsafe_static_init 200806 +#define __cpp_unicode_characters 200704 +#define __cpp_unicode_literals 200710 +#define __cpp_user_defined_literals 200809 +#define __cpp_variadic_templates 200704 +#define __llvm__ 1 +#define __nonnull _Nonnull +#define __null_unspecified _Null_unspecified +#define __nullable _Nullable +#define __pic__ 2 +#define __private_extern__ extern +#define __strong +#define __tune_core2__ 1 +#define __unsafe_unretained +#define __weak __attribute__((objc_gc(weak))) +#define __x86_64 1 +#define __x86_64__ 1 diff --git a/main.cpp b/main.cpp index 81c695ce8acca0c57684057cfca756b13049daf0..51a004222024d9dd5b400e33505087c6588cbbc8 100644 --- a/main.cpp +++ b/main.cpp @@ -1,18 +1,23 @@ #include <QCoreApplication> -#include "COM/Comsguy.h" +#include "COM/ComsGirl.hpp" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); - Comsguy *comsguy = new Comsguy; - - QList<QSerialPortInfo> SerialList = QSerialPortInfo::availablePorts(); - QString serialport = argv[1]; - comsguy->updateCOM(Start, serialport,""); - comsguy->updateCOM(Wifi, "Wifi", serialport); - - return a.exec(); + // Header: + QProcess::execute("clear"); + printf("########################################################\n"); + printf("############### Welcome to FSTelemetry ###############\n"); + printf("########################################################\n"); + while (true) { + new ComsGirl(ComsGirl::Serial, + ComsGirl::UdpReceiver, + ComsGirl::UdpSender, + ComsGirl::On, + ComsGirl::DefaultNames); + a.exec(); + } } diff --git a/moc_predefs.h b/moc_predefs.h index 5c70f21cfffc0dfbd265cdb64c376a4f26bc9510..1b5f129bb7a60ea41bbfaef53d3585ad99d00a23 100644 --- a/moc_predefs.h +++ b/moc_predefs.h @@ -187,6 +187,7 @@ #define __LP64__ 1 #define __MACH__ 1 #define __MMX__ 1 +#define __NO_INLINE__ 1 #define __NO_MATH_INLINES 1 #define __OBJC_BOOL_IS_BOOL 0 #define __OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES 3 @@ -194,7 +195,6 @@ #define __OPENCL_MEMORY_SCOPE_SUB_GROUP 4 #define __OPENCL_MEMORY_SCOPE_WORK_GROUP 1 #define __OPENCL_MEMORY_SCOPE_WORK_ITEM 0 -#define __OPTIMIZE__ 1 #define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_PDP_ENDIAN__ 3412 diff --git a/zisbvfnJ b/zisbvfnJ deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000