添加对hmi屏幕的支持,赋码仪按键按下时发送赋码请求
This commit is contained in:
103
prot_cmd/cmd_hmi_coder.cpp
Normal file
103
prot_cmd/cmd_hmi_coder.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
#include "cmd_hmi_coder.h"
|
||||
#include "interface/interface.h"
|
||||
#include <QTextCodec>
|
||||
#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;i<cfg_->slave_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<myarray> data)
|
||||
{
|
||||
check_cfg *ccfg_=check_plan();
|
||||
uint8_t err_flag=0;
|
||||
for (int i=0;i<data.size();i++)
|
||||
{
|
||||
myarray &sdata=data[i];
|
||||
int addr=sdata[0];
|
||||
sdata.remove(0,1);
|
||||
uint8_t marerr=0,suberr=0;
|
||||
uint8_t slave_err=sdata[0];
|
||||
uint8_t *d=(uint8_t *)sdata.data()+1;
|
||||
elec_judge(ccfg_->check_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);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user