Skip to content
magiks.cpp 5.53 KiB
Newer Older
#include "magiks.h"

#ifdef BLUETOOTH_USING_WINSOCK
GigAnon's avatar
GigAnon committed
    #include "bluetoothproxy/bluetoothproxywinsock.h"
GigAnon's avatar
GigAnon committed
    #include "bluetoothproxy/bluetoothproxyqt5.h"
#include "serialproxy/serialproxy.h"

#include <QTabWidget>
#include <QVBoxLayout>

#include "subwindows/bluetoothmanagementwidget.h"
GigAnon's avatar
GigAnon committed

#ifdef SERIAL_ENABLED
    #include "subwindows/serialportmanagementwidget.h"
#endif
#include "subwindows/odometrywindow.h"
#include "subwindows/asservwindow.h"
#include "subwindows/watchwindow.h"
#include "subwindows/loggerwidget.h"
#include "subwindows/plotwidget.h"
#include "subwindows/tablewidget.h"
#include "subwindows/remotewidget.h"
#include "subwindows/movementsettingswidget.h"
#include "bluetoothtestserver.h"
#include <QMessageBox>
#include <QDebug>
Magiks::Magiks(QWidget *parent): QWidget(parent)
{
    setWindowTitle(tr("Magiks - Robot remote"));
#ifndef BLUETOOTH_SERVER_MODE

GigAnon's avatar
GigAnon committed
#ifdef SERIAL_ENABLED
    bool bluetoothMode = (QMessageBox::question(this, tr("Mode"), tr("Do you want to use Majiks in Bluetooth mode?"))
                          == QMessageBox::Yes);
GigAnon's avatar
GigAnon committed
#else
    bool bluetoothMode = true;
#endif

    if(bluetoothMode)
    {
        #ifdef BLUETOOTH_USING_WINSOCK
        m_serialProxy = new BluetoothProxyWinsock(this);
        #else
        m_serialProxy = new BluetoothProxyQt5(this);
        #endif
    }
    else
    {
GigAnon's avatar
GigAnon committed
        #ifdef SERIAL_ENABLED
        m_serialProxy = new SerialProxy(9600, this);
GigAnon's avatar
GigAnon committed
        #else
        m_serialProxy = nullptr;
        #endif
GigAnon's avatar
GigAnon committed
    #ifdef SERIAL_ENABLED
    if(bluetoothMode)
GigAnon's avatar
GigAnon committed
    #endif
        m_serialManagement   = new BluetoothManagementWidget(bluetoothMode?static_cast<BluetoothProxy*>(m_serialProxy):nullptr);
GigAnon's avatar
GigAnon committed
    #ifdef SERIAL_ENABLED
    else
        m_serialManagement   = new SerialPortManagementWidget(bluetoothMode?nullptr:static_cast<SerialProxy*>(m_serialProxy));
GigAnon's avatar
GigAnon committed
    #endif

    m_odometry              = new OdometryWindow(m_serialProxy);
    m_asserv                = new AsservWindow(m_serialProxy);
    m_watches               = new WatchWindow(m_serialProxy);
    m_logger                = new LoggerWidget();
    m_plots                 = new PlotWidget();
    m_table                 = new TableWidget(m_serialProxy);
    m_remote                = new RemoteWidget(m_serialProxy);
    m_remoteSettings        = new MovementSettingsWidget();
    m_packetProcessor = new PacketProcessor(this);
    connect(m_packetProcessor,  &PacketProcessor::odometrySettingsReceived,      m_odometry, &OdometryWindow::settingsReceived);
    connect(m_packetProcessor,  &PacketProcessor::robotPositionReceived,         m_odometry, &OdometryWindow::setCurrentRobotPosition);
    connect(m_packetProcessor,  &PacketProcessor::robotAngleReceived,            m_odometry, &OdometryWindow::setCurrentRobotAngle);
    connect(m_packetProcessor,  &PacketProcessor::linearPIDSettingsReceived,     m_asserv,   &AsservWindow::settingsReceivedLinear);
    connect(m_packetProcessor,  &PacketProcessor::angularPIDSettingsReceived,    m_asserv,   &AsservWindow::settingsReceivedAngular);
    connect(m_packetProcessor,  &PacketProcessor::logReceived,                   m_logger,   &LoggerWidget::log);
    connect(m_packetProcessor,  &PacketProcessor::watchesSyncFinished,           m_watches,  &WatchWindow::syncFinished);
    connect(m_packetProcessor,  &PacketProcessor::plotDataReceived,              m_plots,    &PlotWidget::addDataToPlot);
    connect(m_packetProcessor,  &PacketProcessor::reseted,                       m_plots,    &PlotWidget::clear);
    connect(m_packetProcessor,  &PacketProcessor::robotPositionReceived,         m_table,    &TableWidget::setRobotPosition);
    connect(m_packetProcessor,  &PacketProcessor::robotAngleReceived,            m_table,    &TableWidget::setRobotAngle);
GigAnon's avatar
GigAnon committed
    connect(m_serialProxy,   &AbstractSerialProxy::connected,       this,               [&]() { m_logger->log("Connected"); } );
    connect(m_serialProxy,   &AbstractSerialProxy::disconnected,    this,               [&]() { m_logger->log("Disconnected"); });
    connect(m_serialProxy,   &AbstractSerialProxy::dataReceived,    m_packetProcessor,  &PacketProcessor::processData);
    connect(m_serialProxy,   &AbstractSerialProxy::disconnected,    m_plots,            &PlotWidget::clear);
GigAnon's avatar
GigAnon committed
    connect(m_odometry,         &OdometryWindow::reseted,                           m_plots,        &PlotWidget::clear);
    connect(m_remoteSettings,   &MovementSettingsWidget::stepsUpdated,              m_remote,       &RemoteWidget::setSteps);
    connect(m_remoteSettings,   &MovementSettingsWidget::tableOrientationChanged,   m_table,        &TableWidget::setTableOrientation);
GigAnon's avatar
GigAnon committed

    m_remoteControlTab = new QTabWidget();
GigAnon's avatar
GigAnon committed
    m_remoteControlTab->addTab(m_table,         tr("Absolute"));
    m_remoteControlTab->addTab(m_remote,        tr("Relative"));
    m_remoteControlTab->addTab(m_remoteSettings,tr("Settings"));

    m_robotSettingsTab = new QTabWidget();
GigAnon's avatar
GigAnon committed
    m_robotSettingsTab->addTab(m_odometry,  tr("Odometry"));
    m_robotSettingsTab->addTab(m_asserv,    tr("Control"));
    m_robotSettingsTab->addTab(m_watches,   tr("Watches"));

GigAnon's avatar
GigAnon committed
    m_tabs->addTab(m_serialManagement,      tr("Connection"));
    m_tabs->addTab(m_robotSettingsTab,      tr("Robot settings"));
    m_tabs->addTab(m_remoteControlTab,      tr("Movements"));
    m_tabs->addTab(m_plots,                 tr("Graphs"));
    m_tabs->addTab(m_logger,                tr("Logs"));

    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(m_tabs);
GigAnon's avatar
GigAnon committed
#else

    BluetoothTestServer* server = new BluetoothTestServer(this);
GigAnon's avatar
GigAnon committed
#endif