#include "usbwave.h" #include #ifndef PATH_MAX #define PATH_MAX 1024 #endif int parse_type(char *str) { int ret = -1; if(!strncmp(str, "si", 2)) ret = WAVE12_WAVE_TYPE_SINE; if(!strncmp(str, "sq", 2)) ret = WAVE12_WAVE_TYPE_SQUARE; if(!strncmp(str, "tr", 2)) ret = WAVE12_WAVE_TYPE_TRIANGLE; return ret; } int main(int argc, char *argv[]) { int opt, dev = 0, help = 0, mute = 0, type = WAVE12_WAVE_TYPE_SINE, wait = 0; double freq = 1000.0, amp = 5.0; int fd; int cal = 0, zero = 0; char fnread[PATH_MAX] = "", fnwrite[PATH_MAX] = ""; FILE *fcalib; while((opt = getopt(argc, argv, "d:f:a:t:mS:L:W:h?")) != -1) switch(opt) { case 'd': dev = atoi(optarg); break; case 'f': freq = atof(optarg); break; case 'a': amp = atof(optarg); break; case 't': type = parse_type(optarg); break; case 'm': mute = 1; break; case 'S': strcpy(fnwrite, optarg); break; case 'L': strcpy(fnread, optarg); break; case 'W': wait = atoi(optarg); break; default: help = 1; break; } if(help || optind != argc || type < 0 || wait < 0) { printf("Pouziti: %s [-d dev] [-f freq] [-a amp] [-t type] [-m] [-S|-L conf] [-w wait]\n" " dev je cislo zarizeni %sn, na ktere se pripojit.\n" " freq je frekvence generatoru: 0.2 az 12E6. Horni hranice viz dokumentace.\n" " amp je amplituda ve voltech rozsahu 0 az 10. Muze byt desetinne cislo.\n" " type je typ vlny: sine, square nebo triangle. Jsou povoleny 2pism. zkratky.\n" " -m je utlumeni (vypnuti) vystupu a prepnuti do modu Hi-Z.\n" " Volby -S/-L umoznuji ulozit / nacist kalibracni data pro rychlejsi spusteni.\n" " wait umoznuje pockat stanovenou dobu pred odpojenim od zarizeni" " (doba uvedena v sekundach, vychozi 0) - vhodne pro sitovy pristup.\n", argv[0], DEVNAME); return 0; } if(!opendev(dev, &fd)) { fprintf(stderr, deverror(dev)); return 1; } if(*fnread) { fcalib = fopen(fnread, "r"); if(!fcalib) { fprintf(stderr, "Nepodarilo se otevrit soubor %s pro cteni kalibracnich dat.\n", fnread); } else { if(fscanf(fcalib, "%i %i", &cal, &zero) < 2) { fprintf(stderr, "Neplatna kalibracni data."); cal = zero = 0; } fclose(fcalib); } } if(!wave12_init_wave(fd, 1, &cal, &zero)) return 1; //wave12_set_trigger(fd, 1); if(*fnwrite) { fcalib = fopen(fnwrite, "w"); if(!fcalib) { fprintf(stderr, "Nepodarilo se otevrit soubor %s pro ulozeni kalibracnich dat.\n", fnwrite); } else { fprintf(fcalib, "%i %i", cal, zero); fclose(fcalib); } } if(mute) { wave12_set_enable(fd, 0); } else { wave12_set_frequency(fd, freq); wave12_set_amplitude(fd, amp, 0); wave12_set_wave_type(fd, type); wave12_set_trigger(fd, 1); wave12_set_enable(fd, 1); } if(wait) sleep(wait); closedev(dev, fd); return 0; }