Skip to content

Commit 3dbbdce

Browse files
committed
feat:io rework
Signed-off-by: addrian-77 <lunguadrian30@gmail.com>
1 parent dd154fd commit 3dbbdce

23 files changed

Lines changed: 309 additions & 641 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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
#[derive(Clone)]
12
pub struct BoardSettings {
23
pub arch: Option<String>,
34
pub start_address: u64,
5+
pub page_size: u64,
46
}
57

68
// TODO(george-cosma): Does a default implementation make sense for this? Is a
@@ -10,6 +12,7 @@ impl Default for BoardSettings {
1012
Self {
1113
arch: None,
1214
start_address: 0x30000,
15+
page_size: 512,
1316
}
1417
}
1518
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use async_trait::async_trait;
2+
3+
use crate::connection::{Connection, TockloaderConnection};
4+
use crate::errors::TockloaderError;
5+
use crate::{CommandEraseApps, IO};
6+
7+
#[async_trait]
8+
impl CommandEraseApps for TockloaderConnection {
9+
async fn erase_apps(&mut self) -> Result<(), TockloaderError> {
10+
self.write(self.get_settings().start_address, &[0u8])
11+
.await
12+
}
13+
}
Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,41 @@
11
use async_trait::async_trait;
22

33
use crate::attributes::app_attributes::AppAttributes;
4-
use crate::attributes::general_attributes::GeneralAttributes;
5-
use crate::board_settings::BoardSettings;
4+
use crate::attributes::system_attributes::SystemAttributes;
65
use crate::connection::TockloaderConnection;
76
use crate::errors::TockloaderError;
8-
use crate::tabs::tab::Tab;
9-
use crate::{CommandEraseApps, CommandInfo, CommandInstall, CommandList};
7+
use crate::{IOCommands, IO};
108

119
#[async_trait]
12-
impl CommandList for TockloaderConnection {
13-
async fn list(
14-
&mut self,
15-
settings: &BoardSettings,
16-
) -> Result<Vec<AppAttributes>, TockloaderError> {
10+
impl IO for TockloaderConnection {
11+
async fn read(&mut self, address: u64, size: usize) -> Result<Vec<u8>, TockloaderError> {
1712
match self {
18-
TockloaderConnection::ProbeRS(conn) => conn.list(settings).await,
19-
TockloaderConnection::Serial(conn) => conn.list(settings).await,
13+
TockloaderConnection::ProbeRS(conn) => conn.read(address, size).await,
14+
TockloaderConnection::Serial(conn) => conn.read(address, size).await,
2015
}
2116
}
22-
}
2317

24-
#[async_trait]
25-
impl CommandInfo for TockloaderConnection {
26-
async fn info(
27-
&mut self,
28-
settings: &BoardSettings,
29-
) -> Result<GeneralAttributes, TockloaderError> {
18+
async fn write(&mut self, address: u64, pkt: &[u8]) -> Result<(), TockloaderError> {
3019
match self {
31-
TockloaderConnection::ProbeRS(conn) => conn.info(settings).await,
32-
TockloaderConnection::Serial(conn) => conn.info(settings).await,
20+
TockloaderConnection::ProbeRS(conn) => conn.write(address, pkt).await,
21+
TockloaderConnection::Serial(conn) => conn.write(address, pkt).await,
3322
}
3423
}
3524
}
3625

3726
#[async_trait]
38-
impl CommandInstall for TockloaderConnection {
39-
async fn install_app(
40-
&mut self,
41-
settings: &BoardSettings,
42-
tab_file: Tab,
43-
) -> Result<(), TockloaderError> {
27+
impl IOCommands for TockloaderConnection {
28+
async fn read_installed_apps(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
4429
match self {
45-
TockloaderConnection::ProbeRS(conn) => conn.install_app(settings, tab_file).await,
46-
TockloaderConnection::Serial(conn) => conn.install_app(settings, tab_file).await,
30+
TockloaderConnection::ProbeRS(conn) => conn.read_installed_apps().await,
31+
TockloaderConnection::Serial(conn) => conn.read_installed_apps().await,
4732
}
4833
}
49-
}
5034

51-
#[async_trait]
52-
impl CommandEraseApps for TockloaderConnection {
53-
async fn erase_apps(&mut self, settings: &BoardSettings) -> Result<(), TockloaderError> {
35+
async fn read_system_attributes(&mut self) -> Result<SystemAttributes, TockloaderError> {
5436
match self {
55-
TockloaderConnection::ProbeRS(conn) => conn.erase_apps(settings).await,
56-
TockloaderConnection::Serial(conn) => conn.erase_apps(settings).await,
37+
TockloaderConnection::ProbeRS(conn) => conn.read_system_attributes().await,
38+
TockloaderConnection::Serial(conn) => conn.read_system_attributes().await,
5739
}
5840
}
5941
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
use async_trait::async_trait;
2+
3+
use crate::attributes::general_attributes::GeneralAttributes;
4+
use crate::connection::TockloaderConnection;
5+
use crate::errors::TockloaderError;
6+
use crate::{CommandInfo, IOCommands};
7+
8+
#[async_trait]
9+
impl CommandInfo for TockloaderConnection {
10+
async fn info(&mut self) -> Result<GeneralAttributes, TockloaderError> {
11+
let installed_apps = self.read_installed_apps().await.unwrap();
12+
let system_atributes = self.read_system_attributes().await.unwrap();
13+
Ok(GeneralAttributes::new(system_atributes, installed_apps))
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
use async_trait::async_trait;
2+
3+
use crate::connection::TockloaderConnection;
4+
use crate::errors::TockloaderError;
5+
use crate::tabs::tab::Tab;
6+
use crate::CommandInstall;
7+
8+
#[async_trait]
9+
impl CommandInstall for TockloaderConnection {
10+
async fn install_app(
11+
&mut self, _tab: Tab
12+
) -> Result<(), TockloaderError> {
13+
todo!()
14+
}
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use async_trait::async_trait;
2+
3+
use crate::attributes::app_attributes::AppAttributes;
4+
use crate::connection::TockloaderConnection;
5+
use crate::errors::TockloaderError;
6+
use crate::{CommandList, IOCommands};
7+
8+
#[async_trait]
9+
impl CommandList for TockloaderConnection {
10+
async fn list(&mut self) -> Result<Vec<AppAttributes>, TockloaderError> {
11+
self.read_installed_apps().await
12+
}
13+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
pub mod erase_apps;
12
pub mod generalized;
3+
pub mod info;
4+
pub mod install;
5+
pub mod list;
26
pub mod probers;
37
pub mod serial;

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

Lines changed: 0 additions & 32 deletions
This file was deleted.

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

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)