FreeCalypso > hg > freecalypso-tools
view rfcal/cmu200/sercmd.c @ 219:d13ee4ef86c7
rfcal migration
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 20 May 2017 19:43:49 +0000 |
parents | 31d43f0e469a |
children |
line wrap: on
line source
/* * This module contains the functions that send serial commands to the CMU200 * and collect the instrument's serial responses. */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <strings.h> extern int target_fd; char instrument_response[4096]; send_scpi_cmd(cmd) char *cmd; { printf("Command to CMU: %s", cmd); write(target_fd, cmd, strlen(cmd)); } collect_instr_response() { char buf[BUFSIZ]; int cc, pos; for (pos = 0; ; ) { cc = read(target_fd, buf, sizeof buf); if (cc <= 0) { perror("error reading from serial port"); exit(1); } if (pos + cc > sizeof instrument_response) { fprintf(stderr, "error: response from CMU200 exceeds our buffer size\n"); exit(1); } bcopy(buf, instrument_response + pos, cc); pos += cc; if (instrument_response[pos-1] == '\n') break; } instrument_response[pos-1] = '\0'; printf("Instrument response: %s\n", instrument_response); } collect_staropc_response() { collect_instr_response(); if (instrument_response[0] != '1' || instrument_response[1] && !isspace(instrument_response[1])) { fprintf(stderr, "error: unexpected response to *OPC?\n"); exit(1); } }