v2
This commit is contained in:
10
TestTa1.pro
10
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
|
||||
|
BIN
USB_TA_DRV.dll
BIN
USB_TA_DRV.dll
Binary file not shown.
BIN
USB_TA_VC2.dll
BIN
USB_TA_VC2.dll
Binary file not shown.
17
WDMTMKv2.cpp
17
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 <stdio.h>
|
||||
|
||||
#ifndef WINDOWSINC
|
||||
#define WINDOWSINC
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#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
|
||||
|
13
WDMTMKv2.h
13
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 <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <windows.h>
|
||||
|
||||
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
|
||||
|
151
bcmil.cpp
151
bcmil.cpp
@@ -1,16 +1,22 @@
|
||||
#include "declarations.h"
|
||||
#include <QDebug>
|
||||
#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();
|
||||
}
|
||||
|
17
bcmil.h
17
bcmil.h
@@ -1,8 +1,10 @@
|
||||
#ifndef BCMIL_H
|
||||
#define BCMIL_H
|
||||
|
||||
#include "declarations.h"
|
||||
#include "WDMTMKv2.h"
|
||||
#include <QObject>
|
||||
|
||||
#define TMK_DATA unsigned short
|
||||
typedef void *HANDLE;
|
||||
|
||||
class MIL:public QObject
|
||||
{
|
||||
@@ -10,17 +12,12 @@ class MIL: public QObject
|
||||
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
|
||||
@@ -36,7 +33,7 @@ class RT_MIL: public MIL
|
||||
public:
|
||||
|
||||
RT_MIL(int dev_indexi, unsigned short Addr);
|
||||
~RT_MIL(void);
|
||||
~RT_MIL();
|
||||
|
||||
protected:
|
||||
|
||||
|
10
cmdwrd.cpp
10
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";
|
||||
}
|
||||
|
1
cmdwrd.h
1
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);
|
||||
|
@@ -17,10 +17,7 @@
|
||||
#include <QLineEdit>
|
||||
#include <QString>
|
||||
#include <QScopedPointer>
|
||||
#include <QTest>
|
||||
#include <stdio.h>
|
||||
#include "cmdwrd.h"
|
||||
#include "bcmil.h"
|
||||
#include "windows.h"
|
||||
#include "statwrd.h"
|
||||
|
||||
#endif // DECLARATIONS_H
|
||||
|
4
main.cpp
4
main.cpp
@@ -1,5 +1,7 @@
|
||||
#include "mainwindow.h"
|
||||
//#include "testinfo.h"
|
||||
//#include "testcmd.h"
|
||||
//#include "teststat.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
506
mainwindow.cpp
506
mainwindow.cpp
@@ -1,24 +1,26 @@
|
||||
#include "mainwindow.h"
|
||||
//#include <WDMTMKv2.cpp>
|
||||
#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<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);
|
||||
return QString::number(number,16);
|
||||
}
|
||||
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()
|
||||
{
|
||||
@@ -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<BC_MIL> 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<RT_MIL> 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<RT_MIL> 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)
|
||||
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 ((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 */
|
||||
/* Tx subaddress and process flags */
|
||||
if ((rtgetflag(RT_RECEIVE, wSubAddr) & RT_FLAG_MASK) == 0)
|
||||
if (tmkselect(NewRT->m_TmkIndex))
|
||||
{
|
||||
qDebug() << "Flag read error";
|
||||
NewRT->closeAllrt();
|
||||
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);
|
||||
}
|
||||
}
|
||||
} while (tmkEvD.nInt != 0); /* Loop while we have not processed all interrupts */
|
||||
|
||||
break;
|
||||
|
||||
case WAIT_TIMEOUT:
|
||||
/* No new messages */
|
||||
qDebug() << "No new messages";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
NewRT->closeAll();
|
||||
}
|
||||
|
||||
default:
|
||||
qDebug() << "Interrupt wait error";
|
||||
NewRT->closeAllrt();
|
||||
void MainWindow::filltablestat(uint16_t statw)
|
||||
{
|
||||
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()
|
||||
{
|
||||
qDebug() << "MainWindow destructor";
|
||||
}
|
||||
|
47
mainwindow.h
47
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
|
||||
|
83
statwrd.cpp
Normal file
83
statwrd.cpp
Normal 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
70
statwrd.h
Normal 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
59
testcmd.cpp
Normal 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
33
testcmd.h
Normal 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
|
||||
*/
|
39
testinfo.cpp
39
testinfo.cpp
@@ -1,11 +1,13 @@
|
||||
/*#include <QTest>
|
||||
#include "testinfo.h"
|
||||
#include <windows.h>
|
||||
#include "declarations.h"
|
||||
#include <WDMTMKv2.cpp>
|
||||
/*#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);
|
||||
}
|
||||
*/
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
#include <QObject>
|
||||
#include <QTest>
|
||||
|
||||
|
||||
class testInfo:public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
122
teststat.cpp
Normal file
122
teststat.cpp
Normal 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
45
teststat.h
Normal 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
|
||||
*/
|
Reference in New Issue
Block a user