#![allow(unused_imports)]
use pspsdk_macros::psp_stub;
use crate::sys::{SceError, SceIntoOkValue, SceResult, SceResultOk};
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum AudioRoutingMode {
#[default]
Auto = 0x00,
PreferSpeakers = 0x01,
OnlySpeakers = 0x02,
OnlyHeadphone = 0x03,
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
pub enum AudioRoutingVolumeMode {
#[default]
Normal = 0x00,
ForceMaximum = 0x01,
}
#[psp_stub(libname = "sceAudioRouting", flags = 0x4009, version = (0x00, 0x11), use_crate)]
unsafe extern "C" {
#[nid(0x931ABEF5)]
#[cfg(not(feature = "kernel"))]
pub safe fn sceAudioRoutingGetMode() -> AudioRoutingMode;
#[nid(0x18B6F449)]
#[cfg(not(feature = "kernel"))]
pub safe fn sceAudioRoutingSetMode(mode: AudioRoutingMode) -> SceResult<AudioRoutingMode>;
#[nid(0xD82D02FD)]
#[cfg(not(feature = "kernel"))]
pub safe fn sceAudioRoutingGetVolumeMode() -> AudioRoutingVolumeMode;
#[nid(0x44B384EF)]
#[cfg(not(feature = "kernel"))]
pub safe fn sceAudioRoutingSetVolumeMode(
vol_mode: AudioRoutingVolumeMode,
) -> Result<(), SceError>;
}
#[cfg(feature = "kernel")]
#[psp_stub(libname = "sceAudioRouting_driver", flags = 0x0009, version = (0x00, 0x11), use_crate)]
unsafe extern "C" {
#[nid(if cfg!(feature = "psp_660") { 0x931ABEF5 }
// else if cfg!(feature = "psp_630") { 0x39240E7D }
// else if cfg!(feature = "psp_600") { 0x39240E7D }
// else if cfg!(feature = "psp_570") { 0x39240E7D }
else if cfg!(feature = "psp_500") { 0xE45BCCA6 }
else if cfg!(feature = "psp_420") { 0x534B5BD7 }
else if cfg!(feature = "psp_395") { 0xBFC44660 }
else if cfg!(feature = "psp_380") { 0xF2EFEBB8 }
else { 0x39240E7D }
)]
pub safe fn sceAudioRoutingGetMode() -> AudioRoutingMode;
#[nid(if cfg!(feature = "psp_660") { 0x18B6F449 }
// else if cfg!(feature = "psp_630") { 0x36FD8AA9 }
// else if cfg!(feature = "psp_600") { 0x36FD8AA9 }
// else if cfg!(feature = "psp_570") { 0x36FD8AA9 }
else if cfg!(feature = "psp_500") { 0x758DF112 }
else if cfg!(feature = "psp_420") { 0xEF3EA0FC }
else if cfg!(feature = "psp_395") { 0x30237217 }
else if cfg!(feature = "psp_380") { 0x414E7D7A }
else { 0x36FD8AA9 }
)]
pub safe fn sceAudioRoutingSetMode(mode: AudioRoutingMode) -> SceResult<AudioRoutingMode>;
#[nid(if cfg!(feature = "psp_660") { 0xD82D02FD }
// else if cfg!(feature = "psp_630") { 0x28235C56 }
// else if cfg!(feature = "psp_600") { 0x28235C56 }
// else if cfg!(feature = "psp_570") { 0x28235C56 }
else if cfg!(feature = "psp_500") { 0x78DD0203 }
else if cfg!(feature = "psp_420") { 0x6211AF01 }
else if cfg!(feature = "psp_395") { 0x8C516FCA }
else if cfg!(feature = "psp_380") { 0x1B372F9D }
else { 0x28235C56 }
)]
pub safe fn sceAudioRoutingGetVolumeMode() -> AudioRoutingVolumeMode;
#[nid(if cfg!(feature = "psp_660") { 0x44B384EF }
// else if cfg!(feature = "psp_630") { 0xBB548475 }
// else if cfg!(feature = "psp_600") { 0xBB548475 }
// else if cfg!(feature = "psp_570") { 0xBB548475 }
else if cfg!(feature = "psp_500") { 0xB557A064 }
else if cfg!(feature = "psp_420") { 0x3CF16BA0 }
else if cfg!(feature = "psp_395") { 0x472E6A92 }
else if cfg!(feature = "psp_380") { 0xBE9B6FF5 }
else { 0xBB548475 }
)]
pub safe fn sceAudioRoutingSetVolumeMode(
vol_mode: AudioRoutingVolumeMode,
) -> Result<(), SceError>;
}
impl crate::private::Sealed for AudioRoutingMode {}
unsafe impl SceResultOk for AudioRoutingMode {
unsafe fn handle_ok_value(ok_value: u32) -> Result<Self, SceError> {
match ok_value {
0x00 => Ok(Self::Auto),
0x01 => Ok(Self::PreferSpeakers),
0x02 => Ok(Self::OnlySpeakers),
0x03 => Ok(Self::OnlyHeadphone),
_ => Err(SceError::INVALID_VALUE),
}
}
}
unsafe impl SceIntoOkValue for AudioRoutingMode {
fn into_ok_value(self) -> u32 {
match self {
AudioRoutingMode::Auto => 0x00,
AudioRoutingMode::PreferSpeakers => 0x01,
AudioRoutingMode::OnlySpeakers => 0x02,
AudioRoutingMode::OnlyHeadphone => 0x03,
}
}
}
impl crate::private::Sealed for AudioRoutingVolumeMode {}
unsafe impl SceResultOk for AudioRoutingVolumeMode {
unsafe fn handle_ok_value(ok_value: u32) -> Result<Self, SceError> {
match ok_value {
0x00 => Ok(Self::Normal),
0x01 => Ok(Self::ForceMaximum),
_ => Err(SceError::INVALID_VALUE),
}
}
}
unsafe impl SceIntoOkValue for AudioRoutingVolumeMode {
fn into_ok_value(self) -> u32 {
match self {
AudioRoutingVolumeMode::Normal => 0x00,
AudioRoutingVolumeMode::ForceMaximum => 0x01,
}
}
}