广播命令根据数据量自动计算发送数据的窗口时间
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user