Files
checker_host/prot_cmd/cmd_coder.h

496 lines
9.5 KiB
C
Raw Normal View History

2023-12-19 18:14:35 +08:00
#ifndef CMD_CODER_H
#define CMD_CODER_H
#include <QObject>
#include "prot_cmd/cmd_pc.h"
#include "base/check_cfg.h"
#include "elec/elec_judge.h"
/*
[0...1]=[2]=(0),[3]=
[4...n]=
[0]=0,,;1,,;
2,,;
3,,
[1...n]
[0]=(0x1f,使)[1]=[2...n]=
2023-12-19 18:14:35 +08:00
[0]=[1]=id[2]=(u16)
[3]=(u16)[4]=[5]=
[6...n]=
[0]=[1]=(u16)
[2...n]=
*/
#define coder_led_yellow(){\
prot_m4 *m4=protM4();\
m4->send_data_slot("ledg on");\
m4->send_data_slot("ledr on");\
}
#define coder_led_green(){\
prot_m4 *m4=protM4();\
m4->send_data_slot("ledg on");\
m4->send_data_slot("ledr off");\
}
#define coder_led_red(){\
prot_m4 *m4=protM4();\
m4->send_data_slot("ledg off");\
m4->send_data_slot("ledr on");\
}
#define coder_led_off(){\
prot_m4 *m4=protM4();\
m4->send_data_slot("ledg off");\
m4->send_data_slot("ledr off");\
}
typedef struct{
const char *name;
int task_id;
int errcode;
int par_count;
int ret_count;
}task_def;
const task_def *coder_find_task(const char *str);
// 添加一个任务,返回0添加成功
int coder_add_task(myarray &d,const char *name,int slot_index,int task_index,uint16_t params[10]);
// 包装为一个小板的数据,返回0成功
// 包装前需要先添加任务
int coder_slave_pack(myarray &d,int addr);
// 找到指定任务序号的数据
myarray coder_slave_find_ret_data(myarray data,int task_index,int size);
2023-12-19 18:14:35 +08:00
// 赋码仪检测命令
class cmd_coder_check : public selfdev_runtask
{
Q_OBJECT
public:
cmd_coder_check():selfdev_runtask(){
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
addrs=data[0];
mode=data[1];
if(addrs<=0||addrs>20){
return addr_list;
}
for(int i=0;i<addrs;i++){
addr_list.append(i+1);
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x01;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
r.append(uint8_t(addrs));
r.append(uint8_t(mode));
r.append(uint8_t(0));
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x81;
2023-12-19 18:14:35 +08:00
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
protected:
int addrs;
int mode;
};
// 赋码仪新检测命令
class cmd_coder_check2 : public selfdev_runtask
{
Q_OBJECT
public:
cmd_coder_check2():selfdev_runtask(){
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
2023-12-19 18:14:35 +08:00
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
addrs=data[0]|(data[1]<<8)|(data[2]<<16);
addrs_num=0;
2023-12-19 18:14:35 +08:00
for(int i=0;i<20;i++){
if((addrs&(1<<i))!=0){
addr_list.append(i+1);
addrs_num++;
2023-12-19 18:14:35 +08:00
}
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x10;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
r.append(uint8_t(addrs&0xff));
r.append(uint8_t((addrs>>8)&0xff));
r.append(uint8_t((addrs>>16)&0xff));
r.append(uint8_t(0));
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x90;
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
protected:
int addrs;
int addrs_num;
};
typedef struct{
char shell[20];
char uid[20];
char psw[20];
char uid_psw[20];
}uid_code;
// 赋码仪赋码命令
class cmd_coder_code : public selfdev_runtask
{
Q_OBJECT
public:
cmd_coder_code():selfdev_runtask(){
2023-12-19 18:14:35 +08:00
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
addrs=data[0];
if(addrs<=0||addrs>20){
return addr_list;
}
for(int i=0;i<addrs;i++){
addr_list.append(i+1);
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x02;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
r.append(uint8_t(addrs));
r.append(uint8_t(0));
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x82;
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
protected:
int addrs;
int chip_mode;
QList<uid_code> uid_codes;
};
// 赋码仪新赋码命令
class cmd_coder_code2 : public selfdev_runtask
{
Q_OBJECT
public:
cmd_coder_code2():selfdev_runtask(){
delay=0;
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
addrs=data[0]|(data[1]<<8)|(data[2]<<16);
addrs_num=0;
for(int i=0;i<20;i++){
if((addrs&(1<<i))!=0){
addr_list.append(i+1);
addrs_num++;
}
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x11;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
r.append(uint8_t(addrs&0xff));
r.append(uint8_t((addrs>>8)&0xff));
r.append(uint8_t((addrs>>16)&0xff));
r.append(uint8_t(0));
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x91;
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
protected:
int addrs;
int chip_mode;
int addrs_num;
uint16_t delay;
QList<uid_code> uid_codes;
};
// 设置电阻校准值
class cmd_coder_setrtv : public selfdev_runtask
{
Q_OBJECT
public:
cmd_coder_setrtv():selfdev_runtask(){
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
addrs=0;
int len=data.size();
for(int i=0;i<len;i+=3){
addr_list.append(data[i]);
addrs|=1<<(data[i]-1);
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x41;
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
2023-12-19 18:14:35 +08:00
protected:
int addrs;
};
// 批检仪检测并设置模块流水号
class cmd_checker_check : public selfdev_runtask
{
Q_OBJECT
public:
cmd_checker_check():selfdev_runtask(){
}
~cmd_checker_check(){
if(moter_down_cb_fun!=nullptr){
// 取消电机下降到位回调
prot_m4 *m4 = protM4();
if(m4!=nullptr) {
m4->del_irq_fun(moter_down_cb_fun,"moter ");
}
}
}
int dolater(int cmd, myarray data);
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
QList<int> addr_list;
// addrs=0;
int len=data.size();
for(int i=0;i<len;i+=5){
addr_list.append(data[i]);
// addrs|=1<<(data[i]-1);
}
return addr_list;
}
// 从机发起命令
int cmd_slave(){
return 0x20;
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x48;
}
// 生成接收回复到pc
myarray cmd_pc_recv_to_pc(){
myarray r;
r.append(uint8_t(0));
return r;
}
// pc回复命令,返回0不回复
int cmd_pc_ret(){
return 0x31;
}
// 从机返回转pc
myarray ret_slave_to_pc(QList<myarray> data);
virtual int key_press();
protected:
// int addrs;
int mode;
prot_m4_cb moter_down_cb_fun;
signals:
void send_to_m4_signal(myarray data);
};
// 批检仪检测并读取模块流水号
class cmd_checker_check2 : public cmd_checker_check
{
Q_OBJECT
public:
cmd_checker_check2():cmd_checker_check(){
}
~cmd_checker_check2(){
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
// pc指令生成从机列表
QList<int> cmd_pc_to_addrs(myarray data){
return syscfg()->calc_slave_addrs();
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x30;
}
};
// 批检仪检测不读取流水号
class cmd_checker_check3 : public cmd_checker_check2
{
Q_OBJECT
public:
cmd_checker_check3():cmd_checker_check2(){
}
~cmd_checker_check3(){
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x49;
}
// pc指令转从机
myarray cmd_pc_to_slave(myarray data);
};
// 批检仪检测不读取流水号
class cmd_checker_check4 : public cmd_checker_check3
{
Q_OBJECT
public:
cmd_checker_check4():cmd_checker_check3(){
}
~cmd_checker_check4(){
}
// pc收到回复,返回0不回复
int cmd_pc_recv(){
return 0x44;
}
int key_press();
};
2023-12-19 18:14:35 +08:00
#endif // CMD_CODER_H