Files
MIL_RT_MODE/mainwindow.cpp
2025-08-29 14:02:18 +03:00

269 lines
7.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "mainwindow.h"
//#include "windows.h"
//#include "WDMTMKv2.cpp"
#include "bcmil.cpp"
extern TTmkEventData tmkEvD;
extern HANDLE hEvent;
#define RT_ADDR 0x1
unsigned short awBuf[32];
TMK_DATA wBase, wMaxBase, wLen;
extern TMK_DATA wSubAddr, wState;
int HexBinFlag = 1;
MainWindow::MainWindow()
{
init_mainwindowobj();
init_table();
init_connections();
}
void MainWindow::init_mainwindowobj()
{
qDebug() << "Startyem";
Window_1 = new QWidget;
Window_2 = new QWidget;
RtModeLabel = new QLabel("RT mode");
StartRtModeButton = new QPushButton("Start RT mode");
BcModeLabel = new QLabel("BC mode");
StartBcModeButton = new QPushButton("Start BC mode");
DataTable = new QTableWidget;
QGridLayout *layout_g = new QGridLayout(Window_2);
layout_g->addWidget(RtModeLabel, 0, 0); // Row 0, Column 0
layout_g->addWidget(StartRtModeButton, 1, 0);
layout_g->addWidget(BcModeLabel, 0, 1);
layout_g->addWidget(StartBcModeButton, 1, 1);
Window_2->setLayout(layout_g);
setCentralWidget(Window_2);
QVBoxLayout *layout = new QVBoxLayout(Window_1);
layout->addWidget(Window_2);
layout->addWidget(DataTable);
Window_1->setLayout(layout);
setCentralWidget(Window_1);
}
void MainWindow::init_connections()
{
/*connect(EnterCmdWordButton,
SIGNAL(clicked()),
this,
SLOT(getlineedit()));*/
/*connect(StartBcModeButton,
SIGNAL(clicked()),
this,
SLOT(bchandler()));*/
connect(StartRtModeButton,
SIGNAL(clicked()),
this,
SLOT(rthandler()));
}
/*void MainWindow::getlineedit()
{
qDebug() << "Entered the button command word";
QString CmdW = CmdWordLineEdit->text();
qDebug() << CmdW;
QScopedPointer<CommandWord> NewCmdWord(new CommandWord());
NewCmdWord->description(CmdW);
set_item(DataTable, 0, 0, "Адрес устройства", false);
set_item(DataTable, 0, 1, intToBinaryString(NewCmdWord->addrRTf), false);
set_item(DataTable, 0, 2, intToDecString(NewCmdWord->addrRTf), false);
if(NewCmdWord->Kf)
{
set_item(DataTable, 1, 0, "Передача", false);
set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->Kf), false);
set_item(DataTable, 1, 2, intToDecString(NewCmdWord->Kf), false);
}
else
{
set_item(DataTable, 1, 0, "Прием", false);
set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->Kf), false);
set_item(DataTable, 1, 2, intToDecString(NewCmdWord->Kf), false);
}
if((NewCmdWord->subAddrf == 0) || (NewCmdWord->subAddrf == 31))
{
set_item(DataTable, 2, 0, "Режим управления", false);
set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->subAddrf), false);
set_item(DataTable, 2, 2, intToDecString(NewCmdWord->subAddrf), false);
}
else
{
set_item(DataTable, 2, 0, "Подадрес", false);
set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->subAddrf), false);
set_item(DataTable, 2, 2, intToDecString(NewCmdWord->subAddrf), false);
}
if((NewCmdWord->subAddrf == 0) || (NewCmdWord->subAddrf == 31))
{
set_item(DataTable, 3, 0, NewCmdWord->cmdCode.value(NewCmdWord->numDWf), false);
set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->numDWf), false);
set_item(DataTable, 3, 2, intToDecString(NewCmdWord->numDWf), false);
}
else
{
if(NewCmdWord->numDWf == 0)
{
set_item(DataTable, 3, 0, "Число СД", false);
set_item(DataTable, 3, 1, intToBinaryString(32), false);
set_item(DataTable, 3, 2, intToDecString(32), false);
}
else
{
set_item(DataTable, 3, 0, "Число СД", false);
set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->numDWf), false);
set_item(DataTable, 3, 2, intToDecString(NewCmdWord->numDWf), false);
}
}
}*/
void MainWindow::init_table()
{
int ColCount = 3;
int RowCount = 4;
QStringList header;
header << "Биты КС" << "Бинарное представление" << "Десятичное представление";
DataTable->setColumnCount(ColCount);
DataTable->setRowCount(RowCount);
DataTable->setHorizontalHeaderLabels(header);
DataTable->verticalHeader()->setVisible(true);
DataTable->setColumnWidth(0,200);
DataTable->setColumnWidth(1,160);
DataTable->setColumnWidth(2,160);
for(int i = 0; i < RowCount; i++)
{
DataTable->setRowHeight(i,20);
for(int j = 0; j < ColCount; j++)
set_item(DataTable, i, j, "%", false);
}
}
void MainWindow::set_item(QTableWidget *pTable, int indRow,
int indCol, QString data, bool editFlag)
{
QColor color;
color.black();
QTableWidgetItem *itm =
new QTableWidgetItem(data);
pTable->setItem(indRow,indCol,itm);
if (editFlag) {}
else
{
pTable->item(indRow, indCol)->setFlags(Qt::ItemIsSelectable|
Qt::ItemIsDragEnabled|
Qt::ItemIsUserCheckable);
}
pTable->item(indRow, indCol)->setTextColor(color);
}
/*void MainWindow::bchandler()
{
qDebug() << "send1";
QScopedPointer<BC_MIL> NewBC(new BC_MIL(0));
qDebug() << "send2";
wBase = 0;
wMaxBase = bcgetmaxbase();
srand(1);
//Select base
if (wBase > wMaxBase)
wBase = 0;
bcdefbase(wBase);
qDebug() << "send3";
//Prepare data to RT
//wSubAddr = rand() & 0x1F;
wSubAddr = 0x1F;;
//if (fInstMode)
// wSubAddr |= 0x10;
//wLen = rand() & 0x1F;
wLen = 0x1;
if (wLen == 0)
wLen = 32;
for (int i = 0; i < wLen; ++i)
awBuf[i] = (wSubAddr<<8) | i;
qDebug() << "send4";
//Try to send data to RT until it answers with Clear Status
bcputw(0, CW(RT_ADDR, RT_RECEIVE, wSubAddr, wLen));
bcputblk(1, awBuf, wLen);
do
{
//bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_A | CX_NOSIG);
bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_B | CX_NOSIG);
if (NewBC->WaitInt(DATA_BC_RT))
NewBC->closeAll();
} while ((tmkEvD.bcx.wResultX & (SX_ERR_MASK | SX_IB_MASK)) != 0);
qDebug() << "send5";
NewBC->closeAll();
}*/
void MainWindow::rthandler()
{
QScopedPointer<RT_MIL> NewRT(new RT_MIL(0x0, RT_ADDR));
int i = 0;
while (i != 100)
{
i++;
if(NewRT->GetEvent(1000))
{
switch (tmkEvD.nInt)
{
case 1:
qDebug() << "Cmd word arrived " << tmkEvD.rt.wCmd << " " <<tmkEvD.rt.wStatus;
break;
case 2:
qDebug() << "Case 2";
break;
case 3:
qDebug() << "Data arrived";
wSubAddr = (tmkEvD.rt.wStatus >> 5) & 0x1F;
wLen = tmkEvD.rt.wStatus & 0x1F;
if (wLen == 0)
wLen = 32;
if (RT_RECEIVE == (tmkEvD.rt.wStatus & RT_DIR_MASK))
{
if (tmkselect(NewRT->m_TmkIndex))
{
qDebug() << "tmkselect() error";
}
rtdefsubaddr(RT_RECEIVE, wSubAddr);
rtgetblk(0, awBuf, wLen);
}
break;
}
break;
}
}
NewRT->closeAllrt();
}
MainWindow::~MainWindow()
{
}