Pokeys
24 Oct 2015 14:06 - 06 Apr 2020 18:55 #64207
by fixer
Edit 6-Apr-2020 andypugh ---- See simplified and more portable install instructions here: forum.linuxcnc.org/24-hal-components/298...iver?start=90#162953
Attached basic hal component for Pokeys USB IO board. Uses Cross-platform library from here . It scans at about 15hz, fast enough for UI keys and knobs. I had problems with hidcomp, taking too much resources on my rather slow computer i use for my mill, so I wrote that. With this, i dont get any significant slow down on performance and key presses get detected 100%.
It needs device serial pin to be set in HAL file with proper value.
Set your IO pin function with standard windows software that comes with the board.
pokeys.comp:
first compile pokeys library:
Compile linuxcnc pokeys component with:and:
then copy executable to proper location:
To enable RW permission for USB device, you also need to set "udev" rules in linux:
And that is it, now you can include the driver in your hal file with:
and after you set yours board serial with:should pokeys.0.err become False and pokeys.0.alive start blinking with approx 10hz.
edit:
added some additional info
Added pokeys lib compiling procedure, original text from Polabs.
Fixed url for library in description.
Code changed to properly handle communication errors, outputs hal pin "err" on USB disconnection. Connect it in your hal file to motion.abort or emergency stop....
Edit 6-Apr-2020 andypugh ---- See simplified and more portable install instructions here: forum.linuxcnc.org/24-hal-components/298...iver?start=90#162953
Attached basic hal component for Pokeys USB IO board. Uses Cross-platform library from here . It scans at about 15hz, fast enough for UI keys and knobs. I had problems with hidcomp, taking too much resources on my rather slow computer i use for my mill, so I wrote that. With this, i dont get any significant slow down on performance and key presses get detected 100%.
It needs device serial pin to be set in HAL file with proper value.
Set your IO pin function with standard windows software that comes with the board.
pokeys.comp:
component pokeys "PoKeys IO driver, by Mit Zot";
option userspace yes;
pin out bit in-# [55];
pin out unsigned ain-# [3];
pin out bit err;
pin in unsigned devSerial;
pin out bit alive;
license "GPL";
;;
#include "PoKeysLib.h"
#include <unistd.h> /* UNIX standard function definitions */
sPoKeysDevice * dev=0;
int i=0;
void user_mainloop(void)
{
while(0xb){
FOR_ALL_INSTS() {
while(dev == NULL)dev = PK_ConnectToDeviceWSerial(devSerial, 2000); //waits for usb device
alive=1;
if ((PK_DigitalIOGet(dev) == PK_OK) && (PK_AnalogIOGet(dev) == PK_OK)){ //gets IO data and checks return value
err=0;
for(i=0;i<54;i++)in(i)=!dev->Pins[i].DigitalValueGet; //just transfers values
for(i=0;i<3;i++)ain(i)=dev->Pins[i+44].AnalogValue;
}
else{ //on connection error
PK_DisconnectDevice(dev);
dev=NULL; //tries to reconnect
err=1;
for(i=0;i<54;i++)in(i)=0;
for(i=0;i<3;i++)ain(i)=0;
}
alive=0;
usleep(40000);
}
}
exit(0);
}
first compile pokeys library:
PoKeysLib requires libusb-1.0 installed on the target system. The libusb-1.0 is installed using the following command line commands
sudo apt-get install libusb-1.0-0
sudo apt-get install libusb-1.0-0-dev
After the sources are downloaded, they must be compiled. In order to do this, go to the pokeyslib folder (where the sources have been downloaded to) and execute the following command (on Linux machine)
sudo make -f Makefile.noqmake install
or (on OS X machine)
sudo make -f Makefile.noqmake.osx install
These will also install the library in /usr/lib folder and copy the header file to /usr/include. Sudo is required to gain write access to these two folders
If qmake is preffered, PoKeysLib.pro project file can be used to compile and build the library.
Compile linuxcnc pokeys component with:
sudo halcompile ./pokeys.comp
gcc -Wall -Os -g -I. -I/usr/include/libusb-1.0 -I/usr/include -L/usr/lib/ -L/usr/lib/arm-linux-gnueabihf/ -lPoKeys -lusb-1.0 -I/usr/realtime-3.4-9-rtai-686-pae/include -I. -I/usr/realtime-3.4-9-rtai-686-pae/include -I/usr/include/i386-linux-gnu -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range -mhard-float -DRTAI=3 -fno-fast-math -mieee-fp -fno-unsafe-math-optimizations -DRTAPI -D_GNU_SOURCE -Drealtime -D__MODULE__ -I/usr/include/linuxcnc -Wframe-larger-than=2560 -URTAPI -U__MODULE__ -DULAPI -Os -o pokeys ./pokeys.c -Wl,-rpath,/lib -L/lib -llinuxcnchal
then copy executable to proper location:
sudo mv ./pokeys /usr/bin/pokeys
To enable RW permission for USB device, you also need to set "udev" rules in linux:
Finally I got it!
I needed to create a new udev rule:
Create a new file in thenamed/etc/udev/rules.dwith the following contents:90-usb-pokeys.rulesSave the file, then executeSUBSYSTEM=="usb", ATTRS{idVendor}=="1dc3", ATTRS{idProduct}=="1001", GROUP="plugdev", MODE="664"That's it!udevadm control --reload-rules
And that is it, now you can include the driver in your hal file with:
loadusr pokeys
and after you set yours board serial with:
setp pokeys.0.devSerial 12345
edit:
added some additional info
Added pokeys lib compiling procedure, original text from Polabs.
Fixed url for library in description.
Code changed to properly handle communication errors, outputs hal pin "err" on USB disconnection. Connect it in your hal file to motion.abort or emergency stop....
Last edit: 06 Apr 2020 18:55 by andypugh.
Please Log in or Create an account to join the conversation.
30 Oct 2015 20:35 #64517
by REEEN
Well done!!
I have a question related to this board:
Is it possible to use some of the ios as outputs ?
I have a panel with several inputs and a few leds.
I would like to use such a board to make it easier to wire the panel, a single USB cable is much easier than several wires.
But I never saw a USB board that can also control the led outputs.
(Don't worry Estop is hardwired)
Greets Rene
I have a question related to this board:
Is it possible to use some of the ios as outputs ?
I have a panel with several inputs and a few leds.
I would like to use such a board to make it easier to wire the panel, a single USB cable is much easier than several wires.
But I never saw a USB board that can also control the led outputs.
(Don't worry Estop is hardwired)
Greets Rene
Please Log in or Create an account to join the conversation.
30 Oct 2015 20:51 #64521
by andypugh
Yes the PoKeys has 55 IN and 55 OUT
www.poscope.com/pokeys-devices/PoKeys57U
The driver appears (from looking at the code) to drive the outputs too.
The pins are shared, but it appears that you can read any output as an input.
As an alternative, the Mesa 7i73 is functionally and physically very similar, and about the same price. It needs to connect to a Mesa board, rather than USB, though.
www.poscope.com/pokeys-devices/PoKeys57U
The driver appears (from looking at the code) to drive the outputs too.
The pins are shared, but it appears that you can read any output as an input.
As an alternative, the Mesa 7i73 is functionally and physically very similar, and about the same price. It needs to connect to a Mesa board, rather than USB, though.
The following user(s) said Thank You: LAUSCH
Please Log in or Create an account to join the conversation.
01 Nov 2015 22:57 #64582
by REEEN
Hello Andy,
Thank you.
I know the mesa 7i73, but I don't like it..
It has no clamps and I need to connect it to the mesa bus, currently I have a 5i25 with a 7i77 and a 7i84 connected to the 7i77. To be able to use the 7i73 I need a expansion.
I want to use it for a panel, so no realtime is needed.
Thank you.
I know the mesa 7i73, but I don't like it..
It has no clamps and I need to connect it to the mesa bus, currently I have a 5i25 with a 7i77 and a 7i84 connected to the 7i77. To be able to use the 7i73 I need a expansion.
I want to use it for a panel, so no realtime is needed.
Please Log in or Create an account to join the conversation.
05 Nov 2015 04:01 #64769
by fixer
yes, digital IO, HW encoder counters and analog inputs are supported in HAL component from first post. The board can also decode matrix keyboard and PWM outputs. It can also emulate USB HID keyboard and joystick buttons and pots.
there is also ethernet version of the board, that uses the same library, but I havent worked with that yet...
Is it possible to use some of the ios as outputs ?
yes, digital IO, HW encoder counters and analog inputs are supported in HAL component from first post. The board can also decode matrix keyboard and PWM outputs. It can also emulate USB HID keyboard and joystick buttons and pots.
there is also ethernet version of the board, that uses the same library, but I havent worked with that yet...
The following user(s) said Thank You: REEEN
Please Log in or Create an account to join the conversation.
29 Dec 2015 15:00 #67456
by REEEN
I just compiled and installed the pokeys component succesfully.
In my hal I did :
Now i can see the pins.
Do i need to define my usb board anyhow with some name or else ?
I added a PoextbusOc16 board for my LEDs with the extbus to the board.
Can I somehow access the outputs of that extbus board with this comp ?
Would be great if someone could post a example hal.
Greets Rene
In my hal I did :
loadusr pokeys
Now i can see the pins.
Do i need to define my usb board anyhow with some name or else ?
I added a PoextbusOc16 board for my LEDs with the extbus to the board.
Can I somehow access the outputs of that extbus board with this comp ?
Would be great if someone could post a example hal.
Greets Rene
Please Log in or Create an account to join the conversation.
Time to create page: 0.115 seconds