/* * DevOp.h * * Created on: Jun 25, 2013 * Author: yiyu * QQ:1036184468 * Descriptoin: */ #ifndef DEVOP_H_ #define DEVOP_H_ /************以前的硬件版本,跟VX5版本号冲突,取消 #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 #include #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_FPGA_DAC_VALUE 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 PRINT_CTRL_ADDR_BASE 0xa400 #define PRINT_DIGITAL_CHAR_BASE_ADDR (0xe000) #define PRINT_DIGITAL_CHAR_WIDTH_TABLE_BASE_ADDR 0xf000 #define WRITE_CALENDAR_DAT_ADDR (0xb100) #define RECYCLE_SLOT_STOP 0x1 #define RECYCLE_SLOT_CLOSE 0x2 #define RECYCLE_SLOT_OPEN 0x0 #define PRINT_START_STOP_CTRL (PRINT_CTRL_ADDR_BASE + 0x40) #define PRINT_RESET_PRODUCT_CNT (PRINT_CTRL_ADDR_BASE + 0x41) #define RECYCLE_SLOT_CTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x42) #define RESUME_FAULT_ADDR (PRINT_CTRL_ADDR_BASE + 0x43) #define VAR_CNT_ADDR (PRINT_CTRL_ADDR_BASE + 0x50) #define VAR_CTRL_REG_ADDR (PRINT_CTRL_ADDR_BASE + 0x51) #define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x59) //#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x5a) #define WRITE_CNT1GROUP_COUNT 0xB13E #define WRITE_CNT1GROUP_NUM 0xB13F #define WRITE_CNT1GROUP_SETTING 0xB140 #define READ_CNT1GROUP_CURR_LOOP 0x0190 #define READ_CNT1GROUP_CURR_INDEX 0x0194 #define FPGA_STATUS_BASE_ADDR 0x0000 #define FPGA_VERSOIN_NUM (FPGA_STATUS_BASE_ADDR + 0xfe) #define READ_BUILD_DAT (FPGA_STATUS_BASE_ADDR + 0xf0) #define READ_PRINTDATA_XOR (FPGA_STATUS_BASE_ADDR + 0xf2) #define READ_SYNC_COUNTER (FPGA_STATUS_BASE_ADDR + 0xf4) #define PHASE_DETECT_HIGH_VOLTAGE_TM 0x100 #define READ_CALENDAR_DAT_ADDR 0x180 #define READ_RAND_FIFO_ADDR 0x200 // 读FPGA的随机码FIFO #define ROW_PRINT_SEQNENCE_ADDR 0xb200 //行扫描顺序 #define DAC_TABLE_ADDR 0xb280 //每一个行点对应的DAC值 #define NOT_GAP_DAC_TABLE_ADDR 0xb380 //每一个不隔点对应的DAC值 #define FULL_COL_DAC_TABLE_ADDR 0xb480 //每一个不隔点对应的DAC值 #define MATCH_FULL_DAC_TABLE_ADDR 0xB500 // 匹配满列 DAC表 起始地址 #define MATCH_1_DAC_TABLE_ADDR 0xB600 // 匹配单点 DAC表 起始地址 #define MATCH_2_DAC_TABLE_ADDR 0xB700 // 匹配两点 DAC表 起始地址 #define MATCH_3_DAC_TABLE_ADDR 0xB800 // 匹配三点 DAC表 起始地址 #define MATCH_4_DAC_TABLE_ADDR 0xB900 // 匹配四点 DAC表 起始地址 #define MATCH_5_DAC_TABLE_ADDR 0xBA00 // 匹配五点 DAC表 起始地址 #define MATCH_G1_DAC_TABLE_ADDR 0xBC00 // 匹配空一点 DAC表 起始地址 #define MATCH_G2_DAC_TABLE_ADDR 0xBC80 // 匹配空两点 DAC表 起始地址 #define MATCH_G3_DAC_TABLE_ADDR 0xBD00 // 匹配空三点 DAC表 起始地址 #define MATCH_G4_DAC_TABLE_ADDR 0xBD80 // 匹配空四点 DAC表 起始地址 #define MATCH_G5_DAC_TABLE_ADDR 0xBE00 // 匹配空五点 DAC表 起始地址 #define MATCH_G6_DAC_TABLE_ADDR 0xBE80 // 匹配空六点 DAC表 起始地址 #define MATCH_P1_DAC_TABLE_ADDR 0xBF00 // 匹配预备一 DAC表 起始地址 #define MATCH_P2_DAC_TABLE_ADDR 0xBF80 // 匹配预备二 DAC表 起始地址 #define MATCH_C_DAC_TABLE_ADDR 0xC000 // 匹配复杂 DAC表 起始地址 #define WRITE_COUNTER3_ADDR (0xb150) #define WRITE_COUNTER4_ADDR (0xb164) //#define READ_CNT3_CURVALUE_ADDR 0x01b4 #define READ_CNT3_CURVALUE_ADDR 0x1834 #define LOCADDR '1' #define NOLEDLIGHT 0x10 #define REDLIGHTCODE 0X11 #define YELLOWLIGHTCODE 0X13 #define GREENLIGHTCODE 0X12 #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" // 墨点飞行补偿控制写地址,具体引用于 DevOp::writeFlightCompCtrl #define FLIGHT_COMP_CTRL_BASE 0xA4A0 // 时延模式、同步器模式 下,重复打印的次数 ,使能标记地址 #define MAX_REPEAT_COUNT_DELAY_SYNC 0xA482 /* * 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类 * */ class DevOp : public QObject { Q_OBJECT public : DevOp(SysPara * sysPara); ~DevOp(); void set_totalSynPulseNum(bool wren);// 设置可变长度 void WriteMoterPump(); void controlReleaseValve(bool openFlag); void controlMixValve(bool openFlag); /** * @brief controlInkValve 控制墨线,即供墨阀 * @param openFlag */ void controlInkValve(bool openFlag); /** * @brief controlInkValvePWMSTM32 * @param PWMPulse */ void controlInkValvePWMSTM32(int PWMPulse); /** * @brief controlCycleValve 控制循环阀开关(墨水阀、主墨泵) * @param openFlag */ void controlCycleValve(bool openFlag); void controlCompressPump(bool openFlag); void controlViscosityPump(bool openFlag); void controlMainInkPump(bool openFlag); void setHighVoltageAmplitudetoSTM32(); 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 isHighVoltageOpen(); bool isReclaimTankOpenEnable(); bool isReclaimTankCloseEnable(); bool isBeeperEnable(); bool isHearterEnable(); int writeFpgaPrintPara(bool ignoreWarn = false); void readFgaStatus(void); void writeDacValue2Fpga_No73(); void printCtrl(int cmd); void ReadCnt1GroupStatus(void); void writeCnt1GroupSetting(bool bCntByGroupEnable); void writeFpgaCalandar(bool Enable); /** * @brief 写入计数器变量控制参数 * 这是旧的,用于等宽字体的计数器变量控制 * */ void writeFpgaVariCtrl(); /** * @brief 写入计数器变量控制,此版本支持非等宽字体的变量控制 * */ void writeFpgaVariCtrlv2(); 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 mainInkCtrl(); void pumpValveCtrl(int viscosityAdjustByTemp=0); void clearProductCnt(unsigned int mode); unsigned int 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 fpgaWrD2(int addr,unsigned char*dat,int len); void fpgaResetWarning(char mode); void sendSTM32SetPowerOnTimer(quint16); void DACValueWithVoltageAdj(); void writeDataToFpga_No67HighSpeedMode(Voltage_Version version,bool flag); bool fpgaDevOpenFlag; void stm32Rd(int addr,unsigned char*dat,int len); void stm32Wr(int addr,unsigned char*dat,int len); 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); void readSTM32Version(void); void readSTM32Time(void); bool stopSendDataFPGA; bool stopSendDataSTM32; void Read_RanddomFromFpga(); // 读FPGARANDFIFO void RandTxtBakup(char ok); void showData(QByteArray dat); void writeDacValue2Fpga_No72NewVoltData(); /** * @brief 写入飞行时间补偿控制 * * @param enb 启用或关闭飞行时间补偿控制 * @param enbAccelDecelPredict 启用或关闭加减速预测 * @param flightCompWindow 补偿统计窗口,仅在 enb 为 true 有意义 */ void writeFlightCompCtrl(bool enb, bool enbAccelDecelPredict, quint32 flightCompWindow); /** * @brief 写入飞行时间补偿控制,使用此函数的前提是之前已经调用过 writeFlightCompCtrl(bool enb, bool enbAccelDecelPredict, quint32 flightCompWindow) * 参数使用之前缓存的参数 * */ void writeFlightCompCtrl(); /** * @brief 写入时延模式、同步器模式 下,重复打印的次数 ,使能标记 * * @param enb 启用或关闭重复打印的次数 ,使能标记 * @param maxCount 重复打印的次数 */ void writeSyncAndDelayPrintCount(bool enb, uint32_t maxCount); public slots: void resendFPGADate(int,int,unsigned char *,int,int); void resendSTM32Date(int,int,unsigned char *,int,int); signals: void dataReceived(char,const QByteArray &dataReceived,int); /***cmd:1--读 2--写*********************************************/ /***addr:地址***************************************************/ /***dat:数据指针*************************************************/ /***len:数据长度*************************************************/ /***dat:1--FPGA 2--STM32***************************************/ void sendSerialDataToSTM32(int cmd,int addr,unsigned char *dat,int len,int type); void sendSerialDataToFPGA(int cmd,int addr,unsigned char *dat,int len,int type); private: int WdgttyUsb0Cnt; bool releaseValveOpenFlag; bool mixValveFlag; bool inkValveOpenFlag; bool inkValveOpenFlag1; bool cycleValveOpenFlag; bool compressPumpOpenFlag; bool viscosityPumpOpenFlag; bool mainInkPumpOpenFlag; bool reclaimPumpOpenFlag; bool highVoltageOpenFlag; 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; qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整 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; /** * @brief 相比于 @see reg_var_print_ctrl_t ,这个版本多了 alignLeft enbVarWidthFont。两个字段,用于支持非等宽字体 * */ typedef struct { // 0x51 unsigned int varDigitalNum:4; // 数字的个数 unsigned int charRamBaseAddr:12; // 基址 unsigned int colOffset:16; // 列偏移 // 0x54 unsigned int horizonWidth:9;//字模宽度 unsigned int verticalOffset:6; // 行偏移 unsigned int charRowNum:6; // 每个字符占行个数 unsigned int charColNum:6; // 每个字符占列个数 unsigned int varTypeSel:4; unsigned int enbVarWidthFont:1; // 启用非等宽字体 // 0x59 unsigned int reserved: 3; unsigned int charSpacing: 4; unsigned int alignLeft:1; // 使用非等宽字体时,计数器的对齐方向。 0左 1右 }reg_var_print_ctrl_t_v2; }; #endif /* DEVOP_H_ */