Display OSD notification on VGA output when FB is active.

This commit is contained in:
sorgelig
2019-06-10 22:16:29 +08:00
parent 1be6234869
commit 5552d916ab
3 changed files with 52 additions and 4 deletions

View File

@@ -1013,10 +1013,39 @@ void HandleUI(void)
case MENU_NONE1:
helptext = helptexts[HELPTEXT_NONE];
menumask = 0;
OsdDisable();
menustate = MENU_NONE2;
OsdSetSize(8);
firstmenu = 0;
if (video_fb_state())
{
EnableOsd_on(OSD_VGA);
OsdSetSize(16);
OsdSetTitle("Information");
int n = 0;
OsdWrite(n++);
OsdWrite(n++);
OsdWrite(n++);
OsdWrite(n++);
OsdWrite(n++, " If you see this, then you");
OsdWrite(n++, " need to modify MiSTer.ini");
OsdWrite(n++);
OsdWrite(n++, " Either disable framebuffer:");
OsdWrite(n++, " fb_terminal=0");
OsdWrite(n++);
OsdWrite(n++, " or enable scaler on VGA:");
OsdWrite(n++, " vga_scaler=1");
for (; n < OsdGetSize(); n++) OsdWrite(n);
OsdEnable(0);
EnableOsd_on(OSD_HDMI);
OsdDisable();
EnableOsd_on(OSD_ALL);
}
else
{
OsdDisable();
}
OsdSetSize(8);
break;
case MENU_INFO:

18
spi.cpp
View File

@@ -72,14 +72,28 @@ void DisableFpga()
spi_en(SSPI_FPGA_EN, 0);
}
static int osd_target = OSD_ALL;
void EnableOsd_on(int target)
{
if (!(target & OSD_ALL)) target = OSD_ALL;
osd_target = target;
}
void EnableOsd()
{
spi_en(SSPI_OSD_EN, 1);
if (!(osd_target & OSD_ALL)) osd_target = OSD_ALL;
uint32_t mask = SSPI_OSD_EN | SSPI_IO_EN | SSPI_FPGA_EN;
if (osd_target & OSD_HDMI) mask &= ~SSPI_FPGA_EN;
if (osd_target & OSD_VGA) mask &= ~SSPI_IO_EN;
spi_en(mask, 1);
}
void DisableOsd()
{
spi_en(SSPI_OSD_EN, 0);
spi_en(SSPI_OSD_EN | SSPI_IO_EN | SSPI_FPGA_EN, 0);
}
void EnableIO()

5
spi.h
View File

@@ -3,6 +3,10 @@
#include <inttypes.h>
#define OSD_HDMI 1
#define OSD_VGA 2
#define OSD_ALL (OSD_VGA|OSD_HDMI)
/* main init functions */
void spi_init(int enable);
@@ -40,6 +44,7 @@ void spi_block_write_16be(const uint16_t *addr);
void spi_block_read_16be(uint16_t *addr);
/* OSD related SPI functions */
void EnableOsd_on(int target);
void spi_osd_cmd_cont(uint8_t cmd);
void spi_osd_cmd(uint8_t cmd);
void spi_osd_cmd8_cont(uint8_t cmd, uint8_t parm);