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;
|
pub use self::error::Error;
|
||||||
mod error;
|
mod error;
|
||||||
|
|
||||||
|
pub use self::firmware::Firmware;
|
||||||
|
mod firmware;
|
||||||
|
|
||||||
pub use self::pmc::Pmc;
|
pub use self::pmc::Pmc;
|
||||||
mod pmc;
|
mod pmc;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user