Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 21 additions & 20 deletions uftwo/src/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ pub struct Block {
///
/// When the MD5 checksum flag is set, the last 24 bytes hold the checksum
/// as well as address start and length.
pub data: [u8; MAX_PAYLOAD_SIZE],
pub payload: [u8; MAX_PAYLOAD_SIZE],
/// Final magic number.
pub magic_end: u32,
}
Expand All @@ -98,7 +98,7 @@ impl Default for Block {
block: 0,
total_blocks: 0,
board_family_id_or_file_size: 0,
data: [0; MAX_PAYLOAD_SIZE],
payload: [0; MAX_PAYLOAD_SIZE],
magic_end: MAGIC_NUMBER[2],
}
}
Expand Down Expand Up @@ -126,9 +126,9 @@ impl Block {
this.target_addr = target_addr as u32;

// copy over data
assert!(data.len() <= this.data.len());
assert!(data.len() <= this.payload.len());
this.data_len = data.len() as u32;
this.data[0..data.len()].copy_from_slice(data);
this.payload[0..data.len()].copy_from_slice(data);

this
}
Expand Down Expand Up @@ -169,19 +169,20 @@ impl Block {
/// Returns the checksum value only if the checksum flag is set.
pub fn checksum(&self) -> Option<&Checksum> {
if self.has_checksum() {
let len = self.data.len();
Checksum::ref_from_bytes(&self.data[len - CHECKSUM_SIZE..len]).ok()
let len = self.payload.len();
Checksum::ref_from_bytes(&self.payload[len - CHECKSUM_SIZE..len])
.ok()
} else {
None
}
}

/// Set the checksum for this block.
pub fn set_checksum(&mut self, checksum: Checksum) {
let begin = self.data.len() - size_of::<Checksum>();
let end = self.data.len();
let begin = self.payload.len() - size_of::<Checksum>();
let end = self.payload.len();

self.data[begin..end].copy_from_slice(checksum.as_bytes());
self.payload[begin..end].copy_from_slice(checksum.as_bytes());

self.flags |= Flags::Checksum;
}
Expand All @@ -196,8 +197,8 @@ impl Block {
if self.has_extensions() {
let start = self.data_len as usize;
let start = start.next_multiple_of(Extensions::ALIGN);
let end = self.data.len();
Some(Extensions::from_bytes(&self.data[start..end]))
let end = self.payload.len();
Some(Extensions::from_bytes(&self.payload[start..end]))
} else {
None
}
Expand All @@ -213,7 +214,7 @@ impl Block {

/// Returns the payload data slice.
pub fn data(&self) -> &[u8] {
&self.data[0..self.data_len as usize]
&self.payload[0..self.data_len as usize]
}

/// Returns the file size if the family ID flag is not set.
Expand Down Expand Up @@ -270,19 +271,19 @@ impl Block {
let ext_end = ext_start + ext_len;

// Check if there's enough space in the block's data array
if ext_end > self.data.len() {
if ext_end > self.payload.len() {
return Err(BlockError::PayloadSize);
}

// Write extension length (1 byte)
self.data[ext_start] = ext_len as u8;
self.payload[ext_start] = ext_len as u8;

// Write extension tag (3 bytes)
let tag_bytes = tag.to_bytes();
self.data[ext_start + 1..ext_start + 4].copy_from_slice(&tag_bytes);
self.payload[ext_start + 1..ext_start + 4].copy_from_slice(&tag_bytes);

// Write extension data
self.data[ext_start + Extensions::HEADER_SIZE..ext_end]
self.payload[ext_start + Extensions::HEADER_SIZE..ext_end]
.copy_from_slice(data);

// Set the extension flag
Expand Down Expand Up @@ -501,17 +502,17 @@ mod tests {
};

// Semver string
block.data[0..12].copy_from_slice(&[
block.payload[0..12].copy_from_slice(&[
0x09, 0xbc, 0xc7, 0x9f, 0x30, 0x2e, 0x31, 0x2e, 0x32, 0x00, 0x00,
0x00,
]);
// Semver string
block.data[12..24].copy_from_slice(&[
block.payload[12..24].copy_from_slice(&[
0x09, 0xbc, 0xc7, 0x9f, 0x30, 0x2e, 0x31, 0x2e, 0x32, 0x00, 0x00,
0x00,
]);
// Device description
block.data[24..44].copy_from_slice(&[
block.payload[24..44].copy_from_slice(&[
0x14, 0x9d, 0x0d, 0x65, 0x41, 0x43, 0x4d, 0x45, 0x20, 0x54, 0x6f,
0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6d, 0x6b, 0x33,
]);
Expand All @@ -537,7 +538,7 @@ mod tests {
fn example_file() {
use std::io::prelude::*;

let mut f = std::fs::File::open("example.uf2").unwrap();
let mut f = std::fs::File::open("tests/example.uf2").unwrap();
let mut buffer = [0; 512];

f.read(&mut buffer).unwrap();
Expand Down
14 changes: 7 additions & 7 deletions uftwo/src/reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ mod tests {
// Create a valid UF2 block
let mut block = Block::default();
block.data_len = 256;
block.data[0..256].copy_from_slice(&[0xAA; 256]);
block.payload[0..256].copy_from_slice(&[0xAA; 256]);

let bytes = block.as_bytes();
let buffer = [bytes; 1]; // Single block
Expand Down Expand Up @@ -194,13 +194,13 @@ mod tests {
block1.block = 0;
block1.total_blocks = 2;
block1.data_len = 100;
block1.data[0..100].copy_from_slice(&[0xAA; 100]);
block1.payload[0..100].copy_from_slice(&[0xAA; 100]);

let mut block2 = Block::default();
block2.block = 1;
block2.total_blocks = 2;
block2.data_len = 100;
block2.data[0..100].copy_from_slice(&[0xBB; 100]);
block2.payload[0..100].copy_from_slice(&[0xBB; 100]);

let mut bytes = Vec::new();
bytes.extend_from_slice(block1.as_bytes());
Expand All @@ -215,7 +215,7 @@ mod tests {
block.block = 0;
block.total_blocks = 1;
block.data_len = 100;
block.data[0..100].copy_from_slice(&[0xCC; 100]);
block.payload[0..100].copy_from_slice(&[0xCC; 100]);

let bytes = block.as_bytes();
let uf2_file = from_bytes(&bytes).unwrap();
Expand All @@ -231,13 +231,13 @@ mod tests {
block1.block = 0;
block1.total_blocks = 2;
block1.data_len = 100;
block1.data[0..100].copy_from_slice(&[0xAA; 100]);
block1.payload[0..100].copy_from_slice(&[0xAA; 100]);

let mut block2 = Block::default();
block2.block = 1;
block2.total_blocks = 2;
block2.data_len = 50;
block2.data[0..50].copy_from_slice(&[0xBB; 50]);
block2.payload[0..50].copy_from_slice(&[0xBB; 50]);

let mut bytes = Vec::new();
bytes.extend_from_slice(block1.as_bytes());
Expand Down Expand Up @@ -347,7 +347,7 @@ mod tests {
block.block = 5;
block.total_blocks = 3; // block=5 >= total=3
block.data_len = 100;
block.data[0..100].copy_from_slice(&[0xAA; 100]);
block.payload[0..100].copy_from_slice(&[0xAA; 100]);

uf2_file.push_block(block);

Expand Down
22 changes: 11 additions & 11 deletions uftwo/src/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ impl Uf2File {
block: block_num as u32,
total_blocks: total_blocks as u32,
board_family_id_or_file_size: 0,
data: [0; MAX_PAYLOAD_SIZE],
payload: [0; MAX_PAYLOAD_SIZE],
magic_end: MAGIC_NUMBER[2],
};

// Copy data
block.data[0..chunk_size]
block.payload[0..chunk_size]
.copy_from_slice(&payload[offset..offset + chunk_size]);

// Set family ID if provided
Expand Down Expand Up @@ -261,12 +261,12 @@ impl Uf2File {
block: block_no as u32,
total_blocks: u32::MAX, // Placeholder for total_blocks
board_family_id_or_file_size: 0,
data: [0; MAX_PAYLOAD_SIZE],
payload: [0; MAX_PAYLOAD_SIZE],
magic_end: MAGIC_NUMBER[2],
};

// Copy data
block.data[0..chunk_size].copy_from_slice(
block.payload[0..chunk_size].copy_from_slice(
&page[page_offset..page_offset + chunk_size],
);

Expand All @@ -286,7 +286,7 @@ impl Uf2File {
let checksum_bytes = checksum.as_bytes();
let end_index = MAX_PAYLOAD_SIZE;
let start_index = end_index - 24;
block.data[start_index..end_index]
block.payload[start_index..end_index]
.copy_from_slice(checksum_bytes);

// Add extensions to the first block of each page
Expand All @@ -299,11 +299,11 @@ impl Uf2File {
let end = start + target_page_size_ext_len;

if end <= MAX_PAYLOAD_SIZE_WITH_CHECKSUM {
block.data[start] = target_page_size_ext_len as u8;
block.payload[start] = target_page_size_ext_len as u8;
let tag_bytes = ExtensionTag::TargetPageSize.to_bytes();
block.data[start + 1..start + 4]
block.payload[start + 1..start + 4]
.copy_from_slice(&tag_bytes);
block.data[start + Extension::HEADER_SIZE..end]
block.payload[start + Extension::HEADER_SIZE..end]
.copy_from_slice(page_size_str.as_bytes());

block.flags |= Flags::ExtensionTags;
Expand All @@ -319,12 +319,12 @@ impl Uf2File {
let end = start + semver_ext_len;

if end <= MAX_PAYLOAD_SIZE_WITH_CHECKSUM {
block.data[start] = semver_ext_len as u8;
block.payload[start] = semver_ext_len as u8;
let tag_bytes =
ExtensionTag::SemverString.to_bytes();
block.data[start + 1..start + 4]
block.payload[start + 1..start + 4]
.copy_from_slice(&tag_bytes);
block.data[start + Extension::HEADER_SIZE..end]
block.payload[start + Extension::HEADER_SIZE..end]
.copy_from_slice(semver_str.as_bytes());

block.flags |= Flags::ExtensionTags;
Expand Down
File renamed without changes.