[APP][2.3.3+] MOGA Universal Driver

Search This thread

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
promo.png


Use your PowerA MOGA with any application!

Provides full functionality for the PowerA MOGA™ Pocket and Pro controllers.

This application includes both a Virtual Keyboard that should work on all devices and a Gamepad Mode that provides full gamepad functionality for rooted devices.

NOTE: Only supports one controller at a time!

Features:
* Virtual Keyboard
* Virtual Gamepad
* Customizable profiles so you can make it work just right with your game or emulator
* Exportable profiles
* MOGA device management
* Button to stop Pivot services (Root users only, non-root get taken to the Settings application to do it manually, sorry!)
* Two Home-screen widgets:
** Small toggle widget
** Long toggle widget with profile switcher

Virtual Keyboard Features:
* Does not require root
* Usable by any application that listens for keyboard input
* Customizable!

Virtual Gamepad Features:
* Acts like a full Gamepad
* Toggle the analog joysticks between digital and analog output depending on your needs
* Customizable!

Usage:

1. Select your device:

I'm going to assume you haven't already paired your controller with your phone. Skip to the end of the section if you've already got it paired.

Make sure Bluetooth is enabled before continuing!

Select the "Manage Controllers" button found at the top of the Settings application. You will see an empty list of paired controllers.

Power on your Pocket or, if you have a Pro, turn it on into Mode A. Select "Add Controller" at the bottom of the screen. Your phone will start scanning for controllers and will add only MOGA devices to the list as it finds them. Once the scan completes select the controller you wish to pair with and click the "Select" button. It will begin the pairing process with your controller and you will most likely see a dialog pop up that asks you to confirm a PIN. Accept the PIN and the "Add Controller" screen will close, dropping you back to the "Manage Devices" screen. Click back once more unless you wish to repeat this step to add another controller.

2. Running in Virtual Keyboard mode:

This is the default mode for the driver but does require a few steps to configure.

Scrolling down to the "Driver Mode" section on the main screen you'll see that the current mode for the driver is "Virtual Keyboard" (unless you've already changed it to Gamepad, in which case switch back to Virtual Keyboard to follow these instructions). Click on the "Configure Virtual Keyboards" button to be taken directly to the appropriate Settings screen to turn on the "MOGA Virtual Keyboard" this cannot be done automatically for security reasons which are explained when you turn on the MOGA Virtual Keyboard. After you've enabled it go back to the driver's Settings screen and click "Select Virtual Keyboard". This will pop up the system dialog to let you choose which keyboard you want to be the active one. This also cannot be done automatically, sorry!

Finally toggle the button next to "Enable Driver" to turn on the driver. You'll see a MOGA icon appear in your notifications bar indicating the status of the driver: white for disconnected, green for connected.

If you'd like to configure a profile scroll down to the "Configuring a Profile" section below!

3. Running in Virtual Gamepad mode:

Before you continue: you must have a rooted device with SuperUser installed in order to use the Virtual Gamepad mode. The button to enable the Virtual Gamepad is disabled if your device does not support SuperUser.

Virtual Gamepad mode is significantly easier to configure. First, click on the "Switch" button next to the current mode which will pop up a dialog box explaining the two available modes. Feel free to read these before continuing. Select Gamepad from the list and you've successfully configured Gamepad mode!

All you have to do next is enable the driver by toggling the "Enable Driver" button just as you would in the Virtual Keyboard mode.

4. Configuring a Profile:

The profile system was entirely rewritten in 3.0 to make the process easier and to provide the ability to share profiles with friends. If you scroll down to the bottom of the settings page you'll see the "Profiles" section with a couple of buttons. Clicking "Switch" will popup a dialog containing all of the valid profiles for the current controller type and driver mode (for example, you cannot use a MOGA Pocket profile that was configured for Virtual Keyboard mode on a MOGA Pro in Gamepad mode, with any variation therein).

Selecting "Manage Profiles" will bring you to a list similar to the "Manage Controllers" screen. Here you can create new profiles, rename them, delete them, or reload them from the SD card if you've added new ones onto your SD card while the program was running.

Click "Create Profile" to begin. You will first be prompted with a dialog that asks for the name of the profile. Enter what you'd like and click OK. You will then be presented with the default configuration for that profile. You can modify any of the mappings by clicking on the "Change" buttons associated with each input. When you click "Change" a dialog box will appear with a sorted list of output types. Select a type and then select the button you wish to map to that input. Changes are saved when you leave the edit page.

If you are running in Virtual Gamepad mode you will have a few more options available to you. You can decide whether or not the Analog inputs (including the DPad) should send Analog outputs or standard Button outputs. The list will automatically update when you toggle the analog mode so scroll down afterwards to configure the outputs. Gamepad mode will not present you with a list of categories as the options are much more limited. Since it is pretending to be a controller it can only send controller messages to the system. For any analog input you will only be allowed to map analog outputs and for buttons, only button outputs.

After creating a profile click the "Switch" button to select your profile and activate it!

Profiles are automatically saved to "/sdcard/MOGA/IME" for Virtual Keyboard mode and "/sdcard/MOGA/System" for Virtual Gamepad mode.

Troubleshooting:

Lots of users have reported that the driver does not properly connect on certain devices (I'm noticing most are Samsung TouchWiz-enabled devices). I am still actively investigating this and will hopefully be able to resolve it sooner rather than later!

* Make sure that the Pivot is NOT running when you run my driver! It will connect to the controller and prevent my driver from connecting. There is a button at the bottom of the settings screen that will help you ensure Pivot isn't running.
* If you turn on your MOGA Pocket and the light immediately turns green then turn it off and back on until the blue light blinks consistently. I've noticed on my own that this happens almost every time I turn it on after a long period of not using the controller.
* Some users have reported that disabling WiFi has allowed them to connect their controllers.
* There is a bit of voodoo that one user found that helped them connect to their controller on a Samsung device:
I was having the same problem on my Note 2 also. The only way I've been able to connect to this MOGA Universal Driver app is by connecting first to the MOGA Pivot app then starting the Universal Driver and then turning my phones screen off for about a second then turning it back on. For whatever reason after turning my screen back on it instantly connects to the Universal Driver app.

Download:

Google Play

This product is not affiliated with, nor authorized, endorsed or licensed in any way by Bensussen Deutsch and Associates, Inc., its affiliates or subsidiaries. All trademarks are property of their respective holders.

Buy me a soda!
 
Last edited:

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
Changelog:

3.1:
Brought back the widgets!
New, long widget: change profiles from your desktop
Fixed a few more crashes reported by users. Keep 'em coming -- but hopefully not!

3.0.3:
Rewrote connection code. Works on my devices that previously didn't. Please try!
Fixed "Enable Bluetooth" bug where it was out-of-sync with Bluetooth Adapter state
Added dialog when enabling driver to warn you if Pivot is detected to be running
Fixed Pivot detection and stopping code to include all Pivot packages
Moved SuperUser check from Application to Settings Activity to prevent it from popping up all the time

3.0.2:
Added Spacebar and the Numpad numbers to the Virtual Keyboard mappable keys
Fixed some crashes users had reported
Removed old WAKE_LOCK permission
Fixed "Stop Pivot Services" button

3.0.1:
Fixed crash on older devices due to a typo when discovery started
Fixed Left stick's Right being mapped to DpadUp by default (Pocket)
Fixed Left/Right shoulder buttons being flipped (Pro/Pocket)

3.0:
Completely rewritten!
Supports MOGA Pro
Profiles are saved as XML files on the SD card for easy sharing

2.2:
Fixed crash (So sorry for the broken update!)

2.1:
Added System Service toggle widget
Split Analog/DPad toggle into two options to have one DPad one Analog

2.0:
Completely rewritten to improve lag time.
System-mode added.
Analog support now available in System-mode.
Analog can be toggled to allow DPAD use.
Notification icons change according to connection status.

1.1:
KeyEvents are now broadcast as JOYSTICK and GAMEPAD sources.

1.0:
First release!
 
Last edited:

e4xda

Member
May 28, 2009
42
7
Great work on the app, thank you very much!

Is there anyway to get the device to present itself as a generic gamepad, similar to a dualshock and the six axis app?
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
I could send KeyEvents as a Gamepad and Joystick source but I don't know if that's what you're talking about. Whenever I've used gamepads on my devices they always come in through KeyDown and GenericMotion events.
 

Thwiipp

Member
Oct 13, 2008
42
3
Awesome work man, Ive done a little testing so far. Works great with Sonic CD, and Mame4Droid, but i cant get it to work in Gameboid for some reason, probably the same in the other iod emulators, haven't tested those yet. so far hasn't worked in any of the other android native games ive tried. will continue my tests.
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
Awesome work man, Ive done a little testing so far. Works great with Sonic CD, and Mame4Droid, but i cant get it to work in Gameboid for some reason, probably the same in the other iod emulators, haven't tested those yet. so far hasn't worked in any of the other android native games ive tried. will continue my tests.
I tried it on SNESoid and GameBoid and in both cases I needed to enable "Use Input Method" in the "Other Settings" menu in order for it to work. It would appear that the emulators don't listen to soft-key events if this is off.
 

e4xda

Member
May 28, 2009
42
7
I could send KeyEvents as a Gamepad and Joystick source but I don't know if that's what you're talking about. Whenever I've used gamepads on my devices they always come in through KeyDown and GenericMotion events.

Sort of, yes. I tried the updated version of the app (think you for putting it out there) but it wasn't quite what I was trying to describe.

This is what I'm after and the only real example I have to describe what I'm talking about.
If you use the sixaxis app has an option in it to "Enable Gamepad: Android will see controllers as native gamepads."

When this option is enabled, games like Dead Trigger will give you an in-game menu to map the controller buttons.

Again, thank you VERY much for your work on this. As is, it makes the MOGA useable!

---------- Post added at 05:12 PM ---------- Previous post was at 05:04 PM ----------

I could send KeyEvents as a Gamepad and Joystick source but I don't know if that's what you're talking about. Whenever I've used gamepads on my devices they always come in through KeyDown and GenericMotion events.

Sort of, yes. I tried the updated version of the app (thank you for putting it out there) but it wasn't quite what I was trying to describe.

This is what I'm after and the only real example I have to describe what I'm talking about.
If you use the sixaxis app has an option in it to "Enable Gamepad: Android will see controllers as native gamepads."

When this option is enabled, games like Dead Trigger will give you an in-game menu to map the controller buttons.

Again, thank you VERY much for your work on this. As is, it makes the MOGA useable!

If there's anything I can do to help (screenshots, testing, etc) please don't hesitate to ask.
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
Thanks for the feedback!

I did some more reading and found that the Android framework provides absolutely no way to simulate analog input for normal applications. System applications are allowed to send Touch and Trackball events but not the GenericMotionEvent that gamepads send for analog inputs, and even if it did I'm not a system application. The only way to make it work is to elevate the driver to superuser status and start messing with the system directly. This works out well for what e4xda is asking for too because I will be forced to make the device act as a system-level joystick in order to get the analog inputs working.

What I'm planning on doing is having a toggle for which mode to run the driver in, IME or Gamepad. IME mode will be what you see now. In Gamepad mode the user will have to grant the driver root access (which restricts this mode to rooted devices) so it can broadcast inputs directly to the kernel. A nice side-effect of using it in Gamepad mode would mean you wouldn't have to switch your IME back and forth whenever you wanted to use the MOGA.

Anywho, sorry for getting technical. It's partly for you to stay in the loop and for me to formalize what's in my head ;)
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
I download this app but did not work on my device, any idea's?

I'm afraid I can't really help you out without more info. When you say it doesn't work what exactly do you mean?

In its current form the driver is kind of a song and dance to get going. You'll need to enable it in the system Keyboard and Language settings and then switch to the MOGA IME (which can be done inside the IME settings page). After that you need to configure the IME by selecting which device it should connect to. If you haven't already paired the device you can do that from the settings page. Once you've selected a device go ahead and leave the IME settings page and it should try and connect to your device. Make sure your MOGA is turned on and wait for the light on the PowerA button to turn Green. This will take 5 - 10 seconds on average.

Sometimes my MOGA will turn green immediately for some reason when turning it on even though the phone hasn't connected to it. In those cases just power cycle the MOGA until it connects properly to your phone.
 

doorgoo

Member
May 1, 2011
12
0
Key Mappings

Where is the option to map the buttons to regular letters? Because I can't get gameboid to recognize the buttons.
 

12gage

Senior Member
Sep 3, 2007
1,813
264
Albany, OR
I'm interested in purchasing a MOGA controller, is the clip adjustable for any phone? I have an EVO LTE with an Otterbox case, I'm hoping it'll fit.
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
Where is the option to map the buttons to regular letters? Because I can't get gameboid to recognize the buttons.

I was able to get Gameboid to use the default GamePad buttons (BUTTON_A, BUTTON_B, etc) by enabling "Use Input Method" in Gameboid's "Other Settings " page. It would appear that the code is written to listen for physical input events unless virtual events are enabled.

The emulators are targeted for an Android version prior to Gamepad support so in the UI it'll say [unknown] for everything other than the DPAD inputs but that's just a display name. It's still recording the new keycodes internally and properly listening for them.
 

Lhockey

New member
Oct 26, 2012
1
0
Thanks for the feedback!

I did some more reading and found that the Android framework provides absolutely no way to simulate analog input for normal applications. System applications are allowed to send Touch and Trackball events but not the GenericMotionEvent that gamepads send for analog inputs, and even if it did I'm not a system application. The only way to make it work is to elevate the driver to superuser status and start messing with the system directly. This works out well for what e4xda is asking for too because I will be forced to make the device act as a system-level joystick in order to get the analog inputs working.

What I'm planning on doing is having a toggle for which mode to run the driver in, IME or Gamepad. IME mode will be what you see now. In Gamepad mode the user will have to grant the driver root access (which restricts this mode to rooted devices) so it can broadcast inputs directly to the kernel. A nice side-effect of using it in Gamepad mode would mean you wouldn't have to switch your IME back and forth whenever you wanted to use the MOGA.

Anywho, sorry for getting technical. It's partly for you to stay in the loop and for me to formalize what's in my head ;)

Please do enable analog support for rooted phones! I tried using the stock MOGA app to run Nova 3, and the software is horrible! Sometimes it runs fine, but over half the time there's a 2+ second delay from when I push a button to the action actually occurring... and I know it's not my phone or the controller, since the touch screen controls work perfectly and the controller responds quickly when using your app (rather than the stock app) for different games.

Thanks so much for putting this out quickly :)
 

yomaosh

Member
Mar 15, 2012
11
10
Thanks for the feedback!

I did some more reading and found that the Android framework provides absolutely no way to simulate analog input for normal applications. System applications are allowed to send Touch and Trackball events but not the GenericMotionEvent that gamepads send for analog inputs, and even if it did I'm not a system application. The only way to make it work is to elevate the driver to superuser status and start messing with the system directly. This works out well for what e4xda is asking for too because I will be forced to make the device act as a system-level joystick in order to get the analog inputs working.

What I'm planning on doing is having a toggle for which mode to run the driver in, IME or Gamepad. IME mode will be what you see now. In Gamepad mode the user will have to grant the driver root access (which restricts this mode to rooted devices) so it can broadcast inputs directly to the kernel. A nice side-effect of using it in Gamepad mode would mean you wouldn't have to switch your IME back and forth whenever you wanted to use the MOGA.

Anywho, sorry for getting technical. It's partly for you to stay in the loop and for me to formalize what's in my head ;)

That'd be awesome. It definitely needs to be easier to use this controller... Thanks for your hard work.

Please do enable analog support for rooted phones! I tried using the stock MOGA app to run Nova 3, and the software is horrible! Sometimes it runs fine, but over half the time there's a 2+ second delay from when I push a button to the action actually occurring... and I know it's not my phone or the controller, since the touch screen controls work perfectly and the controller responds quickly when using your app (rather than the stock app) for different games.

Thanks so much for putting this out quickly :)

Why IS there such a delay? It can't be due to connection type, cause Bluetooth keyboards/mice do not lag as much as MOGA. Even with Moga Universal Driver app (of ObsidianX), the response seems rather slow, which makes playing even Super Mario on NES emulators hard...
 

ObsidianX

Senior Member
Apr 1, 2009
89
259
San Jose
The lag is probably because of how many hops each button press has to go through before it finally reaches the game code.

1. Press button
2. bluetooth signal created/sent
3. signal received and parsed by the kernel
4. forwarded to the Android framework
5. passed up (not sure how many times) to the application layer
6. a service running inside the MOGA IME reads the data and parses it into booleans
7. an intent is fired off for each button INDIVIDUALLY back to the system
8. android takes the intent and determines if there's anything that can handle it (this might lose time just based on priority)
9. the MOGA IME intent receiver accepts the intent
10. the intent is parsed and the single button is extracted
11. the receiver then triggers the IME activity to send the running activity a key event
[end driver hops]
12. the game receives an onKeyDown/onKeyUp event and sends it along through its own pipeline before finally being executed as an action

REPEAT!

Now, this is how the BlueZ-IME project has set things up. Looking around at various IME projects though this is what they all do. I have no idea how long each step actually takes in the system or if any of it is handled more graciously by the Android framework. Conversely some steps might have lower priority and get pushed back by a few cycles adding to the delay. I'll probably go back after my current task and combine all the button presses into a single intent which should hopefully speed things up.

Using the kernel-level mode would replace steps 7 throuh 11 with a single command that writes the state to the kernel driver. One thing I would like to find out is whether or not most people have the file "/dev/uinput" or "/dev/input/uinput" or "/dev/misc/uinput" on their devices. This is my point of entry for the kernel-level mode and must exist. I use CM10 on my phone so my device isn't a good common denominator. If anybody who's reading this thread has an older device with Gingerbread still running on it I'd love to hear if you have it on yours as well.
 
  • Like
Reactions: e4xda

yomaosh

Member
Mar 15, 2012
11
10
quite a number of steps there! your app is the best thing about moga (cause I find myself using the controller with games outside the Pivot app), and gets me very close to actually enjoying the experience. thanks again!
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 70
    promo.png


    Use your PowerA MOGA with any application!

    Provides full functionality for the PowerA MOGA™ Pocket and Pro controllers.

    This application includes both a Virtual Keyboard that should work on all devices and a Gamepad Mode that provides full gamepad functionality for rooted devices.

    NOTE: Only supports one controller at a time!

    Features:
    * Virtual Keyboard
    * Virtual Gamepad
    * Customizable profiles so you can make it work just right with your game or emulator
    * Exportable profiles
    * MOGA device management
    * Button to stop Pivot services (Root users only, non-root get taken to the Settings application to do it manually, sorry!)
    * Two Home-screen widgets:
    ** Small toggle widget
    ** Long toggle widget with profile switcher

    Virtual Keyboard Features:
    * Does not require root
    * Usable by any application that listens for keyboard input
    * Customizable!

    Virtual Gamepad Features:
    * Acts like a full Gamepad
    * Toggle the analog joysticks between digital and analog output depending on your needs
    * Customizable!

    Usage:

    1. Select your device:

    I'm going to assume you haven't already paired your controller with your phone. Skip to the end of the section if you've already got it paired.

    Make sure Bluetooth is enabled before continuing!

    Select the "Manage Controllers" button found at the top of the Settings application. You will see an empty list of paired controllers.

    Power on your Pocket or, if you have a Pro, turn it on into Mode A. Select "Add Controller" at the bottom of the screen. Your phone will start scanning for controllers and will add only MOGA devices to the list as it finds them. Once the scan completes select the controller you wish to pair with and click the "Select" button. It will begin the pairing process with your controller and you will most likely see a dialog pop up that asks you to confirm a PIN. Accept the PIN and the "Add Controller" screen will close, dropping you back to the "Manage Devices" screen. Click back once more unless you wish to repeat this step to add another controller.

    2. Running in Virtual Keyboard mode:

    This is the default mode for the driver but does require a few steps to configure.

    Scrolling down to the "Driver Mode" section on the main screen you'll see that the current mode for the driver is "Virtual Keyboard" (unless you've already changed it to Gamepad, in which case switch back to Virtual Keyboard to follow these instructions). Click on the "Configure Virtual Keyboards" button to be taken directly to the appropriate Settings screen to turn on the "MOGA Virtual Keyboard" this cannot be done automatically for security reasons which are explained when you turn on the MOGA Virtual Keyboard. After you've enabled it go back to the driver's Settings screen and click "Select Virtual Keyboard". This will pop up the system dialog to let you choose which keyboard you want to be the active one. This also cannot be done automatically, sorry!

    Finally toggle the button next to "Enable Driver" to turn on the driver. You'll see a MOGA icon appear in your notifications bar indicating the status of the driver: white for disconnected, green for connected.

    If you'd like to configure a profile scroll down to the "Configuring a Profile" section below!

    3. Running in Virtual Gamepad mode:

    Before you continue: you must have a rooted device with SuperUser installed in order to use the Virtual Gamepad mode. The button to enable the Virtual Gamepad is disabled if your device does not support SuperUser.

    Virtual Gamepad mode is significantly easier to configure. First, click on the "Switch" button next to the current mode which will pop up a dialog box explaining the two available modes. Feel free to read these before continuing. Select Gamepad from the list and you've successfully configured Gamepad mode!

    All you have to do next is enable the driver by toggling the "Enable Driver" button just as you would in the Virtual Keyboard mode.

    4. Configuring a Profile:

    The profile system was entirely rewritten in 3.0 to make the process easier and to provide the ability to share profiles with friends. If you scroll down to the bottom of the settings page you'll see the "Profiles" section with a couple of buttons. Clicking "Switch" will popup a dialog containing all of the valid profiles for the current controller type and driver mode (for example, you cannot use a MOGA Pocket profile that was configured for Virtual Keyboard mode on a MOGA Pro in Gamepad mode, with any variation therein).

    Selecting "Manage Profiles" will bring you to a list similar to the "Manage Controllers" screen. Here you can create new profiles, rename them, delete them, or reload them from the SD card if you've added new ones onto your SD card while the program was running.

    Click "Create Profile" to begin. You will first be prompted with a dialog that asks for the name of the profile. Enter what you'd like and click OK. You will then be presented with the default configuration for that profile. You can modify any of the mappings by clicking on the "Change" buttons associated with each input. When you click "Change" a dialog box will appear with a sorted list of output types. Select a type and then select the button you wish to map to that input. Changes are saved when you leave the edit page.

    If you are running in Virtual Gamepad mode you will have a few more options available to you. You can decide whether or not the Analog inputs (including the DPad) should send Analog outputs or standard Button outputs. The list will automatically update when you toggle the analog mode so scroll down afterwards to configure the outputs. Gamepad mode will not present you with a list of categories as the options are much more limited. Since it is pretending to be a controller it can only send controller messages to the system. For any analog input you will only be allowed to map analog outputs and for buttons, only button outputs.

    After creating a profile click the "Switch" button to select your profile and activate it!

    Profiles are automatically saved to "/sdcard/MOGA/IME" for Virtual Keyboard mode and "/sdcard/MOGA/System" for Virtual Gamepad mode.

    Troubleshooting:

    Lots of users have reported that the driver does not properly connect on certain devices (I'm noticing most are Samsung TouchWiz-enabled devices). I am still actively investigating this and will hopefully be able to resolve it sooner rather than later!

    * Make sure that the Pivot is NOT running when you run my driver! It will connect to the controller and prevent my driver from connecting. There is a button at the bottom of the settings screen that will help you ensure Pivot isn't running.
    * If you turn on your MOGA Pocket and the light immediately turns green then turn it off and back on until the blue light blinks consistently. I've noticed on my own that this happens almost every time I turn it on after a long period of not using the controller.
    * Some users have reported that disabling WiFi has allowed them to connect their controllers.
    * There is a bit of voodoo that one user found that helped them connect to their controller on a Samsung device:
    I was having the same problem on my Note 2 also. The only way I've been able to connect to this MOGA Universal Driver app is by connecting first to the MOGA Pivot app then starting the Universal Driver and then turning my phones screen off for about a second then turning it back on. For whatever reason after turning my screen back on it instantly connects to the Universal Driver app.

    Download:

    Google Play

    This product is not affiliated with, nor authorized, endorsed or licensed in any way by Bensussen Deutsch and Associates, Inc., its affiliates or subsidiaries. All trademarks are property of their respective holders.

    Buy me a soda!
    11
    Progress Update:

    Gamepad mode has now been implemented! Just as I had hoped, implementing it was pretty straight-forward and it's working very nicely with profiles. You can enable or disable analog output on-the-fly and the driver will automatically apply the changes without needing to restart.

    I've still got UI changes I need to make before it's all done but I just finished playing some Zelda: A Link To the Past in both Virtual Keyboard and Gamepad mode (on both a Pro and Pocket) and it's all working very nicely!
    10
    Just thought I'd throw you guys a bone:

    gitlog.png


    I'm rapidly completing the driver now that I've actually had the time. The IME mode is now connected to the Bluetooth service and is receiving data (albeit incorrect at the moment). Once I get that debugged I'm going to run some tests but I'm pretty confident the IME will no longer have lag issues like it used to thanks to the new architecture. Adding in the Pro support was pretty simple since the data protocol is identical sans a few changes to which bits translate to which buttons. Luckily my new profile system is flexible enough that I was able to quickly add the new Pro buttons and axes to the list of configurable inputs.

    I'm not going to add any new outputs besides Virtual Keyboard and Gamepad in 3.0 but with this new architecture I should be able to add new outputs such as Touch fairly easily in subsequent updates.
    10
    So... what ever happened to the developer of this app? Did he fall off a cliff and die? He had all these amazing features planned for this driver and then just kind of left it to stagnate. Quite a shame, as it is a very handy little app :(

    I'm afraid holidays and life got in the way of continued development for the time being. I've got a full-time job and just finished the Thankgiving/Christmas/New Years holiday shuffle. I'm still planning on adding more features like the ones discussed in this thread but please be patient with my IRL responsibilities :)
    9
    Changelog:

    3.1:
    Brought back the widgets!
    New, long widget: change profiles from your desktop
    Fixed a few more crashes reported by users. Keep 'em coming -- but hopefully not!

    3.0.3:
    Rewrote connection code. Works on my devices that previously didn't. Please try!
    Fixed "Enable Bluetooth" bug where it was out-of-sync with Bluetooth Adapter state
    Added dialog when enabling driver to warn you if Pivot is detected to be running
    Fixed Pivot detection and stopping code to include all Pivot packages
    Moved SuperUser check from Application to Settings Activity to prevent it from popping up all the time

    3.0.2:
    Added Spacebar and the Numpad numbers to the Virtual Keyboard mappable keys
    Fixed some crashes users had reported
    Removed old WAKE_LOCK permission
    Fixed "Stop Pivot Services" button

    3.0.1:
    Fixed crash on older devices due to a typo when discovery started
    Fixed Left stick's Right being mapped to DpadUp by default (Pocket)
    Fixed Left/Right shoulder buttons being flipped (Pro/Pocket)

    3.0:
    Completely rewritten!
    Supports MOGA Pro
    Profiles are saved as XML files on the SD card for easy sharing

    2.2:
    Fixed crash (So sorry for the broken update!)

    2.1:
    Added System Service toggle widget
    Split Analog/DPad toggle into two options to have one DPad one Analog

    2.0:
    Completely rewritten to improve lag time.
    System-mode added.
    Analog support now available in System-mode.
    Analog can be toggled to allow DPAD use.
    Notification icons change according to connection status.

    1.1:
    KeyEvents are now broadcast as JOYSTICK and GAMEPAD sources.

    1.0:
    First release!