diff options
Diffstat (limited to 'servers/gpib_server_lin/src/signal_functions.c')
-rwxr-xr-x | servers/gpib_server_lin/src/signal_functions.c | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/servers/gpib_server_lin/src/signal_functions.c b/servers/gpib_server_lin/src/signal_functions.c new file mode 100755 index 0000000..63562cb --- /dev/null +++ b/servers/gpib_server_lin/src/signal_functions.c @@ -0,0 +1,284 @@ +/* + * 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!�"); + return 2; + } + } + } + sprintf(extendedError, "EXTAn invalid device was selected!�"); + 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!�"); + return 2; + } + } + } + else { + sprintf(extendedError, "EXTAn invalid device was selected!�"); + 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!�"); + return 2; + } + } + } + else { + sprintf(extendedError, "EXTAn invalid device was selected!�"); + 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!�"); + return 2; + } + } + } + else { + sprintf(extendedError, "EXTAn invalid device was selected!�"); + 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!�"); + return 2; + } + } + } + else { + sprintf(extendedError, "EXTAn invalid device was selected!�"); + 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!�"); + return 2; + } + } + } + else { + sprintf(extendedError, "EXTAn invalid device was selected!�"); + return 1; + } +}
\ No newline at end of file |