mirror of
https://github.com/DreamSourceLab/DSView.git
synced 2025-01-13 13:32:53 +08:00
fix: On real-time mode, the decode task show an error progress value
This commit is contained in:
parent
b3d0e04e31
commit
0a0ad7e367
@ -67,6 +67,7 @@ DecoderStack::DecoderStack(pv::SigSession *session,
|
||||
_stask_stauts = NULL;
|
||||
_is_capture_end = true;
|
||||
_snapshot = NULL;
|
||||
_progress = 0;
|
||||
|
||||
_stack.push_back(new decode::Decoder(dec));
|
||||
|
||||
@ -396,7 +397,7 @@ void DecoderStack::begin_decode_work()
|
||||
assert(_decode_state == Stopped);
|
||||
|
||||
_error_message = "";
|
||||
_decode_state = Running;
|
||||
_decode_state = Running;
|
||||
do_decode_work();
|
||||
_decode_state = Stopped;
|
||||
}
|
||||
@ -514,6 +515,9 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod
|
||||
|
||||
bool bCheckEnd = false;
|
||||
uint64_t end_index = decode_end;
|
||||
|
||||
_progress = 0;
|
||||
uint64_t sended_len = 0;
|
||||
|
||||
while(i < end_index && !_no_memory && !status->_bStop)
|
||||
{
|
||||
@ -581,7 +585,10 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod
|
||||
break;
|
||||
}
|
||||
|
||||
i = chunk_end;
|
||||
sended_len += chunk_end - i;
|
||||
_progress = (int)(sended_len * 100 / end_index);
|
||||
|
||||
i = chunk_end;
|
||||
|
||||
//use mutex
|
||||
{
|
||||
@ -593,8 +600,12 @@ void DecoderStack::decode_data(const uint64_t decode_start, const uint64_t decod
|
||||
last_cnt = i;
|
||||
new_decode_data();
|
||||
}
|
||||
|
||||
entry_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
_progress = 100;
|
||||
new_decode_data();
|
||||
|
||||
// the task is normal ends,so all samples was processed;
|
||||
if (!bError && bEndTime){
|
||||
|
@ -169,6 +169,11 @@ public:
|
||||
|
||||
inline void set_capture_end_flag(bool isEnd){
|
||||
_is_capture_end = isEnd;
|
||||
if (!isEnd){_progress = 0;}
|
||||
}
|
||||
|
||||
inline int get_progress(){
|
||||
return _progress;
|
||||
}
|
||||
|
||||
private:
|
||||
@ -204,6 +209,7 @@ private:
|
||||
decode_task_status *_stask_stauts;
|
||||
mutable std::mutex _output_mutex;
|
||||
bool _is_capture_end;
|
||||
int _progress;
|
||||
|
||||
friend class DecoderStackTest::TwoDecoderStack;
|
||||
};
|
||||
|
@ -462,7 +462,7 @@ void ProtocolDock::decoded_progress(int progress)
|
||||
lay.SetProgress(pg, err);
|
||||
|
||||
// have custom data format
|
||||
if (progress == 100 && lay.m_decoderStatus != NULL){
|
||||
if (pg == 100 && lay.m_decoderStatus != NULL){
|
||||
lay.enable_format(lay.m_decoderStatus->m_bNumeric);
|
||||
}
|
||||
}
|
||||
@ -997,6 +997,12 @@ bool ProtocolDock::protocol_sort_callback(const DecoderInfoItem *o1, const Decod
|
||||
_selected_protocol_id = QString(dec->id);
|
||||
this->on_add_protocol();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ProtocolDock::ResetView()
|
||||
{
|
||||
decoded_progress(0);
|
||||
}
|
||||
|
||||
} // namespace dock
|
||||
} // namespace pv
|
||||
|
@ -84,6 +84,8 @@ public:
|
||||
void del_all_protocol();
|
||||
bool add_protocol_by_id(QString id, bool silent, std::list<pv::data::decode::Decoder*> &sub_decoders);
|
||||
|
||||
void ResetView();
|
||||
|
||||
private:
|
||||
void changeEvent(QEvent *event);
|
||||
void retranslateUi();
|
||||
|
@ -91,6 +91,8 @@ public:
|
||||
#define DSV_MSG_TRIG_NEXT_COLLECT 7001
|
||||
#define DSV_MSG_SAVE_COMPLETE 7002
|
||||
|
||||
#define DSV_MSG_CLEAR_DECODE_DATA 8001
|
||||
|
||||
class IMessageListener
|
||||
{
|
||||
public:
|
||||
|
@ -1738,6 +1738,10 @@ namespace pv
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DSV_MSG_CLEAR_DECODE_DATA:
|
||||
_protocol_widget->ResetView();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -524,12 +524,14 @@ namespace pv
|
||||
|
||||
if (mode == LOGIC)
|
||||
{
|
||||
bool bClearDecodeData = false;
|
||||
// On repeate mode, the last data can use to decode, so can't remove the current decode task.
|
||||
// And on this mode, the decode task will be created when capture end.
|
||||
if (is_repeat_mode() == false){
|
||||
int run_dex = 0;
|
||||
clear_all_decode_task(run_dex);
|
||||
clear_decode_result();
|
||||
bClearDecodeData = true;
|
||||
}
|
||||
|
||||
for (auto de : _decode_traces)
|
||||
@ -543,6 +545,9 @@ namespace pv
|
||||
add_decode_task(de);
|
||||
}
|
||||
}
|
||||
|
||||
if (bClearDecodeData)
|
||||
_callback->trigger_message(DSV_MSG_CLEAR_DECODE_DATA);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -124,7 +124,6 @@ DecodeTrace::DecodeTrace(pv::SigSession *session,
|
||||
_colour = DecodeColours[index % countof(DecodeColours)];
|
||||
|
||||
_pub_input_layer = NULL;
|
||||
_progress = 0;
|
||||
_decode_start = 0;
|
||||
_decode_end = INT64_MAX;
|
||||
_decoder_stack = decoder_stack;
|
||||
@ -555,17 +554,7 @@ void DecodeTrace::draw_unshown_row(QPainter &p, int y, int h, int left,
|
||||
|
||||
void DecodeTrace::on_new_decode_data()
|
||||
{
|
||||
uint64_t real_end = min(_decoder_stack->sample_count(), _decode_end+1);
|
||||
const int64_t need_sample_count = real_end - _decode_start;
|
||||
if (real_end == 0) {
|
||||
_progress = 0;
|
||||
} else if (need_sample_count <= 0) {
|
||||
_progress = 100;
|
||||
} else {
|
||||
const uint64_t samples_decoded = _decoder_stack->samples_decoded();
|
||||
_progress = floor(samples_decoded * 100.0 / need_sample_count);
|
||||
}
|
||||
decoded_progress(_progress);
|
||||
decoded_progress(_decoder_stack->get_progress());
|
||||
|
||||
if (_view && _view->session().is_stopped_status())
|
||||
_view->data_updated();
|
||||
@ -575,7 +564,7 @@ void DecodeTrace::on_new_decode_data()
|
||||
|
||||
int DecodeTrace::get_progress()
|
||||
{
|
||||
return _progress;
|
||||
return _decoder_stack->get_progress();
|
||||
}
|
||||
|
||||
void DecodeTrace::on_decode_done()
|
||||
|
@ -192,7 +192,6 @@ private:
|
||||
uint64_t _decode_cursor2;
|
||||
|
||||
QFormLayout *_pub_input_layer;
|
||||
int _progress;
|
||||
|
||||
std::vector<QString> _cur_row_headings;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user