summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libvxi11client/client.c5
-rw-r--r--libvxi11client/libvxi11client.c2
-rw-r--r--libvxi11client/perlbits/README50
-rw-r--r--vxi11_server.c2
4 files changed, 56 insertions, 3 deletions
diff --git a/libvxi11client/client.c b/libvxi11client/client.c
index 6b4496e..ee5fe47 100644
--- a/libvxi11client/client.c
+++ b/libvxi11client/client.c
@@ -56,9 +56,10 @@ int main(int argc, char *argv[]) {
printf("Error writing data\n");
// read some bytes
- int bytesread = vxi11_read(NULL, 0, false, false, 0);
+ char buffer[1024];
+ int bytesread = vxi11_read(buffer, sizeof(buffer), false, false, 0);
if (bytesread >= 0)
- printf("Read %d bytes\n", bytesread);
+ printf("Read %d bytes, %s\n", bytesread, buffer);
else
printf("Error reading data\n");
diff --git a/libvxi11client/libvxi11client.c b/libvxi11client/libvxi11client.c
index 4697775..c58ad3a 100644
--- a/libvxi11client/libvxi11client.c
+++ b/libvxi11client/libvxi11client.c
@@ -215,6 +215,8 @@ int vxi11_read(char* buffer, unsigned int bufferlen, bool waitlock, bool termchr
#ifdef DEBUG
printf("Got \"%s\" from server\n", resp->data.data_val);
#endif
+ if (buffer != NULL)
+ strncpy(buffer, resp->data.data_val, (bufferlen < resp->data.data_len ? bufferlen : resp->data.data_len));
return resp->data.data_len;
}
else if (resp == NULL)
diff --git a/libvxi11client/perlbits/README b/libvxi11client/perlbits/README
new file mode 100644
index 0000000..a789fc8
--- /dev/null
+++ b/libvxi11client/perlbits/README
@@ -0,0 +1,50 @@
+VXI11-Client version 0.01
+=========================
+
+This module is a wrapper around a C library that uses libc's built in
+Sun RPC support to talk to VXI11 networked instruments.
+
+It supports only one instrument at a time.
+
+Interrupts work by creating the interrupt channel, enabling interrupts
+and then using wait_for_interrupt() to wait for an interrupt to happen.
+wait_for_interrupt() blocks until a interrupt happens or a timeout occurs.
+If an interrupt happens before it is called it returns immediately.
+If multiple interrupts happen before it is called it will return immediately
+until all the fired interrupts are cleared.
+
+Return codes work like this;
+1 - is a success
+0 - means the request failed locally, the state inside the client is
+incorrect, i.e. calling to enable interrupts before creating the channel
+or that the server couldn't be contacted
+< 0 - Any negative value is the negated VXI-11 error code from the server
+
+The only exceptions to this are the read and write methods
+0 - Error as above or zero bytes read/written
+> 0 - Number of bytes read/written
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+ glib/gthread
+
+COPYRIGHT AND LICENCE
+
+Put the correct copyright and licence information here.
+
+Copyright (C) 2013 by daniel
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.14.2 or,
+at your option, any later version of Perl 5 you may have available.
diff --git a/vxi11_server.c b/vxi11_server.c
index 1a2a175..118f1a7 100644
--- a/vxi11_server.c
+++ b/vxi11_server.c
@@ -183,7 +183,7 @@ device_read_1_svc(Device_ReadParms *argp, struct svc_req *rqstp) {
else {
if (globals.Registers.pending_output_message != NULL) {
result.data.data_val = globals.Registers.pending_output_message;
- result.data.data_len = strlen(result.data.data_val);
+ result.data.data_len = strlen(result.data.data_val) + 1;
}
else {
result.data.data_val = NULL;