修改适配非等宽字体的计数器

This commit is contained in:
2026-08-26 16:23:04 +08:00
parent 950d0d0386
commit 190155913a
10 changed files with 267 additions and 70 deletions
+45 -3
View File
@@ -3176,14 +3176,15 @@ void DevOp::writeCnt1GroupSetting(bool bCntByGroupEnable){
}
#endif
}
void DevOp::readCalandarDat(void){
void DevOp::readCalandarDat(void)
{
fpgaRd(READ_CALENDAR_DAT_ADDR,(unsigned char *)&sysPara->status.calandar_and_dat,16);
fpgaRd((READ_CALENDAR_DAT_ADDR + 0x34) ,(unsigned char *)&sysPara->status.Status_Counter3.cnt3CurrValue,4);
fpgaRd((READ_CALENDAR_DAT_ADDR + 0x38) ,(unsigned char *)&sysPara->status.XXXDay,2);
}
void DevOp::writeFpgaCalandar(bool Enable){
Q_UNUSED(Enable);
time_t rawtime;
@@ -3258,7 +3259,16 @@ void DevOp::writeFpgaCalandar(bool Enable){
sysPara->status.cnt1CurrentValueInitDoneFlag = false;
}
unsigned char dataOfvariNum[1];
unsigned char dataOfreg_var_print_ctrl[8][8];
/**
* @brief 原 dataOfreg_var_print_ctrl 定义
* dataOfreg_var_print_ctrl[8][8]
*
* 现在多了一个字节,是为了计数器添加支持非等宽字体时,存放对齐方向和字符间距所用
* @see reg_var_print_ctrl_t_v2
*/
unsigned char dataOfreg_var_print_ctrl[8][12];
void DevOp::writeFpgaVariCtrl(void){
writeFpgaCalandar(0);
dataOfvariNum[0]=sysPara->status.variNum;
@@ -3283,6 +3293,38 @@ void DevOp::writeFpgaVariCtrl(void){
fpgaWr(VAR_CTRL_REG_ADDR,dataOfreg_var_print_ctrl[i],8);
}
}
void DevOp::writeFpgaVariCtrlv2()
{
writeFpgaCalandar(0);
dataOfvariNum[0]=sysPara->status.variNum;
fpgaWr(VAR_CNT_ADDR,dataOfvariNum,1); /* 0xa450 变量个数 */
reg_var_print_ctrl_t_v2 reg_var_print_ctrl;
for(int i = 0; i < sysPara->status.variNum; i++){
vars_t *p_var = &sysPara->status.vars[i];
if(p_var->original && p_var->dat){
fpgaWr(PRINT_DIGITAL_CHAR_BASE_ADDR + p_var->bassAddr,p_var->dat,p_var->datWidth *p_var->rowByteNum);
fpgaWr(PRINT_DIGITAL_CHAR_WIDTH_TABLE_BASE_ADDR + i * 10, p_var->widthTable, sizeof(p_var->widthTable));
}
memset((char *)&reg_var_print_ctrl,0,sizeof(reg_var_print_ctrl));
reg_var_print_ctrl.charColNum = std::max_element(std::begin(p_var->widthTable), std::end(p_var->widthTable));
reg_var_print_ctrl.charRamBaseAddr = p_var->bassAddr;
reg_var_print_ctrl.charRowNum = p_var->height;
reg_var_print_ctrl.horizonWidth = p_var->width; //字模的宽度
reg_var_print_ctrl.colOffset = p_var->startColPos+BLANK_COL_NUM;
reg_var_print_ctrl.verticalOffset = p_var->startRowPos;
reg_var_print_ctrl.varDigitalNum = p_var->digitalNum;
reg_var_print_ctrl.varTypeSel = Public::getType(p_var->type) %20;
reg_var_print_ctrl.enbVarWidthFont = 1;
reg_var_print_ctrl.alignLeft = 0;
reg_var_print_ctrl.charSpacing = p_var->letterSpace;
memcpy(dataOfreg_var_print_ctrl[i],(unsigned char *)&reg_var_print_ctrl,8);
fpgaWr(VAR_CTRL_REG_ADDR,dataOfreg_var_print_ctrl[i], 9);
}
}
unsigned char dataOfCmd[1];
void DevOp::printCtrl(int cmd){
dataOfCmd[0]=cmd;