| 1378 | } |
| 1379 | |
| 1380 | void SigSession::data_feed_in(const struct sr_dev_inst *sdi, |
| 1381 | const struct sr_datafeed_packet *packet) |
| 1382 | { |
| 1383 | assert(sdi); |
| 1384 | assert(packet); |
| 1385 | |
| 1386 | ds_lock_guard lock(_data_mutex); |
| 1387 | |
| 1388 | if (_data_lock && packet->type != SR_DF_END) |
| 1389 | return; |
| 1390 | |
| 1391 | if (packet->type != SR_DF_END && |
| 1392 | packet->status != SR_PKT_OK) |
| 1393 | { |
| 1394 | _error = Pkt_data_err; |
| 1395 | _callback->session_error(); |
| 1396 | return; |
| 1397 | } |
| 1398 | |
| 1399 | switch (packet->type) |
| 1400 | { |
| 1401 | case SR_DF_HEADER: |
| 1402 | feed_in_header(sdi); |
| 1403 | break; |
| 1404 | |
| 1405 | case SR_DF_META: |
| 1406 | assert(packet->payload); |
| 1407 | feed_in_meta(sdi, |
| 1408 | *(const sr_datafeed_meta *)packet->payload); |
| 1409 | break; |
| 1410 | |
| 1411 | case SR_DF_TRIGGER: |
| 1412 | assert(packet->payload); |
| 1413 | feed_in_trigger(*(const ds_trigger_pos *)packet->payload); |
| 1414 | break; |
| 1415 | |
| 1416 | case SR_DF_LOGIC: |
| 1417 | assert(packet->payload); |
| 1418 | feed_in_logic(*(const sr_datafeed_logic *)packet->payload); |
| 1419 | break; |
| 1420 | |
| 1421 | case SR_DF_DSO: |
| 1422 | assert(packet->payload); |
| 1423 | feed_in_dso(*(const sr_datafeed_dso *)packet->payload); |
| 1424 | break; |
| 1425 | |
| 1426 | case SR_DF_ANALOG: |
| 1427 | assert(packet->payload); |
| 1428 | feed_in_analog(*(const sr_datafeed_analog *)packet->payload); |
| 1429 | break; |
| 1430 | |
| 1431 | case SR_DF_OVERFLOW: |
| 1432 | { |
| 1433 | if (_error == No_err) |
| 1434 | { |
| 1435 | _error = Data_overflow; |
| 1436 | _callback->session_error(); |
| 1437 | } |
no test coverage detected