use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ListProbesArgs {
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ConnectArgs {
pub probe_selector: String,
pub target_chip: String,
#[serde(default = "default_speed_khz")]
pub speed_khz: u32,
#[serde(default)]
pub connect_under_reset: bool,
#[serde(default = "default_true")]
pub halt_after_connect: bool,
}
fn default_speed_khz() -> u32 { 4000 }
fn default_true() -> bool { true }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct DisconnectArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ProbeInfoArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct HaltArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RunArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ResetArgs {
pub session_id: String,
#[serde(default = "default_reset_type")]
pub reset_type: String,
#[serde(default = "default_true")]
pub halt_after_reset: bool,
}
fn default_reset_type() -> String { "hardware".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct StepArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct GetStatusArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ReadMemoryArgs {
pub session_id: String,
pub address: String,
pub size: usize,
#[serde(default = "default_format")]
pub format: String,
}
fn default_format() -> String { "hex".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct WriteMemoryArgs {
pub session_id: String,
pub address: String,
pub data: String,
#[serde(default = "default_format")]
pub format: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct SetBreakpointArgs {
pub session_id: String,
pub address: String,
#[serde(default = "default_breakpoint_type")]
pub breakpoint_type: String,
}
fn default_breakpoint_type() -> String { "hardware".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct ClearBreakpointArgs {
pub session_id: String,
pub address: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FlashEraseArgs {
pub session_id: String,
#[serde(default = "default_erase_all")]
pub erase_type: String,
pub address: Option<String>,
pub size: Option<u32>,
}
fn default_erase_all() -> String { "all".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FlashProgramArgs {
pub session_id: String,
pub file_path: String,
#[serde(default = "default_auto_format")]
pub format: String,
pub base_address: Option<String>,
#[serde(default = "default_true")]
pub verify: bool,
}
fn default_auto_format() -> String { "auto".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct FlashVerifyArgs {
pub session_id: String,
pub file_path: Option<String>,
pub data: Option<String>,
pub address: String,
pub size: u32,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RunFirmwareArgs {
pub session_id: String,
pub file_path: String,
#[serde(default = "default_auto_format")]
pub format: String,
#[serde(default = "default_true")]
pub reset_after_flash: bool,
#[serde(default = "default_true")]
pub attach_rtt: bool,
#[serde(default = "default_rtt_timeout")]
pub rtt_timeout_ms: u32,
}
fn default_rtt_timeout() -> u32 { 3000 }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RttAttachArgs {
pub session_id: String,
pub control_block_address: Option<String>,
pub memory_ranges: Option<Vec<MemoryRange>>,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct MemoryRange {
pub start: String,
pub end: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RttDetachArgs {
pub session_id: String,
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RttReadArgs {
pub session_id: String,
#[serde(default)]
pub channel: u32,
#[serde(default = "default_max_bytes")]
pub max_bytes: usize,
#[serde(default = "default_timeout_ms")]
pub timeout_ms: u64,
}
fn default_max_bytes() -> usize { 1024 }
fn default_timeout_ms() -> u64 { 1000 }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RttWriteArgs {
pub session_id: String,
#[serde(default)]
pub channel: u32,
pub data: String,
#[serde(default = "default_encoding")]
pub encoding: String,
}
fn default_encoding() -> String { "utf8".to_string() }
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RttChannelsArgs {
pub session_id: String,
}
#[derive(Debug, Serialize)]
pub struct ProbeInfo {
pub identifier: String,
pub vendor_id: u16,
pub product_id: u16,
pub serial_number: Option<String>,
pub probe_type: String,
pub speed_khz: u32,
pub version: String,
}
#[derive(Debug, Serialize)]
pub struct TargetInfo {
pub chip_name: String,
pub architecture: String,
pub core_type: String,
pub memory_map: Vec<MemoryRegion>,
}
#[derive(Debug, Serialize)]
pub struct MemoryRegion {
pub name: String,
pub start: u64,
pub size: u64,
pub access: String,
}
#[derive(Debug, Serialize)]
pub struct CoreInfo {
pub pc: u64,
pub sp: u64,
pub state: String,
pub halt_reason: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct SessionStatus {
pub session_id: String,
pub connected: bool,
pub target_state: String,
pub created_at: String,
pub last_activity: String,
}
#[derive(Debug, Serialize)]
pub struct RegisterValue {
pub name: String,
pub value: u64,
pub description: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct Breakpoint {
pub id: u32,
pub address: u64,
pub breakpoint_type: String,
pub enabled: bool,
}
#[derive(Debug, Serialize)]
pub struct FlashResult {
pub bytes_programmed: usize,
pub programming_time_ms: u64,
pub verification_result: bool,
}
#[derive(Debug, Serialize)]
pub struct RttChannelInfo {
pub channel: u32,
pub name: String,
pub direction: String, pub buffer_size: usize,
pub flags: u32,
}