#include "cmd_hmi_coder.h" #include "interface/interface.h" #include #include "prot_cmd/cmd_coder.h" #include "base/beep.h" #define send_to_hmi(fmt,...){\ QString str=QString::asprintf(fmt,##__VA_ARGS__);\ send_data(toGbk(str));\ } static void send_data(QByteArray d); QByteArray toGbk(QString str){ QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForLocale(utf8); QTextCodec* gbk = QTextCodec::codecForName("gbk"); //utf8 -> gbk //1. utf8 -> unicode QString strUnicode= utf8->toUnicode(str.toLocal8Bit().data()); //2. unicode -> gbk, 得到QByteArray QByteArray gb_bytes= gbk->fromUnicode(strUnicode); return gb_bytes; } void hmicoder_init(){ mycfg *cfg_=syscfg(); send_data(toGbk(QString::asprintf("page pagelogin"))); send_data(toGbk(QString("tVersion.txt=\"%1\"").arg(cfg_->soft_version))); } myarray cmd_hmicoder_check::cmd_pc_to_slave(myarray data) { mycfg *cfg_=syscfg(); myarray d; // 检测模式0,返回原始检测结果 d.insert(0,uint8_t(0)); coder_led_yellow(); send_to_hmi("page pagecheck"); for(int i=0;islave_num;i++){ send_to_hmi("p%d.pic=%d",i+1,i+1); send_to_hmi("t%d.txt=\"\"",i+1); } return d; } // 把从机回复的数据转化为上位机能理解的格式 myarray cmd_hmicoder_check::ret_slave_to_pc(QList data) { check_cfg *ccfg_=check_plan(); uint8_t err_flag=0; for (int i=0;icheck_scheme(),ccfg_->get_check_task_num(), d,d+8,d+16,&marerr,&suberr); if(marerr==0){ marerr=slave_err; } err_flag|=marerr; send_data(toGbk(QString("t%1.txt=\"[%2]%3\"").arg(addr).arg(suberr).arg(ccfg_->get_err_string(marerr)))); } if(err_flag){ coder_led_red(); Beep()->set_beep(300,300,3); }else{ coder_led_green(); } return myarray(); } // pc回复命令,返回0不回复 int cmd_hmicoder_check::cmd_pc_ret(){ return 0; } static void send_data(QByteArray d){ InterFace *if_=interFaceFind("uart_hmi"); myarray da; da.append(d); da.append(3,char(0xff)); if(if_!=nullptr){ if_->write(da); } } static HandlePc *get_hmicoder_check(){ return new cmd_hmicoder_check(); } // 赋码仪按键动作命令 protpc_export(0xe0, get_hmicoder_check);