13 #include <QFileDialog> 14 #include <QMessageBox> 21 return static_cast<double>(*
reinterpret_cast<const T*
>(
data));
27 _ui =
new Ui::DialogZcm;
42 return "Zcm Streamer";
56 auto const subscribe_text = settings.value(
"DataStreamZcm::subscribe",
".*").toString();
57 _ui->lineEditSubscribe->setText(subscribe_text);
60 auto transport = QString(getenv(
"ZCM_DEFAULT_URL"));
61 transport = settings.value(
"DataStreamZcm::transport", transport).toString();
62 _ui->lineEditTransport->setText(transport);
66 _dialog->restoreGeometry(settings.value(
"DataStreamZcm::geometry").toByteArray());
69 settings.setValue(
"DataStreamZcm::geometry",
_dialog->saveGeometry());
70 if (res == QDialog::Rejected) {
75 settings.setValue(
"DataStreamZcm::subscribe",
_ui->lineEditSubscribe->text());
76 settings.setValue(
"DataStreamZcm::transport",
_ui->lineEditTransport->text());
84 catch(std::exception& ex) {
85 QMessageBox::warning(
nullptr,
"Error",
86 tr(
"Exception from zcm::ZCM() :\n%1").
arg(ex.what()));
90 QMessageBox::warning(
nullptr,
"Error",
"Failed to create zcm::ZCM()");
104 QMessageBox::warning(
nullptr,
"Error",
"Failed to create zcm::TypeDb()");
118 QMessageBox::warning(
nullptr,
"Error",
"Failed to subscribe");
150 QDomElement elem = doc.createElement(
"config");
154 parent_element.appendChild(elem);
160 QDomElement elem = parent_element.firstChildElement(
"config");
170 settings.setValue(
"DataStreamZcm::transport",
_transport);
177 const void*
data,
void* usr)
181 case ZCM_FIELD_INT8_T: me->
_numerics.emplace_back(name, toDouble<int8_t>(data));
break;
182 case ZCM_FIELD_INT16_T: me->
_numerics.emplace_back(name, toDouble<int16_t>(data));
break;
183 case ZCM_FIELD_INT32_T: me->
_numerics.emplace_back(name, toDouble<int32_t>(data));
break;
184 case ZCM_FIELD_INT64_T: me->
_numerics.emplace_back(name, toDouble<int64_t>(data));
break;
185 case ZCM_FIELD_BYTE: me->
_numerics.emplace_back(name, toDouble<uint8_t>(data));
break;
186 case ZCM_FIELD_FLOAT: me->
_numerics.emplace_back(name, toDouble<float>(data));
break;
187 case ZCM_FIELD_DOUBLE: me->
_numerics.emplace_back(name, toDouble<double>(data));
break;
188 case ZCM_FIELD_BOOLEAN: me->
_numerics.emplace_back(name, toDouble<bool>(data));
break;
189 case ZCM_FIELD_STRING: me->
_strings.emplace_back(name,
string((
const char*)data));
break;
190 case ZCM_FIELD_USER_TYPE:
assert(
false &&
"Should not be possble");
197 zcm::Introspection::processEncodedType(channel,
198 rbuf->data, rbuf->data_size,
202 std::lock_guard<std::mutex> lock(
mutex());
209 itr->second.pushBack({ double(rbuf->recv_utime) / 1e6, n.second });
213 if (itr ==
dataMap().strings.end()) {
216 itr->second.pushBack({ double(rbuf->recv_utime) / 1e6,
s.second });
228 QString url = getenv(
"ZCM_DEFAULT_URL");
230 QMessageBox::warning(
nullptr,
"Error",
"Environment variable ZCM_DEFAULT_URL not set");
232 _ui->lineEditTransport->setText(url);
void on_pushButtonUrl_clicked()
QString _subscribe_string
std::unique_ptr< zcm::TypeDb > _types
virtual bool xmlSaveState(QDomDocument &doc, QDomElement &parent_element) const override
Override this method to save the status of the plugin to XML.
std::unique_ptr< zcm::ZCM > _zcm
ConfigZCM * _config_widget
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
void handler(const zcm::ReceiveBuffer *rbuf, const std::string &channel)
zcm::Subscription * _subs
virtual bool isRunning() const override
isRunning
TimeseriesMap numeric
Numerical timeseries.
std::vector< std::pair< std::string, std::string > > _strings
#define assert(condition)
virtual void shutdown() override
shutdown Stop streaming
static void processData(const std::string &name, zcm_field_type_t type, const void *data, void *usr)
StringSeriesMap strings
Series of strings.
TimeseriesMap::iterator addNumeric(const std::string &name, PlotGroup::Ptr group={})
double toDouble(const void *data)
PlotDataMapRef & dataMap()
StringSeriesMap::iterator addStringSeries(const std::string &name, PlotGroup::Ptr group={})
QString getLibraries() const
virtual const char * name() const override
Name of the plugin type, NOT the particular instance.
virtual bool xmlLoadState(const QDomElement &parent_element) override
Override this method to load the status of the plugin from XML.
std::vector< std::pair< std::string, double > > _numerics
virtual bool start(QStringList *) override
start streaming.