Я очень новичок в RedHawk, и у меня есть следующий сценарий:
У меня есть три компонента A B и C, B и C, оба имеют навык владения, который является одним ключевым словом, описывающим возможности B или C. Поток: A запускается и запрашивает B.skill и C.skill, чтобы A знал, что могут сделать B и C. Затем, когда A сталкивается с задачей, которая подходит под набор навыков B или C, A запускает этот конкретный компонент для выполнения задачи.
Мой вопрос: как компонент A получает доступ к свойству B? Я посмотрел в Интернете и обнаружил простое введение в запрос redhawk (https://redhawksdr.github.io/Documentation/mainch4.html раздел 4.6.2), но я надеюсь, что кто-нибудь покажет мне фрагмент кода, который демонстрирует, как A обращается к свойству B. Кроме того, я не могу найти подробную документацию API запроса. Было бы здорово, если бы кто-то мог направить меня к этому.
Спасибо.
Этот пример, вероятно, может быть немного очищен, но в моем примере фрагмента, у CompA есть два выходных порта, оба типа ресурсов с именами compB_connection и compC_connection. Затем мы можем соединиться с портом ресурсов compB и compC (также называемым портом lollipop), который является прямым соединением с самим компонентом, поскольку он наследуется от API ресурса. Это дает нам доступ к методам компонента, таким как запуск, остановка, настройка, запрос и т. Д. Полный список см. В файлах idl.
CompB и CompC оба имеют свойство с идентификатором «skill». Мы можем использовать API запросов для запроса значений этих свойств.
std::string CompA_i::any_to_string(CORBA::Any value) {
std::ostringstream result;
const char* tmp;
value >>= tmp;
result << tmp;
return result.str();
}
int CompA_i::serviceFunction() {
CF::Properties compB_props, compC_props;
compB_props.length(1);
compC_props.length(1);
compB_props[0].id = "skill";
compC_props[0].id = "skill";
compB_connection->query(compB_props);
compC_connection->query(compC_props);
std::cout << "CompB Skills: " << any_to_string(compB_props[0].value) << std::endl;
std::cout << "CompC Skills: " << any_to_string(compC_props[0].value) << std::endl;
return FINISH;
}
Теперь, когда мы подключаем CompA к CompB и CompC и запускаем сигнал или песочницу, мы получаем следующий вывод:
CompB Skills: nunchuck skills
CompC Skills: bow hunting skills
Метод any_to_string был найден в prop_helpers.cpp в коде базового фреймворка; вероятно, в заголовочном файле есть вспомогательная функция, которая была бы лучше.
Других решений пока нет …