forked from GerhardHoffmann/DCLibraries
135 lines
4.2 KiB
C++
135 lines
4.2 KiB
C++
|
|
#ifndef SERIAL_FRAME_H
|
|
#define SERIAL_FRAME_H
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QTimer>
|
|
#include "tslib.h"
|
|
#include "com.h"
|
|
#include "interfaces.h"
|
|
|
|
|
|
/*
|
|
get's OUT-data from datif,
|
|
get's IN-data from datif
|
|
get's send command from datif
|
|
makes frame and calls: isSerialFree(), setSendData(),
|
|
if not free retrigger datif sending period (normally 500ms or 50ms for direct cmds)
|
|
|
|
with control-signal: gotReceiveData():
|
|
getRecData();
|
|
send results to diag window/line
|
|
send IN-data to datif
|
|
*/
|
|
|
|
#define FRAME_DATALEN 64
|
|
#define FRAME_MAXLEN FRAME_DATALEN+20
|
|
#define BL_DATA_LEN 200
|
|
|
|
#define DATALEN_SEND_FAST 4
|
|
#define DATALEN_SEND_LONG 64
|
|
#define HEADERLEN_SEND 4
|
|
#define TELEGRAMLEN_SEND_FAST 12
|
|
#define TELEGRAMLEN_SEND_LONG 70
|
|
#define STARTSIGN_SEND_FAST 0x3F
|
|
#define STARTSIGN_SEND_LONG 0x3D
|
|
|
|
#define DATALEN_RECEIVE_FAST 8
|
|
#define DATALEN_RECEIVE_LONG 64
|
|
#define HEADERLEN_RECEIVE 2
|
|
#define TELEGRAMLEN_RECEIVE_FAST 12
|
|
#define TELEGRAMLEN_RECEIVE_LONG 68
|
|
#define STARTSIGN_RECEIVE_FAST 0x5F
|
|
#define STARTSIGN_RECEIVE_LONG 0x5D
|
|
|
|
|
|
class T_prot : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
// Dateneingang von Datif:
|
|
uint8_t SendDataValid; // bit1: WR OK bit 2: RD OK
|
|
uint16_t slaveAddr;
|
|
|
|
uint16_t WriteCommand;
|
|
uint16_t WriteAddr;
|
|
uint8_t WrDataLength;
|
|
uint8_t ui8OutputData[FRAME_DATALEN];
|
|
char chOut_Data[FRAME_DATALEN];
|
|
uint8_t kindOfData; // 0: binaries, 1:text
|
|
|
|
uint16_t ReadCommand;
|
|
//uint16_t ReadAddr;
|
|
uint16_t reserve;
|
|
|
|
// Ausgangs-Daten, werden vom Datif geholt:
|
|
// nur wenn CommandState und readState OK
|
|
uint8_t RecSlaveAddr;
|
|
bool INdataValid; // nur true wenn CommandState OK und readState OK
|
|
uint16_t readSource; // diese (Eingangs-)Daten stehen im Puffer
|
|
uint16_t readAddress; // von dieser Adr wurden die Daten gelesen
|
|
//uint8_t lastWakeSrc; // falls der Slave den Master geweckt hat
|
|
uint8_t RdDataLength;
|
|
uint8_t InputData[FRAME_DATALEN];
|
|
|
|
// 11.11.2020:
|
|
uint8_t BLsendDataLength;
|
|
uint8_t ui8BLsendData[BL_DATA_LEN];
|
|
uint8_t prot_storeResult;
|
|
|
|
T_com *mySerialPort;
|
|
|
|
void startPacking(void);
|
|
void startFastPacking(void);
|
|
uint8_t FramecheckInData(uint8_t *Inbuf, uint16_t LL);
|
|
uint8_t FastCheckInData(uint8_t *Inbuf, uint16_t LL);
|
|
|
|
uint8_t CheckInResult(uint8_t *Inbuf);
|
|
|
|
uint8_t ShowFastInData(uint8_t *recBuffer);
|
|
uint8_t ShowInData(uint8_t *recBuffer); // was CheckInData
|
|
void setRecLen(uint16_t WriteCmd);
|
|
|
|
private slots:
|
|
void analyseRecData(void);
|
|
|
|
public:
|
|
T_prot();
|
|
bool isPortOpen(void);
|
|
bool isSerialFree(void);
|
|
void setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDatLen, uint8_t *data);
|
|
void setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr);
|
|
void setUserWriteData(uint16_t WriteCmd);
|
|
void setUserWriteText(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDatLen, char *data);
|
|
|
|
void setUserWrite1DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val);
|
|
void setUserWrite2DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val0, uint8_t val1);
|
|
|
|
void setUserReadData( uint16_t ReadCmd);
|
|
|
|
void setBLsendData( uint8_t len, uint8_t *buf);
|
|
|
|
void receiveFixLen(int64_t nrOfbytesToReceive);
|
|
|
|
void sendUserData(uint16_t slaveAdr);
|
|
|
|
uint8_t ifDataReceived();
|
|
// return: 0xFF: result unknown 0=OK
|
|
// 1= wrong length 2=wrong start sign 5= wrong crc
|
|
// 6= slave: master cmd was wrong 7: slave: could not write/read data
|
|
|
|
bool getReceivedInData(uint8_t *SlavAddr, uint16_t *readSrc, uint16_t *readAddr,
|
|
uint8_t *RdDlen, uint8_t *receivedData);
|
|
// retval: data valid, only one time true
|
|
|
|
|
|
signals:
|
|
void framerecieved(); //bool gotINdata);
|
|
void rawDataRecieved();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // T_prot_H
|