j123b567 / scpi-parser

Open Source SCPI device library
BSD 2-Clause "Simplified" License
447 stars 191 forks source link

[WIP] Add basic VXI11 support #109

Closed zaporozhets closed 4 years ago

zaporozhets commented 4 years ago

Yo Guys! Could you please take a look at my basic implementation of VXI11 example for parser.

Cheers, Taras

jancumps commented 4 years ago

Can this be conditionally included/excluded in the compilation? Asking because I'm using the library in a memory challenged microcontroller.

zaporozhets commented 4 years ago

Yes, libscpi can be compiled without vxi11 support.

coveralls commented 4 years ago

Coverage Status

Coverage decreased (-0.05%) to 93.113% when pulling e4f2e7501f3c170f0b2e56a69632c715e087eb87 on zaporozhets:vxi11 into a765b9eadd3fe29de5f8d426549b69fc0a96793c on j123b567:master.

j123b567 commented 4 years ago

Thank you for this example of VXI11 usage.

I'm sorry for so late response. I thought that I can review it and test it but I was unable to do it until now.

Please, do you have the source file for rpcgen which was used to generate vxi11_xdr.c? Do you have some hints for me, how can I try this? I don't have any experience with VXI11. e.g. how to generate VXI11 counterpart so I can talk with this example.

pigrew commented 4 years ago

(I'm lurking around, watching this project, though I don't have any intentions of using this patch at this moment. On the other hand, I figure I can answer your questions.)

Please, do you have the source file for rpcgen which was used to generate vxi11_xdr.c?

rpcgen.c comes with from old SUN UNIX utilities. There are a bunch of different forks, such as:

https://github.com/bminor/glibc/tree/master/sunrpc http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=tree;f=tools/rpcgen;hb=HEAD

However, there should be an IDL file (.x extension) used with rpcgen. I don't see that here. For example, I wrote a server in Python, using a modified IDL file:

https://github.com/pigrew/pyvxi11aio/blob/master/vxi11aio/xdr/vxi11.x

Based on the VXI11 spec, the IDL file is:

https://github.com/pigrew/pyvxi11aio/blob/master/vxi11aio/xdr/vxi11_orig.x

Do you have some hints for me, how can I try this? I don't have any experience with VXI11. e.g. how to generate VXI11 counterpart so I can talk with this example.

VXI11 is a TCP-IP (perhaps with some UDP) based protocol, based on SUN/ONC RPC. It's very similar to USBTMC, and more or less duplicates the functionality of GPIB, but over IP. There is a variant to handle abstracting GPIB interfaces, too. VXI11 is falling out of favor these days, being replaced with HiSLIP which was designed to replace it.

You can use the NI VISA libraries (Or Keysight, or whatnot). I usually use the NI MAX GUI. Connect to a VISA address like "TCPIP::127.0.0.1::INSTR", and it should properly detect the VXI-11 server.

To run the server, your computer will need to be running a portmapper daemon. Most UNIX computers will have one running, but it seemed difficult to find one for Windows. I ended up writing a minimal one in Python for my above referenced project.

j123b567 commented 4 years ago

Thank you for your answers. My bad english, I was interested in IDL files not rpcgen itself, but you have answered it anyway, great.

I will merge this even if I can't test it now, because it can be interesting codebase for others.