summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaniel <danieruru@gmail.com>2013-01-11 19:13:47 +0900
committerdaniel <danieruru@gmail.com>2013-01-11 19:13:47 +0900
commitee9fe4fa6339dc1e49a4d484f9f03d4091c6aa90 (patch)
treec9aa3f25c7fadc0b6f9620673a55e31113403d3d
parent7d4fa5278ace3dd96dda1bf4da75d617fd3e2795 (diff)
most of it seems to work in perl now
-rw-r--r--libvxi11client/libvxi11client.c3
-rw-r--r--libvxi11client/perlbits/Makefile.PL2
-rw-r--r--libvxi11client/perlbits/VXI11-Client.t28
-rw-r--r--libvxi11client/perlglue.c9
-rw-r--r--libvxi11client/perlglue.h2
-rw-r--r--vxi11_server.c2
6 files changed, 29 insertions, 17 deletions
diff --git a/libvxi11client/libvxi11client.c b/libvxi11client/libvxi11client.c
index fb37dbc..ff8f86f 100644
--- a/libvxi11client/libvxi11client.c
+++ b/libvxi11client/libvxi11client.c
@@ -435,8 +435,11 @@ int vxi11_create_intr_chan() {
unsigned int port = -1;
g_thread_init(NULL);
interruptthread = g_thread_create(interruptthreadfunc, &port, true, NULL);
+ if (interruptthread == NULL)
+ return 0;
while (port == -1) { // spin
+ usleep(200);
};
struct sockaddr_in myaddress;
diff --git a/libvxi11client/perlbits/Makefile.PL b/libvxi11client/perlbits/Makefile.PL
index 9b7f0ff..055880e 100644
--- a/libvxi11client/perlbits/Makefile.PL
+++ b/libvxi11client/perlbits/Makefile.PL
@@ -9,7 +9,7 @@ WriteMakefile(
($] >= 5.005 ? ## Add these new keywords supported since 5.005
(ABSTRACT_FROM => 'lib/VXI11/Client.pm', # retrieve abstract from module
AUTHOR => 'daniel <daniel@>') : ()),
- LIBS => ['-lgthread-2.0 -lrt -lglib-2.0'], # e.g., '-lm'
+ LIBS => ['-pthread -lgthread-2.0 -lrt -lglib-2.0'], # e.g., '-lm'
DEFINE => '', # e.g., '-DHAVE_SOMETHING'
INC => '-I. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include', # e.g., '-I. -I/usr/include/other'
OBJECT => '$(O_FILES)', # link all the C files too
diff --git a/libvxi11client/perlbits/VXI11-Client.t b/libvxi11client/perlbits/VXI11-Client.t
index 4d68c37..ac3d581 100644
--- a/libvxi11client/perlbits/VXI11-Client.t
+++ b/libvxi11client/perlbits/VXI11-Client.t
@@ -8,7 +8,7 @@
use strict;
use warnings;
-use Test::More tests => 12;
+use Test::More tests => 16;
BEGIN { use_ok('VXI11::Client') };
#########################
@@ -16,16 +16,18 @@ BEGIN { use_ok('VXI11::Client') };
# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.
-is(&VXI11::Client::vopen("roi", 0), 1);
-is(&VXI11::Client::vlock(0), 1);
-is(&VXI11::Client::vwrite("*IDN?", 6, 0, 0), 6);
+is(&VXI11::Client::vopen("roi", 0), 1, "Open");
+is(&VXI11::Client::vlock(0), 1, "Lock");
+is(&VXI11::Client::vwrite("*IDN?", 6, 0, 0), 6, "Write");
ok(&VXI11::Client::vreadstatusbyte(0) >= 0 , "Read status byte");
-# is(&VXI11::Client::vcreate_intr_chan(), 1);
-# is(&VXI11::Client::vdestroy_intr_chan(), 1);
-is(&VXI11::Client::vabort(), 1);
-is(&VXI11::Client::vclear(0), 1);
-is(&VXI11::Client::vtrigger(0), 1);
-is(&VXI11::Client::vlocal(0), 1);
-is(&VXI11::Client::vremote(0), 1);
-is(&VXI11::Client::vunlock(), 1);
-is(&VXI11::Client::vclose(), 1);
+is(&VXI11::Client::vcreate_intr_chan(), 1, "Create intr channel");
+is(&VXI11::Client::venable_srq(1), 1, "Enable interrupts");
+is(&VXI11::Client::venable_srq(0), 1, "Disable interrupts");
+is(&VXI11::Client::vdestroy_intr_chan(), 1, "Destroy intr channel");
+is(&VXI11::Client::vabort(), 1, "Abort");
+is(&VXI11::Client::vclear(0), 1, "Clear");
+is(&VXI11::Client::vtrigger(0), 1, "Trigger");
+is(&VXI11::Client::vlocal(0), 1, "Local");
+is(&VXI11::Client::vremote(0), 1, "Remote");
+is(&VXI11::Client::vunlock(), 1, "Unlock");
+is(&VXI11::Client::vclose(), 1, "Close");
diff --git a/libvxi11client/perlglue.c b/libvxi11client/perlglue.c
index 937b9e4..697a480 100644
--- a/libvxi11client/perlglue.c
+++ b/libvxi11client/perlglue.c
@@ -2,6 +2,12 @@
#include "libvxi11client.h"
#include <stdbool.h>
+#define INTERRUPTHANDLE "libvxi11client"
+
+static void interruptcallback(void) {
+
+}
+
int vopen(char* address, char* device) {
return vxi11_open(address, device);
}
@@ -54,7 +60,8 @@ int vdestroy_intr_chan(void) {
return vxi11_destroy_intr_chan();
}
-int venable_srq(bool enable, char* handle) {
+int venable_srq(bool enable) {
+ return vxi11_enable_srq(enable, INTERRUPTHANDLE, interruptcallback);
}
int vdocmd(unsigned long cmd, bool waitforlock) {
diff --git a/libvxi11client/perlglue.h b/libvxi11client/perlglue.h
index 8dd17df..680a061 100644
--- a/libvxi11client/perlglue.h
+++ b/libvxi11client/perlglue.h
@@ -12,6 +12,6 @@ int vremote(bool waitforlock);
int vreadstatusbyte(bool waitforlock);
int vcreate_intr_chan(void);
int vdestroy_intr_chan(void);
-int venable_srq(bool enable, char* handle);
+int venable_srq(bool enable);
int vdocmd(unsigned long cmd, bool waitforlock);
int vclose(void);
diff --git a/vxi11_server.c b/vxi11_server.c
index 0f684c4..2241ef3 100644
--- a/vxi11_server.c
+++ b/vxi11_server.c
@@ -117,7 +117,6 @@ create_link_1_svc(Create_LinkParms *argp, struct svc_req *rqstp) {
result.error = ERR_OUTOFRESOURCES;
}
else {
-
int linkid;
for (linkid = 0; linkid < SIZEOFARRAY(links); linkid++) {
if (links[linkid] == NULL) {
@@ -443,6 +442,7 @@ destroy_intr_chan_1_svc(void *argp, struct svc_req *rqstp) {
result.error = ERR_CHANNELNOTESTABLISHED;
}
else {
+ clnt_destroy(intclient);
intclient = NULL;
result.error = 0;
}