MCPcopy Index your code
hub / github.com/FrameworkComputer/framework-system / read_version

Function read_version

framework_lib/src/ccgx/binary.rs:140–169  ·  view source on GitHub ↗

Read version information about FW based on a particular metadata offset There can be multiple metadata and FW regions in the image, so it's required to specify which metadata region to read from.

(
    file_buffer: &[u8],
    flash_row_size: usize,
    metadata_offset: u32,
    ccgx: SiliconId,
)

Source from the content-addressed store, hash-verified

138/// There can be multiple metadata and FW regions in the image,
139/// so it's required to specify which metadata region to read from.
140fn read_version(
141 file_buffer: &[u8],
142 flash_row_size: usize,
143 metadata_offset: u32,
144 ccgx: SiliconId,
145) -> Option<PdFirmware> {
146 let (fw_row_start, fw_size) =
147 read_metadata(file_buffer, flash_row_size, metadata_offset, ccgx)?;
148 let data = read_256_bytes(file_buffer, fw_row_start, flash_row_size)?;
149 trace!("First row of firmware: {:X?}", data);
150 let data = &data[FW_VERSION_OFFSET..];
151
152 let (version_info, _) = VersionInfo::read_from_prefix(data).ok()?;
153
154 let base_version = BaseVersion::from(version_info.base_version.get());
155 let app_version = AppVersion::from(version_info.app_version.get());
156
157 let fw_silicon_id = version_info.silicon_id.get();
158 let fw_silicon_family = version_info.silicon_family.get();
159
160 Some(PdFirmware {
161 silicon_id: fw_silicon_id,
162 silicon_family: fw_silicon_family,
163 base_version,
164 app_version,
165 start_row: fw_row_start,
166 size: fw_size as usize,
167 row_size: flash_row_size,
168 })
169}
170
171/// Parse all PD information, given a binary file (buffer)
172pub fn read_versions(file_buffer: &[u8], ccgx: SiliconId) -> Option<PdFirmwareFile> {

Callers 1

read_versionsFunction · 0.85

Calls 3

read_metadataFunction · 0.85
read_256_bytesFunction · 0.85
getMethod · 0.80

Tested by

no test coverage detected