summaryrefslogtreecommitdiff
path: root/libvxi11client/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvxi11client/client.c')
-rw-r--r--libvxi11client/client.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/libvxi11client/client.c b/libvxi11client/client.c
new file mode 100644
index 0000000..04753a8
--- /dev/null
+++ b/libvxi11client/client.c
@@ -0,0 +1,162 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "libvxi11client.h"
+
+#define IDENTIFY "*IDN?"
+
+static char* geterrorstring(int errorcode) {
+ switch (errorcode) {
+ case 0:
+ return "invalid state (not connected) or no response from server";
+ case -4:
+ return "invalid link identifier";
+ case -6:
+ return "channel not established";
+ case -8:
+ return "operation not supported";
+ case -11:
+ return "device locked by another link";
+ case -12:
+ return "no lock held by this link";
+ case -29:
+ return "channel already established";
+ default:
+ return "unknown error code";
+ }
+}
+
+int main(int argc, char *argv[]) {
+
+ printf("VXI-11 test client\n");
+
+ if (argc != 2) {
+ printf("usage; %s <host>\n", argv[0]);
+ exit(1);
+ }
+
+ int err = 0;
+
+ if ((err = vxi11_open(argv[1], NULL)) > 0) {
+
+ /**
+ * Basic tests
+ */
+
+ // write some bytes
+ int byteswritten = vxi11_write(IDENTIFY, sizeof(IDENTIFY), false);
+ if (byteswritten >= 0)
+ printf("Wrote %d bytes\n", byteswritten);
+ else
+ printf("Error writing data\n");
+
+ // read some bytes
+ int bytesread = vxi11_read(NULL, 0, false, false, 0);
+ if (bytesread >= 0)
+ printf("Read %d bytes\n", bytesread);
+ else
+ printf("Error reading data\n");
+
+ // trigger
+ if (vxi11_trigger(false) > 0)
+ printf("triggered\n");
+
+ // clear
+ if (vxi11_clear(false) > 0)
+ printf("cleared\n");
+
+ // abort
+ if ((err = vxi11_abort()) > 0)
+ printf("aborted\n");
+ else
+ printf("abort failed; %s\n", geterrorstring(err));
+
+ // lock
+ if ((err = vxi11_lock(false)) > 0)
+ printf("locked\n");
+
+ // unlock
+ if ((err = vxi11_unlock()) > 0)
+ printf("unlocked\n");
+
+ // remote
+ if ((err = vxi11_remote(false)) > 0)
+ printf("remote'd\n");
+
+ // local
+ if ((err = vxi11_local(false)) > 0)
+ printf("local'd\n");
+
+ // read the status byte
+ int statusbyte = vxi11_readstatusbyte(false);
+ if (statusbyte >= 0)
+ printf("Status byte is 0x%02x\n", statusbyte);
+ else
+ printf("Error reading status byte\n");
+
+ /**
+ * Locking tests
+ */
+
+ // try locking twice
+ printf("-- Locking twice --\n");
+ if ((err = vxi11_lock(false)) > 0) {
+ printf("locked\n");
+ if ((err = vxi11_lock(false)) > 0) {
+ printf("locked again!!\n");
+ exit(1);
+ }
+ else {
+ printf("Second lock failed; %s\n", geterrorstring(err));
+ }
+ }
+ if ((err = vxi11_unlock()) > 0)
+ printf("unlocked\n");
+ else {
+ printf("error unlocking; %s\n", geterrorstring(err));
+ exit(1);
+ }
+
+ printf("\n");
+
+ // try unlocking unlocked device
+ printf("-- Unlocking when unlocked --\n");
+ if ((err = vxi11_unlock()) > 0) {
+ printf("Unlocked!!\n");
+ exit(1);
+ }
+ else
+ printf("error unlocking; %s\n", geterrorstring(err));
+ printf("\n");
+
+ // Interrupt channel tests
+ printf("-- Testing interrupt channel --\n");
+ // create interrupt channel
+ if ((err = vxi11_create_intr_chan()) > 0) {
+ printf("Created interrupt channel\n");
+ sleep(10);
+ // destroy interrupt channel
+ if ((err = vxi11_destroy_intr_chan()) > 0)
+ printf("Destroyed interrupt channel\n");
+ else
+ printf("Error destroying interrupt channel; %s\n", geterrorstring(err));
+ }
+ else
+ printf("Error creating interrupt channel; %s\n", geterrorstring(err));
+ printf("\n");
+
+ // docmd
+ if ((err = vxi11_docmd(0x00, false)) > 0)
+ printf("did command, should fail!\n");
+ else
+ printf("Error calling docmd; %s\n", geterrorstring(err));
+
+ // close
+ if ((err = vxi11_close() > 0))
+ printf("Closed\n");
+ }
+ else {
+ printf("Error opening device; %s\n", geterrorstring(err));
+ exit(1);
+ }
+ return 0;
+}