v2
This commit is contained in:
10
TestTa1.pro
10
TestTa1.pro
@@ -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
|
||||||
|
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 */
|
/* 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
|
||||||
|
13
WDMTMKv2.h
13
WDMTMKv2.h
@@ -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
151
bcmil.cpp
@@ -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();
|
|
||||||
}
|
|
||||||
|
17
bcmil.h
17
bcmil.h
@@ -1,8 +1,10 @@
|
|||||||
#ifndef BCMIL_H
|
#ifndef BCMIL_H
|
||||||
#define BCMIL_H
|
#define BCMIL_H
|
||||||
|
|
||||||
#include "declarations.h"
|
#include <QObject>
|
||||||
#include "WDMTMKv2.h"
|
|
||||||
|
#define TMK_DATA unsigned short
|
||||||
|
typedef void *HANDLE;
|
||||||
|
|
||||||
class MIL:public QObject
|
class MIL:public QObject
|
||||||
{
|
{
|
||||||
@@ -10,17 +12,12 @@ class MIL: public QObject
|
|||||||
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
|
||||||
@@ -36,7 +33,7 @@ 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:
|
||||||
|
|
||||||
|
10
cmdwrd.cpp
10
cmdwrd.cpp
@@ -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";
|
||||||
}
|
}
|
||||||
|
1
cmdwrd.h
1
cmdwrd.h
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
4
main.cpp
4
main.cpp
@@ -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();
|
||||||
}
|
}
|
||||||
|
506
mainwindow.cpp
506
mainwindow.cpp
@@ -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 */
|
|
||||||
tmkgetevd(&tmkEvD);
|
|
||||||
/* Check interrupt type */
|
|
||||||
if (tmkEvD.nInt == 3)
|
|
||||||
{
|
{
|
||||||
|
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;
|
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";
|
||||||
}
|
}
|
||||||
|
47
mainwindow.h
47
mainwindow.h
@@ -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
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 "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);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -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
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