1#![allow(missing_docs)]
2
3use crate::deserialize_size;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[non_exhaustive]
9#[derive(Clone, Debug, Serialize, Deserialize)]
10#[serde(rename_all = "kebab-case")]
11pub struct Config {
12 pub memory: Memory,
13 pub heap: Heap,
14 pub linker: Linker,
15 pub probe: Option<Probe>,
16 pub log: Option<Log>,
17}
18
19#[non_exhaustive]
20#[derive(Clone, Debug, Serialize, Deserialize)]
21#[serde(rename_all = "kebab-case")]
22pub struct Memory {
23 pub flash: MemoryBlock,
24 pub ram: MemoryBlock,
25 #[serde(flatten)]
26 pub extra: HashMap<String, MemoryBlock>,
27}
28
29#[non_exhaustive]
30#[derive(Clone, Debug, Serialize, Deserialize)]
31#[serde(rename_all = "kebab-case")]
32pub struct MemoryBlock {
33 #[serde(deserialize_with = "deserialize_size")]
34 pub size: u32,
35 pub origin: u32,
36}
37
38#[non_exhaustive]
39#[derive(Clone, Debug, Serialize, Deserialize)]
40#[serde(rename_all = "kebab-case")]
41pub struct Heap {
42 pub main: HeapBlock,
43 #[serde(flatten)]
44 pub extra: HashMap<String, HeapExtra>,
45}
46
47#[non_exhaustive]
48#[derive(Clone, Debug, Serialize, Deserialize)]
49#[serde(rename_all = "kebab-case")]
50pub struct HeapBlock {
51 #[serde(deserialize_with = "deserialize_size")]
52 pub size: u32,
53 pub pools: Vec<HeapPool>,
54}
55
56#[non_exhaustive]
57#[derive(Clone, Debug, Serialize, Deserialize)]
58#[serde(rename_all = "kebab-case")]
59pub struct HeapExtra {
60 pub origin: u32,
61 #[serde(flatten)]
62 pub block: HeapBlock,
63}
64
65#[non_exhaustive]
66#[derive(Clone, Debug, Serialize, Deserialize)]
67#[serde(rename_all = "kebab-case")]
68pub struct HeapPool {
69 #[serde(deserialize_with = "deserialize_size")]
70 pub block: u32,
71 pub capacity: u32,
72}
73
74#[non_exhaustive]
75#[derive(Clone, Debug, Serialize, Deserialize)]
76#[serde(rename_all = "kebab-case")]
77pub struct Linker {
78 pub platform: String,
79 #[serde(default)]
80 pub include: Vec<String>,
81}
82
83#[non_exhaustive]
84#[derive(Clone, Debug, Serialize, Deserialize)]
85#[serde(rename_all = "kebab-case")]
86pub struct Probe {
87 pub gdb_client_command: String,
88 pub bmp: Option<ProbeBmp>,
89 pub jlink: Option<ProbeJlink>,
90 pub openocd: Option<ProbeOpenocd>,
91}
92
93#[non_exhaustive]
94#[derive(Clone, Debug, Serialize, Deserialize)]
95#[serde(rename_all = "kebab-case")]
96pub struct ProbeBmp {
97 pub device: String,
98 pub gdb_endpoint: String,
99}
100
101#[non_exhaustive]
102#[derive(Clone, Debug, Serialize, Deserialize)]
103#[serde(rename_all = "kebab-case")]
104pub struct ProbeJlink {
105 pub gdb_server_command: String,
106 pub commander_command: String,
107 pub device: String,
108 pub interface: String,
109 pub speed: u32,
110 pub port: u32,
111}
112
113#[non_exhaustive]
114#[derive(Clone, Debug, Serialize, Deserialize)]
115#[serde(rename_all = "kebab-case")]
116pub struct ProbeOpenocd {
117 pub command: String,
118 pub port: u32,
119 pub arguments: Vec<String>,
120}
121
122#[non_exhaustive]
123#[derive(Clone, Debug, Serialize, Deserialize)]
124#[serde(rename_all = "kebab-case")]
125pub struct Log {
126 pub swo: Option<LogSwo>,
127 pub dso: Option<LogDso>,
128}
129
130#[non_exhaustive]
131#[derive(Clone, Debug, Serialize, Deserialize)]
132#[serde(rename_all = "kebab-case")]
133pub struct LogSwo {
134 pub reset_freq: u32,
135 pub baud_rate: u32,
136 pub serial_endpoint: Option<String>,
137}
138
139#[non_exhaustive]
140#[derive(Clone, Debug, Serialize, Deserialize)]
141#[serde(rename_all = "kebab-case")]
142pub struct LogDso {
143 pub baud_rate: u32,
144 pub serial_endpoint: String,
145}