Fleshed out data model
[pulseview.git] / sigsession.cpp
index 2df6a151c31e972651f84cc8b157862741ed5204..37c758f776e098d86023bb07c123874ad53b2972 100644 (file)
 
 #include "sigsession.h"
 
+#include "logicdata.h"
+#include "logicdatasnapshot.h"
+
+#include <QDebug>
+
 #include <assert.h>
 
+using namespace boost;
+
 // TODO: This should not be necessary
 SigSession* SigSession::session = NULL;
 
@@ -55,23 +62,40 @@ void SigSession::dataFeedIn(const struct sr_dev_inst *sdi,
        assert(packet);
 
        switch (packet->type) {
+       case SR_DF_HEADER:
+               break;
+
        case SR_DF_META_LOGIC:
                {
-                       const sr_datafeed_meta_logic *meta_logic =
-                               (sr_datafeed_meta_logic*)packet->payload;
-                       int num_enabled_probes = 0;
-
-                       for (int i = 0; i < meta_logic->num_probes; i++) {
-                               const sr_probe *probe =
-                                       (sr_probe *)g_slist_nth_data(sdi->probes, i);
-                               if (probe->enabled) {
-                                       probeList[num_enabled_probes++] = probe->index;
-                               }
-                       }
+                       assert(packet->payload);
+
+                       _logic_data.reset(new LogicData(
+                               *(sr_datafeed_meta_logic*)packet->payload));
+
+                       assert(_logic_data);
+                       if(!_logic_data)
+                               break;
+
+                       // Add an empty data snapshot
+                       shared_ptr<LogicDataSnapshot> snapshot(
+                               new LogicDataSnapshot());
+                       _logic_data->push_snapshot(snapshot);
+                       _cur_logic_snapshot = snapshot;
+
+                       break;
                }
+
+       case SR_DF_LOGIC:
+               assert(packet->payload);
+               assert(_cur_logic_snapshot);
+               if(_cur_logic_snapshot)
+                       _cur_logic_snapshot->append_payload(
+                               *(sr_datafeed_logic*)packet->payload);
                break;
 
        case SR_DF_END:
+               _cur_logic_snapshot.reset();
+               dataUpdated();
                break;
        }
 }