BULKIO - порт строкового типа

Я использую RedHawk 1.9. У меня есть выходной порт, через который я планирую отправлять строковые данные. В панели обзора в IDE я добавляю порт с типом BULKIO dataChar. Когда я пытаюсь сделать следующее:

   std::string cmd = "testCmd";
   this->dataChar->pushPacket( cmd.str(), bulkio::time::utils::now(), 
       false, this->ar8200CmdStream_id);

Я получаю сообщение об ошибке, которое указывает, что pushPacket хочет std::vector вместо char *. Это похоже на подход, принятый в руководстве.

Я выбрал неправильный тип BULKIO для строки? Я думал об использовании dataXML, но ожидал, что это формат XML.

PS: я заметил, что в руководстве не указано время в вызове pushPacket.


person JONATHAN LUELLEN    schedule 01.11.2013    source источник


Ответы (1)


Ты прав. Порт данных BULKIO для char принимает вектор символов. Ниже вы найдете фрагмент кода, который использует порт вывода char для отправки строки и порт ввода char для получения данных.


Из сервисной функции компонента pushString:

std::string str = "hello_world";
data = std::vector<char>(str.begin(), str.end());

stringOut->pushPacket(this->data, tstamp, false, this->stream_id);

Из сервисной функции компонента receiveString:

bulkio::InCharPort::dataTransfer *tmp = stringIn->getPacket(-1);

if (not tmp) { // No data is available
    return NOOP;
}

std::string outputString(tmp->dataBuffer.begin(), tmp->dataBuffer.end());
std::cout << outputString << std::endl;
fflush(stdout);

Однако типы портов bulkio обычно используются для потоковой передачи данных. Если вы намерены использовать строку как средство управления и контроля, вы можете пересмотреть свой выбор порта bulkio char в пользу API обмена сообщениями (http://redhawksdr.github.io/Documentation/mainch17.html).

Использование API обмена сообщениями также позволяет использовать средство просмотра событий IDE: http://redhawksdr.github.io/Documentation/mainch19.html#x21-32900019.4.7

person Youssef Bagoulla    schedule 04.11.2013