#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
/* remote access through bidilink or socat */
char * scope_dev = "osc";
/* local access */
//char * scope_dev = "/dev/ttyS1";
int scope;
char answer[256];
void gds_ask(char * cmd)
{
char c;
int k;
int ret;
printf("%s ... ", cmd); fflush(stdout);
ret = write(scope, cmd, strlen(cmd));
if (ret == -1) {
perror("write()");
exit(1);
};
memset(answer, (int)0, 256);
k = 0;
do {
ret = read(scope, &c, 1);
if (ret == -1) {
perror("read()");
break;
};
printf("%c", c);
answer[k++] = c;
} while ( c != '\n' );
}
#include <termios.h>
int main(void)
{
struct termios options;
int r;
printf("Opening %s ... ", scope_dev);
fflush(stdout);
scope = open(scope_dev, O_RDWR);
if (scope == -1) {
perror("open()");
exit(1);
};
printf("OK\n");
/* set raw mode for pty */
r = tcgetattr(scope, &options);
if (-1 == r) {
perror("tcgetattr()");
exit(1);
}
options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
options.c_oflag &= ~(OPOST);
options.c_cflag |= (CS8);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG | IEXTEN);
r = tcsetattr(scope, TCSANOW, &options);
if (-1 == r) {
perror("tcsetattr()");
exit(1);
}
gds_ask("*IDN?\n");
exit(0);
}