X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhameg-hmo%2Fprotocol.c;h=99a30acd75dd8ec21af14235be879732d87ea87b;hb=d431e4ec28d5d168bc0d98d5545a585b89d52e8d;hp=528d7b04295dac4eda31220d537c71ac614e35af;hpb=74413fafb4846ad1c9f99677f58616db6b7eefcd;p=libsigrok.git diff --git a/src/hardware/hameg-hmo/protocol.c b/src/hardware/hameg-hmo/protocol.c index 528d7b04..99a30acd 100644 --- a/src/hardware/hameg-hmo/protocol.c +++ b/src/hardware/hameg-hmo/protocol.c @@ -48,6 +48,7 @@ static const char *hameg_scpi_dialect[] = { [SCPI_CMD_GET_ANALOG_CHAN_STATE] = ":CHAN%d:STAT?", [SCPI_CMD_SET_ANALOG_CHAN_STATE] = ":CHAN%d:STAT %d", [SCPI_CMD_GET_PROBE_UNIT] = ":PROB%d:SET:ATT:UNIT?", + [SCPI_CMD_GET_BYTE_ORDER] = ":FORM:BORD?", }; static const uint32_t hmo_devopts[] = { @@ -495,6 +496,22 @@ static int analog_channel_state_get(struct sr_scpi_dev_inst *scpi, g_free(tmp_str); } + /* + * Determine the byte order which will be used for data blocks. + * A ":FORM:BORD?" request will yield either an "MSBF" or "LSBF" + * response. + */ + state->byteorder = '?'; + if (sr_scpi_get_string(scpi, + (*config->scpi_dialect)[SCPI_CMD_GET_BYTE_ORDER], + &tmp_str) != SR_OK) + return SR_ERR; + if (tmp_str[0] == 'M') + state->byteorder = 'b'; + else if (tmp_str[0] == 'L') + state->byteorder = 'l'; + g_free(tmp_str); + return SR_OK; } @@ -821,7 +838,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data) encoding.unitsize = sizeof(float); encoding.is_signed = TRUE; encoding.is_float = TRUE; - encoding.is_bigendian = FALSE; + /* Assume LE format when unknown for backwards compat. */ + encoding.is_bigendian = (state->byteorder == 'b') ? TRUE : FALSE; /* TODO: Use proper 'digits' value for this device (and its modes). */ encoding.digits = 2; encoding.is_digits_decimal = FALSE;