diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..842991e --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,34 @@ +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network SerialPort REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network SerialPort REQUIRED) + +set(COMMON_SOURCES + ../common/microcontroller.cpp + ../common/items/item.cpp + ../common/items/itemstore.cpp + ../common/items/signal.cpp + ../common/items/train.cpp + ../common/items/turnout.cpp +) + +include_directories(PRIVATE + ./common/items/ + ./common + +) + +set(COMMON_LINK_LIBRARYS + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::SerialPort +) + +add_subdirectory(trainControllerUI) +add_subdirectory(trainOverlord) diff --git a/src/auxitem.cpp b/src/auxitem.cpp deleted file mode 100644 index 860a121..0000000 --- a/src/auxitem.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "auxitem.h" - -AuxItem::AuxItem(Microcontroller* micro, uint32_t itemIdIn, QString name, uint8_t value, - QObject* parent): Item(itemIdIn, name, value, parent), micro_(micro) -{ - -} - -void AuxItem::setValue(uint8_t value) -{ - Item::setValue(value); - micro_->setAuxPwm(value); -} - -void AuxItem::store(QJsonObject &json) -{ - json["Type"] = "Aux"; - Item::store(json); -} diff --git a/src/auxitem.h b/src/auxitem.h deleted file mode 100644 index 512144f..0000000 --- a/src/auxitem.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "item.h" -#include "../microcontroller.h" - -class AuxItem: public Item -{ - Q_OBJECT -private: - Microcontroller* micro_; - -public slots: - - virtual void setValue(uint8_t value); - -public: - AuxItem(Microcontroller* micro, uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "", - uint8_t value = 0, QObject* parent = nullptr); - - virtual void store(QJsonObject& json); -}; diff --git a/src/items/item.cpp b/src/common/items/item.cpp similarity index 100% rename from src/items/item.cpp rename to src/common/items/item.cpp diff --git a/src/items/item.h b/src/common/items/item.h similarity index 100% rename from src/items/item.h rename to src/common/items/item.h diff --git a/src/items/itemstore.cpp b/src/common/items/itemstore.cpp similarity index 51% rename from src/items/itemstore.cpp rename to src/common/items/itemstore.cpp index 8584eae..523d2ce 100644 --- a/src/items/itemstore.cpp +++ b/src/common/items/itemstore.cpp @@ -2,7 +2,6 @@ #include #include #include "train.h" -#include "../trainjs.h" ItemStore::ItemStore(QObject *parent): QObject(parent) { @@ -21,62 +20,35 @@ void ItemStore::addItem(std::shared_ptr item) if(!mached) { items_.push_back(std::shared_ptr(item)); - - if(dynamic_cast(item.get())) - { - std::vector> joysticks = TrainJs::getJsDevices(); - for(auto joystick: joysticks) - { - if(!joystick->itemIsSet()) - { - joystick->setItem(item); - connect(joystick.get(), &TrainJs::reqNewItem, this, &ItemStore::jsReqNewItem); - break; - } - } - } - itemAdded(std::weak_ptr(items_.back())); } qDebug()<<"Got item: "<id()<<" matched: "<> joysticks = TrainJs::getJsDevices(); - for(auto joystick: joysticks) - { - if(joystick->getWantsNewItem()) - { - std::shared_ptr oldItem = joystick->getItem().lock(); - for(size_t i = 0; i < items_.size(); ++i) - { - if(!oldItem || *items_[i] == *oldItem) - { - for(size_t j = 1; j < items_.size(); ++j) - { - std::shared_ptr item = items_[(i+j) % items_.size()]; - if(dynamic_cast(item.get())) - { - joystick->setItem(item); - break; - } - } - break; - } - } - } - } -} - void ItemStore::addItems(const std::vector>& itemIn) { for(unsigned j = 0; j < itemIn.size(); j++) + { addItem(itemIn[j]); - + Train* train = dynamic_cast(itemIn[j].get()); + if(!train) + continue; + if(train->getTrainId() == 0) + { + const uint8_t uidBytes[] = {12, 154, 110, 34}; + train->tags.push_back(NfcUid(uidBytes, sizeof(uidBytes))); + } + else if(train->getTrainId() == 3) + { + const uint8_t uidBytes[] = {136, 83, 111, 26}; + train->tags.push_back(NfcUid(uidBytes, sizeof(uidBytes))); + } + else if(train->getTrainId() == 4) + { + const uint8_t uidBytes[] = {76, 55, 220, 31}; + train->tags.push_back(NfcUid(uidBytes, sizeof(uidBytes))); + } + } } void ItemStore::removeItem(const ItemData& item) @@ -91,26 +63,21 @@ void ItemStore::removeItem(const ItemData& item) } } - void ItemStore::clear() { for(size_t i = 0; i < items_.size(); ++i) itemDeleted(*items_[i]); items_.clear(); } - void ItemStore::itemStateChanged(const ItemData& item) { - for(unsigned i = 0; i < items_.size(); i++ ) { if(items_[i]->operator==(item)) { - - if(items_[i]->getValue() != item.getValue())items_[i]->informValue(item.getValue()); + if(items_[i]->getValue() != item.getValue()) + items_[i]->informValue(item.getValue()); } - } - } diff --git a/src/items/itemstore.h b/src/common/items/itemstore.h similarity index 89% rename from src/items/itemstore.h rename to src/common/items/itemstore.h index 8e94404..7a542b9 100644 --- a/src/items/itemstore.h +++ b/src/common/items/itemstore.h @@ -2,13 +2,12 @@ #include #include #include "item.h" - -#include +#include "../nfcuid.h" class ItemStore: public QObject { Q_OBJECT -private: +protected: std::vector< std::shared_ptr > items_; public: @@ -23,10 +22,6 @@ public: void clear(); -private slots: - - void jsReqNewItem(); - signals: void itemDeleted(ItemData item); diff --git a/src/items/signal.cpp b/src/common/items/signal.cpp similarity index 100% rename from src/items/signal.cpp rename to src/common/items/signal.cpp diff --git a/src/items/signal.h b/src/common/items/signal.h similarity index 100% rename from src/items/signal.h rename to src/common/items/signal.h diff --git a/src/items/train.cpp b/src/common/items/train.cpp similarity index 100% rename from src/items/train.cpp rename to src/common/items/train.cpp diff --git a/src/items/train.h b/src/common/items/train.h similarity index 70% rename from src/items/train.h rename to src/common/items/train.h index dec8b31..e1d23ba 100644 --- a/src/items/train.h +++ b/src/common/items/train.h @@ -1,16 +1,20 @@ #ifndef TRAIN_H #define TRAIN_H +#include #include "item.h" #include "../microcontroller.h" +#include "../nfcuid.h" class Train : public Item { Q_OBJECT uint8_t functionMask_; uint8_t train_id_; + int lastReader_ = -1; public: static Microcontroller *micro; + std::vector tags; Train(uint8_t id = 0, uint8_t address = 0, uint8_t functionMask = 0, int8_t initalValue = 0); @@ -23,6 +27,13 @@ public slots: void reverse(); virtual void setFunction(uint8_t function, bool on); virtual void setValue(int8_t value); + bool passedReader(const NfcUid &uid) + { + if(lastReader_ == uid.reader) + return false; + lastReader_ = uid.reader; + return true; + } uint8_t getTrainId() { return train_id_; diff --git a/src/items/turnout.cpp b/src/common/items/turnout.cpp similarity index 100% rename from src/items/turnout.cpp rename to src/common/items/turnout.cpp diff --git a/src/items/turnout.h b/src/common/items/turnout.h similarity index 100% rename from src/items/turnout.h rename to src/common/items/turnout.h diff --git a/src/microcontroller.cpp b/src/common/microcontroller.cpp similarity index 92% rename from src/microcontroller.cpp rename to src/common/microcontroller.cpp index 406c482..ae8b1ab 100644 --- a/src/microcontroller.cpp +++ b/src/common/microcontroller.cpp @@ -142,6 +142,22 @@ std::shared_ptr Microcontroller::processSignalLine(const QString& buffer) return nullptr; } +void Microcontroller::processNfcLine(const QString& buffer) +{ + QStringList tokens = buffer.split(" "); + if(tokens.size() < 4) + return; + + NfcUid uid; + uid.reader = tokens[1].toUInt(); + tokens = tokens[3].split(':'); + uid.length = tokens.length(); + for(size_t i = 0; i < uid.length; ++i) + uid.bytes[i] = tokens[i].toInt(); + qDebug()<<"Got Tag"; + gotTag(uid); +} + void Microcontroller::processList(const QString& buffer) { QStringList bufferList = buffer.split(' '); @@ -210,6 +226,10 @@ void Microcontroller::processMicroReturn() { processItemState(_buffer); } + else if(_buffer.startsWith("NFC")) + { + processNfcLine(_buffer); + } else if(_buffer.startsWith("TrainController")) { requestState(); diff --git a/src/microcontroller.h b/src/common/microcontroller.h similarity index 95% rename from src/microcontroller.h rename to src/common/microcontroller.h index c49afd6..37f760a 100644 --- a/src/microcontroller.h +++ b/src/common/microcontroller.h @@ -4,18 +4,17 @@ #include #include -#include #include #include #include #include #include #include -#include #include #include #include #include "items/item.h" +#include "nfcuid.h" class Microcontroller : public QObject { @@ -44,6 +43,7 @@ private: std::shared_ptr processTrainLine(const QString& buffer); std::shared_ptr processTurnoutLine(const QString& buffer); std::shared_ptr processSignalLine(const QString& buffer); + void processNfcLine(const QString& buffer); void write(char *buffer, const size_t length); void write(const QByteArray& buffer); @@ -74,6 +74,7 @@ signals: void itemChanged(ItemData relay); void auxStateChanged(int value); void gotItemList(std::vector>&); + void gotTag(NfcUid uid); }; #endif // MICROCONTROLLER_H diff --git a/src/common/nfcuid.h b/src/common/nfcuid.h new file mode 100644 index 0000000..8792290 --- /dev/null +++ b/src/common/nfcuid.h @@ -0,0 +1,47 @@ +#ifndef NFCUID_H +#define NFCUID_H +#include +#include + +class NfcUid +{ +public: + uint8_t reader; + uint8_t bytes[10]; + uint8_t length; + bool operator==(NfcUid& in) const + { + if(length != in.length) + return false; + for(uint8_t i = 0; i < length; ++i) + { + if(bytes[i] != in.bytes[i]) + return false; + } + return true; + } + bool operator!=(NfcUid& in) const + { + return !operator==(in); + } + NfcUid(){} + NfcUid(const uint8_t* const bytesIn, uint8_t lengthIn, uint8_t readerIn = 0): + reader(readerIn), length(lengthIn) + { + for(uint8_t i = 0; i < length; ++i) + bytes[i] = bytesIn[i]; + } + std::string toString() + { + std::string str; + for(uint8_t i = 0; i < length; ++i) + { + str.append(std::to_string((int)bytes[i])); + if(i != length-1) + str.push_back(':'); + } + return str; + } +}; + +#endif // NFCUID_H diff --git a/src/trainControllerUI/CMakeLists.txt b/src/trainControllerUI/CMakeLists.txt new file mode 100644 index 0000000..b201225 --- /dev/null +++ b/src/trainControllerUI/CMakeLists.txt @@ -0,0 +1,28 @@ +set(UI_SOURCES + traincontrollerui.cpp + mainobject.cpp + QJoysticks.cpp + trainjs.cpp + ui/itemscrollbox.cpp + ui/itemscrollbox.h + ui/itemwidget.cpp + ui/itemwidget.h + ui/mainwindow.cpp + ui/mainwindow.h + ui/mainwindow.ui + ui/relayscrollbox.ui + ui/signalwidget.cpp + ui/signalwidget.h + ui/signalwidget.ui + ui/trainwidget.cpp + ui/trainwidget.h + ui/trainwidget.ui + jsbackend/SDL_Joysticks.cpp + jsbackend/VirtualJoystick.cpp +) + +find_package(SDL2 REQUIRED) + +add_executable(traincontrollerui ${UI_SOURCES} ${COMMON_SOURCES}) +target_link_libraries(traincontrollerui PRIVATE ${COMMON_LINK_LIBRARYS} Qt${QT_VERSION_MAJOR}::Widgets ${SDL2_LIBRARIES}) +target_include_directories(traincontrollerui PRIVATE ./ ./ui ./jsbackend ${SDL2_INCLUDE_DIRS}) diff --git a/src/QJoysticks.cpp b/src/trainControllerUI/QJoysticks.cpp similarity index 100% rename from src/QJoysticks.cpp rename to src/trainControllerUI/QJoysticks.cpp diff --git a/src/QJoysticks.h b/src/trainControllerUI/QJoysticks.h similarity index 100% rename from src/QJoysticks.h rename to src/trainControllerUI/QJoysticks.h diff --git a/src/jsbackend/JoysticksCommon.h b/src/trainControllerUI/jsbackend/JoysticksCommon.h similarity index 100% rename from src/jsbackend/JoysticksCommon.h rename to src/trainControllerUI/jsbackend/JoysticksCommon.h diff --git a/src/jsbackend/JoysticksCommon.h.orig b/src/trainControllerUI/jsbackend/JoysticksCommon.h.orig similarity index 100% rename from src/jsbackend/JoysticksCommon.h.orig rename to src/trainControllerUI/jsbackend/JoysticksCommon.h.orig diff --git a/src/jsbackend/SDL_Joysticks.cpp b/src/trainControllerUI/jsbackend/SDL_Joysticks.cpp similarity index 100% rename from src/jsbackend/SDL_Joysticks.cpp rename to src/trainControllerUI/jsbackend/SDL_Joysticks.cpp diff --git a/src/jsbackend/SDL_Joysticks.cpp.orig b/src/trainControllerUI/jsbackend/SDL_Joysticks.cpp.orig similarity index 100% rename from src/jsbackend/SDL_Joysticks.cpp.orig rename to src/trainControllerUI/jsbackend/SDL_Joysticks.cpp.orig diff --git a/src/jsbackend/SDL_Joysticks.h b/src/trainControllerUI/jsbackend/SDL_Joysticks.h similarity index 100% rename from src/jsbackend/SDL_Joysticks.h rename to src/trainControllerUI/jsbackend/SDL_Joysticks.h diff --git a/src/jsbackend/SDL_Joysticks.h.orig b/src/trainControllerUI/jsbackend/SDL_Joysticks.h.orig similarity index 100% rename from src/jsbackend/SDL_Joysticks.h.orig rename to src/trainControllerUI/jsbackend/SDL_Joysticks.h.orig diff --git a/src/jsbackend/VirtualJoystick.cpp b/src/trainControllerUI/jsbackend/VirtualJoystick.cpp similarity index 100% rename from src/jsbackend/VirtualJoystick.cpp rename to src/trainControllerUI/jsbackend/VirtualJoystick.cpp diff --git a/src/jsbackend/VirtualJoystick.cpp.orig b/src/trainControllerUI/jsbackend/VirtualJoystick.cpp.orig similarity index 100% rename from src/jsbackend/VirtualJoystick.cpp.orig rename to src/trainControllerUI/jsbackend/VirtualJoystick.cpp.orig diff --git a/src/jsbackend/VirtualJoystick.h b/src/trainControllerUI/jsbackend/VirtualJoystick.h similarity index 100% rename from src/jsbackend/VirtualJoystick.h rename to src/trainControllerUI/jsbackend/VirtualJoystick.h diff --git a/src/jsbackend/VirtualJoystick.h.orig b/src/trainControllerUI/jsbackend/VirtualJoystick.h.orig similarity index 100% rename from src/jsbackend/VirtualJoystick.h.orig rename to src/trainControllerUI/jsbackend/VirtualJoystick.h.orig diff --git a/src/mainobject.cpp b/src/trainControllerUI/mainobject.cpp similarity index 100% rename from src/mainobject.cpp rename to src/trainControllerUI/mainobject.cpp diff --git a/src/mainobject.h b/src/trainControllerUI/mainobject.h similarity index 87% rename from src/mainobject.h rename to src/trainControllerUI/mainobject.h index 62596d8..9c00769 100644 --- a/src/mainobject.h +++ b/src/trainControllerUI/mainobject.h @@ -7,9 +7,6 @@ #include #include #include -#include -#include -#include #include @@ -22,7 +19,6 @@ #include "microcontroller.h" #include "ui/mainwindow.h" #include "items/itemstore.h" -#include "items/auxitem.h" class MainObject : public QObject { diff --git a/src/main.cpp b/src/trainControllerUI/traincontrollerui.cpp similarity index 98% rename from src/main.cpp rename to src/trainControllerUI/traincontrollerui.cpp index 4b8cb3f..86cb846 100644 --- a/src/main.cpp +++ b/src/trainControllerUI/traincontrollerui.cpp @@ -31,7 +31,7 @@ int main(int argc, char *argv[]) //parse comand line QCommandLineParser parser; - parser.setApplicationDescription("Smart Home Interface"); + parser.setApplicationDescription("Train control gui"); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption tcpOption(QStringList() << "t" << "tcp", QCoreApplication::translate("main", "Use Tcp connection")); diff --git a/src/trainjs.cpp b/src/trainControllerUI/trainjs.cpp similarity index 100% rename from src/trainjs.cpp rename to src/trainControllerUI/trainjs.cpp diff --git a/src/trainjs.h b/src/trainControllerUI/trainjs.h similarity index 100% rename from src/trainjs.h rename to src/trainControllerUI/trainjs.h diff --git a/src/ui/itemscrollbox.cpp b/src/trainControllerUI/ui/itemscrollbox.cpp similarity index 76% rename from src/ui/itemscrollbox.cpp rename to src/trainControllerUI/ui/itemscrollbox.cpp index d24caa2..2810781 100644 --- a/src/ui/itemscrollbox.cpp +++ b/src/trainControllerUI/ui/itemscrollbox.cpp @@ -43,6 +43,17 @@ void ItemScrollBox::addItem(std::weak_ptr item) widget->setShortcuts(QKeySequence(Qt::Key_R), QKeySequence(Qt::Key_F), QKeySequence(Qt::Key_V)); else if(train->getTrainId() == 4) widget->setShortcuts(QKeySequence(Qt::Key_T), QKeySequence(Qt::Key_G), QKeySequence(Qt::Key_B)); + + std::vector> joysticks = TrainJs::getJsDevices(); + for(auto joystick: joysticks) + { + if(!joystick->itemIsSet()) + { + joystick->setItem(item); + connect(joystick.get(), &TrainJs::reqNewItem, this, &ItemScrollBox::jsReqNewItem); + break; + } + } } else if(turnout) { @@ -80,6 +91,39 @@ void ItemScrollBox::addItem(std::weak_ptr item) } } +void ItemScrollBox::jsReqNewItem() +{ + if(widgets_.empty()) + return; + + std::vector> joysticks = TrainJs::getJsDevices(); + for(auto joystick: joysticks) + { + if(joystick->getWantsNewItem()) + { + std::shared_ptr oldItem = joystick->getItem().lock(); + for(size_t i = 0; i < widgets_.size(); ++i) + { + std::shared_ptr item = widgets_[i]->getItem().lock(); + if(item && (!oldItem || *item == *oldItem)) + { + for(size_t j = 1; j < widgets_.size(); ++j) + { + ItemWidget* widget = widgets_[(i+j) % widgets_.size()]; + std::shared_ptr item = widgets_[i]->getItem().lock(); + if(item && dynamic_cast(item.get())) + { + joystick->setItem(item); + break; + } + } + break; + } + } + } + } +} + void ItemScrollBox::removeItem(const ItemData& item) { for(unsigned i = 0; i < widgets_.size(); i++) diff --git a/src/ui/itemscrollbox.h b/src/trainControllerUI/ui/itemscrollbox.h similarity index 93% rename from src/ui/itemscrollbox.h rename to src/trainControllerUI/ui/itemscrollbox.h index 228a315..444e608 100644 --- a/src/ui/itemscrollbox.h +++ b/src/trainControllerUI/ui/itemscrollbox.h @@ -28,12 +28,11 @@ public: explicit ItemScrollBox(QWidget *parent = nullptr); ~ItemScrollBox(); - void setItemStore(ItemStore* itemStore); - public slots: void addItem(std::weak_ptr item); void removeItem(const ItemData& item); + void jsReqNewItem(); private: Ui::RelayScrollBox *ui; diff --git a/src/ui/itemwidget.cpp b/src/trainControllerUI/ui/itemwidget.cpp similarity index 100% rename from src/ui/itemwidget.cpp rename to src/trainControllerUI/ui/itemwidget.cpp diff --git a/src/ui/itemwidget.h b/src/trainControllerUI/ui/itemwidget.h similarity index 93% rename from src/ui/itemwidget.h rename to src/trainControllerUI/ui/itemwidget.h index 82a64db..f4093d9 100644 --- a/src/ui/itemwidget.h +++ b/src/trainControllerUI/ui/itemwidget.h @@ -3,7 +3,6 @@ #include #include #include -#include "itemsettingsdialog.h" #include "../items/item.h" class ItemWidget : public QWidget diff --git a/src/ui/mainwindow.cpp b/src/trainControllerUI/ui/mainwindow.cpp similarity index 94% rename from src/ui/mainwindow.cpp rename to src/trainControllerUI/ui/mainwindow.cpp index 71fb464..b2d6b13 100644 --- a/src/ui/mainwindow.cpp +++ b/src/trainControllerUI/ui/mainwindow.cpp @@ -1,8 +1,6 @@ #include "mainwindow.h" #include "ui_mainwindow.h" #include "itemscrollbox.h" -#include "itemsettingsdialog.h" -#include "itemcreationdialog.h" MainWindow::MainWindow(Microcontroller * const micro, ItemStore* items, QWidget *parent) : QMainWindow(parent), diff --git a/src/ui/mainwindow.h b/src/trainControllerUI/ui/mainwindow.h similarity index 100% rename from src/ui/mainwindow.h rename to src/trainControllerUI/ui/mainwindow.h diff --git a/src/ui/mainwindow.ui b/src/trainControllerUI/ui/mainwindow.ui similarity index 100% rename from src/ui/mainwindow.ui rename to src/trainControllerUI/ui/mainwindow.ui diff --git a/src/ui/relayscrollbox.ui b/src/trainControllerUI/ui/relayscrollbox.ui similarity index 100% rename from src/ui/relayscrollbox.ui rename to src/trainControllerUI/ui/relayscrollbox.ui diff --git a/src/ui/signalwidget.cpp b/src/trainControllerUI/ui/signalwidget.cpp similarity index 100% rename from src/ui/signalwidget.cpp rename to src/trainControllerUI/ui/signalwidget.cpp diff --git a/src/ui/signalwidget.h b/src/trainControllerUI/ui/signalwidget.h similarity index 100% rename from src/ui/signalwidget.h rename to src/trainControllerUI/ui/signalwidget.h diff --git a/src/ui/signalwidget.ui b/src/trainControllerUI/ui/signalwidget.ui similarity index 100% rename from src/ui/signalwidget.ui rename to src/trainControllerUI/ui/signalwidget.ui diff --git a/src/ui/trainwidget.cpp b/src/trainControllerUI/ui/trainwidget.cpp similarity index 100% rename from src/ui/trainwidget.cpp rename to src/trainControllerUI/ui/trainwidget.cpp diff --git a/src/ui/trainwidget.h b/src/trainControllerUI/ui/trainwidget.h similarity index 96% rename from src/ui/trainwidget.h rename to src/trainControllerUI/ui/trainwidget.h index 1e250db..d2edca4 100644 --- a/src/ui/trainwidget.h +++ b/src/trainControllerUI/ui/trainwidget.h @@ -3,7 +3,6 @@ #include #include #include -#include "itemsettingsdialog.h" #include "../items/item.h" #include "itemwidget.h" diff --git a/src/ui/trainwidget.ui b/src/trainControllerUI/ui/trainwidget.ui similarity index 100% rename from src/ui/trainwidget.ui rename to src/trainControllerUI/ui/trainwidget.ui diff --git a/src/trainOverlord/CMakeLists.txt b/src/trainOverlord/CMakeLists.txt new file mode 100644 index 0000000..c6ec6c9 --- /dev/null +++ b/src/trainOverlord/CMakeLists.txt @@ -0,0 +1,8 @@ +set(UI_SOURCES + trainoverlord.cpp + overlorditemstore.cpp +) + +add_executable(trainoverlord ${UI_SOURCES} ${COMMON_SOURCES}) +target_link_libraries(trainoverlord PRIVATE ${COMMON_LINK_LIBRARYS}) +target_include_directories(trainoverlord PRIVATE ./) diff --git a/src/trainOverlord/overlorditemstore.cpp b/src/trainOverlord/overlorditemstore.cpp new file mode 100644 index 0000000..f367f5b --- /dev/null +++ b/src/trainOverlord/overlorditemstore.cpp @@ -0,0 +1,26 @@ +#include "overlorditemstore.h" +#include +#include "train.h" + +OverlordItemStore::OverlordItemStore(QObject *parent): ItemStore(parent) +{ +} + +void OverlordItemStore::gotNfcTag(NfcUid uid) +{ + for(std::shared_ptr item : items_) + { + Train* train = dynamic_cast(item.get()); + if(!train) + continue; + for(const NfcUid& trainUid : train->tags) + { + if(trainUid == uid) + { + if(train->passedReader(uid)) + train->setValue(0-train->getValue()); + return; + } + } + } +} diff --git a/src/trainOverlord/overlorditemstore.h b/src/trainOverlord/overlorditemstore.h new file mode 100644 index 0000000..dd4da25 --- /dev/null +++ b/src/trainOverlord/overlorditemstore.h @@ -0,0 +1,16 @@ +#pragma once +#include "itemstore.h" +#include + +class OverlordItemStore: public ItemStore +{ + Q_OBJECT +private: + QTimer timer; +public: + OverlordItemStore(QObject *parent = nullptr); + +public slots: + + void gotNfcTag(NfcUid); +}; diff --git a/src/trainOverlord/trainoverlord.cpp b/src/trainOverlord/trainoverlord.cpp new file mode 100644 index 0000000..1dc590d --- /dev/null +++ b/src/trainOverlord/trainoverlord.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include + +#include "microcontroller.h" +#include "nfcuid.h" +#include "overlorditemstore.h" +#include "train.h" +#include "turnout.h" +#include "signal.h" + +void gotTag(NfcUid uid) +{ + std::cout<<"Got tag from "< - - AlarmSettingsDialog - - - - 0 - 0 - 423 - 281 - - - - Dialog - - - - - - Sound File: - - - - - - - 0 - - - 0 - - - - - false - - - - - - - Change - - - - - - - - - 0 - - - - - Sunrise - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Enable - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - AlarmSettingsDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - AlarmSettingsDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/ui/itemcreationdialog.cpp b/src/ui/itemcreationdialog.cpp deleted file mode 100644 index de0d51d..0000000 --- a/src/ui/itemcreationdialog.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "itemcreationdialog.h" -#include "ui_itemcreationdialog.h" - -ItemCreationDialog::ItemCreationDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::ItemCreationDialog) -{ - ui->setupUi(this); - connect(ui->comboBox, &QComboBox::currentTextChanged, this, &ItemCreationDialog::itemTypeChanged); - connect(ui->lineEdit, &QLineEdit::textChanged, this, &ItemCreationDialog::itemNameChanged); -} - -ItemCreationDialog::~ItemCreationDialog() -{ - delete ui; -} - -void ItemCreationDialog::itemTypeChanged(const QString& type) -{ - ui->verticalLayout->removeWidget(widget); -} - -void ItemCreationDialog::itemNameChanged(const QString& name) -{ - if(item) - { - item->setName(name); - } -} - diff --git a/src/ui/itemcreationdialog.h b/src/ui/itemcreationdialog.h deleted file mode 100644 index 6e993d3..0000000 --- a/src/ui/itemcreationdialog.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef ITEMCREATIONDIALOG_H -#define ITEMCREATIONDIALOG_H - -#include -#include -#include "../items/item.h" - -namespace Ui -{ -class ItemCreationDialog; -} - -class ItemCreationDialog : public QDialog -{ - Q_OBJECT - - QWidget* widget; - -public: - explicit ItemCreationDialog(QWidget *parent = nullptr); - ~ItemCreationDialog(); - - std::shared_ptr item; - -private slots: - - void itemTypeChanged(const QString& type); - void itemNameChanged(const QString& name); - -private: - Ui::ItemCreationDialog *ui; -}; - -#endif // ITEMCREATIONDIALOG_H diff --git a/src/ui/itemcreationdialog.ui b/src/ui/itemcreationdialog.ui deleted file mode 100644 index 4b55d6d..0000000 --- a/src/ui/itemcreationdialog.ui +++ /dev/null @@ -1,116 +0,0 @@ - - - ItemCreationDialog - - - - 0 - 0 - 400 - 140 - - - - Create Item - - - - :/images/UVOSicon.bmp:/images/UVOSicon.bmp - - - - - - - - Type - - - - - - - - Message - - - - - System - - - - - - - - - - - - Name - - - - - - - Item - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - - - buttonBox - accepted() - ItemCreationDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - ItemCreationDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/ui/itemsettingsdialog.cpp b/src/ui/itemsettingsdialog.cpp deleted file mode 100644 index 9f2086d..0000000 --- a/src/ui/itemsettingsdialog.cpp +++ /dev/null @@ -1,176 +0,0 @@ -#include "itemsettingsdialog.h" -#include "ui_itemsettingsdialog.h" -#include - -ItemSettingsDialog::ItemSettingsDialog(std::shared_ptr item, QWidget *parent) : - QDialog(parent), - item_(item), - ui(new Ui::ItemSettingsDialog) -{ - ui->setupUi(this); - - setModal(false); - - ui->label_name->setText(item_->getName()); - ui->checkBox_Override->setChecked(item_->getOverride()); - - - if(std::shared_ptr relay = std::dynamic_pointer_cast(item_)) - { - itemSpecificWidget_ = new RelayItemSettingsWidget(relay); - } - else if(std::shared_ptr msgItem = std::dynamic_pointer_cast(item_)) - { - itemSpecificWidget_ = new MessageItemSettingsWidget(msgItem); - } - else if(std::shared_ptr sysItem = std::dynamic_pointer_cast(item_)) - { - itemSpecificWidget_ = new SystemItemSettingsWidget(sysItem); - } - - if(itemSpecificWidget_) - { - ui->verticalLayout_2->addWidget(itemSpecificWidget_); - } - - connect(ui->pushButton_add, &QPushButton::clicked, this, &ItemSettingsDialog::addActor); - connect(ui->pushButton_remove, &QPushButton::clicked, this, &ItemSettingsDialog::removeActor); - connect(ui->pushButton_edit, &QPushButton::clicked, this, &ItemSettingsDialog::editActor); - connect(ui->checkBox_Override, &QPushButton::clicked, this, &ItemSettingsDialog::changeOverride); - - - ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Actor")); - ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Action")); - ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Enabled")); - ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - ui->tableWidget->horizontalHeader()->resizeSection(1, 60); - ui->tableWidget->horizontalHeader()->resizeSection(2, 75); - loadActorList(); -} - -ItemSettingsDialog::~ItemSettingsDialog() -{ - if(itemSpecificWidget_) delete itemSpecificWidget_; - delete ui; -} - -void ItemSettingsDialog::changeOverride() -{ - item_->setOverride(ui->checkBox_Override->isChecked()); -} - -void ItemSettingsDialog::loadActorList() -{ - //ui->listWidget->clear(); - ui->tableWidget->setRowCount(item_->getActors().size()); - - for(unsigned i = 0; i < item_->getActors().size(); i++) - { - ui->tableWidget->setItem(i, 0, new QTableWidgetItem(item_->getActors()[i]->getName())); - ui->tableWidget->setItem(i, 1, new QTableWidgetItem(item_->getActors()[i]->actionName())); - ui->tableWidget->setItem(i, 2, new QTableWidgetItem(item_->getActors()[i]->isActive() ? "Y" : "N")); - } -} - -void ItemSettingsDialog::addActor() -{ - ActorSettingsDialog* dialog = nullptr; - std::shared_ptr actor = nullptr; - - if(ui->comboBox->currentText() == "Alarm") - { - std::shared_ptr alarm = std::shared_ptr(new AlarmTime); - actor = alarm; - dialog = new ActorSettingsDialog(alarm, this); - } - else if(ui->comboBox->currentText() == "Sensor") - { - std::shared_ptr sensorActor = std::shared_ptr(new SensorActor); - actor = sensorActor; - dialog = new ActorSettingsDialog(sensorActor, this); - } - else if(ui->comboBox->currentText() == "Timer" ) - { - std::shared_ptr timerActor = std::shared_ptr(new TimerActor); - actor = timerActor; - dialog = new ActorSettingsDialog(timerActor, this); - } - else if(ui->comboBox->currentText() == "Regulator") - { - std::shared_ptr regulator = std::shared_ptr(new Regulator); - actor = regulator; - dialog = new ActorSettingsDialog(regulator, this); - } - - else if(ui->comboBox->currentText() == "Polynomal") - { - std::shared_ptr polynomalActor = std::shared_ptr(new PolynomalActor); - actor = polynomalActor; - dialog = new ActorSettingsDialog(polynomalActor, this); - } - - else if(ui->comboBox->currentText() == "Multi Factor") - { - std::shared_ptr polynomalActor = std::shared_ptr(new MultiFactorActor); - actor = polynomalActor; - dialog = new ActorSettingsDialog(polynomalActor, this); - } - - - if(dialog != nullptr) - { - dialog->setParent(this); - dialog->show(); - if(dialog->exec() == QDialog::Accepted) - { - item_->addActor(actor); - loadActorList(); - } - delete dialog; - } - -} - -void ItemSettingsDialog::removeActor() -{ - if(item_->getActors().size() > ui->tableWidget->currentRow()) - { - item_->removeActor(item_->getActors().at(ui->tableWidget->currentRow())); - loadActorList(); - } -} - -void ItemSettingsDialog::editActor() -{ - if(item_->getActors().size() > ui->tableWidget->currentRow()) - { - std::shared_ptr actor = item_->getActors()[ui->tableWidget->currentRow()]; - - std::shared_ptr alarmTime = std::dynamic_pointer_cast(actor); - std::shared_ptr regulator = std::dynamic_pointer_cast(actor); - std::shared_ptr sensorActor = std::dynamic_pointer_cast(actor); - std::shared_ptr timerActor = std::dynamic_pointer_cast(actor); - std::shared_ptr polynomalActor = std::dynamic_pointer_cast(actor); - std::shared_ptr factorActor = std::dynamic_pointer_cast(actor); - - ActorSettingsDialog* dialog; - - if(alarmTime) dialog = new ActorSettingsDialog(alarmTime, this); - else if(regulator) dialog = new ActorSettingsDialog(regulator, this); - else if(sensorActor) dialog = new ActorSettingsDialog(sensorActor, this); - else if(timerActor) dialog = new ActorSettingsDialog(timerActor, this); - else if(polynomalActor) dialog = new ActorSettingsDialog(polynomalActor, this); - else if(factorActor) dialog = new ActorSettingsDialog(factorActor, this); - else dialog = new ActorSettingsDialog(actor, this); - dialog->setParent(this); - dialog->show(); - dialog->exec(); - - for(int i = 0; i < ui->tableWidget->rowCount() && i < item_->getActors().size(); ++i) - { - ui->tableWidget->item(i, 0)->setText(item_->getActors()[i]->getName()); - ui->tableWidget->item(i, 1)->setText(item_->getActors()[i]->actionName()); - ui->tableWidget->item(i, 2)->setText(item_->getActors()[i]->isActive() ? "Y" : "N"); - } - } -} diff --git a/src/ui/itemsettingsdialog.h b/src/ui/itemsettingsdialog.h deleted file mode 100644 index 5ec31a2..0000000 --- a/src/ui/itemsettingsdialog.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RELAYSETTINGSDIALOG_H -#define RELAYSETTINGSDIALOG_H - -#include -#include -#include -#include "../items/item.h" - -namespace Ui -{ -class ItemSettingsDialog; -} - -class ItemSettingsDialog : public QDialog -{ - Q_OBJECT - std::shared_ptr item_; - QWidget* itemSpecificWidget_ = nullptr; - -private: - void loadActorList(); - -public: - explicit ItemSettingsDialog(std::shared_ptr item, QWidget *parent = nullptr); - ~ItemSettingsDialog(); - -private slots: - - void removeActor(); - void addActor(); - void editActor(); - void changeOverride(); - -private: - Ui::ItemSettingsDialog *ui; -}; - -#endif // RELAYSETTINGSDIALOG_H diff --git a/src/ui/itemsettingsdialog.ui b/src/ui/itemsettingsdialog.ui deleted file mode 100644 index 871bb9f..0000000 --- a/src/ui/itemsettingsdialog.ui +++ /dev/null @@ -1,274 +0,0 @@ - - - ItemSettingsDialog - - - - 0 - 0 - 577 - 390 - - - - Item Settings - - - - :/images/UVOSicon.bmp:/images/UVOSicon.bmp - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - 0 - - - 10 - - - - - Name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 5 - 0 - - - - Qt::LeftToRight - - - TextLabel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - Override - - - - - - - QFrame::StyledPanel - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - false - - - QAbstractItemView::NoEditTriggers - - - false - - - false - - - false - - - QAbstractItemView::SelectRows - - - false - - - Qt::SolidLine - - - false - - - 0 - - - 3 - - - false - - - 32 - - - true - - - false - - - 32 - - - - - - - - - - 0 - - - 0 - - - - - Remove - - - - - - - Edit - - - - - - - - - - - - 0 - 0 - - - - Act on - - - - - - - - Sensor - - - - - Polynomal - - - - - Regulator - - - - - Alarm - - - - - Timer - - - - - Multi Factor - - - - - - - - - 0 - 0 - - - - Add - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Ok - - - - - - - - - - - buttonBox - accepted() - ItemSettingsDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - ItemSettingsDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/trainControllerUI.pro b/trainControllerUI.pro deleted file mode 100644 index 39a966e..0000000 --- a/trainControllerUI.pro +++ /dev/null @@ -1,72 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2017-06-01T22:31:38 -# -#------------------------------------------------- - -QT += core gui widgets network serialport - -TARGET = traincontrollerui -TEMPLATE = app - -INCLUDEPATH += /usr/include/libnl3/ -INCLUDEPATH += /usr/include/SDL2/ - -LIBS += -lnl-3 -lnl-genl-3 -lSDL2 - -# The following define makes your compiler emit warnings if you use -# any feature of Qt which as been marked as deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS -DEFINES += SDL_SUPPORTED - -QMAKE_CXXFLAGS += -std=c++17 -O2 - -SOURCES += \ - src/items/train.cpp \ - src/items/turnout.cpp \ - src/mainobject.cpp \ - src/trainjs.cpp \ - src/QJoysticks.cpp \ - src/jsbackend/SDL_Joysticks.cpp \ - src/jsbackend/VirtualJoystick.cpp \ - src/ui/itemwidget.cpp \ - src/ui/trainwidget.cpp \ - src/items/signal.cpp \ - src/ui/signalwidget.cpp \ - src/ui/itemscrollbox.cpp \ - src/ui/mainwindow.cpp \ - src/items/item.cpp \ - src/items/itemstore.cpp\ - src/main.cpp \ - src/microcontroller.cpp - -HEADERS += \ - src/items/train.h \ - src/items/turnout.h \ - src/mainobject.h \ - src/trainjs.h \ - src/QJoysticks.h \ - src/jsbackend/SDL_Joysticks.h \ - src/jsbackend/VirtualJoystick.h \ - src/jsbackend/JoysticksCommon.h \ - src/ui/itemwidget.h \ - src/ui/trainwidget.h \ - src/items/signal.h \ - src/ui/signalwidget.h \ - src/ui/itemscrollbox.h \ - src/ui/mainwindow.h \ - src/items/item.h \ - src/items/itemstore.h - -HEADERS += \ - src/microcontroller.h \ - -INCLUDEPATH += src/ui/ - -FORMS += \ - src/ui/mainwindow.ui \ - src/ui/relayscrollbox.ui \ - src/ui/trainwidget.ui \ - src/ui/signalwidget.ui