Skip to content

Commit 26e5438

Browse files
committed
refactor: move settings inside connection
Signed-off-by: addrian-77 <lunguadrian30@gmail.com>
1 parent 285bd61 commit 26e5438

11 files changed

Lines changed: 82 additions & 107 deletions

File tree

tockloader-cli/src/main.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,12 @@ async fn open_connection(user_options: &ArgMatches) -> Result<TockloaderConnecti
111111
.context("No device is connected.")?
112112
};
113113

114-
let mut conn: TockloaderConnection =
115-
SerialConnection::new(path, get_serial_target_info(user_options)).into();
114+
let mut conn: TockloaderConnection = SerialConnection::new(
115+
path,
116+
get_serial_target_info(user_options),
117+
get_board_settings(user_options),
118+
)
119+
.into();
116120
conn.open()
117121
.await
118122
.context("Failed to open serial connection.")?;
@@ -124,8 +128,12 @@ async fn open_connection(user_options: &ArgMatches) -> Result<TockloaderConnecti
124128
.prompt()
125129
.context("No debug probe is connected.")?;
126130

127-
let mut conn: TockloaderConnection =
128-
ProbeRSConnection::new(ans, get_probe_target_info(user_options)).into();
131+
let mut conn: TockloaderConnection = ProbeRSConnection::new(
132+
ans,
133+
get_probe_target_info(user_options),
134+
get_board_settings(user_options),
135+
)
136+
.into();
129137

130138
conn.open()
131139
.await
@@ -199,19 +207,17 @@ async fn main() -> Result<()> {
199207
cli::validate(&mut cmd, sub_matches);
200208

201209
let mut conn = open_connection(sub_matches).await?;
202-
let settings = get_board_settings(sub_matches);
203210

204-
let app_details = conn.list(&settings).await.context("Failed to list apps.")?;
211+
let app_details = conn.list().await.context("Failed to list apps.")?;
205212

206213
display::print_list(&app_details).await;
207214
}
208215
Some(("info", sub_matches)) => {
209216
cli::validate(&mut cmd, sub_matches);
210217
let mut conn = open_connection(sub_matches).await?;
211-
let settings = get_board_settings(sub_matches);
212218

213219
let mut attributes = conn
214-
.info(&settings)
220+
.info()
215221
.await
216222
.context("Failed to get data from the board.")?;
217223

@@ -223,20 +229,16 @@ async fn main() -> Result<()> {
223229
.context("Failed to use provided tab file.")?;
224230

225231
let mut conn = open_connection(sub_matches).await?;
226-
let settings = get_board_settings(sub_matches);
227232

228-
conn.install_app(&settings, tab_file)
233+
conn.install_app(tab_file)
229234
.await
230235
.context("Failed to install app.")?;
231236
}
232237
Some(("erase-apps", sub_matches)) => {
233238
cli::validate(&mut cmd, sub_matches);
234239
let mut conn = open_connection(sub_matches).await?;
235-
let settings = get_board_settings(sub_matches);
236240

237-
conn.erase_apps(&settings)
238-
.await
239-
.context("Failed to erase apps.")?;
241+
conn.erase_apps().await.context("Failed to erase apps.")?;
240242
}
241243
_ => {
242244
println!("Could not run the provided subcommand.");

tockloader-lib/src/board_settings.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#[derive(Clone)]
12
pub struct BoardSettings {
23
pub arch: Option<String>,
34
pub start_address: u64,
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
use async_trait::async_trait;
22

3-
use crate::board_settings::BoardSettings;
4-
use crate::connection::TockloaderConnection;
3+
use crate::connection::{Connection, TockloaderConnection};
54
use crate::errors::TockloaderError;
65
use crate::{CommandEraseApps, IO};
76

87
#[async_trait]
98
impl CommandEraseApps for TockloaderConnection {
10-
async fn erase_apps(&mut self, settings: &BoardSettings) -> Result<(), TockloaderError> {
11-
self.write(settings.start_address, vec![0u8], settings)
9+
async fn erase_apps(&mut self) -> Result<(), TockloaderError> {
10+
self.write(self.get_settings().start_address, vec![0u8])
1211
.await
1312
}
1413
}

tockloader-lib/src/command_impl/generalized.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use async_trait::async_trait;
22

33
use crate::attributes::app_attributes::AppAttributes;
44
use crate::attributes::system_attributes::SystemAttributes;
5-
use crate::board_settings::BoardSettings;
65
use crate::connection::TockloaderConnection;
76
use crate::errors::TockloaderError;
87
use crate::{IOCommands, IO};
@@ -16,28 +15,20 @@ impl IO for TockloaderConnection {
1615
}
1716
}
1817

19-
async fn write(
20-
&mut self,
21-
address: u64,
22-
pkt: Vec<u8>,
23-
settings: &BoardSettings,
24-
) -> Result<(), TockloaderError> {
18+
async fn write(&mut self, address: u64, pkt: Vec<u8>) -> Result<(), TockloaderError> {
2519
match self {
26-
TockloaderConnection::ProbeRS(conn) => conn.write(address, pkt, settings).await,
27-
TockloaderConnection::Serial(conn) => conn.write(address, pkt, settings).await,
20+
TockloaderConnection::ProbeRS(conn) => conn.write(address, pkt).await,
21+
TockloaderConnection::Serial(conn) => conn.write(address, pkt).await,
2822
}
2923
}
3024
}
3125

3226
#[async_trait]
3327
impl IOCommands for TockloaderConnection {
34-
async fn read_installed_apps(
35-
&mut self,
36-
settings: &BoardSettings,
37-
) -> Result<Vec<AppAttributes>, TockloaderError> {
28+
async fn read_installed_apps(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
3829
match self {
39-
TockloaderConnection::ProbeRS(conn) => conn.read_installed_apps(settings).await,
40-
TockloaderConnection::Serial(conn) => conn.read_installed_apps(settings).await,
30+
TockloaderConnection::ProbeRS(conn) => conn.read_installed_apps().await,
31+
TockloaderConnection::Serial(conn) => conn.read_installed_apps().await,
4132
}
4233
}
4334

tockloader-lib/src/command_impl/info.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
use async_trait::async_trait;
22

33
use crate::attributes::general_attributes::GeneralAttributes;
4-
use crate::board_settings::BoardSettings;
54
use crate::connection::TockloaderConnection;
65
use crate::errors::TockloaderError;
76
use crate::{CommandInfo, IOCommands};
87

98
#[async_trait]
109
impl CommandInfo for TockloaderConnection {
11-
async fn info(
12-
&mut self,
13-
settings: &BoardSettings,
14-
) -> Result<GeneralAttributes, TockloaderError> {
15-
let installed_apps = self.read_installed_apps(settings).await.unwrap();
10+
async fn info(&mut self) -> Result<GeneralAttributes, TockloaderError> {
11+
let installed_apps = self.read_installed_apps().await.unwrap();
1612
let system_atributes = self.read_system_attributes().await.unwrap();
1713
Ok(GeneralAttributes::new(system_atributes, installed_apps))
1814
}
Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
use async_trait::async_trait;
22

33
use crate::attributes::app_attributes::AppAttributes;
4-
use crate::board_settings::BoardSettings;
54
use crate::command_impl::reshuffle_apps::{create_pkt, reshuffle_apps, TockApp};
6-
use crate::connection::TockloaderConnection;
5+
use crate::connection::{Connection, TockloaderConnection};
76
use crate::errors::TockloaderError;
87
use crate::tabs::tab::Tab;
98
use crate::{CommandInstall, CommandList, IO};
109

1110
#[async_trait]
1211
impl CommandInstall for TockloaderConnection {
13-
async fn install_app(
14-
&mut self,
15-
settings: &BoardSettings,
16-
tab: Tab,
17-
) -> Result<(), TockloaderError> {
18-
let app_attributes_list: Vec<AppAttributes> = self.list(settings).await.unwrap();
12+
async fn install_app(&mut self, tab: Tab) -> Result<(), TockloaderError> {
13+
let settings = self.get_settings();
14+
let app_attributes_list: Vec<AppAttributes> = self.list().await.unwrap();
1915
let mut tock_app_list = app_attributes_list
2016
.iter()
2117
.map(TockApp::from_app_attributes)
@@ -24,7 +20,7 @@ impl CommandInstall for TockloaderConnection {
2420
// obtain the binaries in a vector
2521
let mut app_binaries: Vec<Vec<u8>> = Vec::new();
2622

27-
let mut address = settings.start_address;
23+
let mut address = self.get_settings().start_address;
2824
for app in app_attributes_list.iter() {
2925
app_binaries.push(
3026
self.read(address, app.tbf_header.total_size() as usize)
@@ -34,20 +30,23 @@ impl CommandInstall for TockloaderConnection {
3430
address += app.tbf_header.total_size() as u64;
3531
}
3632

37-
let mut app = TockApp::from_tab(&tab, settings).unwrap();
33+
let mut app = TockApp::from_tab(&tab, &settings).unwrap();
3834

3935
app.replace_idx(tock_app_list.len());
4036
tock_app_list.push(app.clone());
4137

42-
app_binaries.push(tab.extract_binary(settings.arch.clone().unwrap()).unwrap());
38+
app_binaries.push(
39+
tab.extract_binary(self.get_settings().arch.clone().unwrap())
40+
.unwrap(),
41+
);
4342

44-
let configuration = reshuffle_apps(settings, tock_app_list).unwrap();
43+
let configuration = reshuffle_apps(&settings, tock_app_list).unwrap();
4544

4645
// create the pkt, this contains all the binaries in a vec
4746
let pkt = create_pkt(configuration, app_binaries);
4847

4948
// write the pkt
50-
let _ = self.write(settings.start_address, pkt, settings).await;
49+
let _ = self.write(self.get_settings().start_address, pkt).await;
5150
Ok(())
5251
}
5352
}
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
use async_trait::async_trait;
22

33
use crate::attributes::app_attributes::AppAttributes;
4-
use crate::board_settings::BoardSettings;
54
use crate::connection::TockloaderConnection;
65
use crate::errors::TockloaderError;
76
use crate::{CommandList, IOCommands};
87

98
#[async_trait]
109
impl CommandList for TockloaderConnection {
11-
async fn list(
12-
&mut self,
13-
settings: &BoardSettings,
14-
) -> Result<Vec<AppAttributes>, TockloaderError> {
15-
self.read_installed_apps(settings).await
10+
async fn list(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
11+
self.read_installed_apps().await
1612
}
1713
}

tockloader-lib/src/command_impl/probers/io.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use probe_rs::{flashing::DownloadOptions, MemoryInterface};
33

44
use crate::{
55
attributes::{app_attributes::AppAttributes, system_attributes::SystemAttributes},
6-
board_settings::BoardSettings,
76
connection::{Connection, ProbeRSConnection},
87
errors::{InternalError, TockloaderError},
98
IOCommands, IO,
@@ -23,12 +22,7 @@ impl IO for ProbeRSConnection {
2322
Ok(appdata)
2423
}
2524

26-
async fn write(
27-
&mut self,
28-
address: u64,
29-
pkt: Vec<u8>,
30-
_settings: &BoardSettings,
31-
) -> Result<(), TockloaderError> {
25+
async fn write(&mut self, address: u64, pkt: Vec<u8>) -> Result<(), TockloaderError> {
3226
if !self.is_open() {
3327
return Err(InternalError::ConnectionNotOpen.into());
3428
}
@@ -47,13 +41,11 @@ impl IO for ProbeRSConnection {
4741

4842
#[async_trait]
4943
impl IOCommands for ProbeRSConnection {
50-
async fn read_installed_apps(
51-
&mut self,
52-
settings: &BoardSettings,
53-
) -> Result<Vec<AppAttributes>, TockloaderError> {
44+
async fn read_installed_apps(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
5445
if !self.is_open() {
5546
return Err(InternalError::ConnectionNotOpen.into());
5647
}
48+
let settings = self.get_settings();
5749
let session = self.session.as_mut().expect("Board must be open");
5850
let mut core = session.core(self.target_info.core)?;
5951

tockloader-lib/src/command_impl/serial/io.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use async_trait::async_trait;
22

33
use crate::{
44
attributes::{app_attributes::AppAttributes, system_attributes::SystemAttributes},
5-
board_settings::BoardSettings,
65
bootloader_serial::{issue_command, ping_bootloader_and_wait_for_response, Command, Response},
76
connection::{Connection, SerialConnection},
87
errors::{InternalError, TockloaderError},
@@ -37,12 +36,8 @@ impl IO for SerialConnection {
3736
Ok(appdata)
3837
}
3938

40-
async fn write(
41-
&mut self,
42-
address: u64,
43-
pkt: Vec<u8>,
44-
settings: &BoardSettings,
45-
) -> Result<(), TockloaderError> {
39+
async fn write(&mut self, address: u64, pkt: Vec<u8>) -> Result<(), TockloaderError> {
40+
let settings = self.get_settings();
4641
let stream = self.stream.as_mut().expect("Board must be open");
4742
let mut binary = pkt.clone();
4843

@@ -77,13 +72,11 @@ impl IO for SerialConnection {
7772

7873
#[async_trait]
7974
impl IOCommands for SerialConnection {
80-
async fn read_installed_apps(
81-
&mut self,
82-
settings: &BoardSettings,
83-
) -> Result<Vec<AppAttributes>, TockloaderError> {
75+
async fn read_installed_apps(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
8476
if !self.is_open() {
8577
return Err(InternalError::ConnectionNotOpen.into());
8678
}
79+
let settings = self.get_settings();
8780
let stream = self.stream.as_mut().expect("Board must be open");
8881

8982
ping_bootloader_and_wait_for_response(stream).await?;

0 commit comments

Comments
 (0)