#include "mainwindow.h" #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; extern uint8_t wAddr_RT, wRecTrans; int HexBinFlag = 1; //Hex - 1, Bin - 0 extern int bcrtFlag; //RT = 0, BC = 1 MainWindow::MainWindow() { init_mainwindowobj(); init_table_cmd(); init_table_stat(); init_table_dword(); init_connections(); } void MainWindow::init_mainwindowobj() { qDebug() << "Startyem"; Window_1 = new QWidget; Window_2 = new QWidget; Window_3 = new QWidget; Window_4 = new QWidget; RtModeLabel = new QLabel("RT mode"); StartRtModeButton = new QPushButton("Start RT mode"); BcModeLabel = new QLabel("BC mode"); StartBcModeButton = new QPushButton("Start BC mode"); CmdWordLineEdit = new QLineEdit; HexBinLabel = new QLabel("Hex"); HexBinButton = new QPushButton("Hex/Bin"); DataTableCmd = new QTableWidget; DataTableStat = new QTableWidget; DataTableDWord = new QTableWidget; QHBoxLayout *layout_h1 = new QHBoxLayout(Window_1); layout_h1->addWidget(HexBinLabel); layout_h1->addWidget(HexBinButton); Window_1->setLayout(layout_h1); //setCentralWidget(Window_1); QHBoxLayout *layout_h2 = new QHBoxLayout(Window_2); layout_h2->addWidget(BcModeLabel); layout_h2->addWidget(CmdWordLineEdit); Window_2->setLayout(layout_h2); setCentralWidget(Window_2); QGridLayout *layout_g = new QGridLayout(Window_3); layout_g->addWidget(RtModeLabel, 1, 0); layout_g->addWidget(Window_2, 1, 1); layout_g->addWidget(StartRtModeButton, 2, 0); layout_g->addWidget(StartBcModeButton, 2, 1); Window_3->setLayout(layout_g); setCentralWidget(Window_3); QVBoxLayout *layout_v = new QVBoxLayout(Window_4); layout_v->addWidget(Window_1); layout_v->addWidget(Window_3); layout_v->addWidget(DataTableCmd); layout_v->addWidget(DataTableStat); layout_v->addWidget(DataTableDWord); Window_4->setLayout(layout_v); setCentralWidget(Window_4); } void MainWindow::init_connections() { connect(StartBcModeButton, SIGNAL(clicked()), this, SLOT(getlineedit())); connect(StartRtModeButton, SIGNAL(clicked()), this, SLOT(rthandler())); connect(HexBinButton, SIGNAL(clicked()), this, SLOT(HexBinChange())); } QString intToBinaryString(int number) { return QString::number(number,2); } QString intToDecString(int number) { return QString::number(number,10); } QString intToHexString(int number) { return QString::number(number,16); } void MainWindow::HexBinChange() { switch(HexBinFlag) { case 0: //было bin HexBinLabel->setText("Hex"); HexBinFlag = 1; break; case 1: //было hex HexBinLabel->setText("Bin"); HexBinFlag = 0; break; } } void MainWindow::getlineedit() { for (int i = 0; i < wLen; i++) set_item(DataTableDWord, 0, i, "%", false); qDebug() << "Entered the button start bc mode"; QString CmdW = CmdWordLineEdit->text(); qDebug() << CmdW; bchandler(CmdW); } void MainWindow::init_table_cmd() { int ColCount = 3; int RowCount = 4; QStringList header; header << "Биты КС" << "Бинарное представление" << "Десятичное представление"; DataTableCmd->setColumnCount(ColCount); DataTableCmd->setRowCount(RowCount); DataTableCmd->setHorizontalHeaderLabels(header); DataTableCmd->verticalHeader()->setVisible(true); DataTableCmd->setColumnWidth(0,200); DataTableCmd->setColumnWidth(1,160); DataTableCmd->setColumnWidth(2,160); for(int i = 0; i < RowCount; i++) { DataTableCmd->setRowHeight(i,20); for(int j = 0; j < ColCount; j++) set_item(DataTableCmd, i, j, "%", false); } } void MainWindow::init_table_stat() { int ColCount = 3; int RowCount = 10; QStringList header; header << "Биты ОС" << "Бинарное представление" << "Десятичное представление"; DataTableStat->setColumnCount(ColCount); DataTableStat->setRowCount(RowCount); DataTableStat->setHorizontalHeaderLabels(header); DataTableStat->verticalHeader()->setVisible(true); DataTableStat->setColumnWidth(0,180); DataTableStat->setColumnWidth(1,160); DataTableStat->setColumnWidth(2,160); for(int i = 0; i < RowCount; i++) { DataTableStat->setRowHeight(i,20); for(int j = 0; j < ColCount; j++) set_item(DataTableStat, i, j, "%", false); } } void MainWindow::init_table_dword() { int ColCount = 32; int RowCount = 1; QStringList header; header << "СД1" << "СД2" << "СД3" << "СД4" << "СД5" << "СД6" << "СД7" << "СД8" << "СД9" << "СД10" << "СД11" << "СД12" << "СД13" << "СД14" << "СД15" << "СД16" << "СД17" << "СД18" << "СД19" << "СД20" << "СД21" << "СД22" << "СД23" << "СД24" << "СД25" << "СД26" << "СД27" << "СД28" << "СД29" << "СД30" << "СД31" << "СД32"; DataTableDWord->setColumnCount(ColCount); DataTableDWord->setRowCount(RowCount); DataTableDWord->setHorizontalHeaderLabels(header); DataTableDWord->verticalHeader()->setVisible(true); for(int i = 0; i < ColCount; i++) DataTableDWord->setColumnWidth(i, 35); for(int i = 0; i < RowCount; i++) { DataTableDWord->setRowHeight(i, 20); for(int j = 0; j < ColCount; j++) set_item(DataTableDWord, 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(QString CmdW) { bcrtFlag = 1; QScopedPointer NewBC(new BC_MIL(0)); wBase = 0; wMaxBase = bcgetmaxbase(); qDebug() << "bcgetmaxbase" << wMaxBase; //Select base if (wBase > wMaxBase) wBase = 0; bcdefbase(wBase); filltablecmd(CmdW); //Prepare data to RT if (wLen == 0) wLen = 32; for (int i = 0; i < wLen; ++i) awBuf[i] = (wSubAddr<<8) | i; //Try to send data to RT until it answers with Clear Status //bcputw(0, CW(RT_ADDR, RT_RECEIVE, wSubAddr, wLen)); bcputw(0, CW(wAddr_RT, wRecTrans, 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); for (int i = 0; i < wLen; ++i) set_item(DataTableDWord, 0, i, intToHexString(awBuf[i]), false); NewBC->closeAll(); } void MainWindow::rthandler() { qDebug() << "Entered the button start status mode"; bcrtFlag = 0; for (int i = 0; i < wLen; i++) set_item(DataTableDWord, 0, i, "%", false); QScopedPointer 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"; filltablecmd("0", ( (RT_ADDR << 0xB) | tmkEvD.rt.wCmd ), false); filltablestat(rtgetanswbits() | (RT_ADDR << 0xB) ); break; case 2: qDebug() << "Case 2"; break; case 3: //wStatus = little 11 bits Command Word filltablecmd("0", ( (RT_ADDR << 0xB) | tmkEvD.rt.wStatus ), false); qDebug() << "Status word 2" << rtgetanswbits(); //SREQ, BUSY,SSFL, RTFL, DNBA filltablestat(rtgetanswbits() | (RT_ADDR << 0xB) ); 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); rtclrflag(); rtdefsubaddr(RT_TRANSMIT, wSubAddr); rtputblk(0, awBuf, wLen); rtsetflag(); for (int i = 0; i < wLen; i++) set_item(DataTableDWord, 0, i, intToHexString(awBuf[i]), false); } break; } break; } } NewRT->closeAll(); } void MainWindow::filltablestat(uint16_t statw) { QScopedPointer NewStatWord(new StatusWord()); NewStatWord->description(statw); set_item(DataTableStat, 0, 0, "Адрес устройства", false); set_item(DataTableStat, 0, 1, intToBinaryString(NewStatWord->addrRTf), false); set_item(DataTableStat, 0, 2, intToDecString(NewStatWord->addrRTf), false); if(NewStatWord->messErrf) { set_item(DataTableStat, 1, 0, "Достоверная инф-я", false); set_item(DataTableStat, 1, 1, intToBinaryString(NewStatWord->messErrf), false); set_item(DataTableStat, 1, 2, intToDecString(NewStatWord->messErrf), false); } else { set_item(DataTableStat, 1, 0, "Недостоверная инф-я", false); set_item(DataTableStat, 1, 1, intToBinaryString(NewStatWord->messErrf), false); set_item(DataTableStat, 1, 2, intToDecString(NewStatWord->messErrf), false); } set_item(DataTableStat, 2, 0, "Передача ОС (всегда 0)", false); set_item(DataTableStat, 2, 1, intToBinaryString(NewStatWord->instrf), false); set_item(DataTableStat, 2, 2, intToDecString(NewStatWord->instrf), false); if(NewStatWord->serReqf) { set_item(DataTableStat, 3, 0, "Запрос на обслуживание", false); set_item(DataTableStat, 3, 1, intToBinaryString(NewStatWord->serReqf), false); set_item(DataTableStat, 3, 2, intToDecString(NewStatWord->serReqf), false); } else { set_item(DataTableStat, 3, 0, "Нет запроса на обсл-е", false); set_item(DataTableStat, 3, 1, intToBinaryString(NewStatWord->serReqf), false); set_item(DataTableStat, 3, 2, intToDecString(NewStatWord->serReqf), false); } set_item(DataTableStat, 4, 0, "Резерв", false); set_item(DataTableStat, 4, 1, intToBinaryString(NewStatWord->reservf), false); set_item(DataTableStat, 4, 2, intToDecString(NewStatWord->reservf), false); if(NewStatWord->broadCRf) { set_item(DataTableStat, 5, 0, "Достоверная гр. команда", false); set_item(DataTableStat, 5, 1, intToBinaryString(NewStatWord->broadCRf), false); set_item(DataTableStat, 5, 2, intToDecString(NewStatWord->broadCRf), false); } else { set_item(DataTableStat, 5, 0, "Недостоверная гр. команда", false); set_item(DataTableStat, 5, 1, intToBinaryString(NewStatWord->broadCRf), false); set_item(DataTableStat, 5, 2, intToDecString(NewStatWord->broadCRf), false); } if(NewStatWord->busyf) { set_item(DataTableStat, 6, 0, "Абонент занят", false); set_item(DataTableStat, 6, 1, intToBinaryString(NewStatWord->busyf), false); set_item(DataTableStat, 6, 2, intToDecString(NewStatWord->busyf), false); } else { set_item(DataTableStat, 6, 0, "Абонент не занят", false); set_item(DataTableStat, 6, 1, intToBinaryString(NewStatWord->busyf), false); set_item(DataTableStat, 6, 2, intToDecString(NewStatWord->busyf), false); } if(NewStatWord->subSysFf) { set_item(DataTableStat, 7, 0, "Неисправность абонента", false); set_item(DataTableStat, 7, 1, intToBinaryString(NewStatWord->subSysFf), false); set_item(DataTableStat, 7, 2, intToDecString(NewStatWord->subSysFf), false); } else { set_item(DataTableStat, 7, 0, "Абонент функционирует", false); set_item(DataTableStat, 7, 1, intToBinaryString(NewStatWord->subSysFf), false); set_item(DataTableStat, 7, 2, intToDecString(NewStatWord->subSysFf), false); } if(NewStatWord->dynBCAf) { set_item(DataTableStat, 8, 0, "Принято упр-е интерфейсом", false); set_item(DataTableStat, 8, 1, intToBinaryString(NewStatWord->dynBCAf), false); set_item(DataTableStat, 8, 2, intToDecString(NewStatWord->dynBCAf), false); } else { set_item(DataTableStat, 8, 0, "Не принято упр-е интерфейсом", false); set_item(DataTableStat, 8, 1, intToBinaryString(NewStatWord->dynBCAf), false); set_item(DataTableStat, 8, 2, intToDecString(NewStatWord->dynBCAf), false); } if(NewStatWord->termFlgf) { set_item(DataTableStat, 9, 0, "Неправильное функ-е ОУ", false); set_item(DataTableStat, 9, 1, intToBinaryString(NewStatWord->termFlgf), false); set_item(DataTableStat, 9, 2, intToDecString(NewStatWord->termFlgf), false); } else { set_item(DataTableStat, 9, 0, "Правильное функ-е ОУ", false); set_item(DataTableStat, 9, 1, intToBinaryString(NewStatWord->termFlgf), false); set_item(DataTableStat, 9, 2, intToDecString(NewStatWord->termFlgf), false); } } void MainWindow::filltablecmd(QString CmdW, uint16_t cmdw, bool mode) { QScopedPointer NewCmdWord(new CommandWord()); if(mode) NewCmdWord->description(CmdW); else NewCmdWord->description(cmdw); wSubAddr = NewCmdWord->subAddrf; wLen = NewCmdWord->numDWf; wAddr_RT = NewCmdWord->addrRTf; wRecTrans = NewCmdWord->Kf; set_item(DataTableCmd, 0, 0, "Адрес устройства", false); set_item(DataTableCmd, 0, 1, intToBinaryString(NewCmdWord->addrRTf), false); set_item(DataTableCmd, 0, 2, intToDecString(NewCmdWord->addrRTf), false); if(NewCmdWord->Kf) { set_item(DataTableCmd, 1, 0, "Передача", false); set_item(DataTableCmd, 1, 1, intToBinaryString(NewCmdWord->Kf), false); set_item(DataTableCmd, 1, 2, intToDecString(NewCmdWord->Kf), false); } else { set_item(DataTableCmd, 1, 0, "Прием", false); set_item(DataTableCmd, 1, 1, intToBinaryString(NewCmdWord->Kf), false); set_item(DataTableCmd, 1, 2, intToDecString(NewCmdWord->Kf), false); } if((NewCmdWord->subAddrf == 0) || (NewCmdWord->subAddrf == 31)) { set_item(DataTableCmd, 2, 0, "Режим управления", false); set_item(DataTableCmd, 2, 1, intToBinaryString(NewCmdWord->subAddrf), false); set_item(DataTableCmd, 2, 2, intToDecString(NewCmdWord->subAddrf), false); } else { set_item(DataTableCmd, 2, 0, "Подадрес", false); set_item(DataTableCmd, 2, 1, intToBinaryString(NewCmdWord->subAddrf), false); set_item(DataTableCmd, 2, 2, intToDecString(NewCmdWord->subAddrf), false); } if((NewCmdWord->subAddrf == 0) || (NewCmdWord->subAddrf == 31)) { set_item(DataTableCmd, 3, 0, NewCmdWord->cmdCode.value(NewCmdWord->numDWf), false); set_item(DataTableCmd, 3, 1, intToBinaryString(NewCmdWord->numDWf), false); set_item(DataTableCmd, 3, 2, intToDecString(NewCmdWord->numDWf), false); } else { if(NewCmdWord->numDWf == 0) { set_item(DataTableCmd, 3, 0, "Число СД", false); set_item(DataTableCmd, 3, 1, intToBinaryString(32), false); set_item(DataTableCmd, 3, 2, intToDecString(32), false); } else { set_item(DataTableCmd, 3, 0, "Число СД", false); set_item(DataTableCmd, 3, 1, intToBinaryString(NewCmdWord->numDWf), false); set_item(DataTableCmd, 3, 2, intToDecString(NewCmdWord->numDWf), false); } } } MainWindow::~MainWindow() { qDebug() << "MainWindow destructor"; }