132 lines
3.2 KiB
C++
132 lines
3.2 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2012 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Description du fichier si nécessaire.
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### YYYMMDD JFM
|
|
Verision d'origine.
|
|
|
|
### YYYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
|
|
#ifndef LAZERPROBE_H
|
|
#define LAZERPROBE_H
|
|
|
|
|
|
//N'activer qu'une seule de ces deux options... USE_CUSTOM_SERIAL_DRIVER ou USE_UART_HARDWARE_CTRL
|
|
#define USE_CUSTOM_SERIAL_DRIVER
|
|
#ifndef USE_CUSTOM_SERIAL_DRIVER
|
|
//#define USE_UART_HARDWARE_CTRL
|
|
#endif
|
|
|
|
|
|
#include "GlobalDefine.h"
|
|
#include "qextserialport.h"
|
|
#include "AbstractLazerProbe.h"
|
|
#include <QReadWriteLock>
|
|
#include <QElapsedTimer>
|
|
#ifdef USE_CUSTOM_SERIAL_DRIVER
|
|
#include <sys/types.h>
|
|
#include <termios.h>
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#endif
|
|
|
|
|
|
|
|
#define LAZER_PROBE_HEADER_MASK 0xFC
|
|
#define LAZER_PROBE_DATA_NIBBLE_MASK 0x03
|
|
|
|
|
|
class CLazerProbe : public QObject, public CAbstractLazerProbe
|
|
{
|
|
Q_OBJECT
|
|
|
|
enum eLazerProbeRxStates
|
|
{
|
|
LP_WAIT_HEADER1_STATE,
|
|
LP_GET_DATA1_STATE,
|
|
LP_GET_DATA2_STATE,
|
|
LP_CHECK_HEADER2_STATE,
|
|
LP_IGNORE_DATA_STATE,
|
|
LP_MAX_STATE
|
|
};
|
|
|
|
public:
|
|
CLazerProbe(unsigned int ProbeID, unsigned int ProbeType);
|
|
~CLazerProbe();
|
|
unsigned int OpenPort(QString PortName);
|
|
unsigned int GetType(){return mProbeType;}
|
|
QString GetPortName(){return mSerialPortName;}
|
|
unsigned int GetID(){return mProbeID;}
|
|
unsigned int StartAcquisition();
|
|
unsigned int StopAcquisition();
|
|
unsigned int GetLastData();
|
|
unsigned int FlushProbeData();
|
|
bool IsProbeAlive();
|
|
void QuitProbeThread();
|
|
|
|
|
|
private:
|
|
unsigned char mHeader1,mDataNibble,mData1,mData2,mHeader2;
|
|
unsigned int mLPCurData;
|
|
unsigned int mLazerProbeRxState;
|
|
unsigned int mProbeType;
|
|
unsigned int mProbeID;
|
|
bool mRunThread;
|
|
|
|
QString mSerialPortName;
|
|
bool mIsAcquisitioning;
|
|
|
|
uid_t euid, ruid;
|
|
|
|
QReadWriteLock mRdWrLock;
|
|
|
|
|
|
|
|
QextSerialPort *mSerialPort;
|
|
QElapsedTimer mDataIntervalTimer;
|
|
bool mIsLazerProbeAlive;
|
|
|
|
unsigned int LPRxStateMachine(unsigned char newbyte);
|
|
unsigned int LPAnalyseNewData();
|
|
unsigned int SetUID();
|
|
unsigned int ResetUID();
|
|
|
|
#ifdef USE_CUSTOM_SERIAL_DRIVER
|
|
int fd;
|
|
int mUartBaseAddress;
|
|
#endif
|
|
|
|
public slots:
|
|
void ProbeDataAvailable();
|
|
|
|
signals:
|
|
void NewProbeData(unsigned int,unsigned int);
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
#endif // LAZERPROBE_H
|