mirror of
https://github.com/reactos/reactos.git
synced 2025-05-23 19:14:48 +00:00
[NTVDM]: Reorganize code.
svn path=/trunk/; revision=64350
This commit is contained in:
parent
eefaa02286
commit
ad444d44ac
1 changed files with 34 additions and 57 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue