Bladeren bron

Report current CD player volume level in MODE SELECT

saybur 2 jaren geleden
bovenliggende
commit
46b7d77b40
1 gewijzigde bestanden met toevoegingen van 23 en 0 verwijderingen
  1. 23 0
      src/BlueSCSI_mode.cpp

+ 23 - 0
src/BlueSCSI_mode.cpp

@@ -25,6 +25,9 @@
 #include <stdint.h>
 #include <string.h>
 
+#ifdef ENABLE_AUDIO_OUTPUT
+#include "BlueSCSI_audio.h"
+#endif
 #include "BlueSCSI_cdrom.h"
 
 extern "C" {
@@ -101,6 +104,26 @@ int modeSenseCDAudioControlPage(int pc, int idx, int pageCode, int* pageFound)
             idx,
             CDROMAudioControlParametersPage,
             sizeof(CDROMAudioControlParametersPage));
+        if (pc == 0x00)
+        {
+            // report current volume level
+            scsiDev.data[idx+9] = audio_get_volume(scsiDev.target->targetId);
+            scsiDev.data[idx+11] = audio_get_volume(scsiDev.target->targetId);
+        }
+        else if (pc == 0x01)
+        {
+            // report bits that can be set
+            scsiDev.data[idx+9] = 0xFF;
+            scsiDev.data[idx+11] = 0xFF;
+        }
+        else
+        {
+            // report defaults for 0x02
+            // also report same for 0x03, though we are actually supposed
+            // to terminate with CHECK CONDITION and SAVING PARAMETERS NOT SUPPORTED
+            scsiDev.data[idx+9] = DEFAULT_VOLUME_LEVEL;
+            scsiDev.data[idx+11] = DEFAULT_VOLUME_LEVEL;
+        }
         return sizeof(CDROMAudioControlParametersPage);
     }
     else