use num_enum::{TryFromPrimitive, IntoPrimitive}; use super::ffi::*; // NB: commented-out stuff is from newer versions of libretro.h not yet represented in libretro-sys #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum DeviceType { None = DEVICE_NONE, Joypad = DEVICE_JOYPAD, Mouse = DEVICE_MOUSE, Keyboard = DEVICE_KEYBOARD, LightGun = DEVICE_LIGHTGUN, Analog = DEVICE_ANALOG, Pointer = DEVICE_POINTER, } impl DeviceType { // would be const fn, but const u32::from isn't stable pub fn device_subclass(&self, id: u32) -> u32 { ((id + 1) << DEVICE_TYPE_SHIFT) | u32::from(*self) } } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum InputIndex { Left = DEVICE_INDEX_ANALOG_LEFT, Right = DEVICE_INDEX_ANALOG_RIGHT, // Button = DEVICE_INDEX_ANALOG_BUTTON, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum JoypadButton { B = DEVICE_ID_JOYPAD_B, Y = DEVICE_ID_JOYPAD_Y, Select = DEVICE_ID_JOYPAD_SELECT, Start = DEVICE_ID_JOYPAD_START, Up = DEVICE_ID_JOYPAD_UP, Down = DEVICE_ID_JOYPAD_DOWN, Left = DEVICE_ID_JOYPAD_LEFT, Right = DEVICE_ID_JOYPAD_RIGHT, A = DEVICE_ID_JOYPAD_A, X = DEVICE_ID_JOYPAD_X, L = DEVICE_ID_JOYPAD_L, R = DEVICE_ID_JOYPAD_R, L2 = DEVICE_ID_JOYPAD_L2, R2 = DEVICE_ID_JOYPAD_R2, L3 = DEVICE_ID_JOYPAD_L3, R3 = DEVICE_ID_JOYPAD_R3, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum AnalogAxis { X = DEVICE_ID_ANALOG_X, Y = DEVICE_ID_ANALOG_Y, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum MouseButton { X = DEVICE_ID_MOUSE_X, Y = DEVICE_ID_MOUSE_Y, Left = DEVICE_ID_MOUSE_LEFT, Right = DEVICE_ID_MOUSE_RIGHT, WheelUp = DEVICE_ID_MOUSE_WHEELUP, WheelDown = DEVICE_ID_MOUSE_WHEELDOWN, Middle = DEVICE_ID_MOUSE_MIDDLE, HorizWheelUp = DEVICE_ID_MOUSE_HORIZ_WHEELUP, HorizWheelDown = DEVICE_ID_MOUSE_HORIZ_WHEELDOWN, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum LightGunButton { // ScreenX = DEVICE_ID_LIGHTGUN_SCREEN_X, // ScreenY = DEVICE_ID_LIGHTGUN_SCREEN_Y, // IsOffscreen = DEVICE_ID_LIGHTGUN_IS_OFFSCREEN, Trigger = DEVICE_ID_LIGHTGUN_TRIGGER, // Reload = DEVICE_ID_LIGHTGUN_RELOAD, Start = DEVICE_ID_LIGHTGUN_START, // Select = DEVICE_ID_LIGHTGUN_SELECT, // AuxC = DEVICE_ID_LIGHTGUN_AUX_C, // DpadUp = DEVICE_ID_LIGHTGUN_DPAD_UP, // DpadDown = DEVICE_ID_LIGHTGUN_DPAD_DOWN, // DpadLeft = DEVICE_ID_LIGHTGUN_DPAD_LEFT, // DpadRight = DEVICE_ID_LIGHTGUN_DPAD_RIGHT, X = DEVICE_ID_LIGHTGUN_X, Y = DEVICE_ID_LIGHTGUN_Y, Cursor = DEVICE_ID_LIGHTGUN_CURSOR, Turbo = DEVICE_ID_LIGHTGUN_TURBO, Pause = DEVICE_ID_LIGHTGUN_PAUSE, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum PointerStat { X = DEVICE_ID_POINTER_X, Y = DEVICE_ID_POINTER_Y, Pressed = DEVICE_ID_POINTER_PRESSED, } #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum EnvRotation { None = 0, CounterClockwise90 = 1, CounterClockwise180 = 2, CounterClockwise270 = 3, } // TODO: experimental calls #[derive(TryFromPrimitive, IntoPrimitive, Debug, Copy, Clone, PartialEq, Eq, Hash)] #[repr(u32)] pub enum EnvCmd { SetRotation = ENVIRONMENT_SET_ROTATION, GetOverscan = ENVIRONMENT_GET_OVERSCAN, GetCanDupe = ENVIRONMENT_GET_CAN_DUPE, SetMessage = ENVIRONMENT_SET_MESSAGE, Shutdown = ENVIRONMENT_SHUTDOWN, SetPerformanceLevel = ENVIRONMENT_SET_PERFORMANCE_LEVEL, GetSystemDirectory = ENVIRONMENT_GET_SYSTEM_DIRECTORY, SetPixelFormat = ENVIRONMENT_SET_PIXEL_FORMAT, SetInputDescriptors = ENVIRONMENT_SET_INPUT_DESCRIPTORS, SetKeyboardCallback = ENVIRONMENT_SET_KEYBOARD_CALLBACK, SetDiskControlInterface = ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, SetHwRender = ENVIRONMENT_SET_HW_RENDER, GetVariable = ENVIRONMENT_GET_VARIABLE, SetVariables = ENVIRONMENT_SET_VARIABLES, GetVariableUpdate = ENVIRONMENT_GET_VARIABLE_UPDATE, SetSupportNoGame = ENVIRONMENT_SET_SUPPORT_NO_GAME, GetLibretroPath = ENVIRONMENT_GET_LIBRETRO_PATH, SetFrameTimeCallback = ENVIRONMENT_SET_FRAME_TIME_CALLBACK, SetAudioCallback = ENVIRONMENT_SET_AUDIO_CALLBACK, GetRumbleInterface = ENVIRONMENT_GET_RUMBLE_INTERFACE, GetInputDeviceCapabilities = ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES, GetSensorInterface = ENVIRONMENT_GET_SENSOR_INTERFACE, GetCameraInterface = ENVIRONMENT_GET_CAMERA_INTERFACE, GetLogInterface = ENVIRONMENT_GET_LOG_INTERFACE, GetPerfInterface = ENVIRONMENT_GET_PERF_INTERFACE, GetLocationInterface = ENVIRONMENT_GET_LOCATION_INTERFACE, GetCoreAssetsDirectory = ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY, GetSaveDirectory = ENVIRONMENT_GET_SAVE_DIRECTORY, SetSystemAvInfo = ENVIRONMENT_SET_SYSTEM_AV_INFO, SetProcAddressCallback = ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK, SetSubsystemInfo = ENVIRONMENT_SET_SUBSYSTEM_INFO, SetControllerInfo = ENVIRONMENT_SET_CONTROLLER_INFO, SetMemoryMaps = ENVIRONMENT_SET_MEMORY_MAPS, SetGeometry = ENVIRONMENT_SET_GEOMETRY, GetUsername = ENVIRONMENT_GET_USERNAME, GetLanguage = ENVIRONMENT_GET_LANGUAGE, // SetSerializationQuirks = ENVIRONMENT_SET_SERIALIZATION_QUIRKS, }