X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frigol-ds%2Fprotocol.c;h=688dcc3998750909bbbe228c79590407faef8251;hb=4c5f70063ad6ae311809ee7818ddc9070fbe05cf;hp=26b492053b653a72a92d2dd3866a6db81e5405e7;hpb=47b821dc7dff6b7fa9cce5eb2451e659c8e2b215;p=libsigrok.git diff --git a/src/hardware/rigol-ds/protocol.c b/src/hardware/rigol-ds/protocol.c index 26b49205..688dcc39 100644 --- a/src/hardware/rigol-ds/protocol.c +++ b/src/hardware/rigol-ds/protocol.c @@ -370,6 +370,7 @@ SR_PRIV int rigol_ds_capture_start(const struct sr_dev_inst *sdi) break; case PROTOCOL_V3: case PROTOCOL_V4: + case PROTOCOL_V5: if (rigol_ds_config_set(sdi, ":WAV:FORM BYTE") != SR_OK) return SR_ERR; if (devc->data_source == DATA_SOURCE_LIVE) { @@ -382,7 +383,7 @@ SR_PRIV int rigol_ds_capture_start(const struct sr_dev_inst *sdi) if (devc->model->series->protocol == PROTOCOL_V3) { if (rigol_ds_config_set(sdi, ":WAV:MODE RAW") != SR_OK) return SR_ERR; - } else if (devc->model->series->protocol == PROTOCOL_V4) { + } else if (devc->model->series->protocol >= PROTOCOL_V4) { num_channels = 0; /* Channels 3 and 4 are multiplexed with D0-7 and D8-15 */ @@ -477,6 +478,7 @@ SR_PRIV int rigol_ds_channel_start(const struct sr_dev_inst *sdi) } break; case PROTOCOL_V4: + case PROTOCOL_V5: if (ch->type == SR_CHANNEL_ANALOG) { if (rigol_ds_config_set(sdi, ":WAV:SOUR CHAN%d", ch->index + 1) != SR_OK) @@ -664,8 +666,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) return TRUE; if (len == -1) { sr_err("Error while reading block header, aborting capture."); - packet.type = SR_DF_FRAME_END; - sr_session_send(sdi, &packet); + std_session_send_df_frame_end(sdi); sr_dev_acquisition_stop(sdi); return TRUE; } @@ -697,8 +698,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) if (len == -1) { sr_err("Error while reading block data, aborting capture."); - packet.type = SR_DF_FRAME_END; - sr_session_send(sdi, &packet); + std_session_send_df_frame_end(sdi); sr_dev_acquisition_stop(sdi); return TRUE; } @@ -736,7 +736,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) // TODO: For the MSO1000Z series, we need a way to express that // this data is in fact just for a single channel, with the valid // data for that channel in the LSB of each byte. - logic.unitsize = devc->model->series->protocol == PROTOCOL_V4 ? 1 : 2; + logic.unitsize = devc->model->series->protocol >= PROTOCOL_V4 ? 1 : 2; logic.data = devc->buffer; packet.type = SR_DF_LOGIC; packet.payload = &logic; @@ -759,8 +759,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) /* End acquisition when data for all channels is acquired. */ if (!sr_scpi_read_complete(scpi) && !devc->channel_entry->next) { sr_err("Read should have been completed"); - packet.type = SR_DF_FRAME_END; - sr_session_send(sdi, &packet); + std_session_send_df_frame_end(sdi); sr_dev_acquisition_stop(sdi); return TRUE; } @@ -794,8 +793,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) rigol_ds_channel_start(sdi); } else { /* Done with this frame. */ - packet.type = SR_DF_FRAME_END; - sr_session_send(sdi, &packet); + std_session_send_df_frame_end(sdi); if (++devc->num_frames == devc->limit_frames) { /* Last frame, stop capture. */ @@ -807,8 +805,7 @@ SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data) rigol_ds_capture_start(sdi); /* Start of next frame. */ - packet.type = SR_DF_FRAME_BEGIN; - sr_session_send(sdi, &packet); + std_session_send_df_frame_begin(sdi); } } @@ -849,9 +846,12 @@ SR_PRIV int rigol_ds_get_dev_cfg(const struct sr_dev_inst *sdi) sr_dbg("Logic analyzer %s, current digital channel state:", devc->la_enabled ? "enabled" : "disabled"); for (i = 0; i < ARRAY_SIZE(devc->digital_channels); i++) { - cmd = g_strdup_printf( - devc->model->series->protocol >= PROTOCOL_V3 ? - ":LA:DIG%d:DISP?" : ":DIG%d:TURN?", i); + if (devc->model->series->protocol >= PROTOCOL_V5) + cmd = g_strdup_printf(":LA:DISP? D%d", i); + else if (devc->model->series->protocol >= PROTOCOL_V3) + cmd = g_strdup_printf(":LA:DIG%d:DISP?", i); + else + cmd = g_strdup_printf(":DIG%d:TURN?", i); res = sr_scpi_get_bool(sdi->conn, cmd, &devc->digital_channels[i]); g_free(cmd); if (res != SR_OK)