PX4的mavlink框架

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);
}

猜你喜欢

转载自blog.csdn.net/yangang185/article/details/81079566