| 1322 | } |
| 1323 | |
| 1324 | bool StoreSession::load_decoders(dock::ProtocolDock *widget, QJsonArray &dec_array) |
| 1325 | { |
| 1326 | if (_session->get_device()->get_work_mode() != LOGIC) |
| 1327 | { |
| 1328 | dsv_info("StoreSession::load_decoders(), is not LOGIC mode."); |
| 1329 | return false; |
| 1330 | } |
| 1331 | |
| 1332 | if (dec_array.isEmpty()){ |
| 1333 | dsv_info("StoreSession::load_decoders(), json object array is empty."); |
| 1334 | return false; |
| 1335 | } |
| 1336 | |
| 1337 | int dec_index = -1; |
| 1338 | |
| 1339 | for (const QJsonValue &dec_value : dec_array) |
| 1340 | { |
| 1341 | QJsonObject dec_obj = dec_value.toObject(); |
| 1342 | std::vector<view::DecodeTrace*> &pre_dsigs = _session->get_decode_signals(); |
| 1343 | std::list<pv::data::decode::Decoder*> sub_decoders; |
| 1344 | |
| 1345 | //get sub decoders |
| 1346 | if (dec_obj.contains("stacked decoders")) { |
| 1347 | for(const QJsonValue &value : dec_obj["stacked decoders"].toArray()) { |
| 1348 | QJsonObject stacked_obj = value.toObject(); |
| 1349 | |
| 1350 | GSList *dl = g_slist_copy((GSList*)srd_decoder_list()); |
| 1351 | for(; dl; dl = dl->next) { |
| 1352 | const srd_decoder *const d = (srd_decoder*)dl->data; |
| 1353 | assert(d); |
| 1354 | |
| 1355 | if (QString::fromUtf8(d->id) == stacked_obj["id"].toString()) { |
| 1356 | sub_decoders.push_back(new data::decode::Decoder(d)); |
| 1357 | break; |
| 1358 | } |
| 1359 | } |
| 1360 | g_slist_free(dl); |
| 1361 | } |
| 1362 | } |
| 1363 | |
| 1364 | //create protocol |
| 1365 | bool ret = widget->add_protocol_by_id(dec_obj["id"].toString(), true, sub_decoders); |
| 1366 | if (!ret) |
| 1367 | { |
| 1368 | for(auto sub : sub_decoders){ |
| 1369 | delete sub; |
| 1370 | } |
| 1371 | sub_decoders.clear(); |
| 1372 | |
| 1373 | continue; //protocol is not exists; |
| 1374 | } |
| 1375 | |
| 1376 | dec_index++; |
| 1377 | |
| 1378 | if (dec_obj.contains("label")){ |
| 1379 | _session->set_decoder_row_label(dec_index, dec_obj["label"].toString()); |
| 1380 | } |
| 1381 |
no test coverage detected