添加错误代码

This commit is contained in:
ranchuan
2023-06-28 18:08:38 +08:00
parent c2b79fe523
commit 28889fa479
21 changed files with 2299 additions and 99 deletions

View File

@@ -10,7 +10,7 @@
#include "compiler_info.h"
#include "dev_backup.h"
#include "moter.h"
#include "key.h"
@@ -25,24 +25,43 @@ typedef struct{
}check_def;
// 计算方案有多少个范围参数
static int calc_range_num(void)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int index=0;
for(int i=0;i<s->task_num;i++)
{
t=&s->task[i];
index+=t->item_num;
}
return index;
}
// 判断检测数据是否超限,返回填充的字节个数
static int in_range(const uint8_t *src_data,uint8_t *range)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int temp;
for(int i=0;i<s->range_num;i++)
int index=0;
for(int i=0;i<s->task_num;i++)
{
temp=src_data[i*2]|(src_data[i*2+1]<<8);
if(temp>=s->range[i].min&&temp<=s->range[i].max){
range[i/8]&=~(1<<(i%8));
}else{
range[i/8]|=(1<<(i%8));
t=&s->task[i];
for(int j=0;j<t->item_num;j++)
{
temp=src_data[index*2]|(src_data[index*2+1]<<8);
if(temp>=t->range[j].min&&temp<=t->range[j].max){
range[index/8]&=~(1<<(index%8));
}else{
range[index/8]|=(1<<(index%8));
}
index++;
}
}
DBG_LOG("range_num=%d, ",s->range_num);
return (s->range_num+7)/8;
DBG_LOG("range_num=%d, ",index);
return (index+7)/8;
}
@@ -68,7 +87,7 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
// 返回参数校验,跳过8字节的流程执行位
ack_d+=in_range(arr_data(data)+8+8,ack_d);
// 复制返回参数,跳过8字节的流程执行位
memcpy(ack_d,arr_data(data)+8+8,check_scheme()->range_num*2);
memcpy(ack_d,arr_data(data)+8+8,calc_range_num()*2);
}
else
{
@@ -131,7 +150,7 @@ static void check_when_moter_down(void *t)
static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
{
int return_size=(check_scheme()->range_num*2+8+(check_scheme()->range_num+7)/8);
int return_size=(calc_range_num()*2+8+(calc_range_num()+7)/8);
check_def *u=calloc(1,sizeof(check_def)+return_size*20);
u->ret_skip=return_size;
u->ack_size=return_size*20;
@@ -140,10 +159,15 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
u->u.dolater=check_dolater;
u->u.doend=check_end;
DBG_LOG("check: skip=%d",u->ret_skip);
tran_set_busy(t,1);
moter_down(check_when_moter_down,u);
array_def *a=arr_creat();
arr_append(a,0);
if(key_pressed())
{
tran_set_busy(t,1);
moter_down(check_when_moter_down,u);
arr_append(a,TRAN_ERR_NONE);
}else{
arr_append(a,TRAN_ERR_STEP);
}
emit tran_reply_signal(u->u.p,arr_temp(a));
return (ucport_def *)u;