编译app自动生成boot.bin文件
This commit is contained in:
@@ -16,32 +16,64 @@
|
||||
|
||||
typedef struct{
|
||||
ucport_def u;
|
||||
uint16_t addrs;
|
||||
void (*doexert)(ucport_def *u);
|
||||
uint8_t ack_num;
|
||||
uint8_t ack_size;
|
||||
int ret_skip;
|
||||
int ack_size;
|
||||
uint8_t ack[0];
|
||||
}check_def;
|
||||
|
||||
|
||||
|
||||
|
||||
// 判断检测数据是否超限,返回填充的字节个数
|
||||
static int in_range(const uint8_t *src_data,uint8_t *range)
|
||||
{
|
||||
const scheme_def *s=check_scheme();
|
||||
int temp;
|
||||
for(int i=0;i<s->range_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));
|
||||
}
|
||||
}
|
||||
DBG_LOG("range_num=%d, ",s->range_num);
|
||||
return (s->range_num+7)/8;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 检测完成
|
||||
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){
|
||||
if(addr<=0||addr>20){
|
||||
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;
|
||||
int return_size=w->ret_skip;
|
||||
uint8_t *ack_d=&w->ack[(addr-1)*return_size];
|
||||
if(ack==0)
|
||||
{
|
||||
// 复制流程结果
|
||||
memcpy(ack_d,arr_data(data),8);ack_d+=8;
|
||||
// 返回参数校验,跳过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);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 复制为0xff 无效数据
|
||||
memset(ack_d,0xff,return_size);
|
||||
}
|
||||
memcpy(ack_d,arr_data(data),return_size);
|
||||
// TODO: 还有4字节数据
|
||||
w->ack_num++;
|
||||
if(w->ack_num>=20)
|
||||
{
|
||||
@@ -62,25 +94,21 @@ static void check_del(ucport_def *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;
|
||||
int return_size=(check_scheme()->range_num*2+8+(check_scheme()->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;
|
||||
u->u.p=t;
|
||||
u->u.del=check_del;
|
||||
u->u.doend=check_end;
|
||||
DBG_LOG("check: skip=%d",u->ret_skip);
|
||||
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()));
|
||||
}
|
||||
port_mcu *mcu=tran_get_portm(u->u.p,i);
|
||||
// 这里打开检测
|
||||
if(mcu){
|
||||
port_start(mcu,check_creat(check_scheme()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,22 +347,52 @@ static void paraminfo_fill(paraminfo_def *p)
|
||||
|
||||
|
||||
// 保存配置项
|
||||
static void paraminfo_save(paraminfo_def *p)
|
||||
static int paraminfo_save(paraminfo_def *p)
|
||||
{
|
||||
int ret=0;
|
||||
sys_param_def *spar=0;
|
||||
spar=calloc(1,sizeof(sys_param_def));
|
||||
memcpy(spar,sys_param(),sizeof(sys_param_def));
|
||||
|
||||
memcpy(spar->device_type,p->devicetype,12);
|
||||
memcpy(spar->host_if,p->hostif,8);
|
||||
memcpy(spar->local_ip,p->localip,4);
|
||||
memcpy(spar->host_ip,p->hostip,4);
|
||||
if(strcmp("coder",p->devicetype)==0||strcmp("checker",p->devicetype)==0)
|
||||
memcpy(spar->device_type,p->devicetype,12);
|
||||
else {
|
||||
DBG_WARN("devicetype param must be \"coder\" or \"checker\"");
|
||||
ret=1;return ret;}
|
||||
if(strcmp("uart4",p->hostif)==0||strcmp("utcp",p->hostif)==0)
|
||||
memcpy(spar->host_if,p->hostif,8);
|
||||
else {
|
||||
DBG_WARN("host_if param must be \"uart4\" or \"utcp\"");
|
||||
ret=2;return ret;}
|
||||
if(memcmp(p->localip,(uint8_t []){0,0,0,0},4)!=0)
|
||||
memcpy(spar->local_ip,p->localip,4);
|
||||
else {
|
||||
DBG_WARN("localip param must not be all zero");
|
||||
ret=3;return ret;}
|
||||
if(memcmp(p->hostip,(uint8_t []){0,0,0,0},4)!=0)
|
||||
memcpy(spar->host_ip,p->hostip,4);
|
||||
else {
|
||||
DBG_WARN("hostip param must not be all zero");
|
||||
ret=4;return ret;}
|
||||
spar->host_port=p->hostport;
|
||||
spar->local_id=p->localid;
|
||||
spar->uartbsp=p->uartbsp;
|
||||
spar->coder_ret_mode=p->coder_return_mode;
|
||||
spar->slave_addr_start=p->slave_addr_start;
|
||||
if(p->uartbsp==115200||p->uartbsp==9600)
|
||||
spar->uartbsp=p->uartbsp;
|
||||
else {
|
||||
DBG_WARN("uartbsp param must be 115200 or 9600");
|
||||
ret=5;return ret;}
|
||||
if(p->coder_return_mode==0||p->coder_return_mode==1)
|
||||
spar->coder_ret_mode=p->coder_return_mode;
|
||||
else {
|
||||
DBG_WARN("coder_return_mode param must be 0 or 1");
|
||||
ret=6;return ret;}
|
||||
if(p->slave_addr_start==0||p->slave_addr_start==1)
|
||||
spar->slave_addr_start=p->slave_addr_start;
|
||||
else {
|
||||
DBG_WARN("slave_addr_start param must be 0 or 1");
|
||||
ret=7;return ret;}
|
||||
flash_save_param(spar);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -378,16 +436,15 @@ static ucport_def *param(tran_def *t, uint8_t cmd,array_def *data)
|
||||
// 赋码仪添加通道数
|
||||
arr_append(a,10);
|
||||
}
|
||||
if(arr_length(data)<1+sizeof(paraminfo_def)){
|
||||
arr_append(a,1);
|
||||
if(arr_length(data)<1+off+sizeof(paraminfo_def)){
|
||||
arr_append(a,0xff);
|
||||
emit tran_reply_signal(u->u.p,arr_temp(a));
|
||||
}else{
|
||||
memcpy(&u->par,arr_data(data)+1,sizeof(paraminfo_def));
|
||||
paraminfo_save(&u->par);
|
||||
arr_append(a,0);
|
||||
int ret=paraminfo_save(&u->par);
|
||||
arr_append(a,ret);
|
||||
emit tran_reply_signal(u->u.p,arr_temp(a));
|
||||
}
|
||||
paraminfo_save(&u->par);
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user