haptic_skin_firmware/tasks/
power_guard.rs1use crate::config::{MOTOR_COUNT, POWER_GUARD_DUTY_CAP, POWER_GUARD_MAX_CONCURRENT};
5
6pub fn apply(intensities: &mut [u8; MOTOR_COUNT]) {
7 let mut indexed: heapless::Vec<(usize, u8), MOTOR_COUNT> = heapless::Vec::new();
8 for (idx, &v) in intensities.iter().enumerate() {
9 if v > 0 {
10 let _ = indexed.push((idx, v));
11 }
12 }
13 indexed.sort_unstable_by(|a, b| b.1.cmp(&a.1));
15
16 for v in intensities.iter_mut() {
18 if *v > POWER_GUARD_DUTY_CAP {
19 *v = POWER_GUARD_DUTY_CAP;
20 }
21 }
22
23 for &(idx, _) in indexed.iter().skip(POWER_GUARD_MAX_CONCURRENT) {
25 intensities[idx] = 0;
26 }
27}