forked from Ivasoft/DSView
Fix display issue, add signal height limit
This commit is contained in:
@@ -40,7 +40,7 @@ Annotation::Annotation(const srd_proto_data *const pdata) :
|
||||
(const srd_proto_data_annotation*)pdata->data;
|
||||
assert(pda);
|
||||
|
||||
_format = pda->ann_format;
|
||||
_format = pda->ann_class;
|
||||
|
||||
const char *const *annotations = (char**)pda->ann_text;
|
||||
while(*annotations) {
|
||||
|
||||
@@ -48,7 +48,7 @@ Search::Search(QWidget *parent, struct sr_dev_inst *sdi, QString pattern) :
|
||||
search_lineEdit.setInputMask("X X X X X X X X X X X X X X X X");
|
||||
search_lineEdit.setFont(font);
|
||||
|
||||
QLabel *search_label = new QLabel("1 1 1 1 1\n5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0");
|
||||
QLabel *search_label = new QLabel("1 1 1 1 1 1\n5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0");
|
||||
search_label->setFont(font);
|
||||
|
||||
search_buttonBox.addButton(QDialogButtonBox::Ok);
|
||||
|
||||
@@ -284,6 +284,7 @@ void MainWindow::update_device_list()
|
||||
{
|
||||
assert(_sampling_bar);
|
||||
|
||||
_session.stop_capture();
|
||||
_view->show_trig_cursor(false);
|
||||
_trigger_widget->device_change();
|
||||
#ifdef ENABLE_DECODE
|
||||
|
||||
@@ -82,6 +82,8 @@ DeviceOptions::DeviceOptions(struct sr_dev_inst *sdi) :
|
||||
case SR_CONF_BUFFERSIZE:
|
||||
case SR_CONF_TRIGGER_SOURCE:
|
||||
case SR_CONF_FILTER:
|
||||
case SR_CONF_MAX_HEIGHT:
|
||||
case SR_CONF_MAX_HEIGHT_VALUE:
|
||||
case SR_CONF_COUPLING:
|
||||
case SR_CONF_EN_CH:
|
||||
case SR_CONF_OPERATION_MODE:
|
||||
|
||||
@@ -122,10 +122,10 @@ void DevMode::on_mode_change()
|
||||
i != _mode_button_list.end(); i++) {
|
||||
if ((*i).first.get() == button) {
|
||||
if (dev_inst->dev_inst()->mode != (*i).second->mode) {
|
||||
_view.session().stop_capture();
|
||||
dev_inst->set_config(NULL, NULL,
|
||||
SR_CONF_DEVICE_MODE,
|
||||
g_variant_new_int16((*i).second->mode));
|
||||
|
||||
mode_changed();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ const int View::LabelMarginWidth = 70;
|
||||
const int View::RulerHeight = 50;
|
||||
|
||||
const int View::MaxScrollValue = INT_MAX / 2;
|
||||
const int View::MaxHeightUnit = 20;
|
||||
|
||||
//const int View::SignalHeight = 30;s
|
||||
const int View::SignalMargin = 10;
|
||||
@@ -470,6 +471,7 @@ void View::update_scale()
|
||||
void View::signals_changed()
|
||||
{
|
||||
int total_rows = 0;
|
||||
uint8_t max_height = MaxHeightUnit;
|
||||
const vector< boost::shared_ptr<Trace> > traces(get_traces());
|
||||
BOOST_FOREACH(const boost::shared_ptr<Trace> t, traces)
|
||||
{
|
||||
@@ -483,7 +485,16 @@ void View::signals_changed()
|
||||
- horizontalScrollBar()->height()
|
||||
- 2 * SignalMargin * traces.size()) * 1.0 / total_rows;
|
||||
|
||||
_signalHeight = (int)((height <= 0) ? 1 : height);
|
||||
if (_session.get_device()->dev_inst()->mode == LOGIC) {
|
||||
GVariant* gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_MAX_HEIGHT_VALUE);
|
||||
if (gvar != NULL) {
|
||||
max_height = (g_variant_get_byte(gvar) + 1) * MaxHeightUnit;
|
||||
g_variant_unref(gvar);
|
||||
}
|
||||
_signalHeight = (int)((height <= 0) ? 1 : (height >= max_height) ? max_height : height);
|
||||
} else {
|
||||
_signalHeight = (int)((height <= 0) ? 1 : height);
|
||||
}
|
||||
_spanY = _signalHeight + 2 * SignalMargin;
|
||||
int next_v_offset = SignalMargin;
|
||||
BOOST_FOREACH(boost::shared_ptr<Trace> t, traces) {
|
||||
|
||||
@@ -64,6 +64,7 @@ private:
|
||||
static const int RulerHeight;
|
||||
|
||||
static const int MaxScrollValue;
|
||||
static const int MaxHeightUnit;
|
||||
|
||||
public:
|
||||
//static const int SignalHeight;
|
||||
|
||||
@@ -169,6 +169,7 @@ struct DSL_context {
|
||||
int trigger_stage;
|
||||
uint16_t trigger_buffer[NUM_TRIGGER_STAGES];
|
||||
uint64_t timebase;
|
||||
uint8_t max_height;
|
||||
uint8_t trigger_slope;
|
||||
uint8_t trigger_source;
|
||||
uint8_t trigger_hrate;
|
||||
|
||||
@@ -89,6 +89,14 @@ static const char *filters[] = {
|
||||
"1 Sample Clock",
|
||||
};
|
||||
|
||||
static const char *maxHeights[] = {
|
||||
"1X",
|
||||
"2X",
|
||||
"3X",
|
||||
"4X",
|
||||
"5X",
|
||||
};
|
||||
|
||||
static const int32_t hwopts[] = {
|
||||
SR_CONF_CONN,
|
||||
};
|
||||
@@ -99,6 +107,7 @@ static const int32_t hwcaps[] = {
|
||||
SR_CONF_SAMPLERATE,
|
||||
|
||||
/* These are really implemented in the driver, not the hardware. */
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
SR_CONF_LIMIT_SAMPLES,
|
||||
SR_CONF_CONTINUOUS,
|
||||
};
|
||||
@@ -107,6 +116,7 @@ static const int32_t hwoptions[] = {
|
||||
SR_CONF_OPERATION_MODE,
|
||||
SR_CONF_THRESHOLD,
|
||||
SR_CONF_FILTER,
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
SR_CONF_CLOCK_TYPE,
|
||||
SR_CONF_CLOCK_EDGE,
|
||||
};
|
||||
@@ -115,6 +125,7 @@ static const int32_t hwoptions_pro[] = {
|
||||
SR_CONF_OPERATION_MODE,
|
||||
SR_CONF_VTH,
|
||||
SR_CONF_FILTER,
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
SR_CONF_CLOCK_TYPE,
|
||||
SR_CONF_CLOCK_EDGE,
|
||||
};
|
||||
@@ -682,6 +693,7 @@ static struct DSL_context *DSLogic_dev_new(void)
|
||||
devc->stream = FALSE;
|
||||
devc->mstatus_valid = FALSE;
|
||||
devc->data_lock = FALSE;
|
||||
devc->max_height = 1;
|
||||
|
||||
return devc;
|
||||
}
|
||||
@@ -1238,6 +1250,18 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
|
||||
devc = sdi->priv;
|
||||
*data = g_variant_new_string(filters[devc->filter]);
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT:
|
||||
if (!sdi)
|
||||
return SR_ERR;
|
||||
devc = sdi->priv;
|
||||
*data = g_variant_new_string(maxHeights[devc->max_height]);
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT_VALUE:
|
||||
if (!sdi)
|
||||
return SR_ERR;
|
||||
devc = sdi->priv;
|
||||
*data = g_variant_new_byte(devc->max_height);
|
||||
break;
|
||||
case SR_CONF_THRESHOLD:
|
||||
if (!sdi)
|
||||
return SR_ERR;
|
||||
@@ -1650,6 +1674,17 @@ static int config_set(int id, GVariant *data, struct sr_dev_inst *sdi,
|
||||
}
|
||||
sr_dbg("%s: setting threshold to %d",
|
||||
__func__, devc->th_level);
|
||||
} else if (id == SR_CONF_MAX_HEIGHT) {
|
||||
stropt = g_variant_get_string(data, NULL);
|
||||
ret = SR_OK;
|
||||
for (i = 0; i < ARRAY_SIZE(maxHeights); i++) {
|
||||
if (!strcmp(stropt, maxHeights[i])) {
|
||||
devc->max_height = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
sr_dbg("%s: setting Signal Max Height to %d",
|
||||
__func__, devc->max_height);
|
||||
} else if (id == SR_CONF_EN_CH) {
|
||||
ch->enabled = g_variant_get_boolean(data);
|
||||
if (sdi->mode == DSO) {
|
||||
@@ -1879,6 +1914,9 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||
case SR_CONF_FILTER:
|
||||
*data = g_variant_new_strv(filters, ARRAY_SIZE(filters));
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT:
|
||||
*data = g_variant_new_strv(maxHeights, ARRAY_SIZE(maxHeights));
|
||||
break;
|
||||
default:
|
||||
return SR_ERR_NA;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,14 @@ static const char *pattern_strings[] = {
|
||||
"Random",
|
||||
};
|
||||
|
||||
static const char *maxHeights[] = {
|
||||
"1X",
|
||||
"2X",
|
||||
"3X",
|
||||
"4X",
|
||||
"5X",
|
||||
};
|
||||
|
||||
static struct sr_dev_mode mode_list[] = {
|
||||
{"LA", LOGIC},
|
||||
{"DAQ", ANALOG},
|
||||
@@ -100,6 +108,7 @@ struct dev_context {
|
||||
uint64_t timebase;
|
||||
gboolean instant;
|
||||
gboolean data_lock;
|
||||
uint8_t max_height;
|
||||
|
||||
int trigger_stage;
|
||||
uint16_t trigger_mask;
|
||||
@@ -112,6 +121,7 @@ static const int hwcaps[] = {
|
||||
SR_CONF_DEMO_DEV,
|
||||
SR_CONF_SAMPLERATE,
|
||||
SR_CONF_PATTERN_MODE,
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
SR_CONF_LIMIT_SAMPLES,
|
||||
SR_CONF_LIMIT_MSEC,
|
||||
SR_CONF_CONTINUOUS,
|
||||
@@ -119,6 +129,7 @@ static const int hwcaps[] = {
|
||||
|
||||
static const int hwoptions[] = {
|
||||
SR_CONF_PATTERN_MODE,
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
};
|
||||
|
||||
static const int32_t sessions[] = {
|
||||
@@ -234,6 +245,7 @@ static GSList *hw_scan(GSList *options)
|
||||
devc->sample_generator = PATTERN_SINE;
|
||||
devc->timebase = 10000;
|
||||
devc->data_lock = FALSE;
|
||||
devc->max_height = 1;
|
||||
|
||||
sdi->priv = devc;
|
||||
|
||||
@@ -355,6 +367,12 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
|
||||
case SR_CONF_PATTERN_MODE:
|
||||
*data = g_variant_new_string(pattern_strings[devc->sample_generator]);
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT:
|
||||
*data = g_variant_new_string(maxHeights[devc->max_height]);
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT_VALUE:
|
||||
*data = g_variant_new_byte(devc->max_height);
|
||||
break;
|
||||
case SR_CONF_VDIV:
|
||||
*data = g_variant_new_uint64(ch->vdiv);
|
||||
break;
|
||||
@@ -484,6 +502,17 @@ static int config_set(int id, GVariant *data, struct sr_dev_inst *sdi,
|
||||
}
|
||||
sr_dbg("%s: setting pattern to %d",
|
||||
__func__, devc->sample_generator);
|
||||
} else if (id == SR_CONF_MAX_HEIGHT) {
|
||||
stropt = g_variant_get_string(data, NULL);
|
||||
ret = SR_OK;
|
||||
for (i = 0; i < ARRAY_SIZE(maxHeights); i++) {
|
||||
if (!strcmp(stropt, maxHeights[i])) {
|
||||
devc->max_height = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
sr_dbg("%s: setting Signal Max Height to %d",
|
||||
__func__, devc->max_height);
|
||||
} else if (id == SR_CONF_INSTANT) {
|
||||
devc->instant = g_variant_get_boolean(data);
|
||||
sr_dbg("%s: setting INSTANT mode to %d", __func__,
|
||||
@@ -575,6 +604,9 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||
case SR_CONF_PATTERN_MODE:
|
||||
*data = g_variant_new_strv(pattern_strings, ARRAY_SIZE(pattern_strings));
|
||||
break;
|
||||
case SR_CONF_MAX_HEIGHT:
|
||||
*data = g_variant_new_strv(maxHeights, ARRAY_SIZE(maxHeights));
|
||||
break;
|
||||
default:
|
||||
return SR_ERR_NA;
|
||||
}
|
||||
|
||||
@@ -83,6 +83,10 @@ static struct sr_config_info sr_config_info_data[] = {
|
||||
"Buffer size", "Buffer size", NULL},
|
||||
{SR_CONF_TIMEBASE, SR_T_UINT64, "timebase",
|
||||
"Time base", "Time base", NULL},
|
||||
{SR_CONF_MAX_HEIGHT, SR_T_CHAR, "height",
|
||||
"Max Height", "Max Height", NULL},
|
||||
{SR_CONF_MAX_HEIGHT_VALUE, SR_T_UINT8, "height",
|
||||
"Max Height", "Max Height", NULL},
|
||||
{SR_CONF_FILTER, SR_T_CHAR, "filter",
|
||||
"Filter Targets", "Filter Targets", NULL},
|
||||
{SR_CONF_VDIV, SR_T_RATIONAL_VOLT, "vdiv",
|
||||
|
||||
@@ -804,6 +804,10 @@ enum {
|
||||
/** Device channel mode */
|
||||
SR_CONF_CHANNEL_MODE,
|
||||
|
||||
/** Signal max height **/
|
||||
SR_CONF_MAX_HEIGHT,
|
||||
SR_CONF_MAX_HEIGHT_VALUE,
|
||||
|
||||
/** Device sample threshold */
|
||||
SR_CONF_THRESHOLD,
|
||||
SR_CONF_VTH,
|
||||
|
||||
Reference in New Issue
Block a user