125 lines
2.0 KiB
C
125 lines
2.0 KiB
C
#include "tran_for_checker.h"
|
|
#include "debug.h"
|
|
#include "mymisc.h"
|
|
#include "mystdlib.h"
|
|
#include "board.h"
|
|
#include "dev_flash.h"
|
|
#include "tcp.h"
|
|
#include "prot_uc.h"
|
|
#include "handle_for_checker.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct{
|
|
ucport_def u;
|
|
uint16_t addrs;
|
|
void (*doexert)(ucport_def *u);
|
|
uint8_t ack_num;
|
|
uint8_t ack_size;
|
|
uint8_t ack[0];
|
|
}check_def;
|
|
|
|
|
|
|
|
// 检测完成
|
|
static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_str)
|
|
{
|
|
check_def *w=(check_def *)u;
|
|
uint8_t addr=port_get_addr(src);
|
|
if(addr<=0||addr>10){
|
|
DBG_WARN("addr err:%d",addr);
|
|
return;
|
|
}
|
|
int return_size=(check_scheme()->range_num*2+8);
|
|
uint8_t *ack_d=&w->ack[(addr-1)*return_size];
|
|
if(return_size!=arr_length(data)){
|
|
DBG_WARN("data err:%d",addr);
|
|
return;
|
|
}
|
|
memcpy(ack_d,arr_data(data),return_size);
|
|
// TODO: 还有4字节数据
|
|
w->ack_num++;
|
|
if(w->ack_num>=20)
|
|
{
|
|
array_def *a=arr_creat();
|
|
arr_append(a,0);
|
|
arr_appends(a,w->ack,w->ack_size);
|
|
emit tran_send_signal(w->u.p,0x31,arr_temp(a));
|
|
tran_set_busy(w->u.p,0);
|
|
}
|
|
}
|
|
|
|
|
|
static void check_del(ucport_def *u)
|
|
{
|
|
free(u);
|
|
}
|
|
|
|
|
|
static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
|
|
{
|
|
if(arr_length(data)<7){
|
|
DBG_WARN("cmd format err.");
|
|
return 0;
|
|
}
|
|
int return_size=(check_scheme()->range_num*2+8);
|
|
check_def *u=calloc(1,sizeof(check_def)+return_size*10);
|
|
u->ack_size=return_size*10;
|
|
u->u.p=t;
|
|
u->u.del=check_del;
|
|
u->u.doend=check_end;
|
|
tran_set_busy(t,1);
|
|
for(int i=0;i<20;i++)
|
|
{
|
|
if(u->addrs&(1<<i)){
|
|
port_mcu *mcu=tran_get_portm(u->u.p,i);
|
|
// 这里打开检测
|
|
if(mcu){
|
|
port_start(mcu,check_creat(check_scheme()));
|
|
}
|
|
}
|
|
}
|
|
|
|
array_def *a=arr_creat();
|
|
arr_append(a,0);
|
|
emit tran_reply_signal(u->u.p,arr_temp(a));
|
|
|
|
return (ucport_def *)u;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static ucport_def *bootinfo(tran_def *t,uint8_t cmd,array_def *data)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
transmit_export(ym_checker,0x30,check)
|
|
transmit_export(ym_checker,0x34,bootinfo)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|