Thursday, 23 January 2014

Simplified firmware and API

There will be two firmware/API versions available:

1) Standard:
  • Android only, 
  • using InputStickUtility is necessary (unless you want to add a lot more code to your app),
  • full control of USB descriptors and requests,
  • direct access to USB endpoints,
  • allows you to decide, what happens in case when Bluetooth connection is lost,
  • buffering mechanism, high performance (up to 800 characters/second using keyboard class).
This version allows you to emulate many different kinds of USB devices, also to make exact "copy" of a USB device (by using the same PID, VID and even serial number) and achieve high performance, see: fast keyboard post. All of this comes at a cost of complexity: porting it to other platforms can take a while.

2) Simplified:
  • currently Android only, Java SE and ME (JSR-82) coming soon,
  • easy to port to other platforms,
  • you can use InputStickUtility or if you don't want to, you can implement entire Bluetooth communication inside your app (much easier than with standard API version),
  • supports only generic USB keyboard and mouse classes,
  • you cannot modify descriptors,
  • no buffering, still performance should be OK for most use cases (up to 50 characters/second using keyboard class).
As you can see, less functionality, but as a result porting it to other platforms should be relatively easy. There are basically two things that you can do with it: check status (USB enumeration state, keyboard LEDs) and send keyboard/mouse reports.

Why am I introducing simplified version? I've been getting questions about API availability for many different platforms: desktop Windows, Windows Mobile and even Java2ME. It also turns out that majority of people are interested only in keyboard or keyboard and mouse classes.

I'm already testing new firmware and API, so far everything looks good and since it's much simpler than standard version, it should take no more than a few days to get it ready. As soon as testing is done, I'll post more details.

What version will be used as a default one? I'm not sure yet, I still got about a month to make a final decision. As for now, it looks like majority of people only need keyboard and mouse classes, so I probably should keep it simple and use "simplified" version as a default firmware. Whatever the decision will be, anyone will be able to replace firmware at any moment using InputStickUtility app. What's more I think that people interested in "standard" version are generally more familiar with technology and should have no problem at all with this process.

No comments:

Post a Comment