/* * 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 #include #include "myinclude.h" #include #include #include #include #include #include #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 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 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 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 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_ */