| 79 | } |
| 80 | |
| 81 | void execute(vuart_av_thread &vuart, const void *pkt_buf) override { |
| 82 | const auto pkt = static_cast<const ps3av_get_monitor_info *>(pkt_buf); |
| 83 | |
| 84 | if (vuart.get_reply_buf_free_size() < sizeof(ps3av_pkt_reply_hdr)) { |
| 85 | vuart.write_resp(pkt->hdr.cid, PS3AV_STATUS_BUFFER_OVERFLOW); |
| 86 | return; |
| 87 | } |
| 88 | |
| 89 | ps3av_get_monitor_info_reply cfg{}; |
| 90 | |
| 91 | if (pkt->avport == static_cast<u16>(UartAudioAvport::AVMULTI_0)) { |
| 92 | cfg.avport = static_cast<u8>(UartAudioAvport::AVMULTI_0); |
| 93 | cfg.monitor_type = PS3AV_MONITOR_TYPE_AVMULTI; |
| 94 | cfg.res_60.res_bits = UINT32_MAX; |
| 95 | cfg.res_50.res_bits = UINT32_MAX; |
| 96 | cfg.res_vesa.res_bits = UINT32_MAX; |
| 97 | cfg.cs.rgb = PS3AV_CS_SUPPORTED; |
| 98 | cfg.cs.yuv444 = PS3AV_CS_SUPPORTED; |
| 99 | cfg.cs.yuv422 = PS3AV_CS_SUPPORTED; |
| 100 | cfg.speaker_info = 1; |
| 101 | cfg.num_of_audio_block = 1; |
| 102 | cfg.audio_info[0].sbit = 7; |
| 103 | cfg.audio_info[0].max_num_of_ch = 2; |
| 104 | cfg.audio_info[0].type = PS3AV_MON_INFO_AUDIO_TYPE_LPCM; |
| 105 | cfg.audio_info[0].fs = 127; |
| 106 | |
| 107 | vuart.write_resp(pkt->hdr.cid, PS3AV_STATUS_SUCCESS, &cfg, |
| 108 | sizeof(ps3av_get_monitor_info_reply)); |
| 109 | } else if (pkt->avport <= static_cast<u16>(UartAudioAvport::HDMI_1)) { |
| 110 | if (pkt->avport == static_cast<u16>(UartAudioAvport::HDMI_1) && |
| 111 | !g_cfg.core.debug_console_mode) { |
| 112 | vuart.write_resp<true>(pkt->hdr.cid, |
| 113 | PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL); |
| 114 | return; |
| 115 | } |
| 116 | |
| 117 | set_hdmi_display_cfg(vuart, cfg, static_cast<u8>(pkt->avport)); |
| 118 | |
| 119 | vuart.write_resp<true>(pkt->hdr.cid, PS3AV_STATUS_SUCCESS, &cfg, |
| 120 | sizeof(ps3av_get_monitor_info_reply) - |
| 121 | 4); // Length is different for some reason |
| 122 | } else { |
| 123 | vuart.write_resp(pkt->hdr.cid, PS3AV_STATUS_INVALID_PORT); |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | static void set_hdmi_display_cfg(vuart_av_thread &vuart, |
| 128 | ps3av_get_monitor_info_reply &cfg, |
nothing calls this directly
no test coverage detected