There are 6 fans. Three inlet and three outlet. They are controlled as if there are only two fans, meaning 1 duty cycle will be fed to inlet fans and 1 duty cycle will be fed to the outlet fans. The only time that are treated individually is when we read their RPM. That is why I called them inlet 1, 2.
The condition of if statement can be passed directly into second parameter of checkPersistentAlarm function. This will remove the need for if and else.
Same comment as Drain pump. Keep the "Set" variabl. roPumpControlMode would be set by the "Set" function. roPumpControlModeSet would be set by the state machine when the requested mode is actually set.
Structure fields are a mix of different sizes. Compiler will put each field in 32-bit space and pad by default. Since we will be serializing this data for transmission, we do not want structure to include any padding. The pack pragma instructs compiler not to pad.