赋码仪错误判断

This commit is contained in:
ranchuan
2023-07-06 19:02:03 +08:00
parent 350ac689c4
commit aca05d5dc0
17 changed files with 1378 additions and 264 deletions

215
source/coder/coder_judge.c Normal file
View File

@@ -0,0 +1,215 @@
#include "coder_judge.h"
#include "dev_flash.h"
#include "string.h"
// <20><>d<EFBFBD><64><EFBFBD><EFBFBD> a<>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
static void c_insert(uint8_t *a,uint8_t d)
{
int len=sizeof(uint8_t [6]);
for(int i=0;i<len;i++)
{
if(a[i]==d)
return;
}
for(int i=0;i<len;i++)
{
if(a[i]==0xff){
a[i]=d;
return;
}
}
}
// ɾ<><C9BE>a<EFBFBD>е<EFBFBD>ֵd
static void c_del(uint8_t *a,uint8_t d)
{
int len=sizeof(uint8_t [6]);
for(int i=0;i<len;i++)
{
if(a[i]==d){
memcpy(&a[i],&a[i+1],len-i-1);
return;
}
}
}
// ɾ<><C9BE>a<EFBFBD>г<EFBFBD><64><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
static void c_only(uint8_t *a,uint8_t d)
{
int len=sizeof(uint8_t [6]);
for(int i=0;i<len;i++)
{
if(a[i]==d)
{
memset(a,0xff,len);
a[0]=d;
return;
}
}
// <20><><EFBFBD><EFBFBD>û<EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ȫ<EFBFBD><C8AB>ɾ<EFBFBD><C9BE>
memset(a,0xff,len);
}
// <20><>ʼ<EFBFBD><CABC>a
static void c_init(uint8_t *a)
{
int len=sizeof(uint8_t [6]);
memset(a,0xff,len);
}
// <20><><EFBFBD><EFBFBD>taskid<69>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
const scheme_task_def *find_task_next(int index_now,int taskid)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
for(int i=index_now;i<s->task_num;i++)
{
t=&s->task[i];
if(t->taskid==taskid)
return t;
}
return 0;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>index<65>IJ<EFBFBD><C4B2><EFBFBD>
// <20><>ȡ<EFBFBD><C8A1>index<65><78><EFBFBD><EFBFBD>Χ
static int get_range(int index,int *min,int *max)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int index_p=0;
for(int i=0;i<s->task_num;i++)
{
t=&s->task[i];
for(int j=0;j<t->item_num;j++)
{
if(index_p==index)
{
if(min) *min=t->range[j].min;
if(max) *max=t->range[j].max;
return index_p;
}
index_p++;
}
}
return index_p;
}
// <20><>ȡ<EFBFBD><C8A1>index<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int get_data(const uint8_t *data,int index)
{
data+=16;
return data[index*2]|(data[index*2+1]<<8);
}
// <20><>ȡ<EFBFBD><C8A1>index<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>1<EFBFBD><31>ʧ<EFBFBD>ܣ<EFBFBD>0<EFBFBD>ɹ<EFBFBD>
static int get_ack(const uint8_t *data,int index)
{
if(data[index/8]&(1<<(index%8)))
return 1;
else
return 0;
}
//-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣,1
//-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣,2
//-- <20>Ӵ<EFBFBD><D3B4>쳣,3
//-- <20><>˿<EFBFBD><CBBF>ֵ<EFBFBD>쳣,4
//-- оƬ<D0BE>쳣,5
//-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7
//-- <20><>·<EFBFBD><C2B7>8
#define TASK_RETURN(task) {\
if(task==0) return 6; \
else index+=1;\
}// <20>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t coder_judge(const uint8_t *data)
{
int temp,temp2;
int index=0;
const scheme_task_def *task=0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
task=find_task_next(index,0);
TASK_RETURN(task);
{
if(get_ack(data,0))
{
// <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>󣬼<EFBFBD><F3A3ACBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1;
}
}
// <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
task=find_task_next(index,1);
TASK_RETURN(task);
{
temp=get_data(data,0);
if(temp<task->range[0].min)
{
// <20><>ѹ<EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1;
}
temp=get_data(data,1);
if((temp>39000)||(temp<1)){
// <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
task=find_task_next(index,4);
TASK_RETURN(task);
temp=get_data(data,5);
temp2=get_data(data,6);
if((temp<10)&&(temp2<20))
{
// <20>Ӵ<EFBFBD><D3B4>
return 3;
}
else if(((temp>task->range[0].max)&&(temp<1500))||
((temp2>task->range[0].max)&&(temp2<1500)))
{
// <20><><EFBFBD><EFBFBD>
return 7;
}else if((temp>1500)&&(temp2>1500))
{
// <20><>·
return 8;
}
// <20><><EFBFBD><EFBFBD>uid
task=find_task_next(index,5);
TASK_RETURN(task);
if(get_ack(data,task->taskindex))
{
// оƬ<D0BE><C6AC><EFBFBD><EFBFBD>
return 5;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿
task=find_task_next(index,6);
TASK_RETURN(task);
temp=get_data(data,7);
if((temp<task->range[0].min)||(temp>task->range[0].max))
{
// <20><>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>
return 4;
}
// <20><><EFBFBD><EFBFBD>
return 0;
}

View File

@@ -0,0 +1,16 @@
#ifndef coder_judge_h__
#define coder_judge_h__
#include "stdint.h"
uint8_t coder_judge(const uint8_t *data);
#endif

View File

@@ -129,7 +129,8 @@ int coder_uid_to_save(const char *uid_code,uint8_t *save_code)
ymd|=coder_strint_to_byte(&uid_code[8],2);
save_code[2]=ymd>>8;
save_code[3]=ymd&0xff;
feature=uid_code[10]*10000;
// 文档 YM-UID设计V1.2 - 2023.xlsx 规定*10000实际是*100000
feature=uid_code[10]*100000;
feature+=coder_strint_to_byte(&uid_code[11],3)*100;
feature+=coder_strint_to_byte(&uid_code[14],2);
save_code[4]=feature>>16;
@@ -174,8 +175,8 @@ int coder_save_to_uid(const uint8_t *save_code,char *uid_code)
ret|=coder_int_to_strint(ymd>>9,&uid_code[2],2);
ret|=coder_int_to_strint((ymd>>5)&0x0f,&uid_code[6],2);
ret|=coder_int_to_strint((ymd)&0x1f,&uid_code[8],2);
uid_code[10]=feature/10000;
ret|=coder_int_to_strint(feature%10000/100,&uid_code[11],3);
uid_code[10]=feature/100000;
ret|=coder_int_to_strint(feature%100000/100,&uid_code[11],3);
ret|=coder_int_to_strint(feature%100,&uid_code[14],2);
return ret;
}