X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/rigol/blobdiff_plain/1574729632acebdcdf8caa025dcb67c6ac3804fc..8e60ee60c04ec12ceac8f3cbc04cebe7a9c1efd8:/scope.c diff --git a/scope.c b/scope.c index 9b75ba4..09c9b8d 100644 --- a/scope.c +++ b/scope.c @@ -8,6 +8,17 @@ #include "scope.h" #include "usbtmc.h" +#define DATASIZE 10240 + +#define COPY_SCOPE_STRING(sc, cmd, dst) { \ + char *buf; \ + buf = scope_get_string(sc, cmd, sizeof(dst)); \ + if (buf) { \ + strcpy(dst, buf); \ + free(buf); \ + }\ + } + /* Just USB for now... */ int sendscpi(struct scope* sc, char* cmd, unsigned char *resp, int resplen) { @@ -48,7 +59,7 @@ struct scope* initscope(void) } claimscope(sc); - sendscpi(sc, "*IDN?", (unsigned char*)sc->idn, sizeof(sc->idn)); + COPY_SCOPE_STRING(sc, "*IDN?", sc->idn); releasescope(sc); printf("Scope found (%s)\n", sc->idn); @@ -61,15 +72,6 @@ char *scope_idn(struct scope *sc) return sc->idn; } -#define COPY_SCOPE_STRING(sc, cmd, dst) { \ - char *buf; \ - buf = scope_get_string(sc, cmd, sizeof(dst)); \ - if (buf) { \ - strcpy(dst, buf); \ - free(buf); \ - }\ - } - char *scope_get_string(struct scope *sc, char *cmd, int maxlen) { unsigned char *buf; @@ -105,8 +107,6 @@ int scope_get_truth_value(struct scope *sc, char *cmd) return 0; } - printf("%s %s\n", cmd, buf); - if (strcasecmp(buf, "on") == 0) { return 1; } else if (strcasecmp(buf, "enable") == 0) { @@ -149,6 +149,22 @@ double scope_get_double(struct scope *sc, char*cmd) return ret; } +char *scope_get_data(struct scope *sc, char *source, int *len) +{ + char *data = NULL; + char cmd[128]; + + if ((data = malloc(DATASIZE)) == NULL) { + perror("malloc"); + return NULL; + } + + snprintf(cmd, sizeof(cmd), ":WAV:DATA? %s", source); + *len = sendscpi(sc, cmd, (unsigned char*)data, DATASIZE); + + return data; +} + void update_scope_measurements(struct scope *sc) { sc->status.measure.ch1.vpp = scope_get_double(sc, ":MEAS:VPP? CHAN1"); @@ -268,5 +284,8 @@ int update_scope_status(struct scope *sc) sc->status.timebase.scale = scope_get_double(sc, ":TIM:SCAL?"); COPY_SCOPE_STRING(sc, ":TIM:FORM?", sc->status.timebase.format); + sc->status.math.displayed = scope_get_truth_value(sc, ":MATH:DISP?"); + sc->status.fft.displayed = scope_get_truth_value(sc, ":FFT:DISP?"); + return 0; }