mainwindow.cpp
193 lines
| 7.0 KiB
| text/x-c
|
CppLexer
/ spwtimegenerator / mainwindow.cpp
r14 | #include "mainwindow.h" | |||
MainWindow::MainWindow(QWidget *parent) : | ||||
QWidget(parent) | ||||
{ | ||||
hDevice = NULL; | ||||
UI = new mainwindowui(); | ||||
time = new QTimer(); | ||||
connect(UI->starDundeeStatusQueryRetryButton, SIGNAL(clicked()), this, SLOT(reTestSPWLink())); | ||||
connect(UI->startTimeButton, SIGNAL(clicked()), this, SLOT(startSpacewireTime())); | ||||
connect(UI->sendTimecodeButton, SIGNAL(clicked()), this, SLOT(sendOneTimecode())); | ||||
connect(UI->sendPacketAndTimecodeButton, SIGNAL(clicked()), this, SLOT(sendOnePacketAndOneTimecode())); | ||||
connect(this, SIGNAL(sendMessage(QString)), this->UI, SLOT(displayMessage(QString))); | ||||
this->setLayout(UI->layout()); | ||||
} | ||||
MainWindow::~MainWindow() | ||||
{ | ||||
} | ||||
void MainWindow::startSpacewireTime() | ||||
{ | ||||
unsigned int result; | ||||
if (hDevice==NULL) | ||||
{ | ||||
result = Open(); | ||||
} | ||||
if (getLinkStatus(UI->linkNumber_SPINBOX->value())) | ||||
{ | ||||
emit sendMessage("OK *** in Start *** start sending packet periodically"); | ||||
return; | ||||
} | ||||
else | ||||
{ | ||||
emit sendMessage("ERR *** in Start *** "); | ||||
return; | ||||
} | ||||
} | ||||
void MainWindow::sendOneTimecode() | ||||
{ | ||||
unsigned int result; | ||||
U32 timecodeReg, val; | ||||
if (hDevice==NULL) | ||||
{ | ||||
result = Open(); | ||||
} | ||||
if (getLinkStatus(UI->linkNumber_SPINBOX->value())) | ||||
{ | ||||
emit sendMessage("OK *** in sendOneTimecode *** stardundee brick running"); | ||||
} | ||||
else | ||||
{ | ||||
emit sendMessage("ERR *** in sendOneTimecode *** stardundee brick not running"); | ||||
} | ||||
if(!USBSpaceWire_TC_EnableExternalTimecodeSelection(hDevice,0)) | ||||
{ | ||||
emit sendMessage("ERR *** disable external timecode selection"); | ||||
return; | ||||
} | ||||
emit sendMessage("OK *** in sendOneTimecode *** next valid tick will be performed"); | ||||
if(!USBSpaceWire_TC_PerformTickIn(hDevice, 0)) | ||||
{ | ||||
emit sendMessage("ERR *** in sendOneTimecode *** perform TickIn"); | ||||
return; | ||||
} | ||||
emit sendMessage("OK *** in sendOneTimecode *** tick performed"); | ||||
// Read the timecode register | ||||
if (CFGSpaceWire_GetTimecodeRegister(hDevice, &timecodeReg) != CFG_TRANSFER_SUCCESS) | ||||
{ | ||||
emit sendMessage("Could not read the timecode register"); | ||||
} | ||||
else | ||||
{ | ||||
CFGSpaceWire_TCGetValue(timecodeReg, &val); | ||||
emit sendMessage("The timecode value is currently: " + QString::number(val)); | ||||
CFGSpaceWire_TCGetFlags(timecodeReg, &val); | ||||
emit sendMessage("The timecode flag value is currently: " + QString::number(val)); | ||||
} | ||||
} | ||||
void MainWindow::sendOnePacketAndOneTimecode() | ||||
{ | ||||
} | ||||
unsigned int MainWindow::Open() | ||||
{ | ||||
r21 | U32 dwTickEnableStatus; | |||
r14 | if (!USBSpaceWire_Open(&hDevice, UI->usbDeviceNumber_SPINBOX->value())) // Open the USB device | |||
{ | ||||
emit sendMessage("ERR *** in Open *** USBSpaceWire_Open(&hDevice, 0))"); | ||||
return 0; | ||||
} | ||||
emit sendMessage("OK *** in Open *** USBSpaceWire_Open successful, device number: " | ||||
+ QString::number(UI->usbDeviceNumber_SPINBOX->value())); | ||||
USBSpaceWire_EnableNetworkMode(hDevice, 0); // deactivate the network mode | ||||
CFGSpaceWire_EnableRMAP(1); // Enable the use of RMAP for the StarDundee brick configuration | ||||
CFGSpaceWire_SetRMAPDestinationKey(0x20); // Set the destination key expected by STAR-Dundee devices | ||||
// Set the path and return path to the device | ||||
CFGSpaceWire_StackClear(); | ||||
CFGSpaceWire_AddrStackPush(0); | ||||
CFGSpaceWire_AddrStackPush(254); | ||||
CFGSpaceWire_RetAddrStackPush(254); | ||||
if (getLinkStatus(UI->linkNumber_SPINBOX->value())==0) | ||||
{ | ||||
return UI->starDundeeStatusQueryDialog->exec(); | ||||
} | ||||
if (!USBSpaceWire_TC_Reset(hDevice)) | ||||
{ | ||||
emit sendMessage("ERR *** in Open *** Could not reset timecodes\n"); | ||||
} | ||||
emit sendMessage("OK *** in Open *** reset timecodes"); | ||||
r21 | ||||
// Clear the tick enable register | ||||
if (CFGSpaceWire_SetTickEnableStatus(hDevice, 6) != CFG_TRANSFER_SUCCESS) | ||||
emit sendMessage("Could not clear the tick enable register"); | ||||
else | ||||
emit sendMessage("Cleared the tick enable register"); | ||||
CFGSpaceWire_GetTickEnableStatus(hDevice, &dwTickEnableStatus); | ||||
emit sendMessage("OK *** in Open *** CFGSpaceWire_GetTickEnableStatus, code is " + QString::number(dwTickEnableStatus, 2)); | ||||
r14 | } | |||
unsigned int MainWindow::getLinkStatus(unsigned char link) | ||||
{ | ||||
U32 statusControl = 0, errorStatus = 0, portType = 0; | ||||
U32 linkStatus = 0, operatingSpeed = 0, outputPortConnection = 0; | ||||
char isLinkRunning = 0, isAutoStart = 0, isStart = 0, isDisabled = 0, isTristate = 0; | ||||
// Read the link status control register | ||||
if (CFGSpaceWire_GetLinkStatusControl(hDevice, 1, &statusControl) != CFG_TRANSFER_SUCCESS) | ||||
{ | ||||
emit sendMessage("Could not read link status control for link" + QString::number(link)); | ||||
} | ||||
else | ||||
{ | ||||
// Display the link status control register properties | ||||
CFGSpaceWire_LSPortType(statusControl, &portType); | ||||
if (portType == CFG_CONFIGURATION_PORT) | ||||
{ | ||||
CFGSpaceWire_LSConfigErrorStatus(statusControl, &errorStatus); | ||||
//emit appendToLog("Configuration port error status = " + QString::number(errorStatus)); | ||||
} | ||||
else if (portType == CFG_SPACEWIRE_EXTERNAL_PORT) | ||||
{ | ||||
CFGSpaceWire_LSExternalErrorStatus(statusControl, &errorStatus); | ||||
//emit appendToLog("External port error status = " + QString::number(errorStatus)); | ||||
} | ||||
else | ||||
{ | ||||
CFGSpaceWire_LSErrorStatus(statusControl, &errorStatus); | ||||
//emit appendToLog("SpaceWire link error status = " + QString::number(errorStatus)); | ||||
} | ||||
CFGSpaceWire_LSLinkState(statusControl, &linkStatus); | ||||
CFGSpaceWire_LSIsLinkRunning(statusControl, &isLinkRunning); | ||||
CFGSpaceWire_LSIsAutoStart(statusControl, &isAutoStart); | ||||
CFGSpaceWire_LSIsStart(statusControl, &isStart); | ||||
CFGSpaceWire_LSIsDisabled(statusControl, &isDisabled); | ||||
CFGSpaceWire_LSIsTristate(statusControl, &isTristate); | ||||
CFGSpaceWire_LSOperatingSpeed(statusControl, &operatingSpeed); | ||||
CFGSpaceWire_LSOutputPortConnection(statusControl, &outputPortConnection); | ||||
//emit appendToLog("The link state is = " + QString::number(linkStatus)); | ||||
//emit appendToLog("The link is running = " + QString::number(isLinkRunning)); | ||||
//emit appendToLog("The autostart bit is enabled = " + QString::number(isAutoStart)); | ||||
//emit appendToLog("The start bit is enabled = " + QString::number(isStart)); | ||||
//emit appendToLog("The link is disabled = " + QString::number(isDisabled)); | ||||
//emit appendToLog("The tri-state bit is enabled = " + QString::number(isAutoStart)); | ||||
//emit appendToLog("The operating speed is = " + QString::number(operatingSpeed)); | ||||
//emit appendToLog("This port is currently connected to output port = " + QString::number(outputPortConnection)); | ||||
} | ||||
if (linkStatus == 5) return 1; | ||||
else return 0; | ||||
} | ||||
void MainWindow::reTestSPWLink() // SLOT | ||||
{ | ||||
if (getLinkStatus(UI->linkNumber_SPINBOX->value())) | ||||
{ | ||||
UI->starDundeeStatusQueryDialog->accept(); | ||||
} | ||||
} | ||||