mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2024-11-25 15:16:53 +01:00
added debug info
This commit is contained in:
parent
a0a6423b92
commit
4ce9086240
@ -406,6 +406,8 @@ fn handle_info_command(sn: Option<String>) -> Result<(), sc64::Error> {
|
|||||||
println!(" Button mode: {}", state.button_mode);
|
println!(" Button mode: {}", state.button_mode);
|
||||||
println!(" Button state: {}", state.button_state);
|
println!(" Button state: {}", state.button_state);
|
||||||
println!(" LED blink: {}", state.led_enable);
|
println!(" LED blink: {}", state.led_enable);
|
||||||
|
println!(" FPGA debug data: {}", state.fpga_debug_data);
|
||||||
|
println!(" MCU stack usage: {}", state.mcu_stack_usage);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,8 @@ pub use self::{
|
|||||||
error::Error,
|
error::Error,
|
||||||
link::list_serial_devices,
|
link::list_serial_devices,
|
||||||
types::{
|
types::{
|
||||||
BootMode, DataPacket, DdDiskState, DdDriveType, DdMode, DebugPacket, DiskPacket, SaveType,
|
BootMode, ButtonMode, ButtonState, CicSeed, DataPacket, DdDiskState, DdDriveType, DdMode,
|
||||||
TvType,
|
DebugPacket, DiskPacket, FpgaDebugData, McuStackUsage, SaveType, Switch, TvType,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -18,8 +18,7 @@ use self::{
|
|||||||
cic::{calculate_ipl3_checksum, guess_ipl3_seed, IPL3_LENGTH, IPL3_OFFSET},
|
cic::{calculate_ipl3_checksum, guess_ipl3_seed, IPL3_LENGTH, IPL3_OFFSET},
|
||||||
link::{Command, Link},
|
link::{Command, Link},
|
||||||
types::{
|
types::{
|
||||||
get_config, get_setting, ButtonMode, ButtonState, CicSeed, Config, ConfigId,
|
get_config, get_setting, Config, ConfigId, FirmwareStatus, Setting, SettingId, UpdateStatus,
|
||||||
FirmwareStatus, Setting, SettingId, Switch, UpdateStatus,
|
|
||||||
},
|
},
|
||||||
utils::{args_from_vec, datetime_from_vec, u32_from_vec, vec_from_datetime},
|
utils::{args_from_vec, datetime_from_vec, u32_from_vec, vec_from_datetime},
|
||||||
};
|
};
|
||||||
@ -52,6 +51,8 @@ pub struct DeviceState {
|
|||||||
pub rom_extended_enable: Switch,
|
pub rom_extended_enable: Switch,
|
||||||
pub led_enable: Switch,
|
pub led_enable: Switch,
|
||||||
pub datetime: DateTime<Local>,
|
pub datetime: DateTime<Local>,
|
||||||
|
pub fpga_debug_data: FpgaDebugData,
|
||||||
|
pub mcu_stack_usage: McuStackUsage,
|
||||||
}
|
}
|
||||||
|
|
||||||
const SC64_V2_IDENTIFIER: &[u8; 4] = b"SCv2";
|
const SC64_V2_IDENTIFIER: &[u8; 4] = b"SCv2";
|
||||||
@ -292,6 +293,26 @@ impl SC64 {
|
|||||||
)?;
|
)?;
|
||||||
Ok(FirmwareStatus::try_from(utils::u32_from_vec(&data[0..4])?)?)
|
Ok(FirmwareStatus::try_from(utils::u32_from_vec(&data[0..4])?)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn command_debug_get(&mut self) -> Result<FpgaDebugData, Error> {
|
||||||
|
self.link
|
||||||
|
.execute_command(&mut Command {
|
||||||
|
id: b'?',
|
||||||
|
args: [0, 0],
|
||||||
|
data: vec![],
|
||||||
|
})?
|
||||||
|
.try_into()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn command_stack_usage_get(&mut self) -> Result<McuStackUsage, Error> {
|
||||||
|
self.link
|
||||||
|
.execute_command(&mut Command {
|
||||||
|
id: b'%',
|
||||||
|
args: [0, 0],
|
||||||
|
data: vec![],
|
||||||
|
})?
|
||||||
|
.try_into()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SC64 {
|
impl SC64 {
|
||||||
@ -452,6 +473,8 @@ impl SC64 {
|
|||||||
rom_extended_enable: get_config!(self, RomExtendedEnable)?,
|
rom_extended_enable: get_config!(self, RomExtendedEnable)?,
|
||||||
led_enable: get_setting!(self, LedEnable)?,
|
led_enable: get_setting!(self, LedEnable)?,
|
||||||
datetime: self.get_datetime()?,
|
datetime: self.get_datetime()?,
|
||||||
|
fpga_debug_data: self.command_debug_get()?,
|
||||||
|
mcu_stack_usage: self.command_stack_usage_get()?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,6 +733,80 @@ impl TryFrom<u32> for UpdateStatus {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct FpgaDebugData {
|
||||||
|
pub last_pi_address: u32,
|
||||||
|
pub read_fifo_wait: bool,
|
||||||
|
pub read_fifo_failure: bool,
|
||||||
|
pub write_fifo_wait: bool,
|
||||||
|
pub write_fifo_failure: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Vec<u8>> for FpgaDebugData {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
|
||||||
|
if value.len() < 8 {
|
||||||
|
return Err(Error::new("Invalid data length for FPGA debug data"));
|
||||||
|
}
|
||||||
|
Ok(FpgaDebugData {
|
||||||
|
last_pi_address: u32_from_vec(&value[0..4])?,
|
||||||
|
read_fifo_wait: (value[7] & (1 << 0)) != 0,
|
||||||
|
read_fifo_failure: (value[7] & (1 << 1)) != 0,
|
||||||
|
write_fifo_wait: (value[7] & (1 << 2)) != 0,
|
||||||
|
write_fifo_failure: (value[7] & (1 << 3)) != 0,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for FpgaDebugData {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.write_fmt(format_args!("PI address: 0x{:08X}", self.last_pi_address))?;
|
||||||
|
if self.read_fifo_wait {
|
||||||
|
f.write_str(" RW")?;
|
||||||
|
}
|
||||||
|
if self.read_fifo_failure {
|
||||||
|
f.write_str(" RF")?;
|
||||||
|
}
|
||||||
|
if self.write_fifo_wait {
|
||||||
|
f.write_str(" WW")?;
|
||||||
|
}
|
||||||
|
if self.write_fifo_failure {
|
||||||
|
f.write_str(" WF")?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct McuStackUsage {
|
||||||
|
pub cic: u32,
|
||||||
|
pub rtc: u32,
|
||||||
|
pub led: u32,
|
||||||
|
pub gvr: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Vec<u8>> for McuStackUsage {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
|
||||||
|
if value.len() < 16 {
|
||||||
|
return Err(Error::new("Invalid data length for MCU stack usage"));
|
||||||
|
}
|
||||||
|
Ok(McuStackUsage {
|
||||||
|
cic: u32_from_vec(&value[0..4])?,
|
||||||
|
rtc: u32_from_vec(&value[4..8])?,
|
||||||
|
led: u32_from_vec(&value[8..12])?,
|
||||||
|
gvr: u32_from_vec(&value[12..16])?,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for McuStackUsage {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.write_fmt(format_args!(
|
||||||
|
"CIC: {}, RTC: {}, LED: {}, GVR: {}",
|
||||||
|
self.cic, self.rtc, self.led, self.gvr
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! get_config {
|
macro_rules! get_config {
|
||||||
($sc64:ident, $config:ident) => {{
|
($sc64:ident, $config:ident) => {{
|
||||||
if let Config::$config(value) = $sc64.command_config_get(ConfigId::$config)? {
|
if let Config::$config(value) = $sc64.command_config_get(ConfigId::$config)? {
|
||||||
|
Loading…
Reference in New Issue
Block a user