use crate::wire::{
DeviceUid, MultiviewerAspectRatio, MultiviewerBool, MultiviewerEdidTemplate,
MultiviewerHdcpMode, MultiviewerItcMode, MultiviewerOutputMode, MultiviewerPipPosition,
MultiviewerPipSize, MultiviewerSource, MultiviewerViewMode,
};
pub const MULTIVIEWER_INPUTS: usize = 4;
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct MultiviewerStatus {
pub uid: DeviceUid,
pub mappings: [DeviceUid; MULTIVIEWER_INPUTS],
pub mcu_version: String,
pub scaler_version: String,
pub hw_view_mode: u8,
pub view_mode: MultiviewerViewMode,
pub pip_position: MultiviewerPipPosition,
pub pip_size: MultiviewerPipSize,
pub output_mode: MultiviewerOutputMode,
pub hdcp_mode: MultiviewerHdcpMode,
pub output_itc: MultiviewerItcMode,
pub edid_template: MultiviewerEdidTemplate,
pub aspect_ratio: MultiviewerAspectRatio,
pub auto_switch: MultiviewerBool,
pub audio_source: MultiviewerSource,
pub audio_volume: Option<u8>,
pub audio_muted: MultiviewerBool,
pub video_sources: [MultiviewerSource; MULTIVIEWER_INPUTS],
pub remote_control: MultiviewerSource,
}
const WINDOWS_PER_HW_VIEW_MODE: [u8; 6] = [0, 1, 2, 2, 3, 4];
impl MultiviewerStatus {
pub fn window_count(&self) -> Option<u8> {
WINDOWS_PER_HW_VIEW_MODE
.get(usize::from(self.hw_view_mode))
.copied()
.filter(|count| *count != 0)
}
}