You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
8.9 KiB

/*
* Remote Laboratory Instrumentation Server
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (c) 2009 Timothy Pearson
* Raptor Engineering
* http://www.raptorengineeringinc.com
*/
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <getopt.h>
#include "gpib_functions.h"
#include "parameters.h"
#include "gpib/ib.h"
char falpha[1024];
int signal_get_last_error(char * funcgenType, int gpibDevice, char * extendedError) {
char error_array[1024];
int ei;
char * ep;
// Zero the error array
for (ei=0;ei<1024;ei++) {
error_array[ei] = 0;
}
if ((strcmp("AG33250A", funcgenType) == 0)) {
if (strcmp("AG33250A", funcgenType) == 0) {
sleep (1);
sprintf(falpha,"SYSTEM:ERROR?");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
ibrd(gpibDevice, error_array, 1024-1);
ep = strstr(error_array, "+0,");
if (ep != 0) {
return 0;
}
else {
sprintf(extendedError, "EXT%s%c\n\r", error_array, 176);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Extended error: %s\n\r", extendedError);
#endif
return 3;
}
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!%c\n\r", 176);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Extended error: %s\n\r", extendedError);
#endif
return 2;
}
}
}
sprintf(extendedError, "EXTAn invalid device was selected!%c\n\r", 176);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Extended error: %s\n\r", extendedError);
#endif
return 1;
}
int signal_reset(char * funcgenType, int gpibDevice, char * extendedError)
{
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Resetting function generator\n\r");
if (strcmp("AG33250A", funcgenType) == 0) {
sprintf(falpha,"*RST");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"*CLS");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"DISP:TEXT 'Remote Control System v%s.%s%s'", SERVER_MAJOR, SERVER_MINOR, SERVER_REVISION);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"FUNCTION SQUARE");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"OUTPUT:LOAD INFINITY");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"VOLTAGE 3.3");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"FUNCTION SQUARE");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"FUNCTION:SQUARE:DCYCLE 50");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"SYSTEM:BEEPER:STATE ON");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"OUTPUT ON");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
sprintf(falpha,"SYSTEM:BEEPER");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
}
}
}
}
}
}
}
}
}
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
int signal_set_frequency(float desired_frequency, char * funcgenType, int gpibDevice, char * extendedError) {
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Setting function generator frequency to %f\n\r", desired_frequency);
if (strcmp("AG33250A", funcgenType) == 0) {
// FIXME
sprintf(falpha,"FREQUENCY %E", desired_frequency);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
}
int signal_set_duty_cycle(float desired_dcycle, char * funcgenType, int gpibDevice, char * extendedError) {
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Setting function generator period to %f\n\r", desired_dcycle);
if (strcmp("AG33250A", funcgenType) == 0) {
// FIXME
sprintf(falpha,"FUNCTION:SQUARE:DCYCLE %E", desired_dcycle);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
}
int signal_set_waveform(char * waveform, char * funcgenType, int gpibDevice, char * extendedError) {
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Setting function generator waveform to %s\n\r", waveform);
if (strcmp("AG33250A", funcgenType) == 0) {
// FIXME
sprintf(falpha,"FUNCTION %s", waveform);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
}
int signal_set_peak_peak_voltage(float desired_voltage, char * funcgenType, int gpibDevice, char * extendedError) {
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Setting function generator peak-peak voltage to %f\n\r", desired_voltage);
if (strcmp("AG33250A", funcgenType) == 0) {
// FIXME
sprintf(falpha,"VOLTAGE %E", desired_voltage);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
}
int signal_set_offset_voltage(float desired_voltage, char * funcgenType, int gpibDevice, char * extendedError) {
if ((strcmp("AG33250A", funcgenType) == 0)) {
printf("[INFO] Setting function generator peak-peak voltage to %f\n\r", desired_voltage);
if (strcmp("AG33250A", funcgenType) == 0) {
// FIXME
sprintf(falpha,"VOLTAGE:OFFSET %E", desired_voltage);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return signal_get_last_error(funcgenType, gpibDevice, extendedError);
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!<21>");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!<21>");
return 1;
}
}