summaryrefslogtreecommitdiffstats
path: root/servers/gpib_server_lin/src/signal_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'servers/gpib_server_lin/src/signal_functions.c')
-rwxr-xr-xservers/gpib_server_lin/src/signal_functions.c284
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