From 20f0d077ee9f423dd36d0636c5ade3b1cf2a28b4 Mon Sep 17 00:00:00 2001 From: Neil Puthuff Date: Mon, 30 Jul 2018 16:20:06 -0700 Subject: [PATCH] Updated and merged WaitSet approach into polled approach. Updated rti logo --- .../ExampleCode/resource/gui/rti.ico | Bin 85094 -> 58662 bytes .../src/TrackGui/NetworkInterface.cxx | 128 ++++-------------- .../src/TrackGui/NetworkInterface.h | 9 -- .../ExampleCode/src/TrackGui/TrackGuiApp.cxx | 1 + 4 files changed, 29 insertions(+), 109 deletions(-) diff --git a/VehicleTracking/ExampleCode/resource/gui/rti.ico b/VehicleTracking/ExampleCode/resource/gui/rti.ico index ec557746d18fed15bfd3a6c602084a1c04abb0b9..9e9e79d0509efb334b894bff09732efe80a61597 100644 GIT binary patch literal 58662 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 > *tracksUpdated, - std::vector< DdsAutoType > *tracksDeleted) + std::vector< DdsAutoType > *tracksDeleted) { - + _mutex->Lock(); + DDS_ReturnCode_t retcode; +#ifdef VTE_USE_WAITSET // define to use a WaitSet instead of polling to receive track data ConditionSeq activeConditions; DDS_Duration_t timeout = {0,300000000}; - - _mutex->Lock(); - // Block this thread until track data becomes available. - DDS_ReturnCode_t retcode = _waitSet->wait(activeConditions, timeout); - + retcode = _waitSet->wait(activeConditions, timeout); // May be normal to time out if (retcode == DDS_RETCODE_TIMEOUT) { @@ -474,6 +487,7 @@ void TrackReader::WaitForTracks( _mutex->Unlock(); throw errss.str(); } +#endif // VTE_USE_WAITSET // Note: These two sequences are being created with a length = 0. // this means that the middleware is loaning memory to them, which @@ -482,96 +496,10 @@ void TrackReader::WaitForTracks( TrackSeq trackSeq; SampleInfoSeq sampleInfos; - // Call read in a loop until there is no data left to read. Note that - // retcode must be okay, or an exception would have been thrown above - while (retcode != DDS_RETCODE_NO_DATA) - { - // This leaves the data in the DataReader's queue. Alternately, can - // call take() which will remove it from the queue. Leaving data in - // the makes sense in this application for two reasons: - // 1) the QoS allows the overwriting of data in the queue - // 2) the application wants to always see the latest update of each - // instance - retcode = _reader->read(trackSeq, sampleInfos); - - if (retcode != DDS_RETCODE_NO_DATA && - retcode != DDS_RETCODE_OK) - { - std::stringstream errss; - errss << "WaitForTracks(): error when retrieving flight plans."; - _mutex->Unlock(); - throw errss.str(); - } - - // Note, based on the QoS profile (history = keep last, depth = 1) and - // the fact that we modeled flights as separate instances, we can - // assume there is only one entry per flight. So if a flight plan for - // a particular flight has been changed 10 times, we will only be - // maintaining the most recent update to that flight plan in the - // middleware queue. - for (int i = 0; i < trackSeq.length(); i++) - { - if (sampleInfos[i].valid_data) - { - SampleInfo info = sampleInfos[i]; - - // Making copies of this type for clean API because we do not - // need lowest latency for flight plan data - DdsAutoType trackType = trackSeq[i]; - tracksUpdated->push_back(trackType); - } - else if (!sampleInfos[i].valid_data) - { - if (sampleInfos[i].instance_state != ALIVE_INSTANCE_STATE) - { - DdsAutoType trackType = trackSeq[i]; - trackType.trackId = - _reader->get_key_value(trackType, - sampleInfos[i].instance_handle); - tracksDeleted->push_back(trackType); - } - } - - } - - // The original track sequence was loaned from the middleware to the - // application. We have copied the data out of it, so we can now - // return the loan to the middleware. - _reader->return_loan(trackSeq, sampleInfos); - } - - _mutex->Unlock(); - -} - -// ---------------------------------------------------------------------------- -// This example is using an application thread to poll for all the existing -// track data inside the middleware's queue. -// -// This goes through two steps: -// 1) read() all ALIVE data from the DataReader. These are the updates of all -// the flights that have not landed. By calling read() we leave the data in -// the queue, and can access it again later if it is not updated. After -// reading the data, we return the loan to the DataReader() -// 2) take() all the NOT_ALIVE data from the DataReader. These are the updates -// of flights that have landed. This removes the deletion notices from the -// queue. After taking the data, we return the loan to the DataReader() -// -void TrackReader::GetCurrentTracks( - std::vector< DdsAutoType > *tracksUpdated, - std::vector< DdsAutoType > *tracksDeleted) -{ - _mutex->Lock(); - - // The sequences that will be filled in with the data. These are empty, - // so the middleware will loan the data to the sequences. - TrackSeq trackSeq; - SampleInfoSeq sampleInfos; - // This reads all ALIVE track data from the queue, and loans it to the // application in the trackSeq sequence. See below where you must return // the loan. - DDS_ReturnCode_t retcode = _reader->read( + retcode = _reader->read( trackSeq, sampleInfos, DDS_LENGTH_UNLIMITED, DDS_ANY_SAMPLE_STATE, DDS_ANY_VIEW_STATE, DDS_ALIVE_INSTANCE_STATE); diff --git a/VehicleTracking/ExampleCode/src/TrackGui/NetworkInterface.h b/VehicleTracking/ExampleCode/src/TrackGui/NetworkInterface.h index a87dd0c4..aaf03db5 100644 --- a/VehicleTracking/ExampleCode/src/TrackGui/NetworkInterface.h +++ b/VehicleTracking/ExampleCode/src/TrackGui/NetworkInterface.h @@ -157,15 +157,6 @@ class TrackReader // --- Destructor --- ~TrackReader(); - // --- Waiting for tracks --- - // This waits for new tracks to become available, and notifies the - // application that there are new tracks or deleted tracks. - void WaitForTracks( - std::vector< DdsAutoType > - *tracksUpdated, - std::vector< DdsAutoType > - *tracksDeleted); - // --- Retreiving current track updates --- // This retrieves track updates from the middleware queue. This is used // to poll for all the current track updates from the middleware. This diff --git a/VehicleTracking/ExampleCode/src/TrackGui/TrackGuiApp.cxx b/VehicleTracking/ExampleCode/src/TrackGui/TrackGuiApp.cxx index f77b03ae..687bef86 100644 --- a/VehicleTracking/ExampleCode/src/TrackGui/TrackGuiApp.cxx +++ b/VehicleTracking/ExampleCode/src/TrackGui/TrackGuiApp.cxx @@ -51,6 +51,7 @@ bool TrackApp::OnInit() wxPoint point(300, 300); _frame->SetPosition(point); + _frame->SetIcon(wxIcon(wxT("../../../resource/gui/rti.ico"), wxBITMAP_TYPE_ICO)); _frame->Show(true); SetTopWindow(_frame);