广播命令根据数据量自动计算发送数据的窗口时间

This commit is contained in:
andy
2023-12-07 22:56:07 +08:00
parent ebc180189c
commit 51609746f2
5 changed files with 39 additions and 12 deletions

View File

@@ -299,14 +299,23 @@ static send_pkt_def g_send_pkt;
static void protu_send_ontime(protu_def *p,send_pkt_def *s)
{
uint32_t tick=p->timer->read(p->timer);
int delay=tick%100;
int gap=5*(elec_local_addr()-1);
// 根据返回的数据长度计算发送需要的时间,添加1ms的余量
// 根据协议,每个指令从机的返回数据长度等长,所以需要的时间窗口也相等
int wnd_tick=((arr_length(s->t)+15)/16+1);
int delay=tick%(wnd_tick*(p->num));
int gap=p->rank*wnd_tick;
if(delay<=gap){
delay=gap-delay;
}else{
delay=gap+100-delay;
delay=gap+(wnd_tick*(p->num))-delay;
}
if(p->silent!=0){
// 广播命令在指定时间窗口发送
later_execute(protu_send_later,s,delay);
}else{
// 单播命令直接发送
protu_send_later(s);
}
later_execute(protu_send_later,s,delay);
}