HW/DAS/USBscopes/usbtm/test/freq.c

#include "usbwave.h"

int freq(int fd) {
  char buf[5];
  float freq = 1000.0;
  float amp = 5.0;
  if(!wave12_init_wave(fd, 1, NULL, NULL)) return 0;
  if(!wave12_set_amplitude(fd, 5, 0)) return 0;
  if(!wave12_set_trigger(fd, 1)) return 0;
  while(fread(buf, 1, 1, stdin)) {
    switch(*buf) {
      case '+':
        freq *= 1.0594631;
        printf("freq = %.1f Hz\n", freq);
        if(!wave12_set_frequency(fd, freq)) return 0;
        break;
      case '-':
        freq /= 1.0594631;
        printf("freq = %.1f Hz\n", freq);
        if(!wave12_set_frequency(fd, freq)) return 0;
        break;
      case '*':
        amp *= 1.1;
        if(!wave12_set_amplitude(fd, amp, 0)) return 0;
        break;
      case '/':
        amp /= 1.1;
        if(!wave12_set_amplitude(fd, amp, 0)) return 0;
        break;
      case '1':
        if(!wave12_set_wave_type(fd, WAVE12_WAVE_TYPE_SINE)) return 0;
        break;
      case '2':
        if(!wave12_set_wave_type(fd, WAVE12_WAVE_TYPE_TRIANGLE)) return 0;
        break;
      case '3':
        if(!wave12_set_wave_type(fd, WAVE12_WAVE_TYPE_SQUARE)) return 0;
        break;
      case 'a':
      case 'b':
      case 'c':
      case 'd':
        if(!usbtm_set_led_mode(fd, *buf-'a')) return 0;
        break;
      case 'E':
        if(!wave12_set_enable(fd, 0)) return 0;
        break;
      case 'e':
        if(!wave12_set_enable(fd, 1)) return 0;
        break;
      case 'T':
        if(!wave12_set_trigger(fd, 0)) return 0;
        break;
      case 't':
        if(!wave12_set_trigger(fd, 1)) return 0;
        break;
    }
    if(*buf == 'q') break;
  }
  return 1;
}

int main() {
  int fd;
  struct termios tios;
  if(!opendev(1, &fd)) {
    fprintf(stderr, "open\n"); return 1; }
  tcgetattr(0, &tios);
  tios.c_lflag &= ~ICANON & ~ECHO;
  tcsetattr(0, TCSANOW, &tios);
  freq(fd);
  closedev(1, fd);
  tcgetattr(0, &tios);
  tios.c_lflag |= ICANON | ECHO;
  tcsetattr(0, TCSANOW, &tios);
  return 0;
}