Page 1 of 1

Keeping button pressed

Posted: 26 Jan 2019, 09:36
by AnnaV
Hello

I have a game device. I'm trying to map one of it's buttons to keyboard button 'b'. So far, this of course works.

However, the game distinguishes between a "click" (just key down and then immediately up) and a "long press" (key down, wait for 500+ms, key up*).
lmc_send_keys() cannot of course do this, but then I found out about lmc_send_keys(). But I can't make it work.

I've tried these approaches:

Code: Select all

if (direction == 0) and (button == 19) then lmc_send_input(66,0,2) end
if (direction == 1) and (button == 19) then lmc_send_input(66,0,0) end      

Code: Select all

if (button == 19) then
   if (direction == 1) then
      timer19 = ts
   elseif (direction == 0) then
      pressed19 = ts - timer19
      lmc_send_input(66,0,0)
      lmc_sleep(pressed19)
      lmc_send_input(66,0,2)
   end
end                    
Neither of those work. In my head, both should work similarly to pressing and hold down "b" on the keyboard, but they don't. If used in notepad, both ways just send one letter 'b' to the program, not repeating like it does if you hold down a key.

I've also contemplated on using two different keys and just sending the same event, but the other with a pause, but that doesn't work either. Like this:

Code: Select all

if (button == 19) then lmc_send_keys('b') end
if (button == 20) then
      lmc_send_input(66,0,0)
      lmc_sleep(1000)
      lmc_send_input(66,0,2)
end
For some reason that I can't figure out, this does not work either.

ps. The game in question is Star Citizen, can it just somehow be incompatible with lmc_send_input()?

Re: Keeping button pressed

Posted: 28 Jan 2019, 11:11
by admin
I think your scripts are correct.
If you hold down the key at keyboard the repeating hold down action is done by keyboard driver (as you can configure the interval in keyboard settings). However the lmc_send_input is sending single event. So if you need the repetition it can't be done in luamacros unless I add some kind of timers support...

Re: Keeping button pressed

Posted: 28 Jan 2019, 12:25
by AnnaV
Okay, so I'm not completely useless :P I though they were correct. But, for some reason they are not working at all. Any idea if the game in question (Star Citizen) can be incompatible with lmc_send_input()? lmc_send_keys() is working perfectly fine.

Re: Keeping button pressed

Posted: 28 Jan 2019, 13:37
by AnnaV
Yeah, I'm betting my left hand on the culprit being Star Citizen. sadface :(

I base this on evidence that this code:

Code: Select all

clear()
lmc.minimizeToTray = true
lmc.autoReload = true
lmc_device_set_name('NUMPAD', '11788717')
lmc_minimize()

local sc = require 'sc'

map = {};

--First Row
map[144] = sc.PowerToggle;
map[111] = sc.EngineToggle;
map[106] = sc.ShieldsToggle;
map[8] = sc.FlightReady;

--Second Row
map[36] = sc.PowerToWeapons;
map[38] = sc.PowerToEngines;
map[33] = sc.PowerToShields;
map[109] = sc.LightsToggle;

--Third Row
map[37] = sc.PowerReset;
map[12] = sc.ShieldsFront;
map[39] = sc.ShieldsReset;
map[107] = 0;

--4th
map[35] = sc.ShieldsLeft;
map[40] = sc.ShieldsBack;
map[34] = sc.ShieldsRight;

--Two buttons on either side of '00'
map[45] = sc.Agree;
map[46] = sc.Disagree;

--Enter
map[13] = sc.Eject;

button_handler = function(button, direction)
	if (direction == 0) then lmc_send_input(map[button], 0, 0) end
	if (direction == 1) then lmc_send_input(map[button], 0, 2) end
end

lmc_set_handler('NUMPAD',function(button, direction, flags, ts)
  button_handler(button, direction)
  if (direction == 1) then return end  -- ignore down
	if (button == 144) then
      lmc_send_input(144,0,0); -- press NUMLOCK
      lmc_send_input(144,0,2); -- release NUMLOCK
    end
 end)
 
works perfectly and none of the original keypresses come through, only the mapped ones. Everything works on Notepad, explorer, etc.

In Star Citizen though, nothing works - EXCEPT the original keys. If I change the lmc_send_input to lmc_send_keys, it starts to work (but obviously no holding down keys and slightly more complicated code), BUT it also interprets the original keypress regardless of what I have in luaMacros.

Damn that's disappointing. I was hoping to use cheap USB numpads as external controllers in SC, but I guess I need to get a soldering iron and begin to work on button boxes... :/

Re: Keeping button pressed

Posted: 28 Jan 2019, 14:02
by admin
Yes, then it's the game issue. Some games read keyboards "directly", at low level, in the same way as luamacros internally does. Then such programs cannot be hacked with luamacros.