454 lines
13 KiB
C++
454 lines
13 KiB
C++
/*
|
|
* DevOp.h
|
|
*
|
|
* Created on: Jun 25, 2013
|
|
* Author: yiyu
|
|
* QQ:1036184468
|
|
* Descriptoin:
|
|
|
|
*/
|
|
|
|
#ifndef DEVOP_H_
|
|
#define DEVOP_H_
|
|
|
|
#define JETV1 1
|
|
#define JETV2 2
|
|
#define JETV3 3 // EP3C10F144
|
|
#define JETV23 4 // V5,V4主板编号均为4; V6没有正式投入使用
|
|
#define JETV7 7 // EP4CE15F144, ARM 335X
|
|
#define PRODUCT_VERSION(ver) ((ver>>13) & 0x7)
|
|
|
|
class SysPara;
|
|
|
|
#include <stdio.h>
|
|
#include <QString>
|
|
#include "myinclude.h"
|
|
#include <QObject>
|
|
#include <QQueue>
|
|
#include <QMetaType>
|
|
#include <QThread>
|
|
#include <QMutex>
|
|
#include <QReadWriteLock>
|
|
|
|
#ifdef UART2
|
|
#include "posix_qextserialport.h"
|
|
#endif
|
|
#ifdef UART1
|
|
#include "posix_qextserialport.h"
|
|
#endif
|
|
#define DisTraceMsg() printf("###############TRACE,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
|
#define DisWarnmsg() printf("~~~~~~~~~~~~~~~WARN,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
|
#define DisErrorMsg() printf("!!!!!!!!!!!!!!!ERROR! ,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
|
|
|
#define PRINT_CTRL_STOP 0
|
|
#define PRINT_CTRL_START 1
|
|
#define PRINT_CTRL_PAUSE 2
|
|
#define PRINT_CTRL_DAC_DISABLE 3
|
|
#define PRINT_CTRL_DAC_ENABLE 4
|
|
#define PRINT_CTRL_STOPSYNCNT 5
|
|
|
|
|
|
#define MAX_FPGA_DAC_VALUE_FOR_NEW ((1<<12)*95/100) //由于硬件原因,当DAC大于一定值后,电压不再变化,所以做一下限制
|
|
#define MAX_FPGA_DAC_VALUE_FOR_V1 (255) //老板子的最大值到256
|
|
#define MAX_FPGA_DAC_VALUE ((PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1)?MAX_FPGA_DAC_VALUE_FOR_V1:MAX_FPGA_DAC_VALUE_FOR_NEW)
|
|
|
|
#define MAX_POINT_DISTANCE_ADJUST_VAL (1<<10) //点距微调的最大值
|
|
|
|
#define MAX_MOTOR_RUN_CURRENT 600
|
|
#define MIN_MOTOR_RUN_CURRENT 80
|
|
|
|
#define MAX_RECLAIM_BLOCK_CNT 5 //500ms
|
|
|
|
#define MAX_RELEASE_VALVE_DELAY_CNT 4
|
|
/*所有警告都是高电平警告*/
|
|
#define WARN_STATUS_INK_SWINT (1<<7) /*墨线开头,来自喷头,必须开的时候才能打印,关的时候为1,开的时候为0*/
|
|
#define WARN_STATUS_POWER_MON (1<<6) //高压报警
|
|
#define WARN_STATUS_RECYCLE_FAULT (1<<5) //高电平表示有故障
|
|
#define WARN_STATUS_INK_WARN (1<<4)
|
|
#define WARN_STATUS_SOLV_WARN (1<<3)
|
|
#define WARN_STATUS_SUMP_WARN (1<<2) //墨水渗漏
|
|
#define WARN_STATUS_HDINT (1<<1) /*喷头盖,盖上为0,否则为1,必须盖上才能打印,电磁铁有正反面*/
|
|
#define WARN_STATUS_VISCOTITY_MEASURE_READY (1<<0) // 球已经到上位等灯
|
|
|
|
|
|
#define FPGA_SYS_HZ 100000000
|
|
|
|
#define MAX_WR_MEM_SIZE (1<<16) //写空间最大地址范围
|
|
#define MAX_WR_MEM_SIZE_MASK (MAX_WR_MEM_SIZE - 1)
|
|
#define MAX_RD_MEM_SIZE (1<<9) //读空间最大地址范围
|
|
#define MAX_RD_MEM_SIZE_MASK (MAX_RD_MEM_SIZE - 1)
|
|
|
|
/* am335x core board control pwm output */
|
|
#define VISCO_PUMP_REQUEST "echo 1 > /sys/class/pwm/ecap.2/request"
|
|
#define VISCO_PUMP_RELEASE "echo 0 > /sys/class/pwm/ecap.2/request"
|
|
#define VISCO_PUMP_RUN "echo 1 > /sys/class/pwm/ecap.2/run"
|
|
#define VISCO_PUMP_STOP "echo 0 > /sys/class/pwm/ecap.2/run"
|
|
#define VISCO_PUMP_50Hz "echo 50 > /sys/class/pwm/ecap.2/period_freq"
|
|
#define VISCO_PUMP_50P "echo 50 > /sys/class/pwm/ecap.2/duty_percent"
|
|
#define VISCO_PUMP_HIGH "echo 1 > /sys/class/pwm/ecap.2/polarity"
|
|
#define VISCO_PUMP_LOW "echo 0 > /sys/class/pwm/ecap.2/polarity"
|
|
|
|
#define SUCTION_PUMP_REQUEST "echo 1 > /sys/class/pwm/ehrpwm.0:1/request"
|
|
#define SUCTION_PUMP_RELEASE "echo 0 > /sys/class/pwm/ehrpwm.0:1/request"
|
|
#define SUCTION_PUMP_RUN "echo 1 > /sys/class/pwm/ehrpwm.0:1/run"
|
|
#define SUCTION_PUMP_STOP "echo 0 > /sys/class/pwm/ehrpwm.0:1/run"
|
|
#define SUCTION_PUMP_HIGH "echo 1 > /sys/class/pwm/ehrpwm.0:1/polarity"
|
|
#define SUCTION_PUMP_LOW "echo 0 > /sys/class/pwm/ehrpwm.0:1/polarity"
|
|
#define SUCTION_PUMP_90P "echo 90 > /sys/class/pwm/ehrpwm.0:1/duty_percent"
|
|
#define SUCTION_PUMP_12000Hz "echo 12000 > /sys/class/pwm/ehrpwm.0:1/period_freq"
|
|
|
|
#ifdef __ADC_INPUT__
|
|
#define BOART_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage4_raw"
|
|
#define INK_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage5_raw"
|
|
#define REVERSE_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage6_raw"
|
|
#endif
|
|
|
|
#ifdef UART2
|
|
class UartThread;
|
|
typedef struct {
|
|
char mode;
|
|
int addr;
|
|
int len;
|
|
char flag_m;
|
|
QByteArray Buf;
|
|
}rec_cmd_t;
|
|
|
|
#endif
|
|
|
|
#ifdef UART1
|
|
class UartThread1;
|
|
typedef struct {
|
|
char mode;
|
|
int addr;
|
|
int len;
|
|
char flag_m;
|
|
QByteArray Buf;
|
|
}rec_cmd_t1;
|
|
|
|
#endif
|
|
|
|
/*
|
|
* 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类
|
|
* */
|
|
class DevOp : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public :
|
|
DevOp(SysPara * sysPara);
|
|
~DevOp();
|
|
|
|
void set_totalSynPulseNum(bool wren);// 设置可变长度
|
|
void TTYS0ToConsole();
|
|
void WriteMoterPump(void);
|
|
void controlReleaseValve(bool openFlag);
|
|
void controlMixValve(bool openFlag);
|
|
void controlInkValve(bool openFlag); //控制墨线,即供墨阀
|
|
void controlCycleValve(bool openFlag);
|
|
void controlCompressPump(bool openFlag);
|
|
void controlViscosityPump(bool openFlag);
|
|
void controlMainInkPump(bool openFlag);
|
|
void controlReclaimPump(bool openFlag,bool fullSpeed);
|
|
void controlReclaimPump2();
|
|
void controlInkValvePWM(bool openFlag);
|
|
void controlInkValvePWM2();
|
|
void controlHeater(bool openFlag);
|
|
void controlBeeper(bool openFlag);
|
|
|
|
void controlReclaimTankOpen(bool enableFlag);
|
|
void controlReclaimTankClose(bool enableFlag);
|
|
|
|
void powerOff(void);
|
|
|
|
bool isReleaseValveOpen();
|
|
bool isMixValveOpen();
|
|
bool isInkValveOpen();
|
|
bool isInkValveOpen1();
|
|
bool isCycleValveOpen();
|
|
bool isCompressPumpOpen();
|
|
bool isViscosityPumpOpen();
|
|
bool isMainInkPumpOpen();
|
|
bool isReclaimPumpOpen();
|
|
|
|
bool isReclaimTankOpenEnable();
|
|
bool isReclaimTankCloseEnable();
|
|
bool isBeeperEnable();
|
|
bool isHearterEnable();
|
|
|
|
int writeFpgaPrintPara(bool ignoreWarn = false);
|
|
void readFgaStatus(void);
|
|
void writeDacValue2Fpga();
|
|
|
|
void printCtrl(int cmd);
|
|
void ReadCnt1GroupStatus(void);
|
|
void writeCnt1GroupSetting(bool bCntByGroupEnable);
|
|
void writeFpgaCalandar(bool Enable);
|
|
void writeFpgaVariCtrl();
|
|
void readCalandarDat();
|
|
void resumeFault();
|
|
void highVoltageCtrl(int val);
|
|
void maxHighVoltageDACCtrl(int val);
|
|
void setPhaseByHand(int val);
|
|
void readPhaseDetectHighTm();
|
|
void setPhaseDetectVoltageDutyCycle(int duty);
|
|
void setBlickLightPeriod(int value);
|
|
void setOscillatorVoltage(int value);
|
|
void setDivideRatio(int value);
|
|
void setLastLineEndPointFixedValue(int value);
|
|
// void checkAuthorization(QString str);
|
|
|
|
void mainInkCtrl();
|
|
void pumpValveCtrl(int viscosityAdjustByTemp=0);
|
|
void clearProductCnt(unsigned int mode);
|
|
unsigned readFpgaVersionNum(void);
|
|
void fpgaWr(int addr,unsigned char*dat,int len);
|
|
void fpgaRd(int addr,unsigned char*dat,int len);
|
|
void fpgaWrD(int addr,unsigned int dat,int len);
|
|
void fpgaResetWarning(char mode);
|
|
bool fpgaDevOpenFlag;
|
|
|
|
unsigned char memWrMap[MAX_WR_MEM_SIZE];
|
|
unsigned char memRdMap[MAX_RD_MEM_SIZE];
|
|
unsigned char color_flag;
|
|
void controlRedLight(bool openFlag);
|
|
void controlGreenLight(bool openFlag);
|
|
void controlYellowLight(bool openFlag);
|
|
void controlFan1(bool openFlag);
|
|
void controlFan2(bool openFlag);
|
|
|
|
bool isGreenLightEnable();
|
|
bool isYellowLightEnable();
|
|
bool isRedLightEnable();
|
|
void readbuilDat();
|
|
void readPrintDataXor();
|
|
void readSyncCounterAtZero();
|
|
void printCtrl2(int cmd);
|
|
void ReadSomeDataForLostPrint(void);
|
|
|
|
#ifdef __STC_POWER__
|
|
int Heartbeat(char bPowerOn);
|
|
int setWakeUpTimer(char wakeUpTime_day);
|
|
int getPowerSource(void);
|
|
Posix_QextSerialPort *comForPower;
|
|
void comForPower_init();
|
|
#endif
|
|
#ifdef __RFID_CARD
|
|
Posix_QextSerialPort *comForRFID;
|
|
void comForRFID_init();
|
|
int comReadRFID_data();
|
|
int comWriteRFID_data();
|
|
int setRFIDCarKey(void);
|
|
int setRFIDReaderKey(int);
|
|
int setRFIDReaderOriginalKey(void);
|
|
int setRFIDReaderWorkMode(void);
|
|
int receiveReadRFID_data(void);
|
|
int queryReadRFID_address(void);
|
|
QString strRevdata;
|
|
bool noticeICReaderError;
|
|
bool setICReaderModeFlag;
|
|
uint checkCardIntervalTime;
|
|
QReadWriteLock CardDataRwLock;
|
|
#endif
|
|
|
|
#ifdef __ADC_INPUT__
|
|
qint8 GetTemp(QString ainFile, quint8 *pTemp);
|
|
#endif
|
|
void Read_RanddomFromFpga(); // 读FPGARANDFIFO
|
|
void RandTxtBakup(char ok);
|
|
// 上海外接屏功能
|
|
int BigDisp(unsigned char Module[], unsigned char Wirediameter[]);
|
|
int RecDim();//unsigned char buf[], unsigned char Dim[]);
|
|
int SmallDisp(unsigned char Module[], unsigned char Wirediameter[]);
|
|
void DatToDisp(char FileName[], bool big);
|
|
void DatToDisp2();
|
|
void showData(QByteArray dat);
|
|
void uart2Init();
|
|
void writeDacValue2Fpga_No72NewVoltData();
|
|
|
|
#ifdef UART2
|
|
Posix_QextSerialPort *myCom;
|
|
// MySerialPort * myserialport;
|
|
QByteArray recData;
|
|
QQueue<QByteArray> recQueue;
|
|
int recLen;
|
|
void stopReceiving();
|
|
bool isReceivingEnable() const;
|
|
void disableReceiving();
|
|
void enableReceiving();
|
|
|
|
uchar sendData(const QByteArray &data);
|
|
|
|
void stopSending();
|
|
bool isSendingEnable() const;
|
|
void disableSending();
|
|
void enableSending();
|
|
uchar uartThreadStart();
|
|
|
|
//void printCtrl2(int cmd);
|
|
int recUart2();
|
|
|
|
public slots:
|
|
void readCom(char mode,QByteArray recData,int addr);
|
|
void sendCom(QString s);
|
|
void sendCom(char *buf, int len);
|
|
|
|
signals:
|
|
void dataReceived(char,const QByteArray &dataReceived,int);
|
|
#endif
|
|
|
|
#ifdef UART1
|
|
Posix_QextSerialPort *myCom1;
|
|
// MySerialPort * myserialport;
|
|
QByteArray recData1;
|
|
QQueue<QByteArray> recQueue1;
|
|
int recLen1;
|
|
void stopReceiving();
|
|
bool isReceivingEnable() const;
|
|
void disableReceiving();
|
|
void enableReceiving();
|
|
|
|
uchar sendData(const QByteArray &data);
|
|
|
|
void stopSending();
|
|
bool isSendingEnable() const;
|
|
void disableSending();
|
|
void enableSending();
|
|
uchar uartThreadStart();
|
|
//void printCtrl2(int cmd);
|
|
//void TTYS0ToConsole();
|
|
QByteArray data,dat_r,rec_r;
|
|
QByteArray byteArray;
|
|
rec_cmd_t1 rec_cmd;
|
|
|
|
public slots:
|
|
void readCom(char mode,QByteArray recData,int addr);
|
|
void sendCom(QString s);
|
|
void sendCom(char *buf, int len);
|
|
void readUart1();
|
|
signals:
|
|
void dataReceived(char,const QByteArray &dataReceived,int);
|
|
#endif
|
|
|
|
private:
|
|
int WdgttyUsb0Cnt;
|
|
bool releaseValveOpenFlag;
|
|
bool mixValveFlag;
|
|
bool inkValveOpenFlag;
|
|
bool inkValveOpenFlag1;
|
|
bool cycleValveOpenFlag;
|
|
bool compressPumpOpenFlag;
|
|
bool viscosityPumpOpenFlag;
|
|
bool mainInkPumpOpenFlag;
|
|
bool reclaimPumpOpenFlag;
|
|
|
|
bool reclaimTankOpenEnableFlag;
|
|
bool reclaimTankCloseEnableFlag;
|
|
bool beeperOnFlag;
|
|
|
|
bool RedLightOnFlag;
|
|
bool GreenLightOnFlag;
|
|
bool YellowLightOnFlag;
|
|
|
|
bool heaterOnFlag;
|
|
int com2;
|
|
int pwm_sp;
|
|
int pwm_fd;
|
|
int Interrupt_fd;
|
|
int iocontrl;
|
|
int DAdataout;
|
|
int pwm_ink;
|
|
int adc_fd;
|
|
#ifdef __VX_OSC_VOL__
|
|
qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整
|
|
#endif
|
|
SysPara *sysPara;
|
|
|
|
|
|
unsigned int fpgaRdD(int addr,int len);
|
|
|
|
// 0xA451--- 为什么ARM的顺序相反呢?
|
|
typedef struct {
|
|
unsigned int varDigitalNum:4; // 数字的个数
|
|
unsigned int charRamBaseAddr:12; // 基址
|
|
unsigned int colOffset:16; // 列偏移
|
|
unsigned int horizonWidth:9;//字模宽度
|
|
unsigned int verticalOffset:6; // 行偏移
|
|
unsigned int charRowNum:6; // 每个字符占行个数
|
|
unsigned int charColNum:6; // 每个字符占列个数
|
|
unsigned int varTypeSel:4;
|
|
unsigned int dummy:1;
|
|
}reg_var_print_ctrl_t;
|
|
|
|
#ifdef UART2
|
|
UartThread *uartThread;
|
|
bool sendingEnable;
|
|
bool receivingEnable;
|
|
// Variables to restore the previous state to a reopening of the SerialPort
|
|
//bool closeCalled;
|
|
//bool saveStateSendingEnable;
|
|
//bool saveStateReceivingEnable;
|
|
bool saveStateReceiveData;
|
|
#endif
|
|
|
|
|
|
#ifdef UART1
|
|
UartThread1 *uartThread;
|
|
bool sendingEnable;
|
|
bool receivingEnable;
|
|
// Variables to restore the previous state to a reopening of the SerialPort
|
|
//bool closeCalled;
|
|
//bool saveStateSendingEnable;
|
|
//bool saveStateReceivingEnable;
|
|
bool saveStateReceiveData;
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
#ifdef UART2
|
|
class UartThread : public QThread
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UartThread(Posix_QextSerialPort &adrPort);
|
|
~UartThread();
|
|
void stopReceiving();
|
|
QQueue<QByteArray> dataToSend;
|
|
QMutex mutexSend;
|
|
void stopSending();
|
|
void addDataToSend(const QByteArray &dataToAdd);
|
|
protected:
|
|
void run();
|
|
signals:
|
|
void dataReceived(char,const QByteArray &dataReceived,int);
|
|
private :
|
|
Posix_QextSerialPort &port;
|
|
QMutex mutexReceive;
|
|
bool stopped;
|
|
rec_cmd_t rec_cmd;
|
|
};
|
|
#endif
|
|
#ifdef UART1
|
|
class UartThread1 : public QThread
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
UartThread1(Posix_QextSerialPort &adrPort);
|
|
~UartThread1();
|
|
void stopReceiving();
|
|
QQueue<QByteArray> dataToSend;
|
|
QMutex mutexSend;
|
|
void stopSending();
|
|
void addDataToSend(const QByteArray &dataToAdd);
|
|
protected:
|
|
void run();
|
|
signals:
|
|
void dataReceived(char,const QByteArray &dataReceived,int);
|
|
private :
|
|
Posix_QextSerialPort &port;
|
|
QMutex mutexReceive;
|
|
bool stopped;
|
|
rec_cmd_t1 rec_cmd;
|
|
};
|
|
#endif
|
|
#endif /* DEVOP_H_ */
|