Skip to content

Commit 125ab07

Browse files
committed
wip: refactored reshuffle
1 parent a289e61 commit 125ab07

10 files changed

Lines changed: 215 additions & 91 deletions

File tree

tockloader-lib/src/attributes/app_attributes.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use tokio_serial::SerialStream;
1111

1212
use crate::bootloader_serial::{issue_command, Command, Response};
1313
use crate::errors::{TockError, TockloaderError};
14-
use crate::IO;
1514

1615
/// This structure contains all relevant information about a tock application.
1716
///
@@ -299,9 +298,4 @@ impl AppAttributes {
299298
}
300299
Ok(apps_details)
301300
}
302-
303-
/// This function reads the full binary of a given app
304-
pub async fn read_binary(&mut self, conn: &mut dyn IO) -> Result<Vec<u8>, TockloaderError> {
305-
conn.read(self.address, self.size as usize).await
306-
}
307301
}

tockloader-lib/src/board_settings.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
pub struct BoardSettings {
22
pub arch: Option<String>,
33
pub start_address: u64,
4+
pub page_size: u64,
45
}
56

67
// TODO(george-cosma): Does a default implementation make sense for this? Is a
@@ -10,6 +11,7 @@ impl Default for BoardSettings {
1011
Self {
1112
arch: None,
1213
start_address: 0x30000,
14+
page_size: 512,
1315
}
1416
}
1517
}

tockloader-lib/src/command_impl/erase_apps.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{CommandEraseApps, IO};
88
#[async_trait]
99
impl CommandEraseApps for TockloaderConnection {
1010
async fn erase_apps(&mut self, settings: &BoardSettings) -> Result<(), TockloaderError> {
11-
self.write(settings.start_address, vec![0u8]).await
11+
self.write(settings.start_address, vec![0u8], settings)
12+
.await
1213
}
1314
}

tockloader-lib/src/command_impl/generalized.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ impl IO for TockloaderConnection {
1616
}
1717
}
1818

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

tockloader-lib/src/command_impl/install.rs

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

33
use crate::attributes::app_attributes::AppAttributes;
44
use crate::board_settings::BoardSettings;
5-
use crate::command_impl::reshuffle_apps::{create_pkt, reshuffle_apps};
5+
use crate::command_impl::reshuffle_apps::{create_pkt, reshuffle_apps, TockApp};
66
use crate::connection::TockloaderConnection;
77
use crate::errors::TockloaderError;
88
use crate::tabs::tab::Tab;
@@ -15,37 +15,36 @@ impl CommandInstall for TockloaderConnection {
1515
settings: &BoardSettings,
1616
tab: Tab,
1717
) -> Result<(), TockloaderError> {
18-
let mut installed_apps: Vec<AppAttributes> = self.list(settings).await.unwrap();
19-
20-
if let Some(mut app) = reconstruct_app(Some(&tab), settings) {
21-
app.index = installed_apps.len() as u8;
22-
installed_apps.push(app.clone());
23-
}
18+
let app_attributes_list: Vec<AppAttributes> = self.list(settings).await.unwrap();
19+
let mut tock_app_list = app_attributes_list
20+
.iter()
21+
.map(|app| TockApp::from_app_attributes(app, settings))
22+
.collect::<Vec<TockApp>>();
2423

2524
// obtain the binaries in a vector
2625
let mut app_binaries: Vec<Vec<u8>> = Vec::new();
2726

28-
for app in installed_apps.iter() {
29-
match app.installed {
30-
true => {
31-
app_binaries.push(app.clone().read_binary(self).await.unwrap());
32-
}
33-
false => {
34-
// TODO(adi): change this when TBF Filtering will get merged
35-
app_binaries.push(
36-
tab.extract_binary(settings.arch.as_ref().unwrap().as_str())
37-
.unwrap(),
38-
);
39-
}
40-
}
27+
for app in tock_app_list.iter() {
28+
app_binaries.push(app.clone().read_binary(self).await.unwrap())
4129
}
42-
let configuration = reshuffle_apps(settings, installed_apps).unwrap();
30+
31+
let mut app = TockApp::from_tab(&tab, settings).unwrap();
32+
33+
app.replace_idx(tock_app_list.len());
34+
tock_app_list.push(app.clone());
35+
36+
app_binaries.push(
37+
tab.extract_binary(settings.arch.as_ref().unwrap().as_str())
38+
.unwrap(),
39+
);
40+
41+
let configuration = reshuffle_apps(settings, tock_app_list).unwrap();
4342

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

4746
// write the pkt
48-
let _ = self.write(settings.start_address, pkt).await;
47+
let _ = self.write(settings.start_address, pkt, settings).await;
4948
Ok(())
5049
}
5150
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ impl IO for ProbeRSConnection {
2323
Ok(appdata)
2424
}
2525

26-
async fn write(&mut self, address: u64, pkt: Vec<u8>) -> Result<(), TockloaderError> {
26+
async fn write(
27+
&mut self,
28+
address: u64,
29+
pkt: Vec<u8>,
30+
_settings: &BoardSettings,
31+
) -> Result<(), TockloaderError> {
2732
if !self.is_open() {
2833
return Err(InternalError::ConnectionNotOpen.into());
2934
}

0 commit comments

Comments
 (0)