dji-sdk правильная реализация обратного вызова - PullRequest
0 голосов
/ 06 февраля 2019

Я работаю над реализацией обратных вызовов для тем подписки.Я искал некоторое время и не могу найти никаких реальных подробных инструкций по реализации обратных вызовов и расшифровке обратного вызова.Я легко могу запустить образец телеметрии, однако он не реализует обратные вызовы, поскольку он просто зацикливается после настройки тем на время, выполняя ручное извлечение данных тем.Этот подход хорошо работает в производстве, так как каждая тема будет поступать с разной скоростью, поэтому возникает необходимость обратного вызова.

Мне удалось получить то, что я считаю правильным для запуска обратного вызова, но я не могу найти никакой документации о том, как декодировать обратный вызов.Я ищу (1) подтверждение правильности моего подхода и (2) любую информацию о том, как правильно декодировать данные в обратном вызове, чтобы получить нужные мне значения, особенно для TOPIC_QUATERNION.краткое изложение моей реализации ниже.Заранее спасибо за любые указания по этому вопросу.

1) создать пакет

2) запустить пакет

3) зарегистрировать обратный вызов, используя: registerUserPackageUnpackCallback - это правильно ?????

4) декодировать обратный вызов - как мне это сделать?

//**********************create package  1st*****************
 // Package 3: Subscribe to Quaternion at freq 200 Hz.
    pkgIndex                   = 3;
    freq                       = 200;
    TopicName topicList200Hz[] = { TOPIC_QUATERNION, TOPIC_HARD_SYNC };
    numTopic        = sizeof(topicList200Hz) / sizeof(topicList200Hz[0]);
    enableTimestamp = false;

    pkgStatus = vehicle->subscribe->initPackageFromTopicList(
            pkgIndex, numTopic, topicList200Hz, enableTimestamp, freq);
    if (!(pkgStatus))
    {
        return pkgStatus;
    }

//**********************START PACKAGE*****************  
  subscribeStatus = vehicle->subscribe->startPackage(pkgIndex, responseTimeout);
    if (ACK::getError(subscribeStatus) != ACK::SUCCESS)
    {
        ACK::getErrorCodeMessage(subscribeStatus, __func__);
        // Cleanup before return
        vehicle->subscribe->removePackage(pkgIndex, responseTimeout);
        return false;
    }else {
       //********************************* I assign the callback with the proper index**********
        vehicle->subscribe->registerUserPackageUnpackCallback(pkgIndex, package3Callback);
        //vehicle->subscribe.
    }



void package3Callback(Vehicle *vehiclePtr, RecvContainer recvFrame, UserData userData){
    std::cout << "package3Callback called.\n";


 ***********************   HOW DO I DECODE THIS???????????****************


}
...