diff --git a/core/embed/rust/src/ui/model_tt/component/hs_render.rs b/core/embed/rust/src/ui/model_tt/component/hs_render.rs
index a4aad14375..6413b99e61 100644
--- a/core/embed/rust/src/ui/model_tt/component/hs_render.rs
+++ b/core/embed/rust/src/ui/model_tt/component/hs_render.rs
@@ -152,15 +152,15 @@ fn homescreen_line_blurred(
text_buffer: &mut BufferText,
text_info: HomescreenTextInfo,
totals: [[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS],
- y_tmp: i16,
+ y: i16,
) -> bool {
- let t_buffer = unsafe { get_buffer_4bpp((y_tmp % 2) as u16, true) };
- let mut img_buffer = unsafe { get_buffer_16bpp((y_tmp % 2) as u16, false) };
+ let t_buffer = unsafe { get_buffer_4bpp((y & 0x1) as u16, true) };
+ let mut img_buffer = unsafe { get_buffer_16bpp((y & 0x1) as u16, false) };
for x in 0..HOMESCREEN_IMAGE_SIZE as usize {
- let c0 = if y_tmp > LOCKSCREEN_DIM_START {
+ let c0 = if y > LOCKSCREEN_DIM_START {
let coef = 65536
- - (((y_tmp - LOCKSCREEN_DIM_START) as u32)
+ - (((y - LOCKSCREEN_DIM_START) as u32)
* ((65536_f32 * LOCKSCREEN_DIM) as u32 / LOCKSCREEN_DIM_HIEGHT as u32));
let r = (totals[RED_IDX][x] as u32 * BLUR_DIV) >> 16;
@@ -180,14 +180,14 @@ fn homescreen_line_blurred(
};
for i in 0..HOMESCREEN_IMAGE_SCALE as usize {
- let idx = (HOMESCREEN_IMAGE_SCALE as usize * x + i) as usize;
- img_buffer.buffer[2 * idx + 1] = (c0 >> 8) as u8;
- img_buffer.buffer[2 * idx] = (c0 & 0xFF) as u8;
+ let j = 2 * (HOMESCREEN_IMAGE_SCALE as usize * x + i) as usize;
+ img_buffer.buffer[j + 1] = (c0 >> 8) as u8;
+ img_buffer.buffer[j] = (c0 & 0xFF) as u8;
}
}
- let done = homescreen_get_fg_text(y_tmp, text_info, text_buffer, t_buffer);
- homescreen_get_fg_icon(y_tmp, text_info, icon_data, t_buffer);
+ let done = homescreen_get_fg_text(y, text_info, text_buffer, t_buffer);
+ homescreen_get_fg_icon(y, text_info, icon_data, t_buffer);
dma2d_wait_for_transfer();
dma2d_setup_4bpp_over_16bpp(text_info.2.into());
@@ -303,6 +303,7 @@ fn update_accs_sub(
*acc_b -= b as u16;
}
+// computes color averages for one line of image data
fn compute_line_avgs(
data: &mut [u8; (HOMESCREEN_IMAGE_SIZE * 2) as usize],
avg_dest: &mut [[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS],
@@ -320,6 +321,7 @@ fn compute_line_avgs(
avg_dest[GREEN_IDX][i as usize] = acc_g;
avg_dest[BLUE_IDX][i as usize] = acc_b;
+ // clamping handles left and right edges
let ic = (i - BLUR_RADIUS).clamp(0, HOMESCREEN_IMAGE_SIZE as i16 - 1) as usize;
let ic2 = (i + BLUR_SIZE as i16 - BLUR_RADIUS).clamp(0, HOMESCREEN_IMAGE_SIZE as i16 - 1)
as usize;
@@ -328,6 +330,7 @@ fn compute_line_avgs(
}
}
+// adds one line of averages to sliding total averages
fn vertical_avg_add(
totals: &mut [[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS],
lines: &mut [[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS],
@@ -339,6 +342,7 @@ fn vertical_avg_add(
}
}
+// adds one line and removes one line of averages to/from sliding total averages
fn vertical_avg(
totals: &mut [[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS],
lines: &mut [[[u16; HOMESCREEN_IMAGE_SIZE as usize]; COLORS]; DECOMP_LINES],
@@ -375,12 +379,15 @@ pub fn homescreen_blurred(data: &[u8], texts: Vec