[NTVDM]: Reorganize code.
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 27 Sep 2014 19:16:55 +0000 (19:16 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 27 Sep 2014 19:16:55 +0000 (19:16 +0000)
svn path=/trunk/; revision=64350

reactos/subsystems/ntvdm/hardware/speaker.c

index 46eb09e..5fc5fb4 100644 (file)
@@ -34,6 +34,31 @@ static PIT_MODE OldMode = 0;
 
 /* 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)
 {
     BYTE    Port61hState = IOReadB(CONTROL_SYSTEM_PORT61H);
@@ -42,15 +67,14 @@ VOID SpeakerChange(VOID)
 
     if (PitChannel2 && IsConnectedToPITChannel2 && SpeakerDataOn)
     {
-        /* Start beeping - Adapted from kernel32:Beep() */
-        NTSTATUS Status;
-        IO_STATUS_BLOCK IoStatusBlock;
-        BEEP_SET_PARAMETERS BeepSetParameters;
+        /* Start beeping */
+
+        DWORD Frequency, Duration;
 
         DWORD PitChannel2ReloadValue = PitChannel2->ReloadValue;
         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)
             return;
@@ -58,63 +82,21 @@ VOID SpeakerChange(VOID)
         OldMode = PitChannel2->Mode;
         OldReloadValue = PitChannel2ReloadValue;
 
-        DPRINT("(2) PitChannel2(Bcd = %s, Mode = %d ; ReloadValue = %d)\n", PitChannel2->Bcd ? "true" : "false", PitChannel2->Mode, PitChannel2ReloadValue);
-
-        /* Set beep data */
-        BeepSetParameters.Frequency = (PIT_BASE_FREQUENCY / PitChannel2ReloadValue);
-        BeepSetParameters.Duration  = INFINITE;
-
-        /* 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);
-        }
+        DPRINT("(2) PitChannel2(Mode = %d ; ReloadValue = %d)\n", PitChannel2->Mode, PitChannel2ReloadValue);
+
+        Frequency = (PIT_BASE_FREQUENCY / PitChannel2ReloadValue);
+        Duration  = INFINITE;
+
+        PlaySound(Frequency, Duration);
     }
     else
     {
         /* Stop beeping */
-        NTSTATUS Status;
-        IO_STATUS_BLOCK IoStatusBlock;
-        BEEP_SET_PARAMETERS BeepSetParameters;
 
         OldMode = 0;
         OldReloadValue = 0;
 
-        /* Set beep data */
-        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);
-        }
+        PlaySound(0x00, 0x00);
     }
 }
 
@@ -127,11 +109,6 @@ VOID SpeakerInitialize(VOID)
 
     /* 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 */
     RtlInitUnicodeString(&BeepDevice, L"\\Device\\Beep");
     InitializeObjectAttributes(&ObjectAttributes, &BeepDevice, 0, NULL, NULL);