This commit is contained in:
2025-09-16 12:08:45 +03:00
parent 648e754d32
commit 105b4e79da
21 changed files with 984 additions and 289 deletions

View File

@@ -9,7 +9,10 @@ SOURCES += \
cmdwrd.cpp \ cmdwrd.cpp \
main.cpp \ main.cpp \
mainwindow.cpp \ mainwindow.cpp \
testinfo.cpp statwrd.cpp \
testcmd.cpp \
testinfo.cpp \
teststat.cpp
HEADERS += \ HEADERS += \
WDMTMKv2.h \ WDMTMKv2.h \
@@ -17,4 +20,7 @@ HEADERS += \
cmdwrd.h \ cmdwrd.h \
declarations.h \ declarations.h \
mainwindow.h \ mainwindow.h \
testinfo.h statwrd.h \
testcmd.h \
testinfo.h \
teststat.h

Binary file not shown.

Binary file not shown.

View File

@@ -5,11 +5,27 @@
/* for Windows 98/ME/2000/XP/Vista/7 */ /* for Windows 98/ME/2000/XP/Vista/7 */
/*****************************************************************************/ /*****************************************************************************/
//#ifndef _TMK1553B_
//#define _TMK1553B_
//#ifndef WDMTMKV2_CPP //#ifndef WDMTMKV2_CPP
//#define WDMTMKV2_CPP //#define WDMTMKV2_CPP
//#include <stdio.h>
#ifndef WINDOWSINC
#define WINDOWSINC
#include <windows.h>
#endif
#ifndef WDMTMKINC
#define WDMTMKINC
#include "WDMTMKv2.h" #include "WDMTMKv2.h"
#endif
HANDLE _ahVTMK4Event[MAX_TMK_NUMBER+1]; HANDLE _ahVTMK4Event[MAX_TMK_NUMBER+1];
HANDLE _hVTMK4VxD[MAX_TMK_NUMBER+1]; HANDLE _hVTMK4VxD[MAX_TMK_NUMBER+1];
int _VTMK4tmkMaxNum = -1; int _VTMK4tmkMaxNum = -1;
@@ -2102,3 +2118,4 @@ int tmkreadsn()
return TMK_BAD_NUMBER; return TMK_BAD_NUMBER;
} }
//#endif //#endif
//#endif

View File

@@ -5,14 +5,16 @@
/* for Windows 98/ME/2000/XP/Vista/7 */ /* 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 <stdio.h> #include <stdio.h>
#include <stdint.h> #include <stdint.h>
#include <windows.h>
typedef uint16_t WORD; typedef uint16_t WORD;
typedef unsigned __LONG32 DWORD; typedef unsigned __LONG32 DWORD;
typedef void *HANDLE; typedef void *HANDLE;
@@ -1021,4 +1023,5 @@ htmkrawio_usb tmkrawio_usb = ftmkrawio_usb;
hrtgap_usb rtgap_usb = frtgap_usb; hrtgap_usb rtgap_usb = frtgap_usb;
htmkreadsn_usb tmkreadsn_usb = ftmkreadsn_usb; htmkreadsn_usb tmkreadsn_usb = ftmkreadsn_usb;
//#endif // WDMTMKV2_H #endif
#endif

151
bcmil.cpp
View File

@@ -1,16 +1,22 @@
#include "declarations.h" #include <QDebug>
#include "bcmil.h"
#include "WDMTMKv2.cpp" #include "WDMTMKv2.cpp"
TTmkEventData tmkEvD; TTmkEventData tmkEvD;
HANDLE hBcEvent; HANDLE hEvent;
HANDLE hRtEvent;
int nTmk; int nTmk;
uint8_t wAddr_RT, wRecTrans;
unsigned long dwGoodStarts = 0, dwBusyStarts = 0, dwErrStarts = 0, dwStatStarts = 0; unsigned long dwGoodStarts = 0, dwBusyStarts = 0, dwErrStarts = 0, dwStatStarts = 0;
unsigned long dwStarts = 0L; unsigned long dwStarts = 0L;
TMK_DATA wSubAddr, wState, wStatus; 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"; qDebug() << "MIL constructor";
if (TmkOpen()) if (TmkOpen())
@@ -21,30 +27,39 @@ MIL::MIL(int dev_index) //open the driver, configuration, create event
else else
{ {
if ((dev_index > tmkgetmaxn()) || (dev_index < 0)) if ((dev_index > tmkgetmaxn()) || (dev_index < 0))
{
closeAll(); closeAll();
}
else else
{ {
this->m_TmkIndex = dev_index; this->m_TmkIndex = dev_index;
if (tmkconfig(this->m_TmkIndex)) if (tmkconfig(this->m_TmkIndex))
{
closeAll(); closeAll();
}
}
}
this->m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
ResetEvent(this->m_hEvent); if (!hEvent)
tmkdefevent(this->m_hEvent, TRUE); {
} qDebug() << "CreateEvent() error";
closeAll();
} }
ResetEvent(hEvent);
tmkdefevent(hEvent, TRUE);
} }
int MIL::WaitInt(TMK_DATA wCtrlCode) int MIL::WaitInt(TMK_DATA wCtrlCode)
{ {
//Wait for an interrupt */ //Wait for an interrupt
DWORD k; DWORD k;
k = WaitForSingleObject(hBcEvent, 1000); k = WaitForSingleObject(hEvent, 1000);
switch (k) switch (k)
{ {
case WAIT_OBJECT_0: case WAIT_OBJECT_0:
ResetEvent(hBcEvent); ResetEvent(hEvent);
break; break;
case WAIT_TIMEOUT: case WAIT_TIMEOUT:
@@ -57,34 +72,89 @@ int MIL::WaitInt(TMK_DATA wCtrlCode)
return 1; return 1;
} }
/* Get interrupt data */ // Get interrupt data
/* We do not need to check tmkEvD.nInt because bcstartx with CX_NOSIG */ // We do not need to check tmkEvD.nInt because bcstartx with CX_NOSIG
/* guarantees us only single interrupt of single type nInt == 3 */ // guarantees us only single interrupt of single type nInt == 3
tmkgetevd(&tmkEvD); tmkgetevd(&tmkEvD);
if (tmkEvD.bcx.wResultX & SX_IB_MASK) 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)) 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 */ wStatus = bcgetansw(wCtrlCode); // We have either no errors or Data Time Out (No Data) error
if (wStatus & BUSY_MASK) /* We have BUSY bit set */ if (wStatus & BUSY_MASK) // We have BUSY bit set
++dwBusyStarts; ++dwBusyStarts;
else /* We have unknown bit(s) set */ else // We have unknown bit(s) set
++dwStatStarts; ++dwStatStarts;
} }
else /* We have an error */ else // We have an error
++dwErrStarts; ++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; ++dwErrStarts;
else /* We have a completed message */ else // We have a completed message
++dwGoodStarts; ++dwGoodStarts;
++dwStarts; ++dwStarts;
return 0; 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() MIL::~MIL()
{ {
qDebug() << "MIL destructor"; qDebug() << "MIL destructor";
@@ -120,30 +190,21 @@ RT_MIL::RT_MIL(int dev_index, unsigned short Addr): MIL(dev_index)
qDebug() << "RT_MIL constructor"; qDebug() << "RT_MIL constructor";
this->m_Addr = Addr; 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 //Try to reset in RT mode
if (rtreset()) if (rtreset())
{ {
qDebug() << "rtreset error"; qDebug() << "rtreset() error";
closeAllrt(); closeAll();
} }
//Set RT address, set flag mode, enable data irqs //Set RT address, set flag mode, enable data irqs
rtdefaddress(Addr); rtdefaddress(Addr);
rtdefmode(rtgetmode()|RT_FLAG_MODE); rtdefmode(0);
//rtdefmode(rtgetmode()&~RT_FLAG_MODE);
rtdefirqmode(rtgetirqmode()&~RT_DATA_BL); rtdefirqmode(rtgetirqmode()&~RT_DATA_BL);
//Ready to receive, not ready to transmit
for (wSubAddr = 1; wSubAddr <= 30; ++wSubAddr) for (wSubAddr = 1; wSubAddr <= 30; ++wSubAddr)
{ {
/* Ready to receive, not ready to transmit */
rtdefsubaddr(RT_RECEIVE, wSubAddr); rtdefsubaddr(RT_RECEIVE, wSubAddr);
rtclrflag(); rtclrflag();
rtdefsubaddr(RT_TRANSMIT, wSubAddr); rtdefsubaddr(RT_TRANSMIT, wSubAddr);
@@ -156,24 +217,4 @@ RT_MIL::~RT_MIL()
qDebug() << "RT_MIL destructor"; 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();
}

23
bcmil.h
View File

@@ -1,29 +1,26 @@
#ifndef BCMIL_H #ifndef BCMIL_H
#define BCMIL_H #define BCMIL_H
#include "declarations.h" #include <QObject>
#include "WDMTMKv2.h"
class MIL: public QObject #define TMK_DATA unsigned short
typedef void *HANDLE;
class MIL:public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
MIL(int dev_index); MIL(int dev_index);
~MIL(void); ~MIL();
int WaitInt(TMK_DATA wCtrlCode); int WaitInt(TMK_DATA wCtrlCode);
void closeAll(); void closeAll();
void closeAllrt(); bool GetEvent(unsigned short Timeout);
bool GetEvent(TTmkEventData *pEv, unsigned short Timeout);
protected:
int m_TmkIndex; int m_TmkIndex;
HANDLE m_hEvent;
}; };
class BC_MIL: public MIL class BC_MIL:public MIL
{ {
public: public:
@@ -31,12 +28,12 @@ public:
~BC_MIL(void); ~BC_MIL(void);
}; };
class RT_MIL: public MIL class RT_MIL:public MIL
{ {
public: public:
RT_MIL(int dev_indexi, unsigned short Addr); RT_MIL(int dev_indexi, unsigned short Addr);
~RT_MIL(void); ~RT_MIL();
protected: protected:

View File

@@ -5,6 +5,7 @@ extern unsigned char HexBinFlag;
CommandWord::CommandWord() CommandWord::CommandWord()
{ {
qDebug() << "CommandWord constructor";
addrRTf = 0; addrRTf = 0;
Kf = 0; Kf = 0;
subAddrf = 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() CommandWord::~CommandWord()
{ {
qDebug() << "CommandWord destructor";
} }

View File

@@ -33,6 +33,7 @@ public:
sync2, transLC, transBW, selectedSW, overrSTS}; sync2, transLC, transBW, selectedSW, overrSTS};
void description(QString CmdW); void description(QString CmdW);
void description(uint16_t cmdw);
uint8_t addrRTFind(uint16_t cmdw); uint8_t addrRTFind(uint16_t cmdw);
uint8_t KFind(uint16_t cmdw); uint8_t KFind(uint16_t cmdw);
uint8_t subAddrFind(uint16_t cmdw); uint8_t subAddrFind(uint16_t cmdw);

View File

@@ -17,10 +17,7 @@
#include <QLineEdit> #include <QLineEdit>
#include <QString> #include <QString>
#include <QScopedPointer> #include <QScopedPointer>
#include <QTest>
#include <stdio.h>
#include "cmdwrd.h" #include "cmdwrd.h"
#include "bcmil.h" #include "statwrd.h"
#include "windows.h"
#endif // DECLARATIONS_H #endif // DECLARATIONS_H

View File

@@ -1,5 +1,7 @@
#include "mainwindow.h" #include "mainwindow.h"
//#include "testinfo.h" //#include "testinfo.h"
//#include "testcmd.h"
//#include "teststat.h"
#include <QApplication> #include <QApplication>
@@ -10,5 +12,7 @@ int main(int argc, char *argv[])
w.show(); w.show();
//QTest::qExec(new testInfo, argc, argv); //QTest::qExec(new testInfo, argc, argv);
//QTest::qExec(new testcmdwrd, argc, argv);
//QTest::qExec(new teststatwrd, argc, argv);
return a.exec(); return a.exec();
} }

View File

@@ -1,24 +1,26 @@
#include "mainwindow.h" #include "mainwindow.h"
//#include <WDMTMKv2.cpp> #include "bcmil.cpp"
extern TTmkEventData tmkEvD; extern TTmkEventData tmkEvD;
extern HANDLE hRtEvent; extern HANDLE hEvent;
//#define RT_ADDR 10 #define RT_ADDR 0x1
//const int fInstMode = 1;
unsigned short awBuf[32]; unsigned short awBuf[32];
TMK_DATA wBase, wMaxBase, wLen; TMK_DATA wBase, wMaxBase, wLen;
extern TMK_DATA wSubAddr, wState; 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() MainWindow::MainWindow()
{ {
init_mainwindowobj(); init_mainwindowobj();
init_table(); init_table_cmd();
init_table_stat();
init_table_dword();
init_connections(); init_connections();
} }
@@ -28,44 +30,64 @@ void MainWindow::init_mainwindowobj()
Window_1 = new QWidget; Window_1 = new QWidget;
Window_2 = new QWidget; Window_2 = new QWidget;
Window_3 = new QWidget;
Window_4 = new QWidget;
HexBinButton = new QPushButton("Hex/Bin"); RtModeLabel = new QLabel("RT mode");
HexBinLabel = new QLabel("Hex"); 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; CmdWordLineEdit = new QLineEdit;
EnterCmdWordButton = new QPushButton("Start");
DataTable = new QTableWidget;
QGridLayout *layout_g = new QGridLayout(Window_2); HexBinLabel = new QLabel("Hex");
layout_g->addWidget(HexBinButton, 0, 1); HexBinButton = new QPushButton("Hex/Bin");
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);
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); setCentralWidget(Window_2);
QVBoxLayout *layout = new QVBoxLayout(Window_1); QGridLayout *layout_g = new QGridLayout(Window_3);
layout->addWidget(Window_2); layout_g->addWidget(RtModeLabel, 1, 0);
layout->addWidget(DataTable); layout_g->addWidget(Window_2, 1, 1);
layout_g->addWidget(StartRtModeButton, 2, 0);
layout_g->addWidget(StartBcModeButton, 2, 1);
Window_1->setLayout(layout); Window_3->setLayout(layout_g);
setCentralWidget(Window_1); 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() void MainWindow::init_connections()
{ {
/*connect(EnterCmdWordButton, connect(StartBcModeButton,
SIGNAL(clicked()), SIGNAL(clicked()),
this, this,
SLOT(getlineedit()));*/ SLOT(getlineedit()));
/*connect(EnterCmdWordButton, connect(StartRtModeButton,
SIGNAL(clicked()),
this,
SLOT(sendcmdwrd()));*/
connect(EnterCmdWordButton,
SIGNAL(clicked()), SIGNAL(clicked()),
this, this,
SLOT(rthandler())); SLOT(rthandler()));
@@ -85,67 +107,10 @@ QString intToDecString(int number)
return QString::number(number,10); return QString::number(number,10);
} }
/*void MainWindow::getlineedit() QString intToHexString(int number)
{ {
qDebug() << "Entered the button command word"; return QString::number(number,16);
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::HexBinChange() 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 ColCount = 3;
int RowCount = 4; int RowCount = 4;
QStringList header; QStringList header;
header << "Биты КС" << "Бинарное представление" << "Десятичное представление"; header << "Биты КС" << "Бинарное представление" << "Десятичное представление";
DataTable->setColumnCount(ColCount); DataTableCmd->setColumnCount(ColCount);
DataTable->setRowCount(RowCount); DataTableCmd->setRowCount(RowCount);
DataTable->setHorizontalHeaderLabels(header); DataTableCmd->setHorizontalHeaderLabels(header);
DataTable->verticalHeader()->setVisible(true); DataTableCmd->verticalHeader()->setVisible(true);
DataTable->setColumnWidth(0,200); DataTableCmd->setColumnWidth(0,200);
DataTable->setColumnWidth(1,160); DataTableCmd->setColumnWidth(1,160);
DataTable->setColumnWidth(2,160); DataTableCmd->setColumnWidth(2,160);
for(int i = 0; i < RowCount; i++) for(int i = 0; i < RowCount; i++)
{ {
DataTable->setRowHeight(i,20); DataTableCmd->setRowHeight(i,20);
for(int j = 0; j < ColCount; j++) 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, void MainWindow::set_item(QTableWidget *pTable, int indRow,
int indCol, QString data, bool editFlag) int indCol, QString data, bool editFlag)
@@ -208,107 +234,285 @@ void MainWindow::set_item(QTableWidget *pTable, int indRow,
pTable->item(indRow, indCol)->setTextColor(color); pTable->item(indRow, indCol)->setTextColor(color);
} }
/*void MainWindow::sendcmdwrd() void MainWindow::bchandler(QString CmdW)
{ {
qDebug() << "send1"; bcrtFlag = 1;
QScopedPointer<BC_MIL> NewBC(new BC_MIL(0)); QScopedPointer<BC_MIL> NewBC(new BC_MIL(0));
qDebug() << "send2";
wBase = 0; wBase = 0;
wMaxBase = bcgetmaxbase(); wMaxBase = bcgetmaxbase();
srand(1); qDebug() << "bcgetmaxbase" << wMaxBase;
//Select base //Select base
if (wBase > wMaxBase) if (wBase > wMaxBase)
wBase = 0; wBase = 0;
bcdefbase(wBase); bcdefbase(wBase);
qDebug() << "send3";
filltablecmd(CmdW);
//Prepare data to RT //Prepare data to RT
//wSubAddr = rand() & 0x1F;
wSubAddr = 0x1F;;
//if (fInstMode)
// wSubAddr |= 0x10;
//wLen = rand() & 0x1F;
wLen = 0x1;
if (wLen == 0) if (wLen == 0)
wLen = 32; wLen = 32;
for (int i = 0; i < wLen; ++i) for (int i = 0; i < wLen; ++i)
awBuf[i] = (wSubAddr<<8) | i; awBuf[i] = (wSubAddr<<8) | i;
qDebug() << "send4";
//Try to send data to RT until it answers with Clear Status //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); bcputblk(1, awBuf, wLen);
do do
{ {
//bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_A | CX_NOSIG); bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_A | CX_NOSIG);
bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_B | CX_NOSIG); //bcstartx(wBase, DATA_BC_RT | CX_STOP | CX_BUS_B | CX_NOSIG);
if (NewBC->WaitInt(DATA_BC_RT)) //if (NewBC->WaitInt(DATA_BC_RT)) //РАСКОММЕНТИРОВАТЬ, ЕСЛИ ЕСТЬ ОУ
NewBC->closeAll(); // NewBC->closeAll();
} while ((tmkEvD.bcx.wResultX & (SX_ERR_MASK | SX_IB_MASK)) != 0); } 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(); NewBC->closeAll();
}*/ }
void MainWindow::rthandler() void MainWindow::rthandler()
{ {
qDebug() << "rt1"; qDebug() << "Entered the button start status mode";
QScopedPointer<RT_MIL> NewRT(new RT_MIL(0, 10)); bcrtFlag = 0;
qDebug() << "rt2"; for (int i = 0; i < wLen; i++)
set_item(DataTableDWord, 0, i, "%", false);
while (loopActive) QScopedPointer<RT_MIL> NewRT(new RT_MIL(0x0, RT_ADDR));
int i = 0;
while (i != 100)
{ {
//Wait for an interrupt i++;
switch (WaitForSingleObject(hRtEvent, 1000))
if(NewRT->GetEvent(1000))
{ {
case WAIT_OBJECT_0: switch (tmkEvD.nInt)
/* New message has arrived */
ResetEvent(hRtEvent);
do
{ {
/* Get interrupt data */ case 1:
tmkgetevd(&tmkEvD); qDebug() << "Cmd word arrived";
/* Check interrupt type */ filltablecmd("0", ( (RT_ADDR << 0xB) | tmkEvD.rt.wCmd ), false);
if (tmkEvD.nInt == 3) filltablestat(rtgetanswbits() | (RT_ADDR << 0xB) );
{ break;
wSubAddr = (tmkEvD.rt.wStatus >> 5) &0x1F;
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; wLen = tmkEvD.rt.wStatus & 0x1F;
if (wLen == 0) if (wLen == 0)
wLen = 32; wLen = 32;
if ((tmkEvD.rt.wStatus & RT_DIR_MASK) == RT_RECEIVE)
if (RT_RECEIVE == (tmkEvD.rt.wStatus & RT_DIR_MASK))
{ {
/* If we received some data then copy the data from Rx subaddres to */ if (tmkselect(NewRT->m_TmkIndex))
/* Tx subaddress and process flags */
if ((rtgetflag(RT_RECEIVE, wSubAddr) & RT_FLAG_MASK) == 0)
{ {
qDebug() << "Flag read error"; qDebug() << "tmkselect() error";
NewRT->closeAllrt();
} }
rtdefsubaddr(RT_RECEIVE, wSubAddr); rtdefsubaddr(RT_RECEIVE, wSubAddr);
rtgetblk(0, awBuf, wLen); rtgetblk(0, awBuf, wLen);
rtclrflag(); rtclrflag();
rtdefsubaddr(RT_TRANSMIT, wSubAddr); rtdefsubaddr(RT_TRANSMIT, wSubAddr);
rtputblk(0, awBuf, wLen); rtputblk(0, awBuf, wLen);
rtsetflag(); rtsetflag();
for (int i = 0; i < wLen; i++)
set_item(DataTableDWord, 0, i, intToHexString(awBuf[i]), false);
} }
}
} while (tmkEvD.nInt != 0); /* Loop while we have not processed all interrupts */
break; break;
}
case WAIT_TIMEOUT:
/* No new messages */
qDebug() << "No new messages";
break; break;
}
}
NewRT->closeAll();
}
default: void MainWindow::filltablestat(uint16_t statw)
qDebug() << "Interrupt wait error"; {
NewRT->closeAllrt(); QScopedPointer<StatusWord> 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<CommandWord> 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() MainWindow::~MainWindow()
{ {
qDebug() << "MainWindow destructor";
} }

View File

@@ -6,50 +6,51 @@
class MainWindow:public QMainWindow class MainWindow:public QMainWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
void init_mainwindowobj(); //the function of this class void init_mainwindowobj(); //the function of this class
void init_connections(); 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 explicit MainWindow(); //constructor
~MainWindow(); //destructor ~MainWindow(); //destructor
private: private:
void init_table();
void init_table_cmd();
void init_table_stat();
void init_table_dword();
void set_item(QTableWidget *pTable, int indRow, void set_item(QTableWidget *pTable, int indRow,
int indCol, QString data, bool editFlag); int indCol, QString data, bool editFlag);
public slots: public slots:
//void getlineedit();
//void sendcmdwrd(); void getlineedit();
void rthandler(); void rthandler();
void HexBinChange(); void HexBinChange();
private: private:
QWidget *Window_1 = new QWidget; QWidget *Window_1 = new QWidget;
QWidget *Window_2 = 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; QLabel *HexBinLabel;
QPushButton *HexBinButton; QPushButton *HexBinButton;
QLabel *CmdWordLabel; QTableWidget *DataTableCmd;
QLineEdit *CmdWordLineEdit; QTableWidget *DataTableStat;
QPushButton *EnterCmdWordButton; QTableWidget *DataTableDWord;
QTableWidget *DataTable;
protected:
void keyPressEvent(QKeyEvent *event) override
{
if (loopActive)
{
loopActive = false;
qDebug() << "Key pressed! Stopping loop.";
}
QWidget::keyPressEvent(event);
}
public:
bool loopActive = true;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

83
statwrd.cpp Normal file
View File

@@ -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";
}

70
statwrd.h Normal file
View File

@@ -0,0 +1,70 @@
#ifndef STATWRD_H
#define STATWRD_H
#include <QObject>
#include <QDebug>
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

59
testcmd.cpp Normal file
View File

@@ -0,0 +1,59 @@
/*#include <QTest>
#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
}
*/

33
testcmd.h Normal file
View File

@@ -0,0 +1,33 @@
/*#ifndef TESTCMD_H
#define TESTCMD_H
#include <QObject>
#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
*/

View File

@@ -1,11 +1,13 @@
/*#include <QTest> /*#include "testinfo.h"
#include "testinfo.h"
#include <windows.h>
#include "declarations.h"
#include <WDMTMKv2.cpp>
HANDLE hEvent; #ifndef MAINWININC
TTmkEventData tmkEvD; #define MAINWININC
#include "mainwindow.cpp"
#endif
HANDLE hEvent_t;
TTmkEventData tmkEvD_t;
void testInfo::init() void testInfo::init()
{ {
@@ -27,14 +29,14 @@ void testInfo::cleanupTestCase()
{ {
qDebug() << "TmkClose()"; qDebug() << "TmkClose()";
TmkClose(); TmkClose();
if (hEvent) if (hEvent_t)
CloseHandle(hEvent); CloseHandle(hEvent_t);
} }
void testInfo::testcreateevent() void testInfo::testcreateevent()
{ {
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); hEvent_t = CreateEvent(NULL, TRUE, FALSE, NULL);
QVERIFY(hEvent); QVERIFY(hEvent_t);
} }
void testInfo::testTmkOpen() void testInfo::testTmkOpen()
@@ -278,17 +280,17 @@ void testInfo::testrtputgetblk()
void testInfo::testgetInt() void testInfo::testgetInt()
{ {
bcreset(); bcreset();
tmkdefevent(hEvent, TRUE); tmkdefevent(hEvent_t, TRUE);
tmkgetevd(&tmkEvD); tmkgetevd(&tmkEvD_t);
QCOMPARE(tmkEvD.nInt, (int)(0)); QCOMPARE(tmkEvD_t.nInt, (int)(0));
bcdefbase(0); bcdefbase(0);
bcputw(0, 0xFFE1); bcputw(0, 0xFFE1);
bcstart(0, CTRL_C_BRCST); bcstart(0, CTRL_C_BRCST);
switch (WaitForSingleObject(hEvent, 1000)) switch (WaitForSingleObject(hEvent_t, 1000))
{ {
case WAIT_OBJECT_0: case WAIT_OBJECT_0:
ResetEvent(hEvent); ResetEvent(hEvent_t);
qDebug() << "We got interrupt!"; qDebug() << "We got interrupt!";
break; break;
@@ -301,10 +303,9 @@ void testInfo::testgetInt()
break; break;
} }
tmkgetevd(&tmkEvD); tmkgetevd(&tmkEvD_t);
QCOMPARE(tmkEvD.nInt, (int)(1)); QCOMPARE(tmkEvD_t.nInt, (int)(1));
tmkdefevent(0,TRUE); tmkdefevent(0,TRUE);
} }
*/ */

View File

@@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include <QTest> #include <QTest>
class testInfo:public QObject class testInfo:public QObject
{ {
Q_OBJECT Q_OBJECT

122
teststat.cpp Normal file
View File

@@ -0,0 +1,122 @@
/*#include <QTest>
#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));
}
*/

45
teststat.h Normal file
View File

@@ -0,0 +1,45 @@
/*#ifndef TESTSTAT_H
#define TESTSTAT_H
#include <QObject>
#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
*/