Skip to content

Commit d78b6b9

Browse files
committed
Reboot in order to set serial
1 parent 7733545 commit d78b6b9

File tree

3 files changed

+56
-38
lines changed

3 files changed

+56
-38
lines changed

res/firmware.nsh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,23 @@ if "%2" == "ec2" then
115115
exit 1
116116
endif
117117

118+
if "%2" == "serial" then
119+
if exist amide.efi then
120+
if exist amide.tag then
121+
rm amide.tag
122+
amide.efi /SS "%3"
123+
exit %lasterror%
124+
else
125+
echo > amide.tag
126+
if not exist amide.tag then
127+
echo "failed to create amide.tag"
128+
exit 1
129+
endif
130+
131+
reset
132+
endif
133+
endif
134+
endif
135+
118136
echo "unknown command '%2'"
119137
exit 1

src/app/bios.rs

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::fs::{find, load};
99
use std::vars::{get_boot_item, get_boot_order, set_boot_item, set_boot_order};
1010
use uefi::status::{Error, Result};
1111

12-
use super::{AMIDE, FIRMWAREDIR, FIRMWARENSH, FIRMWAREROM, SERIAL, UEFIFLASH, shell, Component};
12+
use super::{FIRMWAREDIR, FIRMWARENSH, FIRMWAREROM, UEFIFLASH, shell, Component};
1313

1414
pub struct BiosComponent {
1515
bios_vendor: String,
@@ -107,23 +107,6 @@ impl BiosComponent {
107107
println!("Failed to locate EC");
108108
}
109109
}
110-
111-
fn set_serial(&self, serial: &str) -> Result<()> {
112-
if find(AMIDE).is_ok() {
113-
let cmd = format!("{} /SS {}", AMIDE, serial);
114-
let status = shell(&cmd)?;
115-
116-
if status == 0 {
117-
Ok(())
118-
} else {
119-
println!("{} Set Serial Error: {}", self.name(), status);
120-
Err(Error::DeviceError)
121-
}
122-
} else {
123-
//TODO
124-
Err(Error::NotFound)
125-
}
126-
}
127110
}
128111

129112
impl Component for BiosComponent {
@@ -444,25 +427,6 @@ impl Component for BiosComponent {
444427
}
445428
}
446429

447-
if let Ok(serial_vec) = load(SERIAL) {
448-
match String::from_utf8(serial_vec) {
449-
Ok(serial_str) => {
450-
let serial = serial_str.trim();
451-
match self.set_serial(&serial) {
452-
Ok(()) => {
453-
println!("Set serial to '{}'", serial);
454-
},
455-
Err(err) => {
456-
println!("Failed to set serial to '{}': {:?}", serial, err);
457-
}
458-
}
459-
},
460-
Err(err) => {
461-
println!("Failed to parse serial: {:?}", err);
462-
}
463-
}
464-
}
465-
466430
Ok(())
467431
}
468432
}

src/app/mod.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ mod bios;
3131
mod component;
3232
mod ec;
3333

34-
static AMIDE: &'static str = concat!("\\", env!("BASEDIR"), "\\firmware\\amide.efi");
34+
static AMIDETAG: &'static str = concat!("\\", env!("BASEDIR"), "\\firmware\\amide.tag");
3535
static ECROM: &'static str = concat!("\\", env!("BASEDIR"), "\\firmware\\ec.rom");
3636
static EC2ROM: &'static str = concat!("\\", env!("BASEDIR"), "\\firmware\\ec2.rom");
3737
static FIRMWAREDIR: &'static str = concat!("\\", env!("BASEDIR"), "\\firmware");
@@ -66,6 +66,18 @@ fn ac_connected() -> bool {
6666
}
6767
}
6868

69+
fn set_serial(serial: &str) -> Result<()> {
70+
find(FIRMWARENSH)?;
71+
let cmd = format!("{} {} serial {}", FIRMWARENSH, FIRMWAREDIR, serial);
72+
let status = shell(&cmd)?;
73+
if status == 0 {
74+
Ok(())
75+
} else {
76+
println!("Set Serial Error: {}", status);
77+
Err(Error::DeviceError)
78+
}
79+
}
80+
6981
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7082
enum ValidateKind {
7183
Found,
@@ -218,6 +230,11 @@ fn inner() -> Result<()> {
218230
let c = if find(MESETTAG).is_ok() {
219231
// Skip enter if in manufacturing mode
220232
'\n'
233+
} else if find(AMIDETAG).is_ok() {
234+
// Skip enter if writing serial
235+
components.clear();
236+
validations.clear();
237+
'\n'
221238
} else if find(UEFIFLASH).is_ok() {
222239
// Skip enter if flashing a meerkat
223240
if find(UEFIFLASHTAG).is_ok() {
@@ -278,6 +295,25 @@ fn inner() -> Result<()> {
278295
}
279296
}
280297

298+
if let Ok(serial_vec) = load(SERIAL) {
299+
match String::from_utf8(serial_vec) {
300+
Ok(serial_str) => {
301+
let serial = serial_str.trim();
302+
match set_serial(&serial) {
303+
Ok(()) => {
304+
println!("Set serial to '{}'", serial);
305+
},
306+
Err(err) => {
307+
println!("Failed to set serial to '{}': {:?}", serial, err);
308+
}
309+
}
310+
},
311+
Err(err) => {
312+
println!("Failed to parse serial: {:?}", err);
313+
}
314+
}
315+
}
316+
281317
remove_override(option)?;
282318

283319
if shutdown {

0 commit comments

Comments
 (0)