OcAudio: Convert from int ids to string ids

This commit is contained in:
MikeBeaton 2022-05-02 15:03:11 +01:00
parent 5c5056694a
commit bcd2558686
16 changed files with 336 additions and 440 deletions

View File

@ -83,4 +83,12 @@ OcAudioDump (
IN EFI_FILE_PROTOCOL *Root
);
//
// Base path and base type for a given APPLE_VOICE_OVER_AUDIO_FILE index.
//
typedef struct {
CONST CHAR8 *BasePath;
CONST CHAR8 *BaseType;
} APPLE_VOICE_OVER_FILE_MAP;
#endif // OC_AUDIO_LIB_H

View File

@ -693,9 +693,10 @@ VOID
typedef
EFI_STATUS
(EFIAPI *OC_PLAY_AUDIO_FILE)(
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File,
IN BOOLEAN Fallback
IN OC_PICKER_CONTEXT *Context,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Fallback
);
/**
@ -726,8 +727,9 @@ EFI_STATUS
typedef
VOID
(EFIAPI *OC_TOGGLE_VOICE_OVER)(
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File OPTIONAL
IN OC_PICKER_CONTEXT *Context,
IN CONST CHAR8 *BasePath OPTIONAL,
IN CONST CHAR8 *BaseType OPTIONAL
);
/**
@ -1629,7 +1631,8 @@ OcRunFirmwareApplication (
Play audio file for context.
@param[in] Context Picker context.
@param[in] File File to play.
@param[in] BasePath File base path.
@param[in] BaseType Audio base type.
@param[in] Fallback Try to fallback to beeps on failure.
@retval EFI_SUCCESS on success or when unnecessary.
@ -1638,7 +1641,8 @@ EFI_STATUS
EFIAPI
OcPlayAudioFile (
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Fallback
);
@ -1680,13 +1684,15 @@ OcPlayAudioEntry (
Toggle VoiceOver support.
@param[in] Context Picker context.
@param[in] File File to play after enabling VoiceOver.
@param[in] BasePath File base path of file to play after enabling VoiceOver.
@param[in] BaseType Audio base type of file to play after enabling VoiceOver.
**/
VOID
EFIAPI
OcToggleVoiceOver (
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File OPTIONAL
IN CONST CHAR8 *BasePath OPTIONAL,
IN CONST CHAR8 *BaseType OPTIONAL
);
/**

View File

@ -19,7 +19,7 @@
#include <Protocol/AppleVoiceOver.h>
#include <Protocol/DevicePath.h>
#define OC_AUDIO_PROTOCOL_REVISION 0x050000
#define OC_AUDIO_PROTOCOL_REVISION 0x060000
//
// OC_AUDIO_PROTOCOL_GUID
@ -31,87 +31,47 @@
typedef struct OC_AUDIO_PROTOCOL_ OC_AUDIO_PROTOCOL;
/**
Voice over base types.
**/
#define OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE "AXEFIAudio"
#define OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE "OCEFIAudio"
/**
Custom OpenCore audio files.
**/
typedef enum {
OcVoiceOverAudioFileBase = 0x1000,
OcVoiceOverAudioFileIndexBase = 0x1000,
OcVoiceOverAudioFile1 = 0x1001,
OcVoiceOverAudioFile2 = 0x1002,
OcVoiceOverAudioFile3 = 0x1003,
OcVoiceOverAudioFile4 = 0x1004,
OcVoiceOverAudioFile5 = 0x1005,
OcVoiceOverAudioFile6 = 0x1006,
OcVoiceOverAudioFile7 = 0x1007,
OcVoiceOverAudioFile8 = 0x1008,
OcVoiceOverAudioFile9 = 0x1009,
OcVoiceOverAudioFileIndexAlphabetical = 0x100A,
OcVoiceOverAudioFileLetterA = 0x100A,
OcVoiceOverAudioFileLetterB = 0x100B,
OcVoiceOverAudioFileLetterC = 0x100C,
OcVoiceOverAudioFileLetterD = 0x100D,
OcVoiceOverAudioFileLetterE = 0x100E,
OcVoiceOverAudioFileLetterF = 0x100F,
OcVoiceOverAudioFileLetterG = 0x1010,
OcVoiceOverAudioFileLetterH = 0x1011,
OcVoiceOverAudioFileLetterI = 0x1012,
OcVoiceOverAudioFileLetterJ = 0x1013,
OcVoiceOverAudioFileLetterK = 0x1014,
OcVoiceOverAudioFileLetterL = 0x1015,
OcVoiceOverAudioFileLetterM = 0x1016,
OcVoiceOverAudioFileLetterN = 0x1017,
OcVoiceOverAudioFileLetterO = 0x1018,
OcVoiceOverAudioFileLetterP = 0x1019,
OcVoiceOverAudioFileLetterQ = 0x101A,
OcVoiceOverAudioFileLetterR = 0x101B,
OcVoiceOverAudioFileLetterS = 0x101C,
OcVoiceOverAudioFileLetterT = 0x101D,
OcVoiceOverAudioFileLetterU = 0x101E,
OcVoiceOverAudioFileLetterV = 0x101F,
OcVoiceOverAudioFileLetterW = 0x1020,
OcVoiceOverAudioFileLetterX = 0x1021,
OcVoiceOverAudioFileLetterY = 0x1022,
OcVoiceOverAudioFileLetterZ = 0x1023,
OcVoiceOverAudioFileIndexMax = 0x1023,
OcVoiceOverAudioFileAbortTimeout = 0x1030,
OcVoiceOverAudioFileChooseOS = 0x1031,
OcVoiceOverAudioFileDefault = 0x1032,
OcVoiceOverAudioFileDiskImage = 0x1033,
OcVoiceOverAudioFileEnterPassword = 0x1034,
OcVoiceOverAudioFileExecutionFailure = 0x1035,
OcVoiceOverAudioFileExecutionSuccessful = 0x1036,
OcVoiceOverAudioFileExternal = 0x1037,
OcVoiceOverAudioFileExternalOS = 0x1038,
OcVoiceOverAudioFileExternalTool = 0x1039,
OcVoiceOverAudioFileLoading = 0x103A,
OcVoiceOverAudioFilemacOS = 0x103B,
OcVoiceOverAudioFilemacOS_Recovery = 0x103C,
OcVoiceOverAudioFilemacOS_TimeMachine = 0x103D,
OcVoiceOverAudioFilemacOS_UpdateFw = 0x103E,
OcVoiceOverAudioFileOtherOS = 0x103F,
OcVoiceOverAudioFilePasswordAccepted = 0x1040,
OcVoiceOverAudioFilePasswordIncorrect = 0x1041,
OcVoiceOverAudioFilePasswordRetryLimit = 0x1042,
OcVoiceOverAudioFileReloading = 0x1043,
OcVoiceOverAudioFileResetNVRAM = 0x1044,
OcVoiceOverAudioFileRestart = 0x1045,
OcVoiceOverAudioFileSelected = 0x1046,
OcVoiceOverAudioFileShowAuxiliary = 0x1047,
OcVoiceOverAudioFileShutDown = 0x1048,
OcVoiceOverAudioFileSIPIsDisabled = 0x1049,
OcVoiceOverAudioFileSIPIsEnabled = 0x104A,
OcVoiceOverAudioFileTimeout = 0x104B,
OcVoiceOverAudioFileUEFI_Shell = 0x104C,
OcVoiceOverAudioFileWelcome = 0x104D,
OcVoiceOverAudioFileWindows = 0x104E,
OcVoiceOverAudioFileMax = 0x104F,
} OC_VOICE_OVER_AUDIO_FILE;
STATIC_ASSERT (OcVoiceOverAudioFileIndexMax - OcVoiceOverAudioFileIndexBase == 9 + 26, "Invalid index count");
#define OC_VOICE_OVER_AUDIO_FILE_ABORT_TIMEOUT "AbortTimeout"
#define OC_VOICE_OVER_AUDIO_FILE_CHOOSE_OS "ChooseOS"
#define OC_VOICE_OVER_AUDIO_FILE_DEFAULT "Default"
#define OC_VOICE_OVER_AUDIO_FILE_DISK_IMAGE "DiskImage"
#define OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD "EnterPassword"
#define OC_VOICE_OVER_AUDIO_FILE_EXECUTION_FAILURE "ExecutionFailure"
#define OC_VOICE_OVER_AUDIO_FILE_EXECUTION_SUCCESSFUL "ExecutionSuccessful"
#define OC_VOICE_OVER_AUDIO_FILE_EXTERNAL "External"
#define OC_VOICE_OVER_AUDIO_FILE_EXTERNAL_OS "ExternalOS"
#define OC_VOICE_OVER_AUDIO_FILE_EXTERNAL_TOOL "ExternalTool"
#define OC_VOICE_OVER_AUDIO_FILE_LOADING "Loading"
#define OC_VOICE_OVER_AUDIO_FILE_MAC_OS "macOS"
#define OC_VOICE_OVER_AUDIO_FILE_MAC_OS_RECOVERY "macOS_Recovery"
#define OC_VOICE_OVER_AUDIO_FILE_MAC_OS_TIME_MACHINE "macOS_TimeMachine"
#define OC_VOICE_OVER_AUDIO_FILE_MAC_OS_UPDATE_FW "macOS_UpdateFw"
#define OC_VOICE_OVER_AUDIO_FILE_OTHER_OS "OtherOS"
#define OC_VOICE_OVER_AUDIO_FILE_PASSWORD_ACCEPTED "PasswordAccepted"
#define OC_VOICE_OVER_AUDIO_FILE_PASSWORD_INCORRECT "PasswordIncorrect"
#define OC_VOICE_OVER_AUDIO_FILE_PASSWORD_RETRY_LIMIT "PasswordRetryLimit"
#define OC_VOICE_OVER_AUDIO_FILE_RELOADING "Reloading"
#define OC_VOICE_OVER_AUDIO_FILE_RESET_NVRAM "ResetNVRAM"
#define OC_VOICE_OVER_AUDIO_FILE_RESTART "Restart"
#define OC_VOICE_OVER_AUDIO_FILE_SELECTED "Selected"
#define OC_VOICE_OVER_AUDIO_FILE_SHOW_AUXILIARY "ShowAuxiliary"
#define OC_VOICE_OVER_AUDIO_FILE_SHUT_DOWN "ShutDown"
#define OC_VOICE_OVER_AUDIO_FILE_SIP_IS_DISABLED "SIPIsDisabled"
#define OC_VOICE_OVER_AUDIO_FILE_SIP_IS_ENABLED "SIPIsEnabled"
#define OC_VOICE_OVER_AUDIO_FILE_TIMEOUT "Timeout"
#define OC_VOICE_OVER_AUDIO_FILE_UEFI_SHELL "UEFI_Shell"
#define OC_VOICE_OVER_AUDIO_FILE_VOICE_OVER_BOOT "VoiceOver_Boot"
#define OC_VOICE_OVER_AUDIO_FILE_WELCOME "Welcome"
#define OC_VOICE_OVER_AUDIO_FILE_WINDOWS "Windows"
/**
Connect to Audio I/O.
@ -154,7 +114,9 @@ EFI_STATUS
Retrieve file contents callback.
@param[in,out] Context Externally specified context.
@param[in] File File identifier, see APPLE_VOICE_OVER_AUDIO_FILE.
@param[in] BasePath File base path.
@param[in] BaseType Audio base type.
@param[in] Localised Is file localised?
@param[in] LanguageCode Language code for the file.
@param[out] Buffer Pointer to buffer.
@param[out] BufferSize Pointer to buffer size.
@ -168,7 +130,9 @@ typedef
EFI_STATUS
(EFIAPI *OC_AUDIO_PROVIDER_ACQUIRE)(
IN VOID *Context,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN APPLE_VOICE_OVER_LANGUAGE_CODE LanguageCode,
OUT UINT8 **Buffer,
OUT UINT32 *BufferSize,
@ -233,7 +197,9 @@ EFI_STATUS
Play file.
@param[in,out] This Audio protocol instance.
@param[in] File File to play.
@param[in] BasePath File base path.
@param[in] BaseType Audio base type.
@param[in] Localised Is file localised?
@param[in] Gain The amplifier gain (or attenuation if negative) in dB to use, relative to 0 dB level.
@param[in] UseGain If TRUE use provided volume level, otherwise use stored global volume level.
@param[in] Wait Wait for completion of the previous track.
@ -243,11 +209,13 @@ EFI_STATUS
typedef
EFI_STATUS
(EFIAPI *OC_AUDIO_PLAY_FILE)(
IN OUT OC_AUDIO_PROTOCOL *This,
IN UINT32 File,
IN INT8 Gain OPTIONAL,
IN BOOLEAN UseGain,
IN BOOLEAN Wait
IN OUT OC_AUDIO_PROTOCOL *This,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN INT8 Gain OPTIONAL,
IN BOOLEAN UseGain,
IN BOOLEAN Wait
);
/**

View File

@ -41,6 +41,7 @@ typedef struct APPLE_VOICE_OVER_AUDIO_PROTOCOL_ APPLE_VOICE_OVER_AUDIO_PROTOCOL;
Files marked with * are only present on BridgeOS.
**/
typedef enum {
AppleVoiceOverAudioFileIndexLocalisedMin = 0x01, ///< First valid localised file
AppleVoiceOverAudioFileVoiceOverOn = 0x01, ///< VoiceOverOn
AppleVoiceOverAudioFileVoiceOverOff = 0x02, ///< VoiceOverOff
AppleVoiceOverAudioFileUsername = 0x03, ///< Username
@ -48,13 +49,29 @@ typedef enum {
AppleVoiceOverAudioFileUsernameOrPasswordIncorrect = 0x05, ///< UsernameOrPasswordIncorrect
AppleVoiceOverAudioFileAccountLockedTryLater = 0x06, ///< AccountLockedTryLater (*)
AppleVoiceOverAudioFileAccountLocked = 0x07, ///< AccountLocked (*)
AppleVoiceOverAudioFileIndexLocalisedMax = 0x08, ///< After last valid localised file
AppleVoiceOverAudioFileIndexNonLocalisedMin = 0x3B, ///< First valid non-localised file
AppleVoiceOverAudioFileVoiceOverBoot = 0x3B, ///< VoiceOver_Boot (*)
AppleVoiceOverAudioFileVoiceOverBoot2 = 0x3C, ///< VoiceOver_Boot (*)
AppleVoiceOverAudioFileClick = 0x3D, ///< Click (*)
AppleVoiceOverAudioFileBeep = 0x3E, ///< Beep
AppleVoiceOverAudioFileMax = 0x3F,
AppleVoiceOverAudioFileIndexNonLocalisedMax = 0x3F, ///< After last valid non-localised file
} APPLE_VOICE_OVER_AUDIO_FILE;
/**
Corresponding file base names.
**/
#define APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_ON "VoiceOverOn"
#define APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_OFF "VoiceOverOff"
#define APPLE_VOICE_OVER_AUDIO_FILE_USERNAME "Username"
#define APPLE_VOICE_OVER_AUDIO_FILE_PASSWORD "Password"
#define APPLE_VOICE_OVER_AUDIO_FILE_USERNAME_OR_PASSWORD_INCORRECT "UsernameOrPasswordIncorrect"
#define APPLE_VOICE_OVER_AUDIO_FILE_ACCOUNT_LOCKED_TRY_LATER "AccountLockedTryLater"
#define APPLE_VOICE_OVER_AUDIO_FILE_ACCOUNT_LOCKED "AccountLocked"
#define APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_BOOT "VoiceOver_Boot"
#define APPLE_VOICE_OVER_AUDIO_FILE_CLICK "Click"
#define APPLE_VOICE_OVER_AUDIO_FILE_BEEP "Beep"
/**
VoiceOver language codes.
**/

View File

@ -353,7 +353,9 @@ EFI_STATUS
EFIAPI
InternalOcAudioPlayFile (
IN OUT OC_AUDIO_PROTOCOL *This,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN INT8 Gain OPTIONAL,
IN BOOLEAN UseGain,
IN BOOLEAN Wait
@ -377,7 +379,9 @@ InternalOcAudioPlayFile (
Status = Private->ProviderAcquire (
Private->ProviderContext,
File,
BasePath,
BaseType,
Localised,
Private->Language,
&RawBuffer,
&RawBufferSize,
@ -387,14 +391,15 @@ InternalOcAudioPlayFile (
);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAU: PlayFile has no file %d for lang %d - %r\n", File, Private->Language, Status));
DEBUG ((DEBUG_INFO, "OCAU: PlayFile has no file %a for type %a lang %u - %r\n", BasePath, BaseType, Private->Language, Status));
return EFI_NOT_FOUND;
}
DEBUG ((
DEBUG_INFO,
"OCAU: File %d for lang %d is %d %d %d (%u) - %r\n",
File,
"OCAU: File %a for type %a lang %u is %d %d %d (%u) - %r\n",
BasePath,
BaseType,
Private->Language,
Frequency,
Bits,
@ -404,7 +409,7 @@ InternalOcAudioPlayFile (
));
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAU: PlayFile has invalid file %d for lang %d - %r\n", File, Private->Language, Status));
DEBUG ((DEBUG_INFO, "OCAU: PlayFile has invalid file %a for type %a lang %u - %r\n", BasePath, BaseType, Private->Language, Status));
if (Private->ProviderRelease != NULL) {
Private->ProviderRelease (Private->ProviderContext, RawBuffer);
}

View File

@ -94,7 +94,9 @@ EFI_STATUS
EFIAPI
InternalOcAudioPlayFile (
IN OUT OC_AUDIO_PROTOCOL *This,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN INT8 Gain OPTIONAL,
IN BOOLEAN UseGain,
IN BOOLEAN Wait

View File

@ -27,6 +27,65 @@
#include "OcAudioInternal.h"
//
// Convert from Apple file id to file base name and type.
//
STATIC
CONST
APPLE_VOICE_OVER_FILE_MAP
mAppleVoiceOverLocalisedAudioFiles[AppleVoiceOverAudioFileIndexLocalisedMax - AppleVoiceOverAudioFileIndexLocalisedMin] = {
[AppleVoiceOverAudioFileVoiceOverOn - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_ON,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileVoiceOverOff - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_OFF,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileUsername - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_USERNAME,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFilePassword - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_PASSWORD,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileUsernameOrPasswordIncorrect - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_USERNAME_OR_PASSWORD_INCORRECT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileAccountLockedTryLater - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_ACCOUNT_LOCKED_TRY_LATER,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileAccountLocked - AppleVoiceOverAudioFileIndexLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_ACCOUNT_LOCKED,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
}
};
STATIC
CONST
APPLE_VOICE_OVER_FILE_MAP
mAppleVoiceOverNonLocalisedAudioFiles[AppleVoiceOverAudioFileIndexNonLocalisedMax - AppleVoiceOverAudioFileIndexNonLocalisedMin] = {
[AppleVoiceOverAudioFileVoiceOverBoot - AppleVoiceOverAudioFileIndexNonLocalisedMin] = {
OC_VOICE_OVER_AUDIO_FILE_VOICE_OVER_BOOT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE
},
[AppleVoiceOverAudioFileVoiceOverBoot2 - AppleVoiceOverAudioFileIndexNonLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_VOICE_OVER_BOOT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileClick - AppleVoiceOverAudioFileIndexNonLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_CLICK,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
},
[AppleVoiceOverAudioFileBeep - AppleVoiceOverAudioFileIndexNonLocalisedMin] = {
APPLE_VOICE_OVER_AUDIO_FILE_BEEP,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE
}
};
STATIC CONST CHAR8 *mLanguagePairing[] = {
NULL,
"ar",
@ -128,10 +187,31 @@ InternalOcAudioVoiceOverPlay (
IN UINT8 File
)
{
OC_AUDIO_PROTOCOL_PRIVATE *Private;
OC_AUDIO_PROTOCOL_PRIVATE *Private;
CONST APPLE_VOICE_OVER_FILE_MAP *Map;
BOOLEAN Localised;
Localised = FALSE;
Map = NULL;
if ( (File >= AppleVoiceOverAudioFileIndexLocalisedMin)
&& (File < AppleVoiceOverAudioFileIndexLocalisedMax))
{
Localised = TRUE;
Map = &mAppleVoiceOverLocalisedAudioFiles[File - AppleVoiceOverAudioFileIndexLocalisedMin];
} else if ( (File >= AppleVoiceOverAudioFileIndexNonLocalisedMin)
&& (File < AppleVoiceOverAudioFileIndexNonLocalisedMax))
{
Map = &mAppleVoiceOverNonLocalisedAudioFiles[File - AppleVoiceOverAudioFileIndexNonLocalisedMin];
}
if ((Map == NULL) || (Map->BasePath == NULL) || (Map->BaseType == NULL)) {
DEBUG ((DEBUG_INFO, "OCAU: Unsupported Apple voice over file index %u\n", File));
return EFI_UNSUPPORTED;
}
Private = OC_AUDIO_PROTOCOL_PRIVATE_FROM_VOICE_OVER (This);
return Private->OcAudio.PlayFile (&Private->OcAudio, File, 0, FALSE, TRUE);
return Private->OcAudio.PlayFile (&Private->OcAudio, Map->BasePath, Map->BaseType, Localised, 0, FALSE, TRUE);
}
EFI_STATUS

View File

@ -52,7 +52,8 @@ EFI_STATUS
EFIAPI
OcPlayAudioFile (
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Fallback
)
{
@ -74,65 +75,61 @@ OcPlayAudioFile (
}
if (Context->OcAudio != NULL) {
Status = Context->OcAudio->PlayFile (Context->OcAudio, File, 0, FALSE, TRUE);
Status = Context->OcAudio->PlayFile (Context->OcAudio, BasePath, BaseType, TRUE, 0, FALSE, TRUE);
}
if (Fallback && EFI_ERROR (Status)) {
switch (File) {
case AppleVoiceOverAudioFileBeep:
if (AsciiStrCmp (BaseType, OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE) == 0) {
if (AsciiStrCmp (BasePath, APPLE_VOICE_OVER_AUDIO_FILE_BEEP) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_NORMAL,
OC_VOICE_OVER_SIGNAL_NORMAL_MS,
OC_VOICE_OVER_SILENCE_NORMAL_MS
);
break;
case OcVoiceOverAudioFileEnterPassword:
}
} else if (AsciiStrCmp (BaseType, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE) == 0) {
if (AsciiStrCmp (BasePath, OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_PASSWORD,
OC_VOICE_OVER_SIGNAL_NORMAL_MS,
OC_VOICE_OVER_SILENCE_NORMAL_MS
);
break;
case OcVoiceOverAudioFilePasswordAccepted:
} else if (AsciiStrCmp (BasePath, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_ACCEPTED) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_PASSWORD_OK,
OC_VOICE_OVER_SIGNAL_NORMAL_MS,
OC_VOICE_OVER_SILENCE_NORMAL_MS
);
break;
case OcVoiceOverAudioFilePasswordIncorrect:
} else if (AsciiStrCmp (BasePath, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_INCORRECT) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_ERROR,
OC_VOICE_OVER_SIGNAL_ERROR_MS,
OC_VOICE_OVER_SILENCE_ERROR_MS
);
break;
case OcVoiceOverAudioFilePasswordRetryLimit:
} else if (AsciiStrCmp (BasePath, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_RETRY_LIMIT) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_HWERROR,
OC_VOICE_OVER_SIGNAL_ERROR_MS,
OC_VOICE_OVER_SILENCE_ERROR_MS
);
break;
case OcVoiceOverAudioFileExecutionFailure:
} else if (AsciiStrCmp (BasePath, OC_VOICE_OVER_AUDIO_FILE_EXECUTION_FAILURE) == 0) {
Status = OcPlayAudioBeep (
Context,
OC_VOICE_OVER_SIGNALS_ERROR,
OC_VOICE_OVER_SIGNAL_ERROR_MS,
OC_VOICE_OVER_SIGNAL_NORMAL_MS
);
break;
default:
//
// Should we introduce some special code?
//
break;
}
}
//
// Should we introduce some fallback code?
//
}
return Status;
@ -178,50 +175,61 @@ OcPlayAudioEntry (
IN OC_BOOT_ENTRY *Entry
)
{
OcPlayAudioFile (Context, OcVoiceOverAudioFileIndexBase + Entry->EntryIndex, FALSE);
CHAR8 BasePath[ARRAY_SIZE ("Letter") + 1];
if ((Entry->EntryIndex > 0) && (Entry->EntryIndex <= 9 + 26)) {
OcAsciiSafeSPrint (
BasePath,
sizeof (BasePath),
"%a%c",
Entry->EntryIndex > 9 ? "Letter" : "",
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Entry->EntryIndex]
);
OcPlayAudioFile (Context, BasePath, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
if (Entry->Type == OC_BOOT_APPLE_OS) {
OcPlayAudioFile (Context, OcVoiceOverAudioFilemacOS, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_MAC_OS, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_APPLE_RECOVERY) {
OcPlayAudioFile (Context, OcVoiceOverAudioFilemacOS_Recovery, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_MAC_OS_RECOVERY, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_APPLE_TIME_MACHINE) {
OcPlayAudioFile (Context, OcVoiceOverAudioFilemacOS_TimeMachine, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_MAC_OS_TIME_MACHINE, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_APPLE_FW_UPDATE) {
OcPlayAudioFile (Context, OcVoiceOverAudioFilemacOS_UpdateFw, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_MAC_OS_UPDATE_FW, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_WINDOWS) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileWindows, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_WINDOWS, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_EXTERNAL_OS) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileExternalOS, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_EXTERNAL_OS, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_RESET_NVRAM) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileResetNVRAM, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_RESET_NVRAM, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (Entry->Type == OC_BOOT_TOGGLE_SIP) {
ASSERT (
StrCmp (Entry->Name, OC_MENU_SIP_IS_DISABLED) == 0 ||
StrCmp (Entry->Name, OC_MENU_SIP_IS_ENABLED) == 0
);
if (StrCmp (Entry->Name, OC_MENU_SIP_IS_DISABLED) == 0) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileSIPIsDisabled, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_SIP_IS_DISABLED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else {
OcPlayAudioFile (Context, OcVoiceOverAudioFileSIPIsEnabled, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_SIP_IS_ENABLED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
} else if (Entry->Type == OC_BOOT_EXTERNAL_TOOL) {
if (OcAsciiStriStr (Entry->Flavour, OC_FLAVOUR_ID_RESET_NVRAM) != NULL) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileResetNVRAM, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_RESET_NVRAM, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else if (OcAsciiStriStr (Entry->Flavour, OC_FLAVOUR_ID_UEFI_SHELL) != NULL) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileUEFI_Shell, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_UEFI_SHELL, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else {
OcPlayAudioFile (Context, OcVoiceOverAudioFileExternalTool, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_EXTERNAL_TOOL, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
} else {
OcPlayAudioFile (Context, OcVoiceOverAudioFileOtherOS, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_OTHER_OS, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
if (Entry->IsExternal) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileExternal, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_EXTERNAL, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
if (Entry->IsFolder) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileDiskImage, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_DISK_IMAGE, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
return EFI_SUCCESS;
@ -231,15 +239,16 @@ VOID
EFIAPI
OcToggleVoiceOver (
IN OC_PICKER_CONTEXT *Context,
IN UINT32 File OPTIONAL
IN CONST CHAR8 *BasePath OPTIONAL,
IN CONST CHAR8 *BaseType OPTIONAL
)
{
if (!Context->PickerAudioAssist) {
Context->PickerAudioAssist = TRUE;
OcPlayAudioFile (Context, OcVoiceOverAudioFileWelcome, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_WELCOME, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
if (File != 0) {
OcPlayAudioFile (Context, File, TRUE);
if ((BasePath != NULL) && (BaseType != NULL)) {
OcPlayAudioFile (Context, BasePath, BaseType, TRUE);
}
} else {
OcPlayAudioBeep (

View File

@ -277,7 +277,7 @@ UpdateTabContext (
if (IsEntering) {
if (ChosenEntry >= 0) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileSelected, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SELECTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioEntry (BootContext->PickerContext, BootEntries[ChosenEntry]);
} else {
//
@ -305,11 +305,11 @@ UpdateTabContext (
if (IsEntering) {
if (TabFocus == TAB_SHUTDOWN) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileSelected, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileShutDown, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SELECTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SHUT_DOWN, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
} else {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileSelected, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileRestart, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SELECTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_RESTART, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
}
}
@ -588,11 +588,11 @@ OcShowSimpleBootMenu (
}
if (!PlayedOnce && BootContext->PickerContext->PickerAudioAssist) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileChooseOS, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_CHOOSE_OS, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
for (Index = 0; Index < Count; ++Index) {
OcPlayAudioEntry (BootContext->PickerContext, BootEntries[Index]);
if ((TimeOutSeconds > 0) && (BootContext->DefaultEntry->EntryIndex - 1 == Index)) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileDefault, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_DEFAULT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
}
@ -691,7 +691,7 @@ OcShowSimpleBootMenu (
if (PickerKeyInfo.OcKeyCode == OC_INPUT_TYPING_CONFIRM) {
gST->ConOut->OutputString (gST->ConOut, OC_MENU_RESTART);
gST->ConOut->OutputString (gST->ConOut, L"\r\n");
OcPlayAudioFile (BootContext->PickerContext, AppleVoiceOverAudioFileBeep, FALSE);
OcPlayAudioFile (BootContext->PickerContext, APPLE_VOICE_OVER_AUDIO_FILE_BEEP, OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE, FALSE);
ResetWarm ();
return EFI_SUCCESS;
}
@ -699,7 +699,7 @@ OcShowSimpleBootMenu (
if (PickerKeyInfo.OcKeyCode == OC_INPUT_TYPING_CONFIRM) {
gST->ConOut->OutputString (gST->ConOut, OC_MENU_SHUTDOWN);
gST->ConOut->OutputString (gST->ConOut, L"\r\n");
OcPlayAudioFile (BootContext->PickerContext, AppleVoiceOverAudioFileBeep, FALSE);
OcPlayAudioFile (BootContext->PickerContext, APPLE_VOICE_OVER_AUDIO_FILE_BEEP, OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE, FALSE);
ResetShutdown ();
return EFI_SUCCESS;
}
@ -734,7 +734,7 @@ OcShowSimpleBootMenu (
#endif
if (PlayChosen && (PickerKeyInfo.OcKeyCode == OC_INPUT_TIMEOUT)) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileSelected, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SELECTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioEntry (BootContext->PickerContext, BootEntries[ChosenEntry]);
PlayChosen = FALSE;
continue;
@ -742,7 +742,7 @@ OcShowSimpleBootMenu (
*ChosenBootEntry = BootEntries[BootContext->DefaultEntry->EntryIndex - 1];
gST->ConOut->OutputString (gST->ConOut, OC_MENU_TIMEOUT);
gST->ConOut->OutputString (gST->ConOut, L"\r\n");
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileTimeout, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_TIMEOUT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
return EFI_SUCCESS;
} else if (PickerKeyInfo.OcKeyCode == OC_INPUT_CONTINUE) {
if (ChosenEntry >= 0) {
@ -758,12 +758,12 @@ OcShowSimpleBootMenu (
} else if (PickerKeyInfo.OcKeyCode == OC_INPUT_ABORTED) {
gST->ConOut->OutputString (gST->ConOut, OC_MENU_RELOADING);
gST->ConOut->OutputString (gST->ConOut, L"\r\n");
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileReloading, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_RELOADING, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
return EFI_ABORTED;
} else if ((PickerKeyInfo.OcKeyCode == OC_INPUT_MORE) && BootContext->PickerContext->HideAuxiliary) {
gST->ConOut->OutputString (gST->ConOut, OC_MENU_SHOW_AUXILIARY);
gST->ConOut->OutputString (gST->ConOut, L"\r\n");
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileShowAuxiliary, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_SHOW_AUXILIARY, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
BootContext->PickerContext->HideAuxiliary = FALSE;
return EFI_ABORTED;
} else if (PickerKeyInfo.OcKeyCode == OC_INPUT_UP) {
@ -813,7 +813,7 @@ OcShowSimpleBootMenu (
break;
} else if (PickerKeyInfo.OcKeyCode == OC_INPUT_VOICE_OVER) {
OcToggleVoiceOver (BootContext->PickerContext, 0);
OcToggleVoiceOver (BootContext->PickerContext, NULL, NULL);
break;
} else if ((PickerKeyInfo.OcKeyCode != OC_INPUT_NO_ACTION) && (PickerKeyInfo.OcKeyCode >= 0) && ((UINTN)PickerKeyInfo.OcKeyCode < Count)) {
*ChosenBootEntry = BootEntries[PickerKeyInfo.OcKeyCode];
@ -825,7 +825,7 @@ OcShowSimpleBootMenu (
}
if ((ModifiersChanged || (PickerKeyInfo.OcKeyCode != OC_INPUT_NO_ACTION)) && (TimeOutSeconds > 0)) {
OcPlayAudioFile (BootContext->PickerContext, OcVoiceOverAudioFileAbortTimeout, FALSE);
OcPlayAudioFile (BootContext->PickerContext, OC_VOICE_OVER_AUDIO_FILE_ABORT_TIMEOUT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
TimeOutSeconds = 0;
break;
}
@ -866,7 +866,7 @@ OcShowSimplePasswordRequest (
Context->HotKeyContext->FlushTypingBuffer (Context);
gST->ConOut->OutputString (gST->ConOut, OC_MENU_PASSWORD_REQUEST);
OcPlayAudioFile (Context, OcVoiceOverAudioFileEnterPassword, TRUE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, TRUE);
while (TRUE) {
Context->HotKeyContext->WaitForKeyInfo (
@ -877,7 +877,7 @@ OcShowSimplePasswordRequest (
);
if (PickerKeyInfo.OcKeyCode == OC_INPUT_VOICE_OVER) {
OcToggleVoiceOver (Context, OcVoiceOverAudioFileEnterPassword);
OcToggleVoiceOver (Context, OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE);
continue;
}
@ -911,7 +911,7 @@ OcShowSimplePasswordRequest (
);
}
OcPlayAudioFile (Context, AppleVoiceOverAudioFileBeep, TRUE);
OcPlayAudioFile (Context, APPLE_VOICE_OVER_AUDIO_FILE_BEEP, OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE, TRUE);
continue;
}
@ -921,7 +921,7 @@ OcShowSimplePasswordRequest (
{
gST->ConOut->OutputString (gST->ConOut, L"*");
Password[PwIndex] = (UINT8)PickerKeyInfo.UnicodeChar;
OcPlayAudioFile (Context, AppleVoiceOverAudioFileBeep, TRUE);
OcPlayAudioFile (Context, APPLE_VOICE_OVER_AUDIO_FILE_BEEP, OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE, TRUE);
++PwIndex;
continue;
}
@ -984,15 +984,15 @@ OcShowSimplePasswordRequest (
);
if (Result) {
OcPlayAudioFile (Context, OcVoiceOverAudioFilePasswordAccepted, TRUE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_ACCEPTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, TRUE);
return EFI_SUCCESS;
}
OcPlayAudioFile (Context, OcVoiceOverAudioFilePasswordIncorrect, TRUE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_INCORRECT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, TRUE);
}
gST->ConOut->OutputString (gST->ConOut, OC_MENU_PASSWORD_RETRY_LIMIT L"\r\n");
OcPlayAudioFile (Context, OcVoiceOverAudioFilePasswordRetryLimit, TRUE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_PASSWORD_RETRY_LIMIT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, TRUE);
DEBUG ((DEBUG_WARN, "OCB: User failed to verify password %d times running\n", OC_PASSWORD_MAX_RETRIES));
gBS->Stall (SECONDS_TO_MICROSECONDS (5));

View File

@ -265,7 +265,7 @@ OcRunBootPicker (
));
if (!SaidWelcome) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileWelcome, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_WELCOME, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
SaidWelcome = TRUE;
}
@ -322,8 +322,8 @@ OcRunBootPicker (
if (Chosen->SetDefault) {
if (Context->PickerCommand == OcPickerShowPicker) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileSelected, FALSE);
OcPlayAudioFile (Context, OcVoiceOverAudioFileDefault, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_SELECTED, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_DEFAULT, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
OcPlayAudioEntry (Context, Chosen);
}
@ -343,7 +343,7 @@ OcRunBootPicker (
//
// Voice chosen information.
//
OcPlayAudioFile (Context, OcVoiceOverAudioFileLoading, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_LOADING, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
Status = OcPlayAudioEntry (Context, Chosen);
if (EFI_ERROR (Status)) {
OcPlayAudioBeep (
@ -365,14 +365,14 @@ OcRunBootPicker (
// Do not wait on successful return code.
//
if (EFI_ERROR (Status)) {
OcPlayAudioFile (Context, OcVoiceOverAudioFileExecutionFailure, TRUE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_EXECUTION_FAILURE, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, TRUE);
gBS->Stall (SECONDS_TO_MICROSECONDS (3));
//
// Show picker on first failure.
//
Context->PickerCommand = OcPickerShowPicker;
} else {
OcPlayAudioFile (Context, OcVoiceOverAudioFileExecutionSuccessful, FALSE);
OcPlayAudioFile (Context, OC_VOICE_OVER_AUDIO_FILE_EXECUTION_SUCCESSFUL, OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE, FALSE);
}
//

View File

@ -52,201 +52,17 @@ typedef struct OC_AUDIO_FILE_ {
UINT32 Size;
} OC_AUDIO_FILE;
STATIC OC_AUDIO_FILE mAppleAudioFiles[AppleVoiceOverAudioFileMax];
STATIC OC_AUDIO_FILE mOcAudioFiles[OcVoiceOverAudioFileMax - OcVoiceOverAudioFileBase];
//
// Note, currently we are not I/O bound, so enabling this has no effect at all.
// Reconsider it when we resolve lags with AudioDxe.
//
STATIC BOOLEAN mEnableAudioCaching = FALSE;
STATIC EFI_AUDIO_DECODE_PROTOCOL *mAudioDecodeProtocol = NULL;
STATIC
CONST CHAR8 *
OcAudioGetFilePath (
IN UINT32 File,
OUT CHAR8 *TmpPath,
OUT UINT32 TmpPathSize,
OUT CONST CHAR8 **BaseType,
OUT BOOLEAN *Localised
)
{
EFI_STATUS Status;
CONST CHAR8 *BasePath;
*Localised = TRUE;
if ((File >= OcVoiceOverAudioFileBase) && (File < OcVoiceOverAudioFileMax)) {
*BaseType = "OCEFIAudio";
if ((File > OcVoiceOverAudioFileIndexBase) && (File <= OcVoiceOverAudioFileIndexMax)) {
Status = OcAsciiSafeSPrint (
TmpPath,
TmpPathSize,
"%a%c",
File >= OcVoiceOverAudioFileIndexAlphabetical ? "Letter" : "",
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[File - OcVoiceOverAudioFileIndexBase]
);
ASSERT_EFI_ERROR (Status);
BasePath = TmpPath;
} else {
switch (File) {
case OcVoiceOverAudioFileAbortTimeout:
BasePath = "AbortTimeout";
break;
case OcVoiceOverAudioFileChooseOS:
BasePath = "ChooseOS";
break;
case OcVoiceOverAudioFileDefault:
BasePath = "Default";
break;
case OcVoiceOverAudioFileEnterPassword:
BasePath = "EnterPassword";
break;
case OcVoiceOverAudioFileExecutionFailure:
BasePath = "ExecutionFailure";
break;
case OcVoiceOverAudioFileExecutionSuccessful:
BasePath = "ExecutionSuccessful";
break;
case OcVoiceOverAudioFileExternal:
BasePath = "External";
break;
case OcVoiceOverAudioFileExternalOS:
BasePath = "ExternalOS";
break;
case OcVoiceOverAudioFileExternalTool:
BasePath = "ExternalTool";
break;
case OcVoiceOverAudioFileLoading:
BasePath = "Loading";
break;
case OcVoiceOverAudioFilemacOS:
BasePath = "macOS";
break;
case OcVoiceOverAudioFilemacOS_Recovery:
BasePath = "macOS_Recovery";
break;
case OcVoiceOverAudioFilemacOS_TimeMachine:
BasePath = "macOS_TimeMachine";
break;
case OcVoiceOverAudioFilemacOS_UpdateFw:
BasePath = "macOS_UpdateFw";
break;
case OcVoiceOverAudioFileOtherOS:
BasePath = "OtherOS";
break;
case OcVoiceOverAudioFilePasswordAccepted:
BasePath = "PasswordAccepted";
break;
case OcVoiceOverAudioFilePasswordIncorrect:
BasePath = "PasswordIncorrect";
break;
case OcVoiceOverAudioFilePasswordRetryLimit:
BasePath = "PasswordRetryLimit";
break;
case OcVoiceOverAudioFileReloading:
BasePath = "Reloading";
break;
case OcVoiceOverAudioFileResetNVRAM:
BasePath = "ResetNVRAM";
break;
case OcVoiceOverAudioFileSelected:
BasePath = "Selected";
break;
case OcVoiceOverAudioFileShowAuxiliary:
BasePath = "ShowAuxiliary";
break;
case OcVoiceOverAudioFileTimeout:
BasePath = "Timeout";
break;
case OcVoiceOverAudioFileUEFI_Shell:
BasePath = "UEFI_Shell";
break;
case OcVoiceOverAudioFileWelcome:
BasePath = "Welcome";
break;
case OcVoiceOverAudioFileWindows:
BasePath = "Windows";
break;
case OcVoiceOverAudioFileShutDown:
BasePath = "ShutDown";
break;
case OcVoiceOverAudioFileRestart:
BasePath = "Restart";
break;
case OcVoiceOverAudioFileDiskImage:
BasePath = "DiskImage";
break;
case OcVoiceOverAudioFileSIPIsDisabled:
BasePath = "SIPIsDisabled";
break;
case OcVoiceOverAudioFileSIPIsEnabled:
BasePath = "SIPIsEnabled";
break;
default:
BasePath = NULL;
break;
}
}
} else {
*BaseType = "AXEFIAudio";
switch (File) {
case AppleVoiceOverAudioFileVoiceOverOn:
BasePath = "VoiceOverOn";
break;
case AppleVoiceOverAudioFileVoiceOverOff:
BasePath = "VoiceOverOff";
break;
case AppleVoiceOverAudioFileUsername:
BasePath = "Username";
break;
case AppleVoiceOverAudioFilePassword:
BasePath = "Password";
break;
case AppleVoiceOverAudioFileUsernameOrPasswordIncorrect:
BasePath = "UsernameOrPasswordIncorrect";
break;
case AppleVoiceOverAudioFileAccountLockedTryLater:
BasePath = "AccountLockedTryLater";
break;
case AppleVoiceOverAudioFileAccountLocked:
BasePath = "AccountLocked";
break;
case AppleVoiceOverAudioFileVoiceOverBoot:
*BaseType = "OCEFIAudio";
BasePath = "VoiceOver_Boot";
*Localised = FALSE;
break;
case AppleVoiceOverAudioFileVoiceOverBoot2:
BasePath = "VoiceOver_Boot";
*Localised = FALSE;
break;
case AppleVoiceOverAudioFileClick:
BasePath = "Click";
*Localised = FALSE;
break;
case AppleVoiceOverAudioFileBeep:
BasePath = "Beep";
*Localised = FALSE;
break;
default:
BasePath = NULL;
break;
}
}
return BasePath;
}
STATIC
VOID *
OcAudioGetFileContents (
IN OC_STORAGE_CONTEXT *Storage,
IN CONST CHAR8 *BaseType,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN CONST CHAR8 *Extension,
IN APPLE_VOICE_OVER_LANGUAGE_CODE LanguageCode,
IN BOOLEAN Localised,
OUT UINT32 *BufferSize
)
{
@ -310,12 +126,18 @@ OcAudioGetFileContents (
return Buffer;
}
//
// Note, currently we are not I/O bound, so implementing caching has no effect at all.
// Reconsider it when we resolve lags with AudioDxe.
//
STATIC
EFI_STATUS
EFIAPI
OcAudioAcquireFile (
IN VOID *Context,
IN UINT32 File,
IN CONST CHAR8 *BasePath,
IN CONST CHAR8 *BaseType,
IN BOOLEAN Localised,
IN APPLE_VOICE_OVER_LANGUAGE_CODE LanguageCode,
OUT UINT8 **Buffer,
OUT UINT32 *BufferSize,
@ -325,77 +147,40 @@ OcAudioAcquireFile (
)
{
EFI_STATUS Status;
CHAR8 TmpPath[8];
OC_STORAGE_CONTEXT *Storage;
CONST CHAR8 *BaseType;
CONST CHAR8 *BasePath;
UINT8 *FileBuffer;
UINT32 FileBufferSize;
BOOLEAN Localised;
OC_AUDIO_FILE *CacheFile;
Storage = (OC_STORAGE_CONTEXT *)Context;
CacheFile = NULL;
if ((File >= OcVoiceOverAudioFileBase) && (File < OcVoiceOverAudioFileMax)) {
if (mEnableAudioCaching) {
CacheFile = &mOcAudioFiles[File - OcVoiceOverAudioFileBase];
if (CacheFile->Buffer != NULL) {
*Buffer = CacheFile->Buffer;
*BufferSize = CacheFile->Size;
return EFI_SUCCESS;
}
}
} else if (File < AppleVoiceOverAudioFileMax) {
if (mEnableAudioCaching) {
CacheFile = &mAppleAudioFiles[File];
if (CacheFile->Buffer != NULL) {
*Buffer = CacheFile->Buffer;
*BufferSize = CacheFile->Size;
return EFI_SUCCESS;
}
}
} else {
DEBUG ((DEBUG_INFO, "OC: Invalid wave index %d\n", File));
return EFI_NOT_FOUND;
if ((BasePath == NULL) || (BaseType == NULL) || (Buffer == NULL) || (*Buffer == NULL)) {
DEBUG ((DEBUG_ERROR, "OC: Illegal wave parameters\n"));
return EFI_INVALID_PARAMETER;
}
BasePath = OcAudioGetFilePath (
File,
TmpPath,
sizeof (TmpPath),
&BaseType,
&Localised
);
if (BasePath == NULL) {
DEBUG ((DEBUG_INFO, "OC: Unknown Wave %d\n", File));
return EFI_NOT_FOUND;
}
Storage = (OC_STORAGE_CONTEXT *)Context;
FileBuffer = OcAudioGetFileContents (
Storage,
BaseType,
BasePath,
BaseType,
Localised,
"mp3",
LanguageCode,
Localised,
&FileBufferSize
);
if (FileBuffer == NULL) {
FileBuffer = OcAudioGetFileContents (
Storage,
BaseType,
BasePath,
BaseType,
Localised,
"wav",
LanguageCode,
Localised,
&FileBufferSize
);
}
if (FileBuffer == NULL) {
DEBUG ((DEBUG_INFO, "OC: Wave %a cannot be found!\n", BasePath));
DEBUG ((DEBUG_INFO, "OC: Wave %a %a cannot be found!\n", BaseType, BasePath));
return EFI_NOT_FOUND;
}
@ -415,15 +200,10 @@ OcAudioAcquireFile (
FreePool (FileBuffer);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OC: Wave %a cannot be decoded - %r!\n", BasePath, Status));
DEBUG ((DEBUG_INFO, "OC: Wave %a %a cannot be decoded - %r!\n", BaseType, BasePath, Status));
return EFI_UNSUPPORTED;
}
if (CacheFile != NULL) {
CacheFile->Buffer = *Buffer;
CacheFile->Size = *BufferSize;
}
return EFI_SUCCESS;
}
@ -435,10 +215,7 @@ OcAudioReleaseFile (
IN UINT8 *Buffer
)
{
if (!mEnableAudioCaching) {
FreePool (Buffer);
}
FreePool (Buffer);
return EFI_SUCCESS;
}
@ -629,7 +406,9 @@ OcLoadUefiAudioSupport (
DEBUG ((DEBUG_INFO, "OC: Starting to play chime...\n"));
Status = OcAudio->PlayFile (
OcAudio,
AppleVoiceOverAudioFileVoiceOverBoot,
OC_VOICE_OVER_AUDIO_FILE_VOICE_OVER_BOOT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE,
DecibelGain,
TRUE,
FALSE

View File

@ -165,7 +165,8 @@ OcShowMenuByOc (
if (BootContext->PickerContext->PickerAudioAssist) {
BootContext->PickerContext->PlayAudioFile (
BootContext->PickerContext,
OcVoiceOverAudioFileChooseOS,
OC_VOICE_OVER_AUDIO_FILE_CHOOSE_OS,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
for (Index = 0; Index < BootContext->BootEntryCount; ++Index) {
@ -176,7 +177,8 @@ OcShowMenuByOc (
if ((BootContext->PickerContext->TimeoutSeconds > 0) && (BootContext->DefaultEntry->EntryIndex - 1 == Index)) {
BootContext->PickerContext->PlayAudioFile (
BootContext->PickerContext,
OcVoiceOverAudioFileDefault,
OC_VOICE_OVER_AUDIO_FILE_DEFAULT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}

View File

@ -1162,7 +1162,8 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileAbortTimeout,
OC_VOICE_OVER_AUDIO_FILE_ABORT_TIMEOUT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}
@ -1217,7 +1218,8 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileAbortTimeout,
OC_VOICE_OVER_AUDIO_FILE_ABORT_TIMEOUT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}
@ -1264,7 +1266,8 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileSelected,
OC_VOICE_OVER_AUDIO_FILE_SELECTED,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
DrawContext->GuiContext->PickerContext->PlayAudioEntry (
@ -1278,7 +1281,8 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileEnterPassword,
OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
break;
@ -1288,12 +1292,14 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileSelected,
OC_VOICE_OVER_AUDIO_FILE_SELECTED,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileShutDown,
OC_VOICE_OVER_AUDIO_FILE_SHUT_DOWN,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
break;
@ -1303,12 +1309,14 @@ GuiDrawLoop (
{
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileSelected,
OC_VOICE_OVER_AUDIO_FILE_SELECTED,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileRestart,
OC_VOICE_OVER_AUDIO_FILE_RESTART,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
break;
@ -1337,7 +1345,8 @@ GuiDrawLoop (
if (DrawContext->GuiContext->PickerContext->PickerAudioAssist) {
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileTimeout,
OC_VOICE_OVER_AUDIO_FILE_TIMEOUT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}

View File

@ -465,7 +465,8 @@ InternalBootPickerKeyEvent (
GuiContext->Refresh = TRUE;
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileShowAuxiliary,
OC_VOICE_OVER_AUDIO_FILE_SHOW_AUXILIARY,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}
@ -473,7 +474,8 @@ InternalBootPickerKeyEvent (
GuiContext->Refresh = TRUE;
DrawContext->GuiContext->PickerContext->PlayAudioFile (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileReloading,
OC_VOICE_OVER_AUDIO_FILE_RELOADING,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
FALSE
);
}
@ -1099,7 +1101,8 @@ InternalBootPickerViewKeyEvent (
if (KeyEvent->OcKeyCode == OC_INPUT_VOICE_OVER) {
DrawContext->GuiContext->PickerContext->ToggleVoiceOver (
DrawContext->GuiContext->PickerContext,
0
NULL,
NULL
);
return;
}

View File

@ -423,7 +423,8 @@ InternalCommonShutDownKeyEvent (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
AppleVoiceOverAudioFileBeep,
APPLE_VOICE_OVER_AUDIO_FILE_BEEP,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE,
TRUE
);
}
@ -489,7 +490,8 @@ InternalCommonRestartKeyEvent (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
AppleVoiceOverAudioFileBeep,
APPLE_VOICE_OVER_AUDIO_FILE_BEEP,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE,
TRUE
);
}

View File

@ -211,7 +211,8 @@ InternalConfirmPassword (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
OcVoiceOverAudioFilePasswordAccepted,
OC_VOICE_OVER_AUDIO_FILE_PASSWORD_ACCEPTED,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
}
@ -223,7 +224,8 @@ InternalConfirmPassword (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
OcVoiceOverAudioFilePasswordIncorrect,
OC_VOICE_OVER_AUDIO_FILE_PASSWORD_INCORRECT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
}
@ -233,7 +235,8 @@ InternalConfirmPassword (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
OcVoiceOverAudioFilePasswordRetryLimit,
OC_VOICE_OVER_AUDIO_FILE_PASSWORD_RETRY_LIMIT,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
DEBUG ((DEBUG_WARN, "OCB: User failed to verify password %d times running\n", OC_PASSWORD_MAX_RETRIES));
@ -305,7 +308,8 @@ InternalPasswordBoxKeyEvent (
if (Context->PickerContext->PickerAudioAssist) {
Context->PickerContext->PlayAudioFile (
Context->PickerContext,
AppleVoiceOverAudioFileBeep,
APPLE_VOICE_OVER_AUDIO_FILE_BEEP,
OC_VOICE_OVER_AUDIO_BASE_TYPE_APPLE,
TRUE
);
}
@ -381,7 +385,8 @@ InternalPasswordViewKeyEvent (
if (KeyEvent->OcKeyCode == OC_INPUT_VOICE_OVER) {
DrawContext->GuiContext->PickerContext->ToggleVoiceOver (
DrawContext->GuiContext->PickerContext,
OcVoiceOverAudioFileEnterPassword
OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE
);
return;
}
@ -825,7 +830,8 @@ PasswordViewInitialize (
if (GuiContext->PickerContext->PickerAudioAssist) {
GuiContext->PickerContext->PlayAudioFile (
GuiContext->PickerContext,
OcVoiceOverAudioFileEnterPassword,
OC_VOICE_OVER_AUDIO_FILE_ENTER_PASSWORD,
OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE,
TRUE
);
}