New component for keyboards and panels.

More
5 years 7 months ago #201000 by Aciera

When I compile and build the docs locally the - comes out correctly,

www.bodgesoc.org/sendkeys.1.html


Yes, that works.

So does it depend on the machine the docs are built on? This would seem to make more sense. It's just that I got the impression that the "remote" docs worked for you on your machine but not for me on any of mine.

Please Log in to join the conversation.

More
5 years 7 months ago #201003 by andypugh
I am starting to suspect the new style-sheet which makes the manpages look nice, but might be making them look _too_ nice.

Please Log in to join the conversation.

More
5 years 3 months ago #214837 by nkp
machine LCNC 2.7
ubuntu 12.04
sudo halcompile --install sendkeys.c



/tmp/tmp7Iyg9c/sendkeys.c:22:20: fatal error: unistd.h:No such file or directory
 #include <unistd.h>
                    ^
compilation terminated.


Why can't I install it in the version 2.7? 
Code:
nkp@nkp-desktop:~$ locate unistd.h /home/nkp/arduino-1.8.4/hardware/tools/avr/avr/include/unistd.h /usr/include/unistd.h /usr/include/asm-generic/unistd.h /usr/include/i386-linux-gnu/asm/unistd.h /usr/include/i386-linux-gnu/bits/unistd.h /usr/include/i386-linux-gnu/sys/unistd.h /usr/include/linux/unistd.h /usr/include/tcl8.5/tcl-private/compat/unistd.h /usr/include/tcl8.5/tk-private/compat/unistd.h /usr/include/xenomai/posix/unistd.h /usr/lib/syslinux/com32/include/unistd.h /usr/src/linux-headers-3.13.0-117/arch/alpha/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/alpha/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/arc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/arm/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/arm/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/arm64/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/arm64/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/avr32/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/avr32/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/blackfin/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/blackfin/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/c6x/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/cris/include/arch-v10/arch/unistd.h /usr/src/linux-headers-3.13.0-117/arch/cris/include/arch-v32/arch/unistd.h /usr/src/linux-headers-3.13.0-117/arch/cris/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/cris/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/frv/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/frv/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/hexagon/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/ia64/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/ia64/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/m32r/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/m32r/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/m68k/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/m68k/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/metag/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/metag/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/microblaze/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/microblaze/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/mips/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/mips/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/mn10300/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/mn10300/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/openrisc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/parisc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/parisc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/powerpc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/powerpc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/s390/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/s390/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/score/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/sh/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/sh/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/sparc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/sparc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/tile/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/tile/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/unicore32/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/x86/include/asm/ia32_unistd.h /usr/src/linux-headers-3.13.0-117/arch/x86/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/x86/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/xtensa/include/asm/unistd.h /usr/src/linux-headers-3.13.0-117/arch/xtensa/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-117/include/asm-generic/unistd.h /usr/src/linux-headers-3.13.0-117/include/uapi/asm-generic/unistd.h /usr/src/linux-headers-3.13.0-117/include/uapi/linux/unistd.h /usr/src/linux-headers-3.13.0-32/arch/alpha/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/alpha/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/arc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/arm/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/arm/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/arm64/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/arm64/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/avr32/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/avr32/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/blackfin/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/blackfin/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/c6x/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/cris/include/arch-v10/arch/unistd.h /usr/src/linux-headers-3.13.0-32/arch/cris/include/arch-v32/arch/unistd.h /usr/src/linux-headers-3.13.0-32/arch/cris/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/cris/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/frv/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/frv/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/hexagon/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/ia64/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/ia64/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/m32r/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/m32r/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/m68k/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/m68k/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/metag/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/metag/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/microblaze/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/microblaze/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/mips/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/mips/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/mn10300/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/mn10300/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/openrisc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/parisc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/parisc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/powerpc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/powerpc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/s390/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/s390/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/score/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/sh/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/sh/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/sparc/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/sparc/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/tile/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/tile/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/unicore32/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/x86/include/asm/ia32_unistd.h /usr/src/linux-headers-3.13.0-32/arch/x86/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/x86/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/xtensa/include/asm/unistd.h /usr/src/linux-headers-3.13.0-32/arch/xtensa/include/uapi/asm/unistd.h /usr/src/linux-headers-3.13.0-32/include/asm-generic/unistd.h /usr/src/linux-headers-3.13.0-32/include/uapi/asm-generic/unistd.h /usr/src/linux-headers-3.13.0-32/include/uapi/linux/unistd.h /usr/src/linux-headers-3.4-9-common-rtai/arch/x86/include/asm/ia32_unistd.h /usr/src/linux-headers-3.4-9-common-rtai/arch/x86/include/asm/unistd.h /usr/src/linux-headers-3.4-9-common-rtai/include/asm-generic/unistd.h /usr/src/linux-headers-3.4-9-common-rtai/include/linux/unistd.h

Please Log in to join the conversation.

More
5 years 3 months ago #215323 by andypugh
I don't know why unistd isn't including. It's been part of Linux for ever, as far as I know.

Does is work with <asm/unistd.h> ?

Please Log in to join the conversation.

More
5 years 3 months ago #215395 by nkp
Code:
#include "rtapi.h" #include "hal.h" #include <linux/uinput.h> #include <asm/unistd.h> #include <asm/fcntl.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define MAX_NAME 12
now does not see these files:
Code:
#include <string.h> #include <stdio.h> #include <stdlib.h>   

Please Log in to join the conversation.

More
5 years 3 months ago #215399 by andypugh
Do you have the headers for the actual kernel you are running?

uname -a then look in /usr/src for a match.

Please Log in to join the conversation.

More
5 years 3 months ago #215400 by nkp
I have installed Debian10 (lcnc 2.8)
tried making a switch for a button with two values
Code:
// //   Copyright (C) 2021 Andy Pugh // //   This program is free software; you can redistribute it and/or modify //   it under the terms of the GNU General Public License as published by //   the Free Software Foundation; either version 2 of the License, or //   (at your option) any later version. // //   This program is distributed in the hope that it will be useful, //   but WITHOUT ANY WARRANTY; without even the implied warranty of //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the //   GNU General Public License for more details. // //   You should have received a copy of the GNU General Public License //   along with this program; if not, write to the Free Software //   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA // #include "rtapi.h" #include "hal.h" #include <linux/uinput.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME 12 static int comp_id; typedef struct{     hal_u32_t *keycode;     hal_s32_t *current_event;     hal_bit_t *toggle;     hal_bit_t *init;     hal_bit_t **trigger;     hal_u32_t *event; } sendkeys_hal; typedef struct {     int num_codes;     int num_togglecodes;     int num_events;     int num_triggers;     bool inited;     int fd;     bool *prev;     hal_u32_t oldcode; } sendkeys_param; typedef struct {     sendkeys_hal *hal;     sendkeys_param *param;     int num_insts; } sendkeys ; static sendkeys *me; void emit(int fd, int type, int code, int val) {    struct input_event ie;    ie.type = type;    ie.code = code;    ie.value = val;    write(fd, &ie, sizeof(ie)); } static void exit_handler(int sig) {     printf("sendkeys: exiting\n");     exit(0); } static void call_hal_exit(void) {     hal_exit(comp_id); } int init(int argc, char* argv[]){     int *codes;     int *pins;     int i, j;     comp_id = hal_init("sendkeys");     if (comp_id < 0) {         rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys: ERROR: hal_init() failed\n");         return -1;     }     me = hal_malloc(sizeof(sendkeys));     codes = malloc(sizeof(int));     pins = malloc(sizeof(int));     // This is all because RTAPI_MP_ARRAY_** macros do not appear to work in usersapce     for (i = 1; i < argc; i++){         static int index = -1;         static int type = -1;         int ptr = 0;         bool toggle = 0;         if (strncmp(argv[i], "config=", 7) == 0) type = 1, ptr = 6;         if (strncmp(argv[i], "names=", 6) == 0) type = 2, ptr = 5;         switch (type) {         case 1: // config             while (argv[i][ptr]){                 switch (argv[i][ptr]){                 case '=':                 case ' ':                 case ',':                     index++;                     codes = realloc(codes, (index + 1) * sizeof(int));                     pins = realloc(pins, (index + 1) * sizeof(int));                     codes[index] = 0;                     pins[index] = 0;                     toggle = 0;                     break;                 case 's':                 case 'S':                     toggle = 0;                     break;                 case 't':                 case 'T':                     toggle = 1;                     break;                 case '0':                 case '1':                 case '2':                 case '3':                 case '4':                 case '5':                 case '6':                 case '7':                 case '8':                 case '9':                     if (toggle){                     pins[index] = pins[index] * 10 + argv[i][ptr] - '0';                     } else {                     codes[index] = codes[index] * 10 + argv[i][ptr] - '0';                     }                     break;                 }                 ptr++;;             }             me->num_insts = index + 1;             break;         case 2: //  Parsing of "names" would be here, but is not enabled yet             while (argv[i][ptr]){                 ptr++;             }             break;         }     }     me->hal = (sendkeys_hal*)hal_malloc(me->num_insts * sizeof(sendkeys_hal));     me->param = malloc(me->num_insts * sizeof(sendkeys_param));     for (i = 0; i < me->num_insts; i++){         sendkeys_hal* hal = &(me->hal[i]);         sendkeys_param* param = &(me->param[i]);         if (hal_pin_u32_newf(HAL_IN, &(hal->keycode), comp_id,         "sendkeys.%i.keycode", i) < 0) {         rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.keycode error\n");         return -ENOMEM;}         if (hal_pin_s32_newf(HAL_OUT, &(hal->current_event), comp_id,         "sendkeys.%i.current-event", i) < 0) {         rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.current-event error\n");         return -ENOMEM;}         if (hal_pin_bit_newf(HAL_IN, &(hal->init), comp_id,         "sendkeys.%i.init", i) < 0) {         rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.init error\n");         return -ENOMEM;}         if (hal_pin_bit_newf(HAL_IN, &(hal->toggle), comp_id,         "sendkeys.%i.toggle", i) < 0) {         rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.toggle error\n");         return -ENOMEM;}         // event params         rtapi_print_msg(RTAPI_MSG_DBG, "instance %i events %i triggers %i\n", i, codes[i], pins[i]);         param->num_triggers = pins[i];         param->num_codes = codes[i];         param->num_events = codes[i] + pins[i];         hal->event = hal_malloc(param->num_events  * sizeof(hal_u32_t*));         for (j = 0; j < param->num_codes; j++){             if (hal_param_u32_newf(HAL_RW, &(hal->event[j]), comp_id,                     "sendkeys.%i.scan-event-%02i", i, j) < 0) {                 rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.scan-event-%02i error\n", j);                 return -ENOMEM;}         }         for (j = 0; j < param->num_triggers; j++){             if (hal_param_u32_newf(HAL_RW, &(hal->event[j + param->num_codes]), comp_id,                     "sendkeys.%i.pin-event-%02i", i, j) < 0) {                 rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.pin-event-%02i error\n", j);                 return -ENOMEM;}         }         for (j = 0; j < param->num_triggers; j++){             if (hal_param_u32_newf(HAL_RW, &(hal->event[j + param->num_togglecodes]), comp_id,                     "sendkeys.%i.togglepin-event-%02i", i, j) < 0) {                 rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.togglepin-event-%02i error\n", j);                 return -ENOMEM;}         }         // trigger pins         hal->trigger = hal_malloc(param->num_triggers * sizeof(hal_bit_t*));         param->prev = malloc(param->num_triggers * sizeof(hal_bit_t));         for (j = 0; j < param->num_triggers; j++){             if (hal_pin_bit_newf(HAL_IN, &(hal->trigger[j]), comp_id,                     "sendkeys.%i.trigger-%02i", i, j) < 0) {                 rtapi_print_msg(RTAPI_MSG_ERR, "sendkeys.N.trigger-%02i error\n",j);                 return -ENOMEM;}             param->prev[j] = 0;         }     }     return 0; } int main(int argc, char* argv[]) {     struct uinput_user_dev uidev;     int i, j;          signal(SIGINT, exit_handler);     signal(SIGTERM, exit_handler);     atexit(call_hal_exit);     //parse configs and create pins     init(argc, argv);     hal_ready(comp_id);          while (1) {         for (i = 0; i < me->num_insts; i++){             sendkeys_hal* hal = &(me->hal[i]);             sendkeys_param* param = &(me->param[i]);             if ((*hal->keycode & 0xC0) == 0x80){                 *hal->current_event = (*hal->keycode & 0x3f);             } else {                 *hal->current_event = -1;             }             // The event codes are written to pins in HAL after the             // component is loaded.             // We need to set up the keyboard based on the events selected             // so there is a secondary init here.             if (! *hal->init) continue;             if (*hal->init && ! param->inited) {                 param->fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);                 if (param->fd < 0) rtapi_print_msg(RTAPI_MSG_ERR,                     "Cannot open /dev/uinput. Suggest chmod 666 /dev/uinput\n");                 ioctl(param->fd, UI_SET_EVBIT, EV_KEY);                 for (j = 0; j < param->num_events; j++){                     if (hal->event[j] > 0 && hal->event[j] < KEY_MAX){                         ioctl(param->fd, UI_SET_KEYBIT, hal->event[j]);                         rtapi_print("SET_EVBIT %i\n", hal->event[j]);                     }                 }                 memset(&uidev, 0, sizeof(uidev));                 strcpy(uidev.name, "linuxcnc-hal");                 uidev.id.bustype = BUS_USB;                 uidev.id.vendor  = 0x1;                 uidev.id.product = 0x1;                 uidev.id.version = 1;                 write(param->fd, &uidev, sizeof(uidev));                 ioctl(param->fd, UI_DEV_CREATE);                 param->inited = 1;             }             if (*hal->keycode != param->oldcode) {                 /* Key press, report the event, send key release, and report again*/                 if ((*hal->keycode & 0x3F) > param->num_events) continue;                 if (hal->event[*hal->keycode & 0x3F] == 0) continue;                 if ((*hal->keycode & 0xC0) == 0xC0){ // keydown                     emit(param->fd, EV_KEY, hal->event[*hal->keycode & 0x3F], 1);                     emit(param->fd, EV_SYN, SYN_REPORT, 0);                 } else if ((*hal->keycode & 0xC0) == 0x80){ // keyup                     emit(param->fd, EV_KEY, hal->event[*hal->keycode & 0x3F], 0);                     emit(param->fd, EV_SYN, SYN_REPORT, 0);                 }                 param->oldcode = *hal->keycode;             }             for (j = 0; j < param->num_triggers; j++){                 if (param->prev[j] != *hal->trigger[j]){                     if (*hal->trigger[j]){ // keydown                         if (*hal->toggle){                           emit(param->fd, EV_KEY, hal->event[param->num_togglecodes + j], 1);                           emit(param->fd, EV_SYN, SYN_REPORT, 0);                         } else {                           emit(param->fd, EV_KEY, hal->event[param->num_codes + j], 1);                           emit(param->fd, EV_SYN, SYN_REPORT, 0);                      }                     } else { // keyup                         if (*hal->toggle){                           emit(param->fd, EV_KEY, hal->event[param->num_togglecodes + j], 0);                           emit(param->fd, EV_SYN, SYN_REPORT, 0);                         } else {                           emit(param->fd, EV_KEY, hal->event[param->num_codes + j], 0);                           emit(param->fd, EV_SYN, SYN_REPORT, 0);                      }                     }                     param->prev[j] = *hal->trigger[j];                 }             }         }     } }

Please Log in to join the conversation.

More
5 years 3 months ago #215401 by andypugh

Please Log in to join the conversation.

More
5 years 3 months ago #215408 by nkp
 

Attachment not found


if the button can have two meanings 

Please Log in to join the conversation.

More
5 years 3 months ago #215412 by andypugh
Probably..

How do you plan to select the alternate function?

Please Log in to join the conversation.

Time to create page: 0.208 seconds
Powered by Kunena Forum