diff options
author | daniel <danieruru@gmail.com> | 2013-01-11 19:13:47 +0900 |
---|---|---|
committer | daniel <danieruru@gmail.com> | 2013-01-11 19:13:47 +0900 |
commit | ee9fe4fa6339dc1e49a4d484f9f03d4091c6aa90 (patch) | |
tree | c9aa3f25c7fadc0b6f9620673a55e31113403d3d | |
parent | 7d4fa5278ace3dd96dda1bf4da75d617fd3e2795 (diff) |
most of it seems to work in perl now
-rw-r--r-- | libvxi11client/libvxi11client.c | 3 | ||||
-rw-r--r-- | libvxi11client/perlbits/Makefile.PL | 2 | ||||
-rw-r--r-- | libvxi11client/perlbits/VXI11-Client.t | 28 | ||||
-rw-r--r-- | libvxi11client/perlglue.c | 9 | ||||
-rw-r--r-- | libvxi11client/perlglue.h | 2 | ||||
-rw-r--r-- | vxi11_server.c | 2 |
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; } |