2
0
forked from Ivasoft/DSView

demo:repair dso single and analog random

This commit is contained in:
yunyaobaihong
2023-05-17 14:22:08 +08:00
parent f7a1275e58
commit d906f77ef2

View File

@@ -555,7 +555,7 @@ static int hw_dev_open(struct sr_dev_inst *sdi)
sr_err("%s: vdev->logic_buf malloc failed", __func__); sr_err("%s: vdev->logic_buf malloc failed", __func__);
return SR_ERR_MALLOC; return SR_ERR_MALLOC;
} }
init_analog_random_data(vdev);
vdev->logic_buf_len = LOGIC_BUF_LEN; vdev->logic_buf_len = LOGIC_BUF_LEN;
@@ -750,6 +750,7 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
*data = g_variant_new_int16(vdev->num_probes); *data = g_variant_new_int16(vdev->num_probes);
break; break;
case SR_CONF_HAVE_ZERO: case SR_CONF_HAVE_ZERO:
*data = g_variant_new_boolean(sample_generator != FALSE);
break; break;
case SR_CONF_LOAD_DECODER: case SR_CONF_LOAD_DECODER:
*data = g_variant_new_boolean(sample_generator != PATTERN_RANDOM); *data = g_variant_new_boolean(sample_generator != PATTERN_RANDOM);
@@ -1170,8 +1171,9 @@ static int hw_dev_acquisition_start(struct sr_dev_inst *sdi,
} }
packet_time = ANALOG_PACKET_TIME(ANALOG_PACKET_NUM_PER_SEC); packet_time = ANALOG_PACKET_TIME(ANALOG_PACKET_NUM_PER_SEC);
} }
if(sample_generator != PATTERN_RANDOM) if(sample_generator == PATTERN_RANDOM)
vdev->analog_buf_len = 0; init_analog_random_data(vdev);
vdev->analog_read_pos = 0; vdev->analog_read_pos = 0;
sr_session_source_add(-1, 0, 0, receive_data_analog, sdi); sr_session_source_add(-1, 0, 0, receive_data_analog, sdi);
@@ -2044,6 +2046,8 @@ static int receive_data_analog(int fd, int revents, const struct sr_dev_inst *sd
{ {
if(sample_generator != PATTERN_RANDOM) if(sample_generator != PATTERN_RANDOM)
{ {
vdev->analog_buf_len = 0;
void* analog_data = g_try_malloc0(ANALOG_DATA_LEN_PER_CYCLE); void* analog_data = g_try_malloc0(ANALOG_DATA_LEN_PER_CYCLE);
if(analog_data == NULL) if(analog_data == NULL)
{ {
@@ -2158,7 +2162,6 @@ static int receive_data_analog(int fd, int revents, const struct sr_dev_inst *sd
} }
if(vdev->analog_read_pos + packet_len >= vdev->analog_buf_len - 1 ) if(vdev->analog_read_pos + packet_len >= vdev->analog_buf_len - 1 )
{ {
//用memcpy估计会更好
uint64_t back_len = vdev->analog_buf_len - vdev->analog_read_pos; uint64_t back_len = vdev->analog_buf_len - vdev->analog_read_pos;
for (int i = 0; i < back_len; i++) for (int i = 0; i < back_len; i++)
{ {