Atilla
0
25. День начинается утром.
Возможно имеется в виду астрономический день — он начинается в полдень.
https://en.wikipedia.org/wiki/Astronomical_day
Atilla
0
Из предложений: возможно имеет смысл написать за что отвечает System ID и Component ID.
Также имеет смысл сразу сделать вместо класса AbstractHandler/HeartbeatHandler абстрактный класс для каждого MAV, который бы отвечал за обработку принятых сообщений и упаковку сообщений для каждого MAV отдельно:

class AbstractMav: public QObject
{
    Q_OBJECT
    
public:
    AbstractMav(QObject* parent = nullptr, AbstractLink* link);

public slots:
    void sendHeartbeat(unit8_t compid);
    void arm();
    void disarm();
    ...

signals:
    void messageReady(const mavlink_message_t& message, const AbstractLink* link);
    void heartheatReceived(unit8_t compid);
    void imuReceived(unit8_t compid, uint64_t timestamp,
                     const QVector3D& accel, const QVector3D& gyro, const QVector3D& mag,
                     double pressure, double temperature);
    ...

private slots:
    void processMessage(const mavlink_message_t& message);

private:
    void commandLong(uint8_t compid,
                     uint16_t command,
                     uint8_t confirmation,
                     float param1, float param2, float param3, float param4,
                     float param5, float param6, float param7 );
    ...

    uint8_t m_sysid;
    AbstractLink* m_link;
};


слот AbstractMav::processMessage соединятеся с сигналом MavLinkCommunicator::messageReceived, и отфильтровыват сообщенния принадлежащие только ему:
void AbstractMav::processMessage(const mavlink_message_t& message) {
    if (message.sysid != m_sysid) {
        return;
    }
    
    switch(message.msgid) {
        case MAVLINK_MSG_ID_HEARTBEAT: {
            emit heartheatReceived(message.compid);
            break;
        }
        case MAVLINK_MSG_ID_HIGHRES_IMU: {
            ...
        }
    }
}


а сигнал AbstractMav::messageReady со слотом MavLinkCommunicator::sendMessage. Каждая функция, которая отправляет данные на MAV, должна активировать сигнал messageReady:
void AbstractMav::sendHeartbeat(unit8_t compid) {
    mavlink_message_t message;
    mavlink_heartbeat_t heartbeat;
    
    mavlink_msg_heartbeat_encode(m_sysd, compid, &message, &heartbeat);

    emit messageReady(message, m_link)
}


Правильная реализация MAVLink должна поддерживать общение с несколькими MAV через один канал, или даже через несколько каналов. Такую возможность лучше заложить сразу, а не переписывать потом.

И из мелочей: имеет смысл использовать QHash вместо QMap для члена MavLinkCommunicator:: m_linkChannels, так как упорядоченности по ключу нам не важна.
Atilla
0
ext3. Потому что умные дяденьки так говорят, а я ничего не смыслю в этом.
Atilla
+2
Знали бы это разработчики mail.ru…
Atilla
0
ссылкой не поделитесь?
Atilla
0
Это мудаки придумали, а не философы…
Atilla
+1
Скорее НЛО прилетело и стырила сайтишко…
Atilla
+1
Вся проблема в том, что с каждой страницы (в моём случае) надо в функцию отправлять индивидуальный параметр.
Atilla
–1
только кавычки такие — "
Atilla
0
А ещё почему-то теряется возможность записать onLoad=«func();» внутри body. Или я в чем-то не прав?
Atilla
0
Интересно. Но я почти такое делал у себя на сайте: www.zaripov.nxt.ru. Сделанно на JavaScript'е и CSS.
Atilla
0
Можешь материалы дать, или выложить где?
Atilla
0
Да, было бы совсем неплохо если бы был HabrMobile. Часто приходится с телефона на Habr залазить.
Atilla
–1
Моя задница подсказывает, что эту хрень надо удалить куда подальше, хоть она и не представляет никакой опасности.
Atilla
0
Пардон. :-)
Насчёт < > и « ».
Думаю что не стоит их применять, Я долго не мог догадаться что значит « » в листалке, а < > я вообще не пользуюсь.
Atilla
0
Насчёт < > и >.
Думаю что не стоит их применять, Я долго не мог догадаться что значит > в листалке, а < > я вообще не пользуюсь.