Skip to content

Commit 5a0e3e5

Browse files
committed
clean up bitrot in dbg-ecupdate configuration
1 parent 69cf629 commit 5a0e3e5

File tree

2 files changed

+53
-39
lines changed

2 files changed

+53
-39
lines changed

services/shellchat/src/cmds/ecup.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ impl<'a> ShellCmdApi<'a> for EcUpdate {
1717

1818
fn process(&mut self, args: String::<1024>, env: &mut CommonEnv) -> Result<Option<String::<1024>>, xous::Error> {
1919
let mut ret = String::<1024>::new();
20-
let helpstring = "ecup [gw] [fw] [wf200] [reset] [auto]";
20+
let helpstring = "ecup [gw] [fw] [wf200] [auto]";
2121

2222
log::debug!("ecup handling {}", args.as_str().unwrap());
2323
let mut tokens = args.as_str().unwrap().split(' ');
@@ -26,41 +26,45 @@ impl<'a> ShellCmdApi<'a> for EcUpdate {
2626
if let Some(sub_cmd) = tokens.next() {
2727
match sub_cmd {
2828
"fw" => {
29-
xous::send_message(ecup_conn,
29+
let result = xous::send_message(ecup_conn,
3030
xous::Message::new_blocking_scalar(
3131
1, // hard coded to match UpdateOp
3232
0, 0, 0, 0
3333
)
3434
).unwrap();
35-
write!(ret, "Starting EC firmware update").unwrap();
35+
env.ticktimer.sleep_ms(200).unwrap();
36+
write!(ret, "EC firmware update: {:?}", result).unwrap();
3637
}
3738
"gw" => {
38-
xous::send_message(ecup_conn,
39+
let result = xous::send_message(ecup_conn,
3940
xous::Message::new_blocking_scalar(
4041
0, // hard coded to match UpdateOp
4142
0, 0, 0, 0
4243
)
4344
).unwrap();
44-
write!(ret, "Starting EC gateware update").unwrap();
45+
env.ticktimer.sleep_ms(200).unwrap();
46+
write!(ret, "EC gateware update: {:?}", result).unwrap();
4547
}
4648
// note: "reset" has been moved to `ver ecreset`
4749
"wf200" => {
48-
xous::send_message(ecup_conn,
50+
let result = xous::send_message(ecup_conn,
4951
xous::Message::new_blocking_scalar(
5052
2, // hard coded to match UpdateOp
5153
0, 0, 0, 0
5254
)
5355
).unwrap();
54-
write!(ret, "Starting EC wf200 update").unwrap();
56+
env.ticktimer.sleep_ms(200).unwrap();
57+
write!(ret, "EC wf200 update: {:?}", result).unwrap();
5558
}
5659
"auto" => {
57-
xous::send_message(ecup_conn,
60+
let result = xous::send_message(ecup_conn,
5861
xous::Message::new_blocking_scalar(
5962
3, // hard coded to match UpdateOp
6063
0, 0, 0, 0
6164
)
6265
).unwrap();
63-
write!(ret, "Starting full EC firmware update").unwrap();
66+
env.ticktimer.sleep_ms(200).unwrap();
67+
write!(ret, "Full EC firmware update: {:?}", result).unwrap();
6468
}
6569
_ => {
6670
write!(ret, "{}", helpstring).unwrap();

services/status/src/ecup.rs

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -97,65 +97,75 @@ pub(crate) fn ecupdate_thread(sid: xous::SID) {
9797
match FromPrimitive::from_usize(msg.body.id()) {
9898
#[cfg(feature="dbg-ecupdate")]
9999
Some(UpdateOp::UpdateGateware) => { // blocking scalar
100-
netmgr.connection_manager_stop().unwrap();
101-
com.wlan_leave().ok();
102-
ticktimer.sleep_ms(4000).unwrap(); // give a few seconds for any packets/updates to clear so we don't tigger panics as the EC is about to disappear...
103-
104100
let package = unsafe{ core::slice::from_raw_parts(ec_package.as_ptr() as *const u8, xous::EC_FW_PKG_LEN as usize)};
105101
if !validate_package(package,PackageType::Ec) {
106102
log::error!("firmware package did not pass validation");
107103
modals.show_notification(
108104
&format!("{} gateware", t!("ecup.invalid", xous::LANG)), None).unwrap();
109105
} else {
106+
log::info!("updating GW");
107+
netmgr.connection_manager_stop().ok();
108+
llio.com_event_enable(false).ok();
110109
susres.set_suspendable(false).unwrap(); // block suspend/resume operations
111-
do_update(&mut com, &modals, package, CTRL_PAGE_LEN, EC_GATEWARE_BASE, EC_GATEWARE_LEN, "gateware");
110+
if !do_update(&mut com, &modals, package, CTRL_PAGE_LEN, EC_GATEWARE_BASE,
111+
EC_GATEWARE_LEN,
112+
"gateware") {
113+
xous::return_scalar(msg.sender, UpdateResult::Abort.to_usize().unwrap()).unwrap();
114+
continue;
115+
}
112116
susres.set_suspendable(true).unwrap(); // resume suspend/resume operations
113117
}
114118
xous::return_scalar(msg.sender, 0).unwrap();
115119
},
116120
#[cfg(feature="dbg-ecupdate")]
117121
Some(UpdateOp::UpdateFirmware) => { // blocking scalar
118-
netmgr.connection_manager_stop().unwrap();
119-
com.wlan_leave().ok();
120-
ticktimer.sleep_ms(4000).unwrap(); // give a few seconds for any packets/updates to clear so we don't tigger panics as the EC is about to disappear...
121-
122122
let package = unsafe{ core::slice::from_raw_parts(ec_package.as_ptr() as *const u8, xous::EC_FW_PKG_LEN as usize)};
123-
let mut temp: [u8; 4] = Default::default();
124-
temp.copy_from_slice(&package[0x28..0x2c]);
125-
let length = u32::from_le_bytes(temp); // total length of package
126-
127123
if !validate_package(package,PackageType::Ec) {
128124
log::error!("firmware package did not pass validation");
129125
modals.show_notification(
130126
&format!("{} firmware", t!("ecup.invalid", xous::LANG)), None).unwrap();
131127
} else {
128+
let length = u32::from_le_bytes(package[0x28..0x2c].try_into().unwrap());
129+
if length == 0xffff_ffff { // nothing was staged at all
130+
xous::return_scalar(msg.sender, UpdateResult::PackageInvalid.to_usize().unwrap()).unwrap();
131+
continue;
132+
}
133+
log::info!("updating FW");
134+
netmgr.connection_manager_stop().unwrap();
135+
llio.com_event_enable(false).ok();
132136
susres.set_suspendable(false).unwrap(); // block suspend/resume operations
133-
do_update(&mut com, &modals, package, EC_GATEWARE_LEN + CTRL_PAGE_LEN,
134-
EC_FIRMWARE_BASE, length - (EC_GATEWARE_LEN), "firmware");
137+
if !do_update(&mut com, &modals, package, EC_GATEWARE_LEN + CTRL_PAGE_LEN,
138+
EC_FIRMWARE_BASE, length - (EC_GATEWARE_LEN),
139+
"firmware") {
140+
xous::return_scalar(msg.sender, UpdateResult::Abort.to_usize().unwrap()).unwrap();
141+
continue;
142+
}
135143
susres.set_suspendable(true).unwrap(); // resume suspend/resume operations
136144
}
137145
xous::return_scalar(msg.sender, 0).unwrap();
138146
},
139147
#[cfg(feature="dbg-ecupdate")]
140148
Some(UpdateOp::UpdateWf200) => { // blocking scalar
141-
netmgr.connection_manager_stop().unwrap();
142-
com.wlan_leave().ok();
143-
ticktimer.sleep_ms(4000).unwrap(); // give a few seconds for any packets/updates to clear so we don't tigger panics as the EC is about to disappear...
144-
145149
let package = unsafe{ core::slice::from_raw_parts(wf_package.as_ptr() as *const u8, xous::EC_WF200_PKG_LEN as usize)};
146-
let mut temp: [u8; 4] = Default::default();
147-
temp.copy_from_slice(&package[0x28..0x2c]);
148-
let length = u32::from_le_bytes(temp); // total length of package
149-
150-
if !validate_package(package,PackageType::Wf200) {
151-
log::error!("WF200 firmware package did not pass validation");
152-
modals.show_notification(
153-
&format!("{} wf200", t!("ecup.invalid", xous::LANG)), None).unwrap();
154-
} else {
150+
if validate_package(package,PackageType::Wf200) {
151+
log::info!("updating Wf200");
152+
netmgr.connection_manager_stop().unwrap();
153+
llio.com_event_enable(false).ok();
154+
let length = u32::from_le_bytes(package[0x28..0x2c].try_into().unwrap());
155155
susres.set_suspendable(false).unwrap(); // block suspend/resume operations
156-
do_update(&mut com, &modals, package, CTRL_PAGE_LEN,
157-
WF200_FIRMWARE_BASE, length, "wf200");
156+
if !do_update(&mut com, &modals, package, CTRL_PAGE_LEN,
157+
WF200_FIRMWARE_BASE, length,
158+
"WF200") {
159+
xous::return_scalar(msg.sender, UpdateResult::Abort.to_usize().unwrap()).unwrap();
160+
continue;
161+
}
158162
susres.set_suspendable(true).unwrap(); // resume suspend/resume operations
163+
} else {
164+
log::error!("wf200 package did not pass validation");
165+
modals.show_notification(
166+
&format!("{} WF200", t!("ecup.invalid", xous::LANG)), None).unwrap();
167+
xous::return_scalar(msg.sender, UpdateResult::PackageInvalid.to_usize().unwrap()).unwrap();
168+
continue;
159169
}
160170

161171
xous::return_scalar(msg.sender, 0).unwrap();

0 commit comments

Comments
 (0)