mavlink每个数据包独立控制发送间隔, 每个数据包都是1个流
class MavlinkStream
{
public:
void set_interval(const unsigned int interval);
unsigned get_interval() { return _interval; }
hrt_abstime _last_sent;
class MavlinkStreamAgriMonitorInfo : public MavlinkStream
protected:
-> void send(const hrt_abstime t)
//add static
const StreamListItem *streams_list[] = {
new StreamListItem(&MavlinkStreamAgriMonitorInfo::new_instance, &MavlinkStreamAgriMonitorInfo::get_name_static),
//循环遍历创建所有节点
for (unsigned int i = 0; streams_list[i] != nullptr; i++) {
if (strcmp(stream_name, streams_list[i]->get_name()) == 0) {
/* create new instance */
stream = streams_list[i]->new_instance(this);
stream->set_interval(interval);
LL_APPEND(_streams, stream);
return OK;
}
}
//每个父类的函数,调用子类的send函数
MavlinkStream::MavlinkStream(Mavlink *mavlink) :
-> MavlinkStream::update(const hrt_abstime t)
send(t); //ok
//每个流都通过自己创建1个对象,工厂模式,构造函数是被保护的
class MavlinkStreamAgriMonitorInfo : public MavlinkStream
{
public:
const char *get_name() const
{
return MavlinkStreamAgriMonitorInfo::get_name_static();
}
//主循环中查询所有发送者
while (!_task_should_exit) {
MavlinkStream *stream;
LL_FOREACH(_streams, stream) {
stream->update(t);
}