Fix trigger time delay @ osc mode

This commit is contained in:
DreamSourceLab 2015-11-11 21:22:03 +08:00
parent 800f4c615e
commit cc6c663a96
7 changed files with 32 additions and 14 deletions

View File

@ -75,14 +75,14 @@ void DsoSnapshot::append_payload(const sr_datafeed_dso &dso)
// Generate the first mip-map from the data
if (_envelope_en)
append_payload_to_envelope_levels();
append_payload_to_envelope_levels(dso.samplerate_tog);
}
}
void DsoSnapshot::enable_envelope(bool enable)
{
if (!_envelope_done && enable)
append_payload_to_envelope_levels();
append_payload_to_envelope_levels(true);
_envelope_en = enable;
}
@ -146,13 +146,16 @@ void DsoSnapshot::reallocate_envelope(Envelope &e)
}
}
void DsoSnapshot::append_payload_to_envelope_levels()
void DsoSnapshot::append_payload_to_envelope_levels(bool header)
{
for (unsigned int i = 0; i < _channel_num; i++) {
Envelope &e0 = _envelope_levels[i][0];
uint64_t prev_length;
EnvelopeSample *dest_ptr;
if (header)
prev_length = 0;
else
prev_length = e0.length;
e0.length = _sample_count / EnvelopeScaleFactor;

View File

@ -90,7 +90,7 @@ public:
private:
void reallocate_envelope(Envelope &l);
void append_payload_to_envelope_levels();
void append_payload_to_envelope_levels(bool header);
private:
struct Envelope _envelope_levels[2*DS_MAX_DSO_PROBES_NUM][ScaleStepCount];

View File

@ -927,7 +927,6 @@ void DsoSignal::paint_trace(QPainter &p,
QColor trace_colour = _colour;
trace_colour.setAlpha(150);
p.setPen(trace_colour);
//p.setPen(QPen(_colour, 3, Qt::SolidLine));
QPointF *points = new QPointF[sample_count];
QPointF *point = points;
@ -955,6 +954,8 @@ void DsoSignal::paint_trace(QPainter &p,
}
p.drawPolyline(points, point - points);
p.eraseRect(get_view_rect().right(), get_view_rect().top(),
_view->viewport()->width() - get_view_rect().width(), get_view_rect().height());
//delete[] samples;
delete[] points;
@ -1422,6 +1423,10 @@ bool DsoSignal::measure(const QPointF &p)
if (!enabled())
return false;
const QRectF window = get_view_rect();
if (!window.contains(p))
return false;
const deque< boost::shared_ptr<pv::data::DsoSnapshot> > &snapshots =
_data->get_snapshots();
if (snapshots.empty())

View File

@ -42,7 +42,7 @@ const QColor Trace::dsYellow = QColor(238, 178, 17, 255);
const QColor Trace::dsRed = QColor(213, 15, 37, 255);
const QColor Trace::dsGreen = QColor(0, 153, 37, 200);
const QColor Trace::dsGray = QColor(0x88, 0x8A, 0x85, 60);
const QColor Trace::dsFore = QColor(0xff, 0xff, 0xff, 100);
const QColor Trace::dsFore = QColor(0xff, 0xff, 0xff, 60);
const QColor Trace::dsBack = QColor(0x16, 0x18, 0x23, 180);
const QColor Trace::dsDisable = QColor(0x88, 0x8A, 0x85, 200);
const QColor Trace::dsActive = QColor(17, 133, 209, 255);

View File

@ -1938,7 +1938,8 @@ static void receive_transfer(struct libusb_transfer *transfer)
mstatus.ch1_pcnt = *((const uint32_t*)cur_buf + mstatus_offset/2 + 14/2);
mstatus.vlen = *((const uint32_t*)cur_buf + mstatus_offset/2 + 16/2) & 0x7fffffff;
mstatus.stream_mode = *((const uint32_t*)cur_buf + mstatus_offset/2 + 16/2) & 0x80000000;
mstatus.sample_divider = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2);
mstatus.sample_divider = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2) & 0x7fffffff;
mstatus.sample_divider_tog = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2) & 0x80000000;
mstatus.zeroing = (*((const uint16_t*)cur_buf + mstatus_offset + 128) & 0x8000) != 0;
mstatus.ch0_vpos_mid = *((const uint16_t*)cur_buf + mstatus_offset + 128) & 0x7fff;
mstatus.ch0_voff_mid = *((const uint16_t*)cur_buf + mstatus_offset + 129);
@ -1972,8 +1973,10 @@ static void receive_transfer(struct libusb_transfer *transfer)
dso.mq = SR_MQ_VOLTAGE;
dso.unit = SR_UNIT_VOLT;
dso.mqflags = SR_MQFLAG_AC;
dso.samplerate_tog = mstatus.sample_divider_tog;
dso.data = cur_buf + trigger_offset_bytes;
} else {
packet.type = SR_DF_ABANDON;
mstatus_valid = FALSE;
}
} else {
@ -2028,6 +2031,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
}
/* send data to session bus */
if (packet.type != SR_DF_ABANDON)
sr_session_send(devc->cb_data, &packet);
}

View File

@ -2202,7 +2202,8 @@ static void receive_transfer(struct libusb_transfer *transfer)
mstatus.ch1_pcnt = *((const uint32_t*)cur_buf + mstatus_offset/2 + 14/2);
mstatus.vlen = *((const uint32_t*)cur_buf + mstatus_offset/2 + 16/2) & 0x7fffffff;
mstatus.stream_mode = *((const uint32_t*)cur_buf + mstatus_offset/2 + 16/2) & 0x80000000;
mstatus.sample_divider = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2);
mstatus.sample_divider = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2) & 0x7fffffff;
mstatus.sample_divider_tog = *((const uint32_t*)cur_buf + mstatus_offset/2 + 18/2) & 0x80000000;
mstatus.zeroing = (*((const uint16_t*)cur_buf + mstatus_offset + 128) & 0x8000) != 0;
mstatus.ch0_adc_off = *((const uint8_t*)cur_buf + mstatus_offset*2 + 131*2);
mstatus.ch0_adc_sign = *((const uint8_t*)cur_buf + mstatus_offset*2 + 131*2+1);
@ -2229,6 +2230,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
dso.mq = SR_MQ_VOLTAGE;
dso.unit = SR_UNIT_VOLT;
dso.mqflags = SR_MQFLAG_AC;
dso.samplerate_tog = mstatus.sample_divider_tog;
dso.data = cur_buf + trigger_offset_bytes;
} else {
devc->mstatus_valid = FALSE;

View File

@ -176,6 +176,7 @@ enum {
SR_DF_ANALOG,
SR_DF_FRAME_BEGIN,
SR_DF_FRAME_END,
SR_DF_ABANDON,
};
/** Values for sr_datafeed_analog.mq. */
@ -322,6 +323,8 @@ struct sr_datafeed_dso {
int unit;
/** Bitmap with extra information about the MQ. */
uint64_t mqflags;
/** samplerate different from last packet */
gboolean samplerate_tog;
/** The analog value(s). The data is interleaved according to
* the probes list. */
void *data;
@ -624,6 +627,7 @@ struct sr_status {
uint32_t vlen;
gboolean stream_mode;
uint32_t sample_divider;
gboolean sample_divider_tog;
gboolean zeroing;
uint16_t ch0_vpos_mid;