First, we import uinput and define the wiring of the keypad buttons. For each of the buttons in BTN, we enable them as inputs, with internal pull-ups enabled.
Next, we set up uinput, defining the keys we want to emulate and adding them to the uinput.Device() function. We wait a few seconds to allow uinput to initialize, set the initial button and key states, and start our main loop.
The main loop is split into two sections: the first section checks through the buttons and records the states in btn_state, and the second section compares the btn_state with the current key_state array. This way, we can detect a change in btn_state and call device.emit() to toggle the state of the key.
To allow us to run this script in the background, we can run it with &, as shown in the
following command:
sudo python3 gpiokeys.py &
You can even put a process/program on hold to get to Command Prompt by pressing Ctrl + Z and then resume it with bg (which will let it run in the background).