package andraus.bluetoothhidemu.spoof; public final class Spoof { public static enum SpoofMode { INVALID, HID_GENERIC, HID_PS3KEYPAD, HID_BDREMOTE } private static final int DEV_CLASS_HID_GENERIC = 0x002540; private static final int DEV_CLASS_HID_BDREMOTE = 0x000140; /** * Must match "emulation_mode_names" / "emulation_mode_values" in arrays.xml * @param mode * @return */ public static int intValue(SpoofMode mode) { switch (mode) { case INVALID: return -1; case HID_GENERIC: return 0; case HID_PS3KEYPAD: return 1; case HID_BDREMOTE: return 2; default: return errorInvalidMode(mode); } } /** * * @param i * @return */ public static SpoofMode fromInt(int i) { for (SpoofMode mode : SpoofMode.values()) { if (intValue(mode) == i) { return mode; } } return null; } /** * Returns device class in format 0xAABBCC for the corresponding spoof mode. * * @param mode * @return */ public static int getBluetoothDeviceClass(SpoofMode mode) { switch (mode) { case HID_GENERIC: return DEV_CLASS_HID_GENERIC; case HID_BDREMOTE: return DEV_CLASS_HID_BDREMOTE; case HID_PS3KEYPAD: return DEV_CLASS_HID_GENERIC; // same as generic default: return errorInvalidMode(mode); } } private static int errorInvalidMode(SpoofMode mode) { throw new IllegalStateException("Invalid spoof mode: " + mode); } }