Button Manager AIDL and cmd

The service registers with ServiceManager as ax86_btnmgr, so it is reachable from AIDL clients and from cmd.

AIDL

Package com.ax86.btnmgr.

aidl
interface IButtonManagerService {
    List<ButtonMapping> listMappings();
    void setMapping(in ButtonMapping mapping);
    void removeMapping(String buttonId);
    byte[] exportConfig();
    int importConfig(in byte[] data, boolean merge);
    void reload();
    void registerListener(IButtonEventListener listener);
    void unregisterListener(IButtonEventListener listener);
}

parcelable ButtonMapping {
    String id;
    String label;
    String deviceMatch;
    int scanCode;
    String androidKey;
    String action;
    String actionData;
    String emitKey;
    boolean longPress;
}

oneway interface IButtonEventListener {
    void onButtonTriggered(String buttonId, String action);
    void onConfigReloaded();
}

In-process clients resolve the binder with:

IButtonManagerService.Stub.asInterface(ServiceManager.getService("ax86_btnmgr"))

cmd handler

adb shell cmd ax86_btnmgr list
adb shell cmd ax86_btnmgr set P1 action=screenshot scan_code=0x190 device_match=gpio-keys
adb shell cmd ax86_btnmgr set P4 action=device_control control=brightness_toggle low=0 high=100
adb shell cmd ax86_btnmgr remove P4
adb shell cmd ax86_btnmgr export /sdcard/ax86_btn_manager.conf
adb shell cmd ax86_btnmgr import /data/misc/ax86_btn_manager.conf --merge
adb shell cmd ax86_btnmgr reload