通过串口,根据参数名称请求mavlink参数值

来源:互联网 发布:ubuntu 14.04 iso 32 编辑:程序博客网 时间:2024/06/05 15:02

一,整体架构



2,代码

void MySerialLink::sendReadPararmeter(QString name)
{
    int componentId = 0;
    int paramIndex=-1;
    int mavlinkSystemID = 255;
    int mavlinkCompontId = 0;
    int vehicleId = 1;
    int channel = 0;
    mavlink_message_t msg;
    char fixedParamName[MAVLINK_MSG_PARAM_REQUEST_READ_FIELD_PARAM_ID_LEN];
    strncpy(fixedParamName, name.toStdString().c_str(), sizeof(fixedParamName));
    mavlink_msg_param_request_read_pack(mavlinkSystemID,    // Our system id
                                        mavlinkCompontId, // Our component id
                                        &msg,                       // Pack into this mavlink_message_t
                                        vehicleId,             // Target system id
                                        componentId,                // Target component id
                                        fixedParamName,             // Named parameter being requested
                                        paramIndex);                // Parameter index being requested, -1 for named
    static const uint8_t messageKeys[256] = MAVLINK_MESSAGE_CRCS;
    mavlink_finalize_message_chan(&msg, mavlinkSystemID, mavlinkCompontId, channel, msg.len, messageKeys[msg.msgid]);
    uint8_t buffer[MAVLINK_MAX_PACKET_LEN];
    int len = mavlink_msg_to_send_buffer(buffer, &msg);
    emit _invokeWriteBytes((const char*)buffer,len);
}

3,

这里没有直接调用串口发送 消息,而是 利用信号与槽  转了一下,否则消息发送失败,原因不详。

connect(this,SIGNAL(_invokeWriteBytes(const char*,qint64)),this,SLOT(sl_sendData(const char*,qint64)));
void MySerialLink::sl_sendData(const char*buff,qint64 size)
{
    if(mPort && mPort->isOpen()) {
        int sendSize =  mPort->write(buff,size);
        qDebug()<<"send data "<<size<<sendSize;
    } else {
        qDebug()<<"Could not send data,mPort is not opened";
    }
}


0 0