Thursday 19 November 2015

iOS API and Demo update

Updated iOS API and demo project are now available here. Previous post about iOS API.
Note: make sure you are using latest firmware (v0.98) if you are working with OS X 10.11.


API changes:

  • many improvements and bug fixes,
  • added all keyboard layouts that are available in Android API version (see full list),
  • added mouse interface,
  • added consumer control interface,
  • added gamepad interface,
  • updated demo project.


Things not yet ready:

  • readme for the API will be added soon. Most things are already covered in Android version,
  • password protection is still not supported - if your InputStick is password protected, you must remove password protection to use it with iOS devices.


Demo project:

Demo project is a simple remote-control application. Available functions:
  • "Connect with any device" - displays list of nearby Bluetooth devices, allows to select device to connect with,
  • "Connect with last device" - attempts to connect with previously used device,
  • "Disconnect",
  • "Keyboard" screen - intercepts characters from on-screen keyboard. Allows to choose keyboard layout (always make sure it matches layout used by USB host),
  • "Mouse" screen - move mouse cursor with one finger, use two fingers to scroll. Three mouse buttons: left, middle, right.
  • "Consumer control" screen - Volume control: up, down, mute. Playback control: play/pause, next, previous, stop. Launch system default application: browser, email client, calculator,
  • "Gamepad" screen - control gamepad X and Y axes and 4 buttons.


Main screen.

Scanning for nearby devices.


Keyboard screen.

Mouse screen.

Consumer control screen.

Gamepad screen.

Tuesday 17 November 2015

USB Remote v1.50

v1.50 update will appear on Google Play within next few hours. Please let me know (in comments section) if you'll find a bug.


General changes.

Position of tabs (tab host) can be adjusted (Settings -> General):

Tab host can be moved to the bottom of the screen.

Compatibility with Android 6.0 permissions system - application will ask for permission to access internal storage (read/write files), when running on the latest version of Android OS. If denied, functionality of macros and voice commands will be limited.
Important: it may be necessary to force stop the application after granting the permission: explanation and more details.


System keyboard screen.

System keyboard screen has been slightly redesigned: 

More customization options:
  • modifier keys are now also available in full-screen mode,
  • modifier keys can be disabled,
  • modifier keys can be auto-released after pressing any other key (example: toggle Ctrl button, press S key, Ctrl+s is sent to USB host, Ctrl toggle button goes back to off state),
  • long press or double click modifier key to press and release the key (for example: long press "GUI"button to press and release Windows key to open start menu).
  • mousepad can be resized when soft keyboard is hidden. You can adjust this in settings.

Modifier keys and mousepad in full-screen mode.

Mousepad is resized when soft keyboard is hidden.

Fixed bugs:
  • modifier keys now work properly again,
  • buttons no longer take focus - enter and arrow keys now work properly all the time.


Custom keyboard screen.

  • long press swap button ("blue arrows") key to go back to previous set of buttons.
  • modifier key + non-modifier key combos now work properly in every mode (Settings -> Keyboard (Custom) -> Press and hold action).


"Text" tab.

Redesigned UI:

Redesigned text tab.

  • "Edit" button: opens large edit screen. This should help when working with long text,
  • "Settings" button: allows to quickly access settings related to "text" tab,
  • "Erase" button: removes last input by pressing backspace key the same number of times as there were characters in last input. Keeps track of the last input only! If pressed again (or there is no previous input), backspace key will be pressed only once. Example: if "some text" was types, "Erase" will result in pressing backspace key 9 times. Pressing "Erase" again will result in pressing backspace key once, no matter what text was typed before.
  • "Real time" typing: text is types as soon as it is entered into  text filed. You can use features that are not available when "System keyboard" screen is used: swype, dictionary and text prediction, voice input. By default text stays in text field and must be removed manually (use "Clear" button). If you want the text to be automatically removed, see Settings -> Text -> Compatibility.

Dictation and Voice commands:

You can use "real time typing" mode for voice dictation in real time. Use voice recognition functionality available in your soft keyboard. In most cases Internet access is required. So far it looks like you can get best results using "Swype + Dragon keyboard".

  • Settings -> Text -> enable "Type in real time",
  • connect to InputStick,
  • go to "text" tab, click on text field,
  • use Swype + Dragon keyboard (recommended), start voice recognition.
How this works:
  • speak a sentence,
  • Swype + Dragon takes care of converting speech to text,
  • text is entered into text filed,
  • as soon as it appears there, it is typed into USB host using InputStick.

Voice dictation using Swype + Dragon keyboard.

It is possible to enable "voice commands" - when matching keyword is detected, pre-defined action is executed, instead of typing text. Example:
say "select" - Ctrl+A will be sent to USB host instead of typing "select".

To avoid accidental execution of commands, you should enable and specify "Activation keyword" which must appear before command keyword. Example:
  • activation keyword is set to "execute",
  • when you say "... select the file which ...", it will be typed as a text.
  • when you say "... execute select ...." - Ctrl+a is pressed.
Note: both words must be entered as a single input. So this will not work if you make a long pause between both words.Currently, activation keyword and command keywords must be a single word (no spaces, "my activation keyword" is not allowed etc.).

You can see list of active command keywords in settings.
Default set of command keywords:
  • "erase" - removes last input (or presses backspace key). Same result as pressing "Erase" button.
  • "select" - Ctrl+a
  • "copy" - Ctrl+c
  • "cut" - Ctrl+x
  • "paste" - Ctrl+v
  • "close" - Alt+f4     
  • "run" - Win+r
  • "print" - Ctrl+p
  • "save" - Ctrl+s,        
  • "enter" - enter
  • "escape" - escape
Custom command keywords:
You can define custom set of command keywords, which can be added to the default set, or used to completely override it. This allows to use non-English words or use words which are more easily recognized. Example: you can replace "paste" keyword with "wklej" (Polish language) or use "insert".
To use custom keywords, you must create file "commands.txt" and put it in USBRemote directory. Go to Settings->Text and choose if commands specified in this file will be added to the default set or will replace it entirely. By default, the file is ignored.

File format:
You can use: type, press, click, etc. macro actions. More details. Example of commands.txt file:
#erase last input:
#select all:
#left click:
#scroll up:
#start/resume playback:



Default macro storage location is now changed to file-system. For now, it is still possible to use "Internal storage" option, however some new functions cannot be used in such case.

New macro actions:

action: same result as pressing "Erase" button available on "Text" tab,
parameters: none,
example: <erase>
comments: only for voice commands.

action: display toast message with given text,
parameters: text to be displayed,
example: <toast>some message

action:plays notification sound,
parameters: none,
example: <beep>

action: vibrates for specified time period,
parameters: duration in milliseconds,
example: <vibrate> 100

action: none. Allows to use <loop> and <jump> actions,
parameters: none,
example: <label>start

action: repeats all actions between specified <label> and this instruction specified number of times,
parameters: label to jump to, number of repetitions,
example: <loop>start,5

action:displays dialog window with list of all defined labels. Allows to continue execution at selected label or with next instruction (when canceled),
parameters: none,
example: <jump>

action: declares that parameter with specified name can be used within this macro. Values of parameters will be substituted before executing the macro and must be specified using "Parameters" screen, <param> must be declared BEFORE it is used.
parameters: name of parameter, must start with % character,
example: <param>%password 

Flow control:

It is now possible to create loops and jump to previously declared labels. Example:

#play sound
#IMPORTANT: param must be defined before it is used!



#IMPORTANT: label must be defined BEFORE loop pointing to it

#user can manually select any label to jump to or cancel and continue with next action
#display toast message
When <jump> instruction is reached, execution is paused and user is asked to choose at which point execution should be resumed. If canceled, execution is resumed at next instructions. 

<jump> instruction allows user to select at which instruction execution of the macro will be resumed.
Result (assuming "Cancel" was chosen and %user = Kuba):
loop1 22222
loop1 22222


It is now possible to use parameters in macros (note: only if "file-system" is used for storing macros). Name of parameter must start with % character. Values are substituted before executing a macro. Parameters can be defined using "Parameters" screen ("Macro" tab -> %param).

Parameters screen.

You can save names and values of all declared parameters to a text file. Then, before executing a macro, go to "Parameters" screen and load matching file. Example:

File: BobPC.txt (load this file if you are working with Bob's PC)

File: AlicePC.txt (load this file if you are working with Alice's PC)

#always remember to define a parameter before using it!

before executing the macro, %password will be replaced with either "1234" or "abcd".

Warning: parameter files are not encrypted! Keep this in mind if you want to specify parameters containing passwords etc.

Wednesday 21 October 2015

Firmware 0.98

New version of InputStick firmware (v0.98) is now available. You can flash new firmware via Bluetooth as soon as your InputStickUtility gets updated.

List of changes:

  • USB SetIdle request,
  • restore defaults options,
  • bug fixes,
  • mixed reports, duplicated packets.

How to update:

You will be notified about available firmware update after connecting to InputStick. Clicking on "Yes" will take you directly to firmware upgrade screen. You can also do it manually: 
InputStickUtility > Select device > (More) > Firmware upgrade.
Please read carefully and follow instructions! If update fails or gets stuck, go back and try again.

If your device is NOT password protected, firmware update can be started ONLY during first 30 seconds after plugging it into USB port.

In such case, if you are already on firmware upgrade screen:
  • remove InputStick from USB port,
  • plug it again,
  • wait approximately 5 seconds,
  • press "Flash" button.

USB SetIdle request:

When USB host issues SetIdle request, USB_SUCCESS is returned. This change makes InputStick compatible with latest OS X 10.11 (El Captain).

Restore defaults options:

If you change and forget Bluetooth pairing PIN (BT2.1 version) or set password protection and forget the password, it is possible to restore default settings. Follow this procedure:

How to restore InpuStick to default settings:
  • plug InputStick into USB port. Important! Use Windows PC (*),
  • wait until it is detected by USB host (approx 5 seconds),
  • press CapsLock key 20 times within next 20 seconds (use physical keyboard),
  • wait 10 seconds,
  • remove InputStick from USB port,
  • PIN is now set to "1234" (BT2.1 version) or disabled (BT4.0 version), password protection is removed, all settings are restored to default values.
(*) OS X and Linux, keeps state of keyboard LEDs separate for each keyboard. InputStick will not be able to detect if CapsLock key was pressed using other keyboard.

Restoring defaults requires physical access to InputStick device and USB port. It is not possible to remotely remove password protection! If password protection is removed without your knowledge, you will be notified about this fact by InputStickUtility app during next connection attempt.

With previous firmware version (0.97), this method allowed to restore pairing PIN ONLY. Removing password protection required to go through more complex procedure (requires using InputStickUtility application and takes approximately 10 minutes).
See: InputStickUtility > Select device > Configuration > Connect > Restore defaults.
It is possible to keep things the old way, by changing restore options:
InputStickUtility > Select device > Configuration > Connect > Password protection > Restore options.

Bug fixes:

  • packets with CRC32 checksum declared as 0x00000000 are no longer generating error notifications (CRC32 check is now properly skipped),
  • no more duplicated error notifications,
  • solved potential problems that could occur if uptime exceeds approx. 50 days.

Mixed reports, duplicated packets:

It is now possible to send multiple reports of different kinds within a single packet. It is also possible to send duplicated packets, just in case first one is not correctly delivered.
This will allow to solve (with new version of InputStickAPI for Android) problems related to Android OS Bluetooth stack, which under some conditions, fails to correctly deliver packets when Bluetooth Low Energy mode is used.

Wednesday 14 October 2015

InputStickUtility 1.42 Android M

List of changes:

ACCESS_COARSE_LOCATION permission is now required to ensure compatibility with Android 6.0 Marshmallow:

Due to changes in permission system introduced in latest release of Android OS (runtime permissions), it is now necessary for application to have LOCATION permission to perform Bluetooth scanning. You will be asked to grant the permission before scanning for new Bluetooth device.

LOCATION permission is required ONLY to make the app compatible with latest Android version. Nothing else is changed. Your location is never retrieved by the app.

Android OS requires LOCATION permission for Bluetooth scanning, because under some conditions, knowing MAC addresses for nearby Bluetooth devices could allow to reveal your approximate location

Note: if necessary, it is possible to enter MAC address of InputStick device manually. In such case you must use other device to get the MAC address first.

LE scanning mode can be enabled (Android 5.0 and later, use only if default one does not work properly):

If for some reason default scanning mode does not work on your device, you can switch to new LE mode which was introduced in Android 5.0. Warning: Bluetooth 2.1 devices may not be discovered when LE mode is used!

Bluetooth troubleshooting tips (displayed before adding new device):

A few tips that can help if you are not able to discover of connect to InputStick:
  • refresh scan if your device is not found,
  • unplug-plug InputStick,
  • turn Bluetooth on-off,
  • disconnect any other Bluetooth devices (headset, smartband),
  • verification gets stuck at any point, go back and try all over again,
  • reboot device if everything else fails. 



Keyboard interface does not work with OSX El Captain (10.11). Upcoming firmware update will solve this problem.

Thursday 17 September 2015


iOS API for InputStick is finally available:

Project Setup:
Clone repository: `git clone`

  • Create ISManager object with proper delegate
  • Connect with InputStick Device

  • Create ISKeyboardHandle object injecting the previously created ISManager
  • Send text to InputStick using: (void)sendText:(NSString *)text
Be sure to first take a look at very simple demo app.

Keep in mind that this is relatively early version: only keyboard interface is supported, available keyboard layouts: en-US and pl-PL (all other layouts that are available in Android version will be added soon).

Please share your opinions about the API and let me know about any bugs, in comments section. This will help with improving next releases.

Wednesday 9 September 2015

USB Remote v1.43

List of changes:
  • Typing speed can be adjusted (Settings -> General) (This should help when working with BIOS or old/slow hardware).
  • Position of custom keyboard can be adjusted (Settings -> Keyboard (Custom)).

  • Position of presentation controls can be adjusted (Settings -> Presentation).

  • Setting screen orientation is now persistent (saved as a preference). 
  • Uses updated InputStick API.
  • Fixed Swedish keyboard layout bug (application will no longer crash when Swedish keyboard layout is selected).

API update

Updated API.

InputStick Broadcasts - new, easy way to use InputStick in your app:

Starting with 1.40 version of InputStickUtility (update will be available on GooglePlay in a few hours) it is possible to send data using broadcasts. Typing text is now this easy:

        InputStickBroadcast.type(MainActivity.this, "some text to type");

(each call results in sending a broadcast to InputStickUtility, which puts appropriate action into FIFO queue, see com.inputstick.api.broadcast.InputStickBroadcast class for more details).

InputStickUtility takes care of everything:
  • enables Bluetooth,
  • asks user to select InputStick device (if more than one is available),
  • establishes Bluetooth connection,
  • select keyboard layout and typing speed (can be set in preferences),
  • closes connection (when application requests to do so or after reaching max inactivity period),
  • if anything goes wrong, handles all InputStick-related errors.
Using broadcasts introduces additional latency, compared to "standard API". If precise timing, direct control over connection and buffers are necessary in your use case, you should use "standard API".
  • password manager app: latency increased by several milliseconds most likely won't be even noticed.
  • remote control app: additional latency can make such app unusable in many situations.

For more details, please download latest API and take a look at "BroadcastDemo" example.

Adjustable typing speed:

Text typing speed can be decreased by multiplying number of HID reports. The more reports USB host will receive, the longer it will take to type.
Example (typing "a" character, 3 reports - 100% typing speed):
  • Report 1: keys released,
  • Report 2: "A" pressed,
  • Report 3: keys released.

Example (typing "a" character, 6 reports - 50% typing speed):
  • Report 1: keys released,
  • Report 2: keys released,
  • Report 3: "A" pressed,
  • Report 4: "A" pressed,
  • Report 5: keys released,
  • Report 6: keys released.

Decreasing typing speed can help to solve missing characters problems, which can occur when working with BIOS (due to simplified keyboard implementation) or advanced text editors (due to spell-checking, auto-complete and similar features).

Easier way to use keyboard layouts:

It is no longer necessary to get KeyboardLayout:

        KeyboardLayout layout = KeyboardLayout.getLayout("pl-PL");
        layout.type("some text in Polish");

now you can simply call:

        InputStickKeyboard.type("some text in Polish", "pl-PL");

Other changes:

  • fixed "init" package name (com.inputstick.init to com.inputstick.api.init),
  • fixed problem when connection gets stuck on "USB not ready" step,
  • BT4.0 connection timeout now works properly,
  • optimized look-up-tables for keyboard layouts,
  • fixed Swedish keyboard layout (could cause app crash),
  • case is now ignored when using layout codes ("en-US" = "en-us" = "EN-US").

Protocol documentation.

  • fixed mistakes in command examples.
  • added info about known bugs in 0.97 firmware version.

Thursday 16 July 2015

BruteForce app update

New version is now available in download section.

List of changes:

  • redesigned UI,
  • text file with passwords can be manually selected (from /BruteForce/ directory),
  • data set can be previewed after loading (first 100 entries),
  • sound and vibration notifications
  • more configuration options: keep screen turned on, disable screen rotation, continuous mode options
  • continuous mode (see below),
  • alternative sequence (see below),
  • updated typing sequence syntax (see below).

Continuous mode.

If selected, authentication attempts will be continuously performed until one of following conditions is met:
  • end of data set is reached,
  • limit of max attempts is reached,
  • action is cancelled by user.
In many cases this mode should make the whole process faster and require less attention, but keep in mind that the app will continue to work even after correct password is entered. You should make sure that it will not break anything in such case. Also you will not know which password was the correct one, so it is a good idea to limit number of max attempts (100? 1000?).

Alternative sequence.

When continuous mode is used, it is possible to execute alternative sequence once every N attempts. This allows to get rid of dialog windows (press Enter/Esc) and deal with timeouts (wait 30s) after number of unsuccessful authentication attempts.

Updated sequence syntax:

%p - type password
%u - type user name (pre-defined)
%u=param - type user name (defined by param)
%d - delay (pre-defined)
%d=param - delay (defined by param)
%s - type custom string (pre-defined)
%s=param - type custom string (defined by param)

%e - press Enter key
%t - press Tab key
%x - press Esc key

Example 1:
Simple case: password is entered into text field and confirmed with Enter key. Next authentication attempt can be performed immediately after failed one.

type password, wait 500ms (default), press Enter key

Example 2:
User name and password are entered into console. User must press "r" followed by Enter to retry. Once every 10 failed attempts, system is locked for 1 minute.

type user name, wait 100ms, press Enter, wait 100ms, type password, wait 100ms, press Enter, wait 500ms (default), type "r", press Enter, wait 100ms.
Set "Type alternative sequence every N attempts" to 10.
Alternative sequence:
wait 1 minute.


Main screen.


User-defined variables.

Selecting data source.

Friday 12 June 2015

BruteForce app

Here's a very simple app that I've recently made for a presentation. It allows to use Android smartphone and InputStick to perform brute force attack (via USB keyboard interface). This is just a simple demo application, not a real "hacking" tool.

With InputStick and BruteForce app, it is possible to perform up to 100 logon attempts in less than 2 minutes (best case scenario, no timeout after unsuccessful attempt). If user picked one of commonly used passwords (like "123456") or easy to guess password, like: combination of user name, number, year of birth, etc. (individual set of passwords can be generated before attack), it is possible that even such a simple attack may be successful. During a short presentation it can be shown how important it is to use following security measures:
  • enforcing strong password policy,
  • limiting max number of logon attempts (before account is locked),
  • adding timeout after unsuccessful attempt,
  • limiting physical access to USB ports.

Please note that it is not necessary to install any kind of software on a targeted OS. In most cases, OS will simply recognize new USB keyboard and use generic USB HID drivers. It takes just a few seconds before first password can be typed. Also, even if new USB hardware is filtered, based on PID and VID, it is possible to change the numbers using InputStickUtility app, to match values used by currently connected USB keyboard.

(12.01.2017 - updated download URL)

Quick overview of the app:

Use "Data source" button to select source of passwords:
  • 4 digit PIN numbers: 0000, 0001 ... 9999,
  • load list of 100 most commonly used passwords (from Adobe leak),
  • you can also prepare your own list of passwords and save them to //passwords.txt file. Note: it may be necessary to reboot OS if app is not detecting this file.

"Setup" allows you to:
  • prepare "typing sequence",
  • decrease typing speed (use if USB host is not accepting fast keyboard input, for example: in BIOS),
  • select keyboard layout
 Typing sequence can consists of following parameters:
  • %p - password
  • %u - user name (in such case you must provide it in text field below),
  • %e - press Enter key,
  • %t - press Tab key, 
  • %d - 500ms delay.
  • %p - type password
  • %p%e - type password, press enter
  • %u%t%p%e - type user name, press Tab, type password, press Enter,
  • %u%e%d%p%e - type user name, press Enter, wait 500ms, type password, press Enter.

Now you are almost ready to go. Plug InputStick into USB port and hit "Connect" button.

"Type" - type currently selected password (or sequence) and go to next one,
"Prev", "Next" - select previous or next password from current set (without typing),
"Jump" - jump to password at selected position (without typing),
"Enter", "Tab", "Esc" - press Enter, Tab or Escape key.

Wednesday 3 June 2015

InputStickUtility 1.33

What's new in this version:
  • Modified "Add new device" screen (auto detecting Bluetooth type, advanced options).
  • Fixed bugs causing application crashes.

Most noticeable changes are related to "Add new device"screen:
  • Application will display information whether BT4.0 is supported by this Android device.
  • Bluetooth type is now automatically detected. Devices without BT4.0 support will always assume that InputStick uses BT2.1 version.
  • Behavior of "Refresh" button is now more intuitive. 
  • Introduced  "Advanced" button.
  • MAC address can be manually provided (for example when for some reason it is not being discovered by this device).
  • Bluetooth type can be manually selected (just in case if auto detection is not working properly). 
  • Device verification can be skipped, what allows to add InputStick device even if it's firmware is corrupted (if bootloader is still functional). 

Tuesday 28 April 2015

Bluetooth 4.0 version - now available

InputStick with Bluetooth 4.0 is now (finally) available, you can get it here: New version is a bit more expensive (+3 USD/EUR), due to higher price of BT4.0 modules. InputStick with BT2.1 will still be available and supported by all InputStick compatible Android applications. After all, there are still a lot of Android 4.0 and even 2.3 devices being used.

Support for iOS devices.

BT4.0 version is next step towards making InputStick available for iOS users (Android users can also benefit from using BT4.0).

Good news:
  • BT4.0 version is confirmed to work with iPhone 4S and newer.
  • If you are an iOS developer, familiar with BT4.0, it should be relatively easy to use basic functions (like typing ASCII characters) using protocol documentation (available here).
Not so good news:
  • At this moment there are no iOS apps nor API available. Basic functionality (typing ASCII characters) is relatively easy to implement, but full API will require much more effort: encryption and authentication, keyboard layouts, firmware upgrade, restoring defaults. 
  • Since I'm not familiar with iOS development, this task will be carried out by other developer. At this moment I still can't give any more details about when the API may be finally available.

Why standard (BT2.1) version is not compatible with iOS devices? Apple decided that classic-Bluetooth devices must go through approval process and have special authentication chip. This is no longer the case when it comes to BT4.0, which was first introduced in iPhone 4S.

Hardware & Firmware.

The only difference between previous version and the new one is Bluetooth module. Other than that, hardware is exactly the same. Starting with 0.97 version, firmware supports both Bluetooth modules. This means that any firmware updates will be released for both BT2.1 and BT4.0 devices at the same time.

Android compatibility.

All existing applications (that use InputStickUtility as a proxy), will work with BT4.0 version out of the box. Examples: USB Remote, KP2A plugin.
If you've developed your own app and decided to use direct connection method (instead of connecting via Utility app), it will be necessary to rebuild the app using latest InputStick API.

How to use BT4.0 InputStick with your Android device? When adding new device in InputStickUtility, check "This is a BT4.0 device" checkbox.

Android requirements: 
  • 4.3 or newer (API18),
  • Bluetooth 4.0,
  • InputStickUtility app, version 1.30 or newer.
How to check if your phone supports new InputStick?
  1. download InputStickUtility application from GooglePlay store,
  2. go to "About & Help",
  3. click "Check BT4.0 support".
If your Android device was released within last 18 months, it is most likely compatible with new InputStick.

Bluetooth 4.0 vs Bluetooth 2.1.

  • faster connection establishment: BT4.0 takes less than a second to establish a connection and go through initialization. In case of BT2.1, this usually required approximately 2-3 seconds.
  • lower latency: BT4.0 allowed to reduce latency, this makes noticeable difference when it comes to mouse interface, which now works smoother.
  • lower data transfer rate: as a result, typing is approximately 25% slower. This becomes noticeable when a lot of text is being typed (more than 50 characters), for example when typing text files. You most likely won't even notice this when using apps like KP2A plugin or USB Remote.
  • no pairing PIN: due to bug in Android OS, if BT4.0 device requires pairing PIN, the OS will ask for the PIN during EVERY SINGLE connection attempt. Because of that, by default there is no pairing PIN and changing PIN for BT4.0 devices is disabled in InputStickUtility. Note: InputStick can be password protected using 128bit key, so lack of pairing PIN does not make it less secure (compared to BT2.1 version). If someone connects to password-protected InputStick, he won't be able to use it in any way (send key or mouse events) unless correct password is provided. Also, firmware makes potential bruteforce attack less effective by limiting authentications attempts to one each second.
In my opinion, in most scenarios advantages of BT4.0 are definitely more noticeable than its disadvantages.

Which version is right for me?

If you are mostly interested in using InputStick with iOS devices, you should wait a bit longer and wait for updates regarding iOS API and apps. Unless you are an iOS developer, familiar with using Bluetooth and want to try it ASAP.

You should get standard, BT2.1 version if:
  • your Android device does not support BT4.0
  • you are going to use InputStick to type A LOT OF TEXT (like thousand characters at a time) and typing speed is very important in your use case.
In every other case, you should consider getting BT4.0 version.

Wednesday 15 April 2015

InputStickUtility 1.32

This update fixes a bug that appeared in previous version. When some other application was attempting to establish connection and InputStickUtility was not launched manually before, it would crash during the connection attempt.

Friday 10 April 2015

InputStickUtility 1.31

Support for BT4.0 can be checked (About & Help).

InputStickUtility can now be used to check if your Android device is compatible with upcoming BT4.0 version of InputStick.
XT910 does not support BT4.0 InputStick.

Added Polish translation.

Polish translation won't matter for most users, but this is the first step to other language versions.

Polish version.

Other changes.

  • added proper summary for settings,
  • minor bug fixes and UI modifications.

USB Remote v1.41

Redesigned settings screen.

Settings are now grouped into categories, that should make navigation a bit easier. Also, summaries are now properly displayed.

Settings categories.

Wednesday 11 March 2015

InputStickUtility 1.30

Home screen widget.

Widget can be used to set particular InputStick device as a default one. This will make it easier to avoid "Select InputStick device" popup dialog, when using more than one InputStick:
  • Make sure that Settings -> Dialog settings -> Never ask (use default device) is selected.
  • Use widgets to quickly set default device (for example: InputSitck-home, InputStick-work).

Select InputStickUtility widget.

Setup the widget.

Widgets for setting default device.

"Tasker" integration.

InputStickUtility is now detected by Tasker application as a plugin. For more info about Tasker app, click here.
Tasker allows to automatize process of settings default device, based on time, your location, Bluetooth/WiFi devices available in range and other factors.

USBRemote and InputStickUtility are detected as plugins.

Task example.

Bluetooth 4.0 is now supported.

InputStickUtility is now ready for upcoming Bluetooth 4.0 version of InputStick. All existing InputStick compatible apps will work with BT4.0 version without any modifications. More info about BT4.0 version will be posted soon (probably next week, when I should receive first batch of BT4.0 devices from my manufacturer).

Other changes and improvements.

  • Fixed bug when descriptor modification removed password stored in the application
  • Firmware upgrade screen will display notification if most recent FW is already flashed.
  • Automatically disconnects after settings new pairing PIN.

USB Remote v1.40

Home screen widget.

Following actions can be assigned to a widget:
  • "Connection state" - connect or disconnect can be selected.
  • "Type text" - optionally can be followed with Enter key.
  • "Run macro: - execute selected macro.
  • "Media action" - volume down, volume up, mute/unmute, previous track, next track, play/pause.
Note: if there is no active InputStick connection at the time when a widget is clicked, application will try to establish new connection.

Select USBRemote widget.

Setup the widget.

Some examples.

"Tasker" integration.

USBRemote is now detected by Tasker application as a plugin. For more info about Tasker app, click here.
Here's a simple example of task that can be triggered when MAC address of chosen InputStick device is detected in range:
  • Select "InputStick-LE" as a default device.
  • Type Windows password, followed by Enter.
  • Disconnect
Connection will be triggered automatically, so there is no need to add "Connect" action. If InputStickUtility is set to connect to default InputStick device, without displaying popup dialog, everything will happen automatically without any interaction from user.

USBRemote and InputStickUtility are detected as plugins.

Task example.

Help & info (URLs).

Added separate screen for help URLs and opening changelog.

Auto-clear option for text tab.

This will come useful when typing a lot of text using "Text" tab. When "Type" button is pressed, text field is automatically cleared and you can immediately start entering new text to type.

Automatically press Enter and clear text field after pressing "Type".

Friday 6 February 2015


Now that gamepad is finally supported by latest InputStick firmware, I can continue working on gamepad app.

Download InputStickGamepad.apk (note: your InputStick must have latest firmware: v.097).

Functionality available in current version:
  • use accelerometer to control: gamepad (X,Y), gamepad (Z,rX), mouse, keyboard (WSAD) or keyboard (arrows),
  • 15 gamepad buttons, 
  • sensitivity settings,
  • dead-zone can be set for accelerometer (useful when accelerometer is used for mouse or keyboard input).
A lot of configuration and customization options are necessary before this app will be ready for Google Play store, so I guess it will appear in the store no earlier than March 2015.

Thursday 29 January 2015

USB Remote v1.30

Now it's time for new version of USB Remote app (update will appear on GooglePlay in a few hours). Here is an overview of most important changes:

Keyboard customization. 

It is now possible to enabled additional key sets on keyboard screen: 
Settings -> Choose visible key sets

you can also choose distance between the sets:
Settings -> Distance between key sets

Depending on your device and selected distance, you'll be able to fit different number of key sets:

Example 1:
8" tablet,
Small distance between key sets,
Media buttons + Macro buttons + Lock keys + Navigation keys + Punctuation characters + Number keys
Mousepad enabled

Example 2:
8" tablet,
Very large distance between key sets,
Media buttons + Macro buttons + Lock keys + Navigation keys + Number keys,
Mousepad won't fit.

Example 3:
4.3" phone,
Small distance between key sets,
Lock keys + Navigation keys + Punctuation characters + Number keys,
Mousepad disabled. 

Example 4:
4.3" phone,
Small distance between key sets,
Navigation keys + Switchable row,
Mousepad enabled.

Macro buttons.

You can assign macros to M1-M8 buttons set, which can be enabled for keyboard screen. After recording a macro, rename it to:

  • m1.txt to assign it to M1 button,
  • m2.txt to assign it to M2 button,
  • ...
  • m8.txt to assign it to M8 button.

All macro files must be stores in /USBRemote/Macros/ directory.

Sound & Vibrations.

Sound and vibrations feedback can be enabled for keyboard screen:
Settings -> Play sound when key is pressed,
Settings -> Vibrate when key is pressed.

Note: vibrations will not work with most tablet devices.

Sleep, Power and USB host resume.

These three new buttons are now available on Media screen. Sleep and Power buttons behavior will depend on your OS and settings. Resuming USB host from sleep/suspended state will work only if following conditions are met:

  • InputStick is flashed with firmware 0.97 or later,
  • USB host supplies USB power when in sleep/suspended state,
  • OS allows this device to wake the computer.

Auto-connect bug fixed.

When auto-connect is enabled and user cancels "Select InputStick device" dialog, without selecting any device, USB Remote will no longer make another auto-connect attempt.