|
| 1 | +use core::fmt; |
| 2 | + |
1 | 3 | use num_derive::FromPrimitive;
|
2 | 4 |
|
3 | 5 | use super::{command::*, input_deck::INPUT_DECK_SLOTS};
|
@@ -280,7 +282,13 @@ pub enum ExpansionByStates {
|
280 | 282 | pub enum ExpansionBayBoard {
|
281 | 283 | DualInterposer,
|
282 | 284 | SingleInterposer,
|
283 |
| - Invalid, |
| 285 | + UmaFans, |
| 286 | +} |
| 287 | + |
| 288 | +#[derive(Debug)] |
| 289 | +pub enum ExpansionBayIssue { |
| 290 | + NoModule, |
| 291 | + BadConnection(u8, u8), |
284 | 292 | }
|
285 | 293 |
|
286 | 294 | // pub to disable unused warnings
|
@@ -322,12 +330,17 @@ impl EcResponseExpansionBayStatus {
|
322 | 330 | pub fn hatch_switch_closed(&self) -> bool {
|
323 | 331 | self.state & (ExpansionByStates::HatchSwitchClosed as u8) != 0
|
324 | 332 | }
|
325 |
| - pub fn expansion_bay_board(&self) -> Option<ExpansionBayBoard> { |
| 333 | + pub fn expansion_bay_board(&self) -> Result<ExpansionBayBoard, ExpansionBayIssue> { |
326 | 334 | match (self.board_id_1, self.board_id_0) {
|
327 |
| - (BOARD_VERSION_12, BOARD_VERSION_12) => Some(ExpansionBayBoard::DualInterposer), |
328 |
| - (BOARD_VERSION_11, BOARD_VERSION_15) => Some(ExpansionBayBoard::SingleInterposer), |
329 |
| - (BOARD_VERSION_15, BOARD_VERSION_15) => None, |
330 |
| - _ => Some(ExpansionBayBoard::Invalid), |
| 335 | + (BOARD_VERSION_12, BOARD_VERSION_12) => Ok(ExpansionBayBoard::DualInterposer), |
| 336 | + (BOARD_VERSION_13, BOARD_VERSION_15) => Ok(ExpansionBayBoard::UmaFans), |
| 337 | + (BOARD_VERSION_11, BOARD_VERSION_15) => Ok(ExpansionBayBoard::SingleInterposer), |
| 338 | + (BOARD_VERSION_15, BOARD_VERSION_15) => Err(ExpansionBayIssue::NoModule), |
| 339 | + // Invalid board IDs. Something wrong, could be interposer not connected |
| 340 | + _ => Err(ExpansionBayIssue::BadConnection( |
| 341 | + self.board_id_1, |
| 342 | + self.board_id_0, |
| 343 | + )), |
331 | 344 | }
|
332 | 345 | }
|
333 | 346 | }
|
@@ -391,6 +404,18 @@ impl EcResponseGetHwDiag {
|
391 | 404 | )
|
392 | 405 | }
|
393 | 406 | }
|
| 407 | +impl fmt::Display for EcResponseGetHwDiag { |
| 408 | + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 409 | + let (left_fan, right_fan) = self.fan_fault(); |
| 410 | + write!( |
| 411 | + f, |
| 412 | + "BIOS Done: {}, Fan Fault Left: {}, Right: {}", |
| 413 | + self.bios_complete != 0, |
| 414 | + left_fan, |
| 415 | + right_fan |
| 416 | + ) |
| 417 | + } |
| 418 | +} |
394 | 419 |
|
395 | 420 | impl EcRequest<EcResponseGetHwDiag> for EcRequestGetHwDiag {
|
396 | 421 | fn command_id() -> EcCommands {
|
|
0 commit comments