Add firmware struct to tool
This commit is contained in:
parent
83c224c229
commit
d511a57bff
48
tool/src/firmware.rs
Normal file
48
tool/src/firmware.rs
Normal file
@ -0,0 +1,48 @@
|
||||
pub struct Firmware<'a> {
|
||||
pub board: &'a [u8],
|
||||
pub version: &'a [u8],
|
||||
pub data: &'a [u8],
|
||||
}
|
||||
|
||||
fn firmware_str<'a>(data: &'a [u8], key: &[u8]) -> Option<&'a [u8]> {
|
||||
let mut data_i = 0;
|
||||
|
||||
//First, locate the key
|
||||
let mut key_i = 0;
|
||||
while data_i < data.len() && key_i < key.len() {
|
||||
if data[data_i] == key[key_i] {
|
||||
key_i += 1;
|
||||
} else {
|
||||
key_i = 0;
|
||||
}
|
||||
data_i += 1;
|
||||
}
|
||||
|
||||
// Return None if key not found
|
||||
if key_i < key.len() {
|
||||
return None;
|
||||
}
|
||||
|
||||
// Locate end of data
|
||||
let start = data_i;
|
||||
while data_i < data.len() {
|
||||
if data[data_i] == 0 {
|
||||
break;
|
||||
}
|
||||
data_i += 1;
|
||||
}
|
||||
|
||||
Some(&data[start..data_i])
|
||||
}
|
||||
|
||||
impl<'a> Firmware<'a> {
|
||||
pub fn new(data: &'a [u8]) -> Option<Self> {
|
||||
let board = firmware_str(data, b"76EC_BOARD=")?;
|
||||
let version = firmware_str(data, b"76EC_VERSION=")?;
|
||||
Some(Self {
|
||||
data,
|
||||
board,
|
||||
version,
|
||||
})
|
||||
}
|
||||
}
|
@ -6,6 +6,9 @@ mod ec;
|
||||
pub use self::error::Error;
|
||||
mod error;
|
||||
|
||||
pub use self::firmware::Firmware;
|
||||
mod firmware;
|
||||
|
||||
pub use self::pmc::Pmc;
|
||||
mod pmc;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user