#include "usbpulse.h" int main(int argc, char *argv[]) { int opt, dev = 0, mute = 0, help = 0, wait = 0; int x = 1000, y = 0, z = 100, bypass = 0, invert = 0, random = 0, one = 1; int m = 1, n = 1, u = 1; double amp = 2.0; int fd; while((opt = getopt(argc, argv, "d:a:p:x:y:z:bricmw:h?")) != -1) switch(opt) { case 'd': dev = atoi(optarg); break; case 'm': mute = 1; break; case 'a': amp = atof(optarg); break; case 'p': sscanf(optarg, "%i,%i,%i", &m, &n, &u); break; case 'x': x = atoi(optarg); break; case 'y': y = atoi(optarg); break; case 'z': z = atoi(optarg); break; case 'b': bypass = 1; break; case 'r': random = 1; break; case 'i': invert = 1; break; case 'c': one = 0; break; case 'w': wait = atoi(optarg); break; default: help = 1; break; } if(help || optind != argc || wait < 0) { printf("Pouziti: %s [-d dev] [-a amp] [-p m,n,u] [-x div] [-y from] [-z to]\n" " [-b] [-r] [-c] [-i] [-m] [-w wait]\n" " dev je cislo zarizeni %sn, na ktere se pripojit.\n" " amp je amplituda ve voltech rozsahu 1.5 az 5. Muze byt desetinne cislo.\n" " m,n,u jsou argumenty pro hlavni PLL casovac. Oddelujte prosim carkou\n" " a nepouzivejte mezery. Frekvence PLL = 12.5MHz*m/(n*u), m<=16, n<=8, u<=4.\n" " div je koeficient delice frekvence PLL. Nema vyznam mimo mod -c.\n" " from a to urcuji zpozdeni a dobu trvani pulsu v jednotkach PLL.\n" " -b zapina primy pruchod z PLL bez delice (pro dosazeni nejvyssich f.)\n" " -r zapina pseudonahodny vystup 0 a 1 na frekvenci PLL nebo delice (-c).\n" " -c urcuje cyklicky rezim (vychozi je jednopulzovy).\n" " -i zapina inverzi logicke hodnoty na vystupu.\n" " -m je utlumeni (vypnuti) vystupu a prepnuti do modu Hi-Z.\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(x < z+2) { x = z+2; if(x >= (1<<28)) { x = (1<<28) - 1; z = x-2; } } if(one && random) bypass = 1; if(!pulse100_init_pulse(fd, 1)) return 1; usbtm_set_clock_master(fd, 1); usbtm_set_trig_master(fd, 1); pulse100_set_enable(fd, 1); if(mute) { pulse100_set_enable(fd, 0); } else { pulse100_set_pll(fd, m, n, u, 0); pulse100_set_amplitude(fd, amp); pulse100_set_xyz(fd, x, y, z); pulse100_set_bypass(fd, bypass); pulse100_set_prng(fd, random); pulse100_set_invert(fd, invert); if(one) { pulse100_set_run(fd, 0); pulse100_set_arm(fd, 0); } pulse100_set_oneshot(fd, one); pulse100_set_enable(fd, 1); pulse100_set_run(fd, 1); pulse100_set_arm(fd, 1); pulse100_set_trigger(fd, 1); } if(wait) sleep(wait); closedev(dev, fd); return 0; } /* Zaloha fungujiciho One Shot modu: * pulse100_set_trigger(fd, 0); * pulse100_set_arm(fd, 0); * pulse100_set_run(fd, 0); * pulse100_set_oneshot(fd, 1); * pulse100_set_run(fd, 1); * pulse100_set_arm(fd, 1); * pulse100_set_trigger(fd, 1); */