ferretro/ferretro_base/src/retro/constants.rs

157 lines
5.5 KiB
Rust

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,
}