Add digital volume control.

This commit is contained in:
sorgelig
2018-01-30 20:56:51 +08:00
parent 6981185a7c
commit 16dfe44aa2
4 changed files with 68 additions and 0 deletions

6
menu.c
View File

@@ -3543,6 +3543,12 @@ void InfoMessage(char *message)
menustate = MENU_INFO;
}
void InfoMessageEx(char *message, int timeout)
{
InfoMessage(message);
menu_timer = GetTimer(timeout);
}
void EjectAllFloppies()
{
char i;

1
menu.h
View File

@@ -19,6 +19,7 @@ void PrintDirectory(void);
void ScrollLongName(void);
void ErrorMessage(const char *message, unsigned char code);
void InfoMessage(char *message);
void InfoMessageEx(char *message, int timeout);
void ShowSplash();
void HideSplash();
void EjectAllFloppies();

View File

@@ -29,6 +29,9 @@
#define BREAK 0x8000
uint8_t vol_att = 0;
unsigned long vol_set_timeout = 0;
fileTYPE sd_image[4] = { 0 };
// mouse and keyboard emulation state
@@ -365,6 +368,9 @@ void user_io_init()
MiSTer_ini_parse();
parse_video_mode();
FileLoadConfig("Volume.dat", &vol_att, 1);
vol_att &= 0x1F;
spi_uio_cmd8(UIO_AUDVOL, vol_att);
user_io_send_buttons(1);
switch (core_type)
@@ -1520,6 +1526,12 @@ void user_io_poll()
{
reboot(1);
}
if (vol_set_timeout && CheckTimer(vol_set_timeout))
{
vol_set_timeout = 0;
FileSaveConfig("Volume.dat", &vol_att, 1);
}
}
char user_io_dip_switch1()
@@ -1786,8 +1798,56 @@ static char key_used_by_osd(uint32_t s)
return osd_is_visible;
}
void set_volume()
{
vol_set_timeout = GetTimer(1000);
spi_uio_cmd8(UIO_AUDVOL, vol_att);
if (vol_att & 0x10)
{
InfoMessageEx("\n\n Audio muted", 1000);
}
else
{
char str[64];
memset(str, 0, sizeof(str));
int vol = vol_att & 0xf;
sprintf(str, "\n\n Volume %ddb\n ", -3*vol);
if(vol<15) memset(str + strlen(str), 0x7f, 15-vol);
InfoMessageEx(str, 1000);
}
}
void user_io_kbd(uint16_t key, int press)
{
if (key == KEY_MUTE)
{
if (press == 1 && !is_menu_core())
{
vol_att ^= 0x10;
set_volume();
}
}
else
if (key == KEY_VOLUMEDOWN)
{
if (press && !is_menu_core())
{
if((vol_att & 0xF) < 15 && !(vol_att & 0x10)) vol_att += 1;
set_volume();
}
}
else
if (key == KEY_VOLUMEUP)
{
if (press && !is_menu_core())
{
if(vol_att & 0xF && !(vol_att & 0x10)) vol_att -= 1;
set_volume();
}
}
else
if ((core_type == CORE_TYPE_MINIMIG2) ||
(core_type == CORE_TYPE_MIST) ||
(core_type == CORE_TYPE_ARCHIE) ||

View File

@@ -58,6 +58,7 @@
#define UIO_GET_VRES 0x23 // get video resolution
#define UIO_TIMESTAMP 0x24 // transmit seconds since Unix epoch
#define UIO_LEDS 0x25 // control on-board LEDs
#define UIO_AUDVOL 0x26 // Digital volume as a number of bits to shift to the right
// codes as used by 8bit for file loading from OSD
#define UIO_FILE_TX 0x53