view rfcal/cmu200/sercmd.c @ 229:96332d875fc9

loadtools: preparations for loadtool exit code possibly being nonzero
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 03 Aug 2017 01:33:06 +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);
	}
}