[NTVDM]: Reorganize code.

svn path=/trunk/; revision=64350
This commit is contained in:
Hermès Bélusca-Maïto 2014-09-27 19:16:55 +00:00
parent eefaa02286
commit ad444d44ac

View file

@ -34,6 +34,31 @@ static PIT_MODE OldMode = 0;
/* PUBLIC FUNCTIONS ***********************************************************/ /* PUBLIC FUNCTIONS ***********************************************************/
VOID PlaySound(DWORD Frequency,
DWORD Duration)
{
/* Adapted from kernel32:Beep() */
IO_STATUS_BLOCK IoStatusBlock;
BEEP_SET_PARAMETERS BeepSetParameters;
/* Set beep data */
BeepSetParameters.Frequency = Frequency;
BeepSetParameters.Duration = Duration;
/* Send the beep */
NtDeviceIoControlFile(hBeep,
NULL,
NULL,
NULL,
&IoStatusBlock,
IOCTL_BEEP_SET,
&BeepSetParameters,
sizeof(BeepSetParameters),
NULL,
0);
}
VOID SpeakerChange(VOID) VOID SpeakerChange(VOID)
{ {
BYTE Port61hState = IOReadB(CONTROL_SYSTEM_PORT61H); BYTE Port61hState = IOReadB(CONTROL_SYSTEM_PORT61H);
@ -42,15 +67,14 @@ VOID SpeakerChange(VOID)
if (PitChannel2 && IsConnectedToPITChannel2 && SpeakerDataOn) if (PitChannel2 && IsConnectedToPITChannel2 && SpeakerDataOn)
{ {
/* Start beeping - Adapted from kernel32:Beep() */ /* Start beeping */
NTSTATUS Status;
IO_STATUS_BLOCK IoStatusBlock; DWORD Frequency, Duration;
BEEP_SET_PARAMETERS BeepSetParameters;
DWORD PitChannel2ReloadValue = PitChannel2->ReloadValue; DWORD PitChannel2ReloadValue = PitChannel2->ReloadValue;
if (PitChannel2ReloadValue == 0) PitChannel2ReloadValue = 65536; if (PitChannel2ReloadValue == 0) PitChannel2ReloadValue = 65536;
DPRINT("(1) PitChannel2(Bcd = %s, Mode = %d ; ReloadValue = %d)\n", PitChannel2->Bcd ? "true" : "false", PitChannel2->Mode, PitChannel2ReloadValue); DPRINT("(1) PitChannel2(Mode = %d ; ReloadValue = %d)\n", PitChannel2->Mode, PitChannel2ReloadValue);
if (OldMode == PitChannel2->Mode && OldReloadValue == PitChannel2ReloadValue) if (OldMode == PitChannel2->Mode && OldReloadValue == PitChannel2ReloadValue)
return; return;
@ -58,63 +82,21 @@ VOID SpeakerChange(VOID)
OldMode = PitChannel2->Mode; OldMode = PitChannel2->Mode;
OldReloadValue = PitChannel2ReloadValue; OldReloadValue = PitChannel2ReloadValue;
DPRINT("(2) PitChannel2(Bcd = %s, Mode = %d ; ReloadValue = %d)\n", PitChannel2->Bcd ? "true" : "false", PitChannel2->Mode, PitChannel2ReloadValue); DPRINT("(2) PitChannel2(Mode = %d ; ReloadValue = %d)\n", PitChannel2->Mode, PitChannel2ReloadValue);
/* Set beep data */ Frequency = (PIT_BASE_FREQUENCY / PitChannel2ReloadValue);
BeepSetParameters.Frequency = (PIT_BASE_FREQUENCY / PitChannel2ReloadValue); Duration = INFINITE;
BeepSetParameters.Duration = INFINITE;
/* Send the beep */ PlaySound(Frequency, Duration);
Status = NtDeviceIoControlFile(hBeep,
NULL,
NULL,
NULL,
&IoStatusBlock,
IOCTL_BEEP_SET,
&BeepSetParameters,
sizeof(BeepSetParameters),
NULL,
0);
if (!NT_SUCCESS(Status))
{
DPRINT1("Beep (%lu, %lu) failed, Status 0x%08lx\n",
BeepSetParameters.Frequency,
BeepSetParameters.Duration,
Status);
}
} }
else else
{ {
/* Stop beeping */ /* Stop beeping */
NTSTATUS Status;
IO_STATUS_BLOCK IoStatusBlock;
BEEP_SET_PARAMETERS BeepSetParameters;
OldMode = 0; OldMode = 0;
OldReloadValue = 0; OldReloadValue = 0;
/* Set beep data */ PlaySound(0x00, 0x00);
BeepSetParameters.Frequency = 0x00;
BeepSetParameters.Duration = 0x00;
/* Send the beep */
Status = NtDeviceIoControlFile(hBeep,
NULL,
NULL,
NULL,
&IoStatusBlock,
IOCTL_BEEP_SET,
&BeepSetParameters,
sizeof(BeepSetParameters),
NULL,
0);
if (!NT_SUCCESS(Status))
{
DPRINT1("Beep (%lu, %lu) failed, Status 0x%08lx\n",
BeepSetParameters.Frequency,
BeepSetParameters.Duration,
Status);
}
} }
} }
@ -127,11 +109,6 @@ VOID SpeakerInitialize(VOID)
/* Adapted from kernel32:Beep() */ /* Adapted from kernel32:Beep() */
//
// On TS systems, we need to Load Winsta.dll and call WinstationBeepOpen
// after doing a GetProcAddress for it
//
/* Open the device */ /* Open the device */
RtlInitUnicodeString(&BeepDevice, L"\\Device\\Beep"); RtlInitUnicodeString(&BeepDevice, L"\\Device\\Beep");
InitializeObjectAttributes(&ObjectAttributes, &BeepDevice, 0, NULL, NULL); InitializeObjectAttributes(&ObjectAttributes, &BeepDevice, 0, NULL, NULL);