#include "usbwave.h"
#include <string.h>
#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;
}