diff --git a/TestTa1.pro b/TestTa1.pro index f7462d4..78a8785 100644 --- a/TestTa1.pro +++ b/TestTa1.pro @@ -9,7 +9,10 @@ SOURCES += \ cmdwrd.cpp \ main.cpp \ mainwindow.cpp \ - testinfo.cpp + statwrd.cpp \ + testcmd.cpp \ + testinfo.cpp \ + teststat.cpp HEADERS += \ WDMTMKv2.h \ @@ -17,4 +20,7 @@ HEADERS += \ cmdwrd.h \ declarations.h \ mainwindow.h \ - testinfo.h + statwrd.h \ + testcmd.h \ + testinfo.h \ + teststat.h diff --git a/USB_TA_DRV.dll b/USB_TA_DRV.dll deleted file mode 100644 index 238123f..0000000 Binary files a/USB_TA_DRV.dll and /dev/null differ diff --git a/USB_TA_VC2.dll b/USB_TA_VC2.dll deleted file mode 100644 index ea72972..0000000 Binary files a/USB_TA_VC2.dll and /dev/null differ diff --git a/WDMTMKv2.cpp b/WDMTMKv2.cpp index 4946f1b..4b65d78 100644 --- a/WDMTMKv2.cpp +++ b/WDMTMKv2.cpp @@ -5,11 +5,27 @@ /* for Windows 98/ME/2000/XP/Vista/7 */ /*****************************************************************************/ +//#ifndef _TMK1553B_ +//#define _TMK1553B_ //#ifndef WDMTMKV2_CPP //#define WDMTMKV2_CPP +//#include + +#ifndef WINDOWSINC +#define WINDOWSINC + +#include + +#endif + +#ifndef WDMTMKINC +#define WDMTMKINC + #include "WDMTMKv2.h" +#endif + HANDLE _ahVTMK4Event[MAX_TMK_NUMBER+1]; HANDLE _hVTMK4VxD[MAX_TMK_NUMBER+1]; int _VTMK4tmkMaxNum = -1; @@ -2102,3 +2118,4 @@ int tmkreadsn() return TMK_BAD_NUMBER; } //#endif +//#endif diff --git a/WDMTMKv2.h b/WDMTMKv2.h index afc36bc..5a8f0cb 100644 --- a/WDMTMKv2.h +++ b/WDMTMKv2.h @@ -5,14 +5,16 @@ /* for Windows 98/ME/2000/XP/Vista/7 */ /*****************************************************************************/ -//#ifndef WDMTMKV2_H -//#define WDMTMKV2_H + +#ifndef _TMK1553B_ +#define _TMK1553B_ + +#ifndef WDMTMKV2_H +#define WDMTMKV2_H //************************************************************************** #include #include -#include - typedef uint16_t WORD; typedef unsigned __LONG32 DWORD; typedef void *HANDLE; @@ -1021,4 +1023,5 @@ htmkrawio_usb tmkrawio_usb = ftmkrawio_usb; hrtgap_usb rtgap_usb = frtgap_usb; htmkreadsn_usb tmkreadsn_usb = ftmkreadsn_usb; -//#endif // WDMTMKV2_H +#endif +#endif diff --git a/bcmil.cpp b/bcmil.cpp index 5ea9382..8451b37 100644 --- a/bcmil.cpp +++ b/bcmil.cpp @@ -1,16 +1,22 @@ -#include "declarations.h" +#include +#include "bcmil.h" #include "WDMTMKv2.cpp" TTmkEventData tmkEvD; -HANDLE hBcEvent; -HANDLE hRtEvent; +HANDLE hEvent; + + int nTmk; +uint8_t wAddr_RT, wRecTrans; unsigned long dwGoodStarts = 0, dwBusyStarts = 0, dwErrStarts = 0, dwStatStarts = 0; unsigned long dwStarts = 0L; TMK_DATA wSubAddr, wState, wStatus; -MIL::MIL(int dev_index) //open the driver, configuration, create event +int bcrtFlag; //RT = 0, BC = 1 + +//Open the driver, configuration, create event +MIL::MIL(int dev_index) { qDebug() << "MIL constructor"; if (TmkOpen()) @@ -21,30 +27,39 @@ MIL::MIL(int dev_index) //open the driver, configuration, create event else { if ((dev_index > tmkgetmaxn()) || (dev_index < 0)) + { closeAll(); + } else { this->m_TmkIndex = dev_index; if (tmkconfig(this->m_TmkIndex)) + { closeAll(); - - this->m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - ResetEvent(this->m_hEvent); - tmkdefevent(this->m_hEvent, TRUE); + } } } + + hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if (!hEvent) + { + qDebug() << "CreateEvent() error"; + closeAll(); + } + ResetEvent(hEvent); + tmkdefevent(hEvent, TRUE); } int MIL::WaitInt(TMK_DATA wCtrlCode) { - //Wait for an interrupt */ + //Wait for an interrupt DWORD k; - k = WaitForSingleObject(hBcEvent, 1000); + k = WaitForSingleObject(hEvent, 1000); switch (k) { case WAIT_OBJECT_0: - ResetEvent(hBcEvent); + ResetEvent(hEvent); break; case WAIT_TIMEOUT: @@ -57,34 +72,89 @@ int MIL::WaitInt(TMK_DATA wCtrlCode) return 1; } - /* Get interrupt data */ - /* We do not need to check tmkEvD.nInt because bcstartx with CX_NOSIG */ - /* guarantees us only single interrupt of single type nInt == 3 */ + // Get interrupt data + // We do not need to check tmkEvD.nInt because bcstartx with CX_NOSIG + // guarantees us only single interrupt of single type nInt == 3 tmkgetevd(&tmkEvD); if (tmkEvD.bcx.wResultX & SX_IB_MASK) { - /* We have set bit(s) in Status Word */ + // We have set bit(s) in Status Word if (((tmkEvD.bcx.wResultX & SX_ERR_MASK) == SX_NOERR) || ((tmkEvD.bcx.wResultX & SX_ERR_MASK) == SX_TOD)) { - wStatus = bcgetansw(wCtrlCode); /* We have either no errors or Data Time Out (No Data) error */ - if (wStatus & BUSY_MASK) /* We have BUSY bit set */ + wStatus = bcgetansw(wCtrlCode); // We have either no errors or Data Time Out (No Data) error + if (wStatus & BUSY_MASK) // We have BUSY bit set ++dwBusyStarts; - else /* We have unknown bit(s) set */ + else // We have unknown bit(s) set ++dwStatStarts; } - else /* We have an error */ + else // We have an error ++dwErrStarts; } - else if (tmkEvD.bcx.wResultX & SX_ERR_MASK) /* We have an error */ + else if (tmkEvD.bcx.wResultX & SX_ERR_MASK) // We have an error ++dwErrStarts; - else /* We have a completed message */ + else // We have a completed message ++dwGoodStarts; ++dwStarts; return 0; } +void MIL::closeAll() +{ + qDebug() << "Close All"; + if(!bcrtFlag) + rtreset(); + else + bcreset(); + CloseHandle(hEvent); + tmkdone(ALL_TMKS); + TmkClose(); +} + +bool MIL::GetEvent(unsigned short Timeout) +{ + //int MASK = 0; + if (tmkselect(this->m_TmkIndex)) + { + qDebug() << "tmkselect() error"; + return false; + } + + //MASK = MASK | BUSY; + //rtsetanswbits(BUSY); + switch (WaitForSingleObject(hEvent, Timeout)) + { + case WAIT_OBJECT_0: + qDebug() << "Interrupt"; + ResetEvent(hEvent); + tmkgetevd(&tmkEvD); + qDebug() << "1 bc wResult " << tmkEvD.bc.wResult; + qDebug() << "1 bc wAW1 " << tmkEvD.bc.wAW1; + qDebug() << "1 bc wAW2 " << tmkEvD.bc.wAW2; + qDebug() << "1 bcx wBase " << tmkEvD.bcx.wBase; + qDebug() << "1 bcx wResultX " << tmkEvD.bcx.wResultX; + qDebug() << "1 rt wStatus" << tmkEvD.rt.wStatus; + qDebug() << "1 rt wCmd" << tmkEvD.rt.wCmd; + qDebug() << "1 mt wBase " << tmkEvD.mt.wBase; + qDebug() << "1 mt wResultX " << tmkEvD.mt.wResultX; + qDebug() << "1 mrt wStatus" << tmkEvD.mrt.wStatus; + qDebug() << "1 tmk wRequest" << tmkEvD.tmk.wRequest; + return true; + break; + + case WAIT_TIMEOUT: + //qDebug() << "No new messages"; + return false; + break; + + default: + qDebug() << "Interrupt wait error"; + return false; + break; + } +} + MIL::~MIL() { qDebug() << "MIL destructor"; @@ -120,30 +190,21 @@ RT_MIL::RT_MIL(int dev_index, unsigned short Addr): MIL(dev_index) qDebug() << "RT_MIL constructor"; this->m_Addr = Addr; - //Find first configured device - for (nTmk = 0; nTmk <= MAX_TMK_NUMBER; ++nTmk) - if (!tmkselect(nTmk)) - break; - if (nTmk > MAX_TMK_NUMBER) - { - qDebug() << "tmkselect error"; - closeAllrt(); - } //Try to reset in RT mode if (rtreset()) { - qDebug() << "rtreset error"; - closeAllrt(); + qDebug() << "rtreset() error"; + closeAll(); } + //Set RT address, set flag mode, enable data irqs rtdefaddress(Addr); - rtdefmode(rtgetmode()|RT_FLAG_MODE); - //rtdefmode(rtgetmode()&~RT_FLAG_MODE); + rtdefmode(0); rtdefirqmode(rtgetirqmode()&~RT_DATA_BL); + //Ready to receive, not ready to transmit for (wSubAddr = 1; wSubAddr <= 30; ++wSubAddr) { - /* Ready to receive, not ready to transmit */ rtdefsubaddr(RT_RECEIVE, wSubAddr); rtclrflag(); rtdefsubaddr(RT_TRANSMIT, wSubAddr); @@ -156,24 +217,4 @@ RT_MIL::~RT_MIL() qDebug() << "RT_MIL destructor"; } -void MIL::closeAll() -{ - qDebug() << "Close All"; - //printf("\nGood: %ld, Busy: %ld, Error: %ld, Status: %ld\n", dwGoodStarts, dwBusyStarts, dwErrStarts, dwStatStarts); - bcreset(); - /* Close all opened things */ - CloseHandle(hBcEvent); - tmkdone(ALL_TMKS); - TmkClose(); -} -void MIL::closeAllrt() -{ - qDebug() << "Close All"; - //printf("\nGood: %ld, Busy: %ld, Error: %ld, Status: %ld\n", dwGoodStarts, dwBusyStarts, dwErrStarts, dwStatStarts); - rtreset(); - /* Close all opened things */ - CloseHandle(hRtEvent); - tmkdone(ALL_TMKS); - TmkClose(); -} diff --git a/bcmil.h b/bcmil.h index 0042579..f232440 100644 --- a/bcmil.h +++ b/bcmil.h @@ -1,29 +1,26 @@ #ifndef BCMIL_H #define BCMIL_H -#include "declarations.h" -#include "WDMTMKv2.h" +#include -class MIL: public QObject +#define TMK_DATA unsigned short +typedef void *HANDLE; + +class MIL:public QObject { Q_OBJECT public: MIL(int dev_index); - ~MIL(void); + ~MIL(); int WaitInt(TMK_DATA wCtrlCode); void closeAll(); - void closeAllrt(); - bool GetEvent(TTmkEventData *pEv, unsigned short Timeout); - -protected: - + bool GetEvent(unsigned short Timeout); int m_TmkIndex; - HANDLE m_hEvent; }; -class BC_MIL: public MIL +class BC_MIL:public MIL { public: @@ -31,12 +28,12 @@ public: ~BC_MIL(void); }; -class RT_MIL: public MIL +class RT_MIL:public MIL { public: RT_MIL(int dev_indexi, unsigned short Addr); - ~RT_MIL(void); + ~RT_MIL(); protected: diff --git a/cmdwrd.cpp b/cmdwrd.cpp index 07094c2..cfcfa68 100644 --- a/cmdwrd.cpp +++ b/cmdwrd.cpp @@ -5,6 +5,7 @@ extern unsigned char HexBinFlag; CommandWord::CommandWord() { + qDebug() << "CommandWord constructor"; addrRTf = 0; Kf = 0; subAddrf = 0; @@ -82,6 +83,15 @@ void CommandWord::description(QString CmdW) } } +void CommandWord::description(uint16_t cmdw) +{ + addrRTf = addrRTFind(cmdw); + Kf = KFind(cmdw); + subAddrf = subAddrFind(cmdw); + numDWf = numDWFind(cmdw); +} + CommandWord::~CommandWord() { + qDebug() << "CommandWord destructor"; } diff --git a/cmdwrd.h b/cmdwrd.h index 05c0df0..2c489e4 100644 --- a/cmdwrd.h +++ b/cmdwrd.h @@ -33,6 +33,7 @@ public: sync2, transLC, transBW, selectedSW, overrSTS}; void description(QString CmdW); + void description(uint16_t cmdw); uint8_t addrRTFind(uint16_t cmdw); uint8_t KFind(uint16_t cmdw); uint8_t subAddrFind(uint16_t cmdw); diff --git a/declarations.h b/declarations.h index 5df975e..e77fb3e 100644 --- a/declarations.h +++ b/declarations.h @@ -17,10 +17,7 @@ #include #include #include -#include -#include #include "cmdwrd.h" -#include "bcmil.h" -#include "windows.h" +#include "statwrd.h" #endif // DECLARATIONS_H diff --git a/main.cpp b/main.cpp index 5030ce3..71412b5 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,7 @@ #include "mainwindow.h" //#include "testinfo.h" +//#include "testcmd.h" +//#include "teststat.h" #include @@ -10,5 +12,7 @@ int main(int argc, char *argv[]) w.show(); //QTest::qExec(new testInfo, argc, argv); + //QTest::qExec(new testcmdwrd, argc, argv); + //QTest::qExec(new teststatwrd, argc, argv); return a.exec(); } diff --git a/mainwindow.cpp b/mainwindow.cpp index a68bd81..aef5ca4 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,24 +1,26 @@ #include "mainwindow.h" -//#include +#include "bcmil.cpp" extern TTmkEventData tmkEvD; -extern HANDLE hRtEvent; +extern HANDLE hEvent; -//#define RT_ADDR 10 - -//const int fInstMode = 1; +#define RT_ADDR 0x1 unsigned short awBuf[32]; TMK_DATA wBase, wMaxBase, wLen; extern TMK_DATA wSubAddr, wState; +extern uint8_t wAddr_RT, wRecTrans; -unsigned char HexBinFlag = 1; //1 - hex, 0 - bin +int HexBinFlag = 1; //Hex - 1, Bin - 0 +extern int bcrtFlag; //RT = 0, BC = 1 MainWindow::MainWindow() { init_mainwindowobj(); - init_table(); + init_table_cmd(); + init_table_stat(); + init_table_dword(); init_connections(); } @@ -28,44 +30,64 @@ void MainWindow::init_mainwindowobj() Window_1 = new QWidget; Window_2 = new QWidget; + Window_3 = new QWidget; + Window_4 = new QWidget; - HexBinButton = new QPushButton("Hex/Bin"); - HexBinLabel = new QLabel("Hex"); + RtModeLabel = new QLabel("RT mode"); + StartRtModeButton = new QPushButton("Start RT mode"); - CmdWordLabel = new QLabel("Enter the command word:"); + BcModeLabel = new QLabel("BC mode"); + StartBcModeButton = new QPushButton("Start BC mode"); CmdWordLineEdit = new QLineEdit; - EnterCmdWordButton = new QPushButton("Start"); - DataTable = new QTableWidget; - QGridLayout *layout_g = new QGridLayout(Window_2); - layout_g->addWidget(HexBinButton, 0, 1); - layout_g->addWidget(HexBinLabel, 0, 0); - layout_g->addWidget(CmdWordLabel, 1, 0); // Row 0, Column 0 - layout_g->addWidget(CmdWordLineEdit, 2, 0); - layout_g->addWidget(EnterCmdWordButton, 3, 0); + HexBinLabel = new QLabel("Hex"); + HexBinButton = new QPushButton("Hex/Bin"); - Window_2->setLayout(layout_g); + 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); - QVBoxLayout *layout = new QVBoxLayout(Window_1); - layout->addWidget(Window_2); - layout->addWidget(DataTable); + 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_1->setLayout(layout); - setCentralWidget(Window_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(EnterCmdWordButton, + connect(StartBcModeButton, SIGNAL(clicked()), this, - SLOT(getlineedit()));*/ - /*connect(EnterCmdWordButton, - SIGNAL(clicked()), - this, - SLOT(sendcmdwrd()));*/ - connect(EnterCmdWordButton, + SLOT(getlineedit())); + connect(StartRtModeButton, SIGNAL(clicked()), this, SLOT(rthandler())); @@ -85,67 +107,10 @@ QString intToDecString(int number) return QString::number(number,10); } -/*void MainWindow::getlineedit() +QString intToHexString(int number) { - qDebug() << "Entered the button command word"; - QString CmdW = CmdWordLineEdit->text(); - qDebug() << CmdW; - - QScopedPointer 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); - } - } -}*/ + return QString::number(number,16); +} void MainWindow::HexBinChange() { @@ -163,31 +128,92 @@ void MainWindow::HexBinChange() } } -void MainWindow::init_table() +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 << "Биты КС" << "Бинарное представление" << "Десятичное представление"; - DataTable->setColumnCount(ColCount); - DataTable->setRowCount(RowCount); - DataTable->setHorizontalHeaderLabels(header); - DataTable->verticalHeader()->setVisible(true); + DataTableCmd->setColumnCount(ColCount); + DataTableCmd->setRowCount(RowCount); + DataTableCmd->setHorizontalHeaderLabels(header); + DataTableCmd->verticalHeader()->setVisible(true); - DataTable->setColumnWidth(0,200); - DataTable->setColumnWidth(1,160); - DataTable->setColumnWidth(2,160); + DataTableCmd->setColumnWidth(0,200); + DataTableCmd->setColumnWidth(1,160); + DataTableCmd->setColumnWidth(2,160); for(int i = 0; i < RowCount; i++) { - DataTable->setRowHeight(i,20); + DataTableCmd->setRowHeight(i,20); for(int j = 0; j < ColCount; j++) - set_item(DataTable, i, j, "%", false); + 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) @@ -208,107 +234,285 @@ void MainWindow::set_item(QTableWidget *pTable, int indRow, pTable->item(indRow, indCol)->setTextColor(color); } -/*void MainWindow::sendcmdwrd() +void MainWindow::bchandler(QString CmdW) { - qDebug() << "send1"; + bcrtFlag = 1; QScopedPointer NewBC(new BC_MIL(0)); - qDebug() << "send2"; + wBase = 0; wMaxBase = bcgetmaxbase(); - srand(1); + qDebug() << "bcgetmaxbase" << wMaxBase; //Select base if (wBase > wMaxBase) wBase = 0; bcdefbase(wBase); - qDebug() << "send3"; + + filltablecmd(CmdW); //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)); + //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(); + 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"; + + for (int i = 0; i < wLen; ++i) + set_item(DataTableDWord, 0, i, intToHexString(awBuf[i]), false); + NewBC->closeAll(); -}*/ +} void MainWindow::rthandler() { - qDebug() << "rt1"; - QScopedPointer NewRT(new RT_MIL(0, 10)); - qDebug() << "rt2"; + qDebug() << "Entered the button start status mode"; + bcrtFlag = 0; + for (int i = 0; i < wLen; i++) + set_item(DataTableDWord, 0, i, "%", false); - while (loopActive) + QScopedPointer NewRT(new RT_MIL(0x0, RT_ADDR)); + + int i = 0; + while (i != 100) { - //Wait for an interrupt - switch (WaitForSingleObject(hRtEvent, 1000)) + i++; + + if(NewRT->GetEvent(1000)) { - case WAIT_OBJECT_0: - /* New message has arrived */ - ResetEvent(hRtEvent); - do - { - /* Get interrupt data */ - tmkgetevd(&tmkEvD); - /* Check interrupt type */ - if (tmkEvD.nInt == 3) - { - wSubAddr = (tmkEvD.rt.wStatus >> 5) &0x1F; - wLen = tmkEvD.rt.wStatus & 0x1F; - if (wLen == 0) - wLen = 32; - if ((tmkEvD.rt.wStatus & RT_DIR_MASK) == RT_RECEIVE) - { - /* If we received some data then copy the data from Rx subaddres to */ - /* Tx subaddress and process flags */ - if ((rtgetflag(RT_RECEIVE, wSubAddr) & RT_FLAG_MASK) == 0) - { - qDebug() << "Flag read error"; - NewRT->closeAllrt(); - } - rtdefsubaddr(RT_RECEIVE, wSubAddr); - rtgetblk(0, awBuf, wLen); - rtclrflag(); - rtdefsubaddr(RT_TRANSMIT, wSubAddr); - rtputblk(0, awBuf, wLen); - rtsetflag(); - } - } - } while (tmkEvD.nInt != 0); /* Loop while we have not processed all interrupts */ - - break; - - case WAIT_TIMEOUT: - /* No new messages */ - qDebug() << "No new messages"; + switch (tmkEvD.nInt) + { + case 1: + qDebug() << "Cmd word arrived"; + filltablecmd("0", ( (RT_ADDR << 0xB) | tmkEvD.rt.wCmd ), false); + filltablestat(rtgetanswbits() | (RT_ADDR << 0xB) ); break; - default: - qDebug() << "Interrupt wait error"; - NewRT->closeAllrt(); + 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); } } - NewRT->closeAllrt(); } MainWindow::~MainWindow() { + qDebug() << "MainWindow destructor"; } diff --git a/mainwindow.h b/mainwindow.h index 54c3a65..2fb2193 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -6,50 +6,51 @@ class MainWindow:public QMainWindow { Q_OBJECT + public: + void init_mainwindowobj(); //the function of this class void init_connections(); + void bchandler(QString CmdW); + void filltablestat(uint16_t statw); + void filltablecmd(QString CmdW = "0", uint16_t statw = 0, bool mode = true); explicit MainWindow(); //constructor ~MainWindow(); //destructor private: - void init_table(); + + void init_table_cmd(); + void init_table_stat(); + void init_table_dword(); void set_item(QTableWidget *pTable, int indRow, int indCol, QString data, bool editFlag); public slots: - //void getlineedit(); - //void sendcmdwrd(); + + void getlineedit(); void rthandler(); void HexBinChange(); private: + QWidget *Window_1 = new QWidget; QWidget *Window_2 = new QWidget; + QWidget *Window_3 = new QWidget; + QWidget *Window_4 = new QWidget; + + QLabel *RtModeLabel; + QPushButton *StartRtModeButton; + + QLabel *BcModeLabel; + QPushButton *StartBcModeButton; + QLineEdit *CmdWordLineEdit; QLabel *HexBinLabel; QPushButton *HexBinButton; - QLabel *CmdWordLabel; - QLineEdit *CmdWordLineEdit; - QPushButton *EnterCmdWordButton; - QTableWidget *DataTable; - -protected: - - void keyPressEvent(QKeyEvent *event) override - { - if (loopActive) - { - loopActive = false; - qDebug() << "Key pressed! Stopping loop."; - } - QWidget::keyPressEvent(event); - } - -public: - - bool loopActive = true; + QTableWidget *DataTableCmd; + QTableWidget *DataTableStat; + QTableWidget *DataTableDWord; }; #endif // MAINWINDOW_H diff --git a/statwrd.cpp b/statwrd.cpp new file mode 100644 index 0000000..b79f8b7 --- /dev/null +++ b/statwrd.cpp @@ -0,0 +1,83 @@ +#include "mainwindow.h" +#include "statwrd.h" + +extern unsigned char HexBinFlag; + +uint8_t StatusWord::addrRTFind(uint16_t statw) +{ + SW.all = statw; + return SW.addrRT; +} + +uint8_t StatusWord::messErrFind(uint16_t statw) +{ + SW.all = statw; + return SW.messErr; +} + +uint8_t StatusWord::instrFind(uint16_t statw) +{ + SW.all = statw; + return SW.instr; +} + +uint8_t StatusWord::serReqFind(uint16_t statw) +{ + SW.all = statw; + return SW.serReq; +} + +uint8_t StatusWord::reservFind(uint16_t statw) +{ + SW.all = statw; + return SW.reserved; +} + +uint8_t StatusWord::broadCRFind(uint16_t statw) +{ + SW.all = statw; + return SW.broadCR; +} + +uint8_t StatusWord::busyFind(uint16_t statw) +{ + SW.all = statw; + return SW.busy; +} + +uint8_t StatusWord::subSysFFind(uint16_t statw) +{ + SW.all = statw; + return SW.subSysF; +} + +uint8_t StatusWord::dynBCAFind(uint16_t statw) +{ + SW.all = statw; + return SW.dynBCA; +} + +uint8_t StatusWord::termFlgFind(uint16_t statw) +{ + SW.all = statw; + return SW.termFlg; +} + +void StatusWord::description(uint16_t statw) +{ + addrRTf = addrRTFind(statw); + messErrf = messErrFind(statw); + instrf = instrFind(statw); + serReqf = serReqFind(statw); + reservf = reservFind(statw); + broadCRf = broadCRFind(statw); + busyf = busyFind(statw); + subSysFf = subSysFFind(statw); + dynBCAf = dynBCAFind(statw); + termFlgf = termFlgFind(statw); +} + +StatusWord::~StatusWord() +{ + qDebug() << "StatusWord destructor"; +} diff --git a/statwrd.h b/statwrd.h new file mode 100644 index 0000000..c411bae --- /dev/null +++ b/statwrd.h @@ -0,0 +1,70 @@ +#ifndef STATWRD_H +#define STATWRD_H + +#include +#include + +class StatusWord:public QObject +{ + Q_OBJECT +public: + + typedef union { + uint16_t all; + struct { + unsigned termFlg: 1; // terminal flag + unsigned dynBCA: 1; // dynamic bus control acceptance + unsigned subSysF: 1; // subsystem flag + unsigned busy: 1; + unsigned broadCR: 1; // broadcast command recieved + unsigned reserved: 3; + unsigned serReq: 1; // service request + unsigned instr: 1; // instrumentation + unsigned messErr: 1; // message error + unsigned addrRT:5; + }; + } SW_t; + + SW_t SW; + + uint8_t addrRTf; + uint8_t messErrf; + uint8_t instrf; + uint8_t serReqf; + uint8_t reservf; + uint8_t broadCRf; + uint8_t busyf; + uint8_t subSysFf; + uint8_t dynBCAf; + uint8_t termFlgf; + + void description(uint16_t statw); + uint8_t addrRTFind(uint16_t statw); + uint8_t messErrFind(uint16_t statw); + uint8_t instrFind(uint16_t statw); + uint8_t serReqFind(uint16_t statw); + uint8_t reservFind(uint16_t statw); + uint8_t broadCRFind(uint16_t statw); + uint8_t busyFind(uint16_t statw); + uint8_t subSysFFind(uint16_t statw); + uint8_t dynBCAFind(uint16_t statw); + uint8_t termFlgFind(uint16_t statw); + + StatusWord() + { + qDebug() << "StatusWord constructor"; + addrRTf = 0; + messErrf = 0; + instrf = 0; + serReqf = 0; + reservf = 0; + broadCRf = 0; + busyf = 0; + subSysFf = 0; + dynBCAf = 0; + termFlgf = 0; + } + ~StatusWord(); +}; + +#endif // STATWRD_H diff --git a/testcmd.cpp b/testcmd.cpp new file mode 100644 index 0000000..e6356c2 --- /dev/null +++ b/testcmd.cpp @@ -0,0 +1,59 @@ +/*#include +#include "testcmd.h" + +void testcmdwrd::testConstructor() +{ + // default values 0 + CommandWord c1; + + QVERIFY(c1.addrRTf == 0); + QVERIFY(c1.Kf == 0); + QVERIFY(c1.subAddrf == 0); + QVERIFY(c1.numDWf == 0); +} + +void testcmdwrd::testaddrRTFind() +{ + // address default + QCOMPARE(mCmdWrd.addrRTf, addrRT0); + + // address after setting + QCOMPARE(mCmdWrd.addrRTFind(0x043D), (uint8_t)(0b00000)); + QCOMPARE(mCmdWrd.addrRTFind(0x2C3D), (uint8_t)(0b00101)); //main + QCOMPARE(mCmdWrd.addrRTFind(0x343D), (uint8_t)(0b00110)); //reserve + QCOMPARE(mCmdWrd.addrRTFind(0xFC3D), (uint8_t)(0b11111)); +} + +void testcmdwrd::testKFind() +{ + // K default + QCOMPARE(mCmdWrd.Kf, K0); + + // K after setting + QCOMPARE(mCmdWrd.KFind(0x2C5D), (uint8_t)(1)); //transmission + QCOMPARE(mCmdWrd.KFind(0x2915), (uint8_t)(0)); //res +} + +void testcmdwrd::testsubAddrFind() +{ + // SubAdd_CtrlMode default + QCOMPARE(mCmdWrd.subAddrf, subAddr0); + + // SubAdd_CtrlMode after setting + QCOMPARE(mCmdWrd.subAddrFind(0x2C3D), (uint8_t)(1)); //subadd 01 + QCOMPARE(mCmdWrd.subAddrFind(0x2E14), (uint8_t)(16)); //subadd 16 + QCOMPARE(mCmdWrd.subAddrFind(0x2FC0), (uint8_t)(30)); //subadd 30 +} + +void testcmdwrd::testnumDWFind() +{ + // NumData_CmdCode default + QCOMPARE(mCmdWrd.numDWf, numDW0); + + // NumData_CmdCode after setting + QCOMPARE(mCmdWrd.numDWFind(0x2C9D), (uint8_t)(29)); + QCOMPARE(mCmdWrd.numDWFind(0x2C90), (uint8_t)(16)); + QCOMPARE(mCmdWrd.numDWFind(0x2A41), (uint8_t)(1)); + QCOMPARE(mCmdWrd.numDWFind(0x2BC0), (uint8_t)(0)); //32 words +} +*/ diff --git a/testcmd.h b/testcmd.h new file mode 100644 index 0000000..d5308d4 --- /dev/null +++ b/testcmd.h @@ -0,0 +1,33 @@ +/*#ifndef TESTCMD_H +#define TESTCMD_H + +#include +#include "cmdwrd.h" + +class testcmdwrd:public QObject +{ + Q_OBJECT + +private slots: + + void testConstructor(); + void testaddrRTFind(); + void testKFind(); + void testsubAddrFind(); + void testnumDWFind(); + + +private: + + const uint8_t addrRT0 = 0; + const uint8_t K0 = 0; + const uint8_t subAddr0 = 0; + const uint8_t numDW0 = 0; + +private: + + CommandWord mCmdWrd; +}; + +#endif // TESTCMD_H +*/ diff --git a/testinfo.cpp b/testinfo.cpp index 339e08f..d02b64f 100644 --- a/testinfo.cpp +++ b/testinfo.cpp @@ -1,11 +1,13 @@ -/*#include -#include "testinfo.h" -#include -#include "declarations.h" -#include +/*#include "testinfo.h" -HANDLE hEvent; -TTmkEventData tmkEvD; +#ifndef MAINWININC +#define MAINWININC +#include "mainwindow.cpp" +#endif + + +HANDLE hEvent_t; +TTmkEventData tmkEvD_t; void testInfo::init() { @@ -27,14 +29,14 @@ void testInfo::cleanupTestCase() { qDebug() << "TmkClose()"; TmkClose(); - if (hEvent) - CloseHandle(hEvent); + if (hEvent_t) + CloseHandle(hEvent_t); } void testInfo::testcreateevent() { - hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - QVERIFY(hEvent); + hEvent_t = CreateEvent(NULL, TRUE, FALSE, NULL); + QVERIFY(hEvent_t); } void testInfo::testTmkOpen() @@ -278,17 +280,17 @@ void testInfo::testrtputgetblk() void testInfo::testgetInt() { bcreset(); - tmkdefevent(hEvent, TRUE); - tmkgetevd(&tmkEvD); - QCOMPARE(tmkEvD.nInt, (int)(0)); + tmkdefevent(hEvent_t, TRUE); + tmkgetevd(&tmkEvD_t); + QCOMPARE(tmkEvD_t.nInt, (int)(0)); bcdefbase(0); bcputw(0, 0xFFE1); bcstart(0, CTRL_C_BRCST); - switch (WaitForSingleObject(hEvent, 1000)) + switch (WaitForSingleObject(hEvent_t, 1000)) { case WAIT_OBJECT_0: - ResetEvent(hEvent); + ResetEvent(hEvent_t); qDebug() << "We got interrupt!"; break; @@ -301,10 +303,9 @@ void testInfo::testgetInt() break; } - tmkgetevd(&tmkEvD); - QCOMPARE(tmkEvD.nInt, (int)(1)); + tmkgetevd(&tmkEvD_t); + QCOMPARE(tmkEvD_t.nInt, (int)(1)); tmkdefevent(0,TRUE); } */ - diff --git a/testinfo.h b/testinfo.h index 93a9fb7..ad4c0a4 100644 --- a/testinfo.h +++ b/testinfo.h @@ -4,6 +4,7 @@ #include #include + class testInfo:public QObject { Q_OBJECT diff --git a/teststat.cpp b/teststat.cpp new file mode 100644 index 0000000..c1b2dc8 --- /dev/null +++ b/teststat.cpp @@ -0,0 +1,122 @@ +/*#include +#include "teststat.h" + +void teststatwrd::testConstructor() +{ + // default values 0 + StatusWord c1; + + QVERIFY(c1.addrRTf == 0); + QVERIFY(c1.messErrf == 0); + QVERIFY(c1.instrf == 0); + QVERIFY(c1.serReqf == 0); + QVERIFY(c1.reservf == 0); + QVERIFY(c1.broadCRf == 0); + QVERIFY(c1.busyf == 0); + QVERIFY(c1.subSysFf == 0); + QVERIFY(c1.dynBCAf == 0); + QVERIFY(c1.termFlgf == 0); +} + +void teststatwrd::testaddrRTFind() +{ + // default + QCOMPARE(mStatWrd.addrRTf, addrRT0); + + // after setting + QCOMPARE(mStatWrd.addrRTFind(0x0D45), (uint8_t)(1)); //00001 + QCOMPARE(mStatWrd.addrRTFind(0x8545), (uint8_t)(0b10000)); //10000 + QCOMPARE(mStatWrd.addrRTFind(0xFD45), (uint8_t)(0b11111)); //11111 +} + +void teststatwrd::testmessErrFind() +{ + // default + QCOMPARE(mStatWrd.messErrf, messErr0); + + // after setting + QCOMPARE(mStatWrd.messErrFind(0xF8A5), (uint8_t)(0)); + QCOMPARE(mStatWrd.messErrFind(0xFCA5), (uint8_t)(1)); +} + +void teststatwrd::testinstrFind() +{ + // default + QCOMPARE(mStatWrd.instrf, instr0); + + // after setting + QCOMPARE(mStatWrd.instrFind(0xFCA5), (uint8_t)(0)); + QCOMPARE(mStatWrd.instrFind(0xFEA5), (uint8_t)(1)); +} + +void teststatwrd::testserReqFind() +{ + // default + QCOMPARE(mStatWrd.serReqf, serReq0); + + // after setting + QCOMPARE(mStatWrd.serReqFind(0xFEA5), (uint8_t)(0)); + QCOMPARE(mStatWrd.serReqFind(0xFFA5), (uint8_t)(1)); +} + +void teststatwrd::testreservFind() +{ + // default + QCOMPARE(mStatWrd.reservf, reserv0); + + // after setting + QCOMPARE(mStatWrd.reservFind(0xFF05), (uint8_t)(0b000)); + QCOMPARE(mStatWrd.reservFind(0xFF85), (uint8_t)(0b100)); + QCOMPARE(mStatWrd.reservFind(0xFFE5), (uint8_t)(0b111)); +} + +void teststatwrd::testbroadCRFind() +{ + // default + QCOMPARE(mStatWrd.broadCRf, broadCR0); + + // after setting + QCOMPARE(mStatWrd.broadCRFind(0x95A5), (uint8_t)(0)); + QCOMPARE(mStatWrd.broadCRFind(0x95B5), (uint8_t)(1)); +} + +void teststatwrd::testbusyFind() +{ + // default + QCOMPARE(mStatWrd.busyf, busy0); + + // after setting + QCOMPARE(mStatWrd.busyFind(0x95B5), (uint8_t)(0)); + QCOMPARE(mStatWrd.busyFind(0x95BD), (uint8_t)(1)); +} + +void teststatwrd::testsubSysFFind() +{ + // default + QCOMPARE(mStatWrd.subSysFf, subSysF0); + + // after setting + QCOMPARE(mStatWrd.subSysFFind(0x95A9), (uint8_t)(0)); + QCOMPARE(mStatWrd.subSysFFind(0x95AD), (uint8_t)(1)); +} + +void teststatwrd::testdynBCAFind() +{ + // default + QCOMPARE(mStatWrd.dynBCAf, dynBCA0); + + // after setting + QCOMPARE(mStatWrd.dynBCAFind(0x95AC), (uint8_t)(0)); + QCOMPARE(mStatWrd.dynBCAFind(0x95AE), (uint8_t)(1)); +} + +void teststatwrd::testtermFlgFind() +{ + // default + QCOMPARE(mStatWrd.termFlgf, termFlg0); + + // after setting + QCOMPARE(mStatWrd.termFlgFind(0x95AE), (uint8_t)(0)); + QCOMPARE(mStatWrd.termFlgFind(0x95AF), (uint8_t)(1)); +} +*/ diff --git a/teststat.h b/teststat.h new file mode 100644 index 0000000..a5fb404 --- /dev/null +++ b/teststat.h @@ -0,0 +1,45 @@ +/*#ifndef TESTSTAT_H +#define TESTSTAT_H + +#include +#include "statwrd.h" + +class teststatwrd:public QObject +{ + Q_OBJECT + +private slots: + + void testConstructor(); + void testaddrRTFind(); + void testmessErrFind(); + void testinstrFind(); + void testserReqFind(); + void testreservFind(); + void testbroadCRFind(); + void testbusyFind(); + void testsubSysFFind(); + void testdynBCAFind(); + void testtermFlgFind(); + + +private: + + const uint8_t addrRT0 = 0; + const uint8_t messErr0 = 0; + const uint8_t instr0 = 0; + const uint8_t serReq0 = 0; + const uint8_t reserv0 = 0; + const uint8_t broadCR0 = 0; + const uint8_t busy0 = 0; + const uint8_t subSysF0 = 0; + const uint8_t dynBCA0 = 0; + const uint8_t termFlg0 = 0; + +private: + + StatusWord mStatWrd; +}; + +#endif // TESTSTAT_H +*/