X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/rigol/blobdiff_plain/a8982973a30709b358876498572df8d2e96ef5cf..e8e713c3a536c59f94d6402d852f353e34fac2de:/rigol.c?ds=sidebyside diff --git a/rigol.c b/rigol.c index e7497ac..818b7ea 100644 --- a/rigol.c +++ b/rigol.c @@ -23,6 +23,8 @@ rmmod uhci_hcd; modprobe uhci_hcd #include #include +#include "png.h" + //This routine locates a scope by VID/PID and returns an opened handle to it. usb_dev_handle *find_scope() { @@ -300,13 +302,12 @@ void do_get_buf (struct usb_dev_handle *sc) void do_get_screen(struct usb_dev_handle *sc) { unsigned char screen[320*234]; - unsigned char screen_conv[320*234*3]; - unsigned char lut[256][3]; time_t lt; char filename[256]; - int i; + unsigned char *png; + int imglen; int l; - FILE *fp; + int fd; pid_t display; /* Hide "RMT" from screen */ @@ -319,25 +320,11 @@ void do_get_screen(struct usb_dev_handle *sc) printf ("hmm. didnt' get %d bytes, but %d\n\n", sizeof(screen), l); } - for(i = 0; i < 256; i++) { - lut[i][0] = ((i >> 6) * 0x55); - lut[i][1] = ((((i >> 3) & 7) * 0x49) >> 1); - lut[i][2] = (((i & 7) * 0x49) >> 1); - } - - for(i = 0; i < sizeof(screen_conv); i += 3) { - screen_conv[i] = lut[screen[i/3]][0]; - screen_conv[i+1] = lut[screen[i/3]][1]; - screen_conv[i+2] = lut[screen[i/3]][2]; - } - - lt = time(NULL); - strftime(filename, sizeof(filename), "screen_%Y%m%d-%H%M%S.ppm", localtime(<)); - - fp = fopen (filename, "w"); - fprintf(fp, "P6\n320 234\n255\n"); - fwrite(screen_conv, sizeof(screen_conv), 1, fp); - fclose (fp); + strftime(filename, sizeof(filename), "screen_%Y%m%d-%H%M%S.png", localtime(<)); + fd=open(filename, O_CREAT|O_WRONLY, 0644); + png = lcd2png(screen, &imglen); + write(fd, png, imglen); + close(fd); printf("Waveform saved as %s\n", filename);