--- rigol-ds2000-shell.cc.orig 2015-01-28 01:06:00.000000000 +0100 +++ rigol-ds2000-shell.cc 2015-01-28 01:05:47.000000000 +0100 @@ -232,6 +232,40 @@ bool run_command(ViSession &vi, char *se return true; } + if (!strcmp(cmd, "DUMP")) + { + char *filename = strtok(NULL, " \t\r\n"); + char *query = strtok(NULL, "\t\r\n"); + + for (char *p = query; *p; p++) + if ('a' <= *p && *p <= 'z') + *p -= 'a' - 'A'; + + send_cmd(vi, query); + + unsigned char *header = recv_data(vi, 11); + printf("Header: %s\n", header); + + int num_bytes = atoi((char*)header + 2); + unsigned char *data = recv_data(vi, num_bytes + 1); + + FILE *f = fopen(filename, "w"); + if (f == NULL) { + fprintf(stderr, "Cannot open file '%s' for writing!\n", filename); + exit(1); + } + fwrite(data, num_bytes, 1, f); + fclose(f); + + printf("Written %d bytes to file.\n", num_bytes); + + free(header); + free(data); + + printf("\n"); + return true; + } + if (!strcmp(cmd, "SAVE_TXT") || !strcmp(cmd, "SAVE_BIN")) { char *query = strtok(NULL, " \t\r\n");