/*------------------------------------------------------------------------------ -- This file is a part of the SocExplorer Software -- Copyright (C) 2014, Plasma Physics Laboratory - CNRS -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -------------------------------------------------------------------------------*/ /*-- Author : Alexis Jeandet -- Mail : alexis.jeandet@member.fsf.org ----------------------------------------------------------------------------*/ #include "spwplugin.h" #include "stardundeespw_usb.h" #include "gr_esb_bridge.h" #include #include "fakestardundeespwusb_lib.h" spwplugin::spwplugin(QWidget *parent):socexplorerplugin(parent,false) { Q_UNUSED(parent) FakeStarDundeeSpwUSB_Lib::resolve(); this->bridge = Q_NULLPTR; this->scanDone = false; this->tcpServer = new SpwTcpPacketServer(this); this->mainGroupBox = new QGroupBox("SpaceWire Plugin Configuration",this); this->bridgeSelector = new QComboBox(this); this->mainTabWidgt = new QTabWidget(this); this->mainTabWidgt->addTab(this->mainGroupBox,"Bridge Configuration"); this->mainTabWidgt->addTab(this->tcpServer,"TCP Server"); this->mainLayout = new QGridLayout(this->mainGroupBox); this->mainLayout->addWidget(new QLabel("Select SpaceWire bridge",this),0,0,1,1,Qt::AlignCenter); this->mainLayout->addWidget(this->bridgeSelector,0,1,1,1); this->setWidget(this->mainTabWidgt); this->bridgeSelector->addItem("none"); this->bridgeSelector->addItem("STAR-Dundee Spw USB Brick"); this->bridgeSelector->addItem("GR-ESB"); connect(this->bridgeSelector,SIGNAL(currentIndexChanged(QString)),this,SLOT(bridgeSelectionChanged(QString))); connect(this,SIGNAL(selectBridge(QString)),this,SLOT(selectBridge(QString))); connect(this,SIGNAL(TCPServerConnect()),this->tcpServer,SLOT(connectServer())); connect(this,SIGNAL(TCPServerDisconnect()),this->tcpServer,SLOT(disconnectServer())); connect(this,SIGNAL(TCPServerSetPort(qint32)),this->tcpServer,SLOT(setServerPort(qint32))); connect(this,SIGNAL(TCPServerSetIP(QString)),this->tcpServer,SLOT(setServerSetIP(QString))); } spwplugin::~spwplugin() { if(this->bridge!=Q_NULLPTR) delete this->bridge; } unsigned int spwplugin::Read(unsigned int *Value,unsigned int count,unsigned int address) { if(Connected) { return bridge->Read(Value,count,address); } return 0; } void spwplugin::bridgeSelectionChanged(const QString &text) { printf("test"); if(text=="none") { if(this->bridge!=NULL) { this->mainLayout->removeWidget(this->bridge->getGUI()); this->bridge->getGUI()->hide(); this->disconnect(this,SLOT(setConnected(bool))); delete this->bridge; this->bridge= NULL; } } if(text=="STAR-Dundee Spw USB Brick") { if(this->bridge!=NULL) { this->mainLayout->removeWidget(this->bridge->getGUI()); this->bridge->getGUI()->hide(); this->disconnect(this,SLOT(setConnected(bool))); delete this->bridge; } this->bridge = new stardundeeSPW_USB(this); this->mainLayout->addWidget(this->bridge->getGUI(),1,0,1,2); connect(this->bridge,SIGNAL(setConnected(bool)),this,SLOT(setConnected(bool))); connect(this,SIGNAL(StarDundeeSelectBrick(int)),((stardundeeSPW_USB*)bridge),SIGNAL(SelectBrick(int))); connect(this,SIGNAL(StarDundeeSelectLinkNumber(int)),((stardundeeSPW_USB*)bridge),SIGNAL(SelectLinkNumber(int))); connect(this,SIGNAL(StarDundeeSelectLinkSpeed(int)),((stardundeeSPW_USB*)bridge),SIGNAL(SelectLinkSpeed(int))); connect(this,SIGNAL(StarDundeeSetSourceAddress(QString)),((stardundeeSPW_USB*)bridge),SIGNAL(SetSourceAddress(QString))); connect(this,SIGNAL(StarDundeeSetDestinationAddress(QString)),((stardundeeSPW_USB*)bridge),SIGNAL(SetDestinationAddress(QString))); connect(this,SIGNAL(StarDundeeSetDestinationKey(QString)),((stardundeeSPW_USB*)bridge),SIGNAL(SetDestinationKey(QString))); connect(this,SIGNAL(StarDundeeSetRmapTimeout(QString)),((stardundeeSPW_USB*)bridge),SIGNAL(SetRmapTimeout(QString))); connect(this,SIGNAL(connectBridge()),((stardundeeSPW_USB*)bridge),SLOT(connectBridge())); connect(this,SIGNAL(disconnectBridge()),((stardundeeSPW_USB*)bridge),SLOT(disconnectBridge())); connect(this,SIGNAL(StarDundeeGetAvailableBrickCount()), ((stardundeeSPW_USB*)bridge),SIGNAL(GetAvailableBrickCount())); connect(this,SIGNAL(StarDundeeGetNbPacketsTransmittedToSpw()), ((stardundeeSPW_USB*)bridge),SIGNAL(GetNbPacketsTransmittedToSpw())); connect(this,SIGNAL(StarDundeeGetNbCCSDSPacketsTransmittedToSpw()), ((stardundeeSPW_USB*)bridge),SIGNAL(GetNbCCSDSPacketsTransmittedToSpw())); connect(this,SIGNAL(StarDundeeGetLinkNumber()),((stardundeeSPW_USB*)bridge),SIGNAL(GetLinkNumber())); connect(this,SIGNAL(StarDundeeSetBrickAsAninterface(bool)), ((stardundeeSPW_USB*)bridge),SIGNAL(SetBrickAsAnInterface(bool))); connect(this,SIGNAL(StarDundeeSetBrickAsARouter(bool)), ((stardundeeSPW_USB*)bridge),SIGNAL(SetBrickAsARouter(bool))); connect(this,SIGNAL(StarDundeeStartTimecodes(bool)), ((stardundeeSPW_USB*)bridge),SIGNAL(StartSendingTimecodes(bool))); connect(this,SIGNAL(StarDundeeSetTimecodeFrequency(double)), ((stardundeeSPW_USB*)bridge),SIGNAL(SetTimecodeFrequency(double))); connect(this,SIGNAL(StarDundeeSendOneTimecode(unsigned char)), ((stardundeeSPW_USB*)bridge),SIGNAL(SendOneTimecode(unsigned char))); connect(this->bridge,SIGNAL(pushPacketOverTCP(char*,int)),this->tcpServer,SLOT(pushPacket(char*,int))); connect(this->tcpServer, SIGNAL(sendSPWPacket(char*,int)), ((stardundeeSPW_USB*)bridge), SLOT(sendPacketComingFromTCPServer(char*,int))); } if(text=="GR-ESB") { if(this->bridge!=NULL) { this->mainLayout->removeWidget(this->bridge->getGUI()); this->bridge->getGUI()->hide(); this->disconnect(this,SLOT(setConnected(bool))); delete this->bridge; } this->bridge = new GR_ESB_bridge(this); this->mainLayout->addWidget(this->bridge->getGUI(),1,0,1,2); connect(this->bridge,SIGNAL(setConnected(bool)),this,SLOT(setConnected(bool))); } } void spwplugin::selectBridge(const QString &text) { if(text=="none") { this->bridgeSelector->setCurrentIndex(0); } if(text=="STAR-Dundee Spw USB Brick") { this->bridgeSelector->setCurrentIndex(1); } } void spwplugin::setConnected(bool connected) { this->bridgeSelector->setDisabled(connected); this->Connected = connected; emit activateSig(connected); if(!this->scanDone) { socexplorerproxy::loadChildSysDriver(this,"AMBA_PLUGIN"); this->scanDone=true; } } unsigned int spwplugin::Write(unsigned int *Value,unsigned int count, unsigned int address) { if(Connected) { return bridge->Write(Value,count,address); } return 0; }